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")
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.
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()
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.
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.
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)
}
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)
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))
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
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)
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)
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.
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