1 Introduction

Les sites d’avis de consommateurs recueillent des messages précieux venant des clients et peuvent être utilisé pour mieux comprendre les besoins des clients. J’avais fait une petite analyse des notes données par les clients au cours du temps, pour monter qu’un criètre simpliste de notation moyenne fausse l’appréciation des assureurs et leur classement, maintenant, cette analyse portera sur les données textuelles.

Les données ont été récupérées sur le site d’opinions assurance, et la base de données comprend les variables suivantes :

load("avis_echantillon.RData")

2 Evolution des notes

J’ai utilisé le package dygraphs pour tracer la courbe d’évolution des notes. Je me souviens d’avoir passé du temps à nettoyer et constituer une base de données pour tracer le graphique dans l’article de linkedin avec ggplot. Maintenant, avec dygraphs, le code est beaucoup plus simple.

2.1 Evolution des notes globales

notes=data.table(notes)
notes_num=notes[,c("note.globale"),with=FALSE]
ts=xts(notes_num,order.by=dates,frequency=365)

dygraph(ts, main = "Evolution des notes clients", ylab = "Note (sur 5)") %>% 
  dyRoller(rollPeriod = 61)%>%
  dyOptions(fillGraph = TRUE, fillAlpha = 0.4) %>% 
  dyRangeSelector()

2.2 Evolution des notes par critère

notes_num=notes[,c("Service","Garantie","Prix","Satisfaction"),with=FALSE]
ts=xts(notes_num,order.by=dates,frequency=365)

dygraph(ts, main = "Evolution des notes clients", ylab = "Note (sur 5)") %>% 
  dyRoller(rollPeriod = 61)%>%
  dyOptions(fillGraph = TRUE, fillAlpha = 0.4) %>% 
  dyRangeSelector()

Ainsi on peut voir les différences de notes selon critères.

3 Analyse des textes

Un package R de text-mining library(tm) existe pour l’analyse des textes. Il regroupent des fonctions couramment utilisées pour le nettoyage et exploration des données textuelles. Mais pour cette analyse, je n’ai pas utilisé ce package. Le fait de construire des fonctions à la main permet de mieux comprendre l’algorithme. Les lecteurs curieux pourront l’appliquer pour voir si les résultats sont les mêmes.

3.1 Nettoyage des données textuelles

Une fonction fait maison pour nettoyer les textes.

clean=function(data){
  data=tolower(data)
  data = gsub('\\n', '', data)
  data = gsub('\\t', '', data)
  data = gsub('\r', '', data)
  data = gsub('[[:punct:]]', ' ', data)
  data = gsub(' a | un | je | de | l | à | ps | pour | en |
               que | et | mon | ma | il | elle | puis | la | d |
               est | ai | que | suis | avec |  | les | la | le | j | du | ceci |
               ça | ces | ils | sur | ans | an | un | n | ai | aux | aussi | une |
               qui | l | au | mais | macif | elle | faire | fait | ce | eux | y ',
              ' ', data)
  data = gsub("\\s+", " ", trimws(data))
  data = gsub('service client', 'service_client', data)
  data = gsub('services clients', 'services_clients', data)
  data = gsub('trés|tres', 'très', data)
  data = gsub('ments', 'ment', data)
  data = gsub('ables', 'able', data)
  data = gsub('ances', 'ance', data)
  return (data)
}

3.2 Visualisation des fréquences des termes

On peut utiliser le wordcloud pour visualiser les mots les plus fréquents.

commentaires=clean(notes$commentaire)
commentaires=unlist(strsplit(commentaires," "))
commentaires_frequences=data.frame(table(commentaires))
termes_utiles=commentaires_frequences[commentaires_frequences$Freq>80 & 
                                  nchar(as.character(commentaires_frequences$commentaires))>5,]
set.seed(2)
wordcloud(termes_utiles$commentaires,
          termes_utiles$Freq)

3.3 Table des fréquences des termes

Pour examiner les fréquences des mots de plus près, on peut afficher la table des fréquences.

datatable(termes_utiles,colnames = c('Terme' = 2))

4 Fréquences des mots en fonction des notes

Puis je me suis demandé ce que je peux faire de plus. Comme chaque commentaire est associé à une note, je me suis demandé si on peut trouver des relations intéressantes entre la fréquence de certains termes et le niveau de la note.

## [1] 132
## [1] 795
## [1] 1014
## [1] 1365
## [1] 1428
## [1] 270

4.1 Termes positifs

On peut voir quels sont les mots qui apparaissent plus quand la note est bonne.

dtm1=freqt[freqt$Freq_1/freqt$Freq_5<0.5 & freqt$Freq_1>0.2,]
datatable(dtm1)

4.2 Termes négatifs

De la même manière, quels sont les mots qui apparaissent quand la note est mauvaise.

dtm2=freqt[freqt$Freq_1/freqt$Freq_5>1.4 & freqt$Freq_1>0.5,]
datatable(dtm2)

4.3 Prédiction de la qualité en fonction des mots

Ainsi, il est possible de prédire la qualité du service en fonction des fréquences de certains mots. En effet, si sur le site-là, les avis textuels des clients sont accompagnés des notes numériques, selon d’autres sources de données, on n’a pas toujours une notation numérique. Ainsi, en faisant, une analyse des textes ou de la voix, on sera capable de donner une note numérique, comme indicateur.

Cela me fait penser à la détection de spam. Le principe est le même: en fonction de la densité de certains termes, on classifie la caractéristique des textes. Il fera l’objet d’un prochain article.

5 Conclusion

Grâce à quelques analyses rapides, on peut découvrir les principaux sujets dans les avis clients. De plus, les notes numériques données par les clients peuvent nous aider à définir les termes qui montrent des sentiments positifs, et d’autres qui montrent des négatifs. Parfois, ce sont des mots qui peuvent appaître comme neutres, mais le contexte pourrait leur donner certain sens caché.

En fonction des objectifs, les pistes d’analyse peuvent être différentes. Si vous avez des idées, n’hésitez pas à partager !

Copyright © 2016 Blog de Kezhan Shi