TL;DR
Feedback van klanten begrijpen en weten wat je sterke en zwakke punten zijn, is essentieel voor elk bedrijf. Tegenwoordig hebben bedrijven toegang tot veel informatie die hen deze inzichten kan geven: websitebeoordelingen, chatinteracties, gesprekstranscripts, commentaar op sociale media...
In dit artikel wordt uitgelegd hoe je snel inzichten kunt halen uit tekstuele data, met de beoordelingen van consumenten als voorbeeld. We presenteren 3 verschillende benaderingen:
voorgedefinieerde bedrijfsthema's
(onderwerpmodellering zou een vierde optie kunnen zijn om verder te gaan)
Houd er rekening mee dat de data achter dit artikel kunstmatig is gegenereerd om de vertrouwelijkheid van ons oorspronkelijke project te waarborgen.

Analyse van klantbeoordelingen
We proberen inzicht te krijgen in de beoordelingen van onze producten om te begrijpen wat hun belangrijkste problemen / sterke punten zijn. De producten zijn camera-apparaten en accessoires, beoordeeld van 1 (slecht) tot 5 (uitstekend).
We zullen hier drie verschillende benaderingen gebruiken om inzichten te verzamelen van onze data.

Het punt is om complementaire visies te hebben:
Krijg een globale kijk op de data die je hebt verzameld
Wanneer je een nieuw data project start, is de eerste stap altijd om een globaal beeld te krijgen van de data die je hebt (is het onevenwichtig? is er genoeg data? zijn er veel ontbrekende waarden?).
Hoeveel beoordelingen heb ik voor elke productcategorie?

Aantal beoordelingen per productcategorie
→ Het feit dat er niet zoveel reviews over statieven zijn, moeten we in gedachten houden als we reviews over deze specifieke productcategorie analyseren. Hoe meer data we hebben, hoe beter, zodat we onbevooroordeelde en relevante conclusies kunnen trekken.
Hoeveel beoordelingen heb ik voor elke classificatie?

Aantal beoordelingen per score
→ Dit is belangrijk. We zien dat onze dataset behoorlijk onevenwichtig is, we hebben veel meer positieve dan negatieve beoordelingen. Met dit soort informatie moet rekening worden gehouden bij het trainen van speciale modellen (bijv. een classificatiemodel voor sentimentanalyse).
Wat is de ratingverdeling van elke categorie?

Gemiddelde waardering & verdeling van elke productcategorie
We zien hier dat Lenzen de hoogste gemiddelde waardering hebben, terwijl er veel negatieve beoordelingen zijn (vooral met een score van 1) voor Drones en Aerial Imaging.
NLP gebruiken om de zorgen van uw klanten te begrijpen
Om nu te begrijpen waar de beoordelingen over gaan, zullen we de verschillende NLP benaderingen implementeren die eerder zijn genoemd.
Data schoonmaken
Voordat we iets anders doen, moeten we de tekst opschonen data, zodat deze bruikbaar wordt voor de verschillende NLP-methoden (deze stap is niet altijd nodig, afhankelijk van de algoritmen die je wilt gebruiken).
We hebben standaard voorbewerkingsfuncties toegepast die relevant waren voor onze data (verwijderen van HTML, interpunctie, telefoonnummers, ...) en we hebben een aangepaste lijst met stopwoorden geïmplementeerd die we uit beoordelingen verwijderen (het woord "camera" levert bijvoorbeeld niet zoveel informatie op voor onze analyse).
Je kunt veel van deze functies vinden in onze NLPretext Github repository.
Inzichten winnen in een paar regels code
Nu hebben we voor elke beoordeling:
We kunnen beginnen met simpelweg te kijken naar onze meest frequente woorden (losse woorden, bi-grams, tri-grams...). Het is een eenvoudige analyse, maar het geeft je direct een beeld van wat de belangrijkste onderwerpen zijn voor elke score en categorie.
van verzamelingen importeer Teller
importeer matplotlib.pyplot als plt
importeer wordcloud
plt.rcParams["figure.figsize"] = [16, 9]
def create_ngrams(token_list, nb_elements):
"""
Maak n-grammen voor lijst van tokens
Parameters
----
token_lijst : lijst
lijst van strings
nb_elementen :
aantal elementen in het n-gram
Geeft
---
Generator
generator van alle n-grammen
"""
ngrams = zip(*[token_list[index_token:] for index_token in range(nb_elements)])
return (" ".join(ngram) voor ngram in ngrams)
def frequent_words(list_words, ngrams_number=1, number_top_words=10):
"""
Maak n-grammen voor lijst van tokens
Parameters
----
ngrams_aantal : int
aantal_top_woorden : int
uitvoer dataframe lengte
Geeft
---
Dataframe
Dataframe met de entiteiten en hun frequenties.
"""
frequent = []
als ngrams_number == 1:
pass
elif ngrams_number >= 2:
list_words = create_ngrams(list_words, ngrams_number)
anders:
raise ValueError("aantal n-grammen moet >= 1 zijn")
teller = teller(lijst_woorden)
frequent = counter.most_common(aantal_top_woorden)
geef frequent terug
def make_word_cloud(text_or_counter, stop_words=None):
if isinstance(text_or_counter, str):
word_cloud = wordcloud.WordCloud(stopwords=stop_words).generate(text_or_counter)
anders:
als stop_woorden geen is:
text_or_counter = Counter(word for word in text_or_counter if word not in stop_words)
word_cloud = wordcloud.WordCloud(stopwoorden=stop_woorden).generate_from_frequencies(text_of_counter)
plt.imshow(word_cloud)
plt.as("uit")
plt.show()
WordCloud
Door gebruik te maken van deze functies kunnen we eenvoudig een Word Cloud weergeven van de meest voorkomende woorden, aan de hand van beoordelingen voor Camera's met een score tussen 1 en 2:

Geef vervolgens een soortgelijke Word Cloud weer met beoordelingen voor Camera's met een score tussen 4 en 5 :

We kunnen de belangrijkste punten die in beide gevallen naar voren worden gebracht gemakkelijk identificeren.
We zouden deze oefening kunnen doen voor elk product dat onze organisatie heeft, om de specificiteit van elk product te zien en conclusies te kunnen trekken op een meer granulair niveau.
N-grammen Telling
We kunnen ook de frequent_words-functie gebruiken om de meest frequente woorden, bi-grammen of tri-grammen weer te geven:

Om verder te gaan, zou je dan een functie kunnen instellen die de beoordelingen weergeeft die zijn gekoppeld aan een trefwoord, zodat je kunt inzoomen op n-grammen die je interessant vindt. Je zou ook kunnen kijken naar n-grammen met de hoogste / laagste TF-IDF (eenvoudig te berekenen met de sklearn-bibliotheek ), omdat je daarmee belangrijke woorden kunt zien op basis van een andere metriek dan een eenvoudige frequentieteller.
Sentimentanalyse
Vervolgens gaan we over naar een benadering voor sentimentanalyse. Meestal wordt deze gebruikt om te voorspellen of een tekst positief of negatief is. In ons geval hebben we deze informatie al (de score tussen 1 en 5 geeft ons het sentiment achter de recensie). Maar door een model te trainen om deze beoordeling te voorspellen, kunnen we ontdekken welke woorden (kenmerken) belangrijk zijn voor klanten.
Wat we kunnen doen is een classifier voor sentimentanalyse trainen op deze data en dan bibliotheken zoals SHAP of LIME gebruiken om te begrijpen welke kenmerken (= woorden) de meeste invloed hebben op het classificeren van een recensie als positief of negatief.

Classificeerder
Om een classifier te trainen kun je veel verschillende algoritmen gebruiken, variërend van de klassieke sklearn LogisticRegression tot ULM-fit modellen(zie dit notitieblok om een Frans ULM-fit model te trainen en dit artikel om meer te begrijpen over ULM-fit) of de Ludwig classifier ontwikkeld door Uber.
Misschien wil je eerst met een eenvoudige beginnen om te zien of deze al aan je behoeften voldoet, voordat je complexere algoritmen installeert.
Houd er rekening mee dat je dataset waarschijnlijk onevenwichtig is (meer positieve dan negatieve beoordelingen, in ons geval).
Belang van eigenschappen
Zodra je classifier is geïmplementeerd, kun je verder met de belangrijkste stap: inzichten krijgen uit het belang van features.
In het volgende voorbeeld passen we SHAP toe op ons model (hier een eenvoudige sklearn LogisticRegression):


We kunnen hier zien dat de functionaliteiten, fotokwaliteit en zoomfuncties een echt positieve invloed hebben op de tevredenheid van onze klanten, terwijl de flitser, geheugenkaart of batterijen een echt negatieve invloed hebben wanneer ze worden genoemd in een beoordeling.
Woorden als "uitstekend", "perfect" of "slecht" werden verwijderd uit deze analyse (voordat de classifier werd getraind), omdat ze worden beschouwd als de belangrijkste kenmerken, terwijl we ons in ons geval willen richten op het vinden van inzichten over onze producten, niet echt op het verbeteren van de prestaties van onze classifier.
Zie dit notitieblok voor een voorbeeld van het gebruik van SHAP, met een openbare dataset.
Invloed van bedrijfsthema's
Onze derde benadering was een beetje anders dan de vorige, omdat we uitgingen van bedrijfsgerelateerde thema's die werden gekozen door iemand met verstand van producten.
Het punt is om te analyseren hoe vooraf gedefinieerde bedrijfsthema's van invloed zijn op productratings, om te begrijpen of ze een bron van kracht zijn of een probleem om op te lossen.
Thema's bepalen
De eerste stap is het classificeren van de beoordelingen in de thematische categorieën. Dit kan door je dataset handmatig te labelen (daarna kun je een classifier trainen als je nieuwe recensies automatisch in thema's wilt indelen), of met een regelgebaseerd model.
In ons geval hebben we een regelgebaseerd model gebruikt omdat dit al goede resultaten kan opleveren tegen lage kosten (bijvoorbeeld: als je nieuwsgierig bent naar de kwaliteit van je lenzen of je dienst na verkoop, kan het eenvoudig zijn om regels op te stellen die bepalen of een recensie deze vermeldt of niet).
Thema-impact
In een tweede stap kun je je globale gemiddelde score berekenen en vervolgens de gemiddelde score van beoordelingen over een specifiek thema.
Door beide scores van elkaar af te trekken, kun je de invloed van je thema op je totaalscore afleiden.

We moeten ons hier zorgen maken over onze after-sales service, omdat deze vaak negatief wordt genoemd (hoewel het ook kan komen doordat mensen die contact opnemen met de after-sales service vaak al een probleem hadden. Daarom moet je in detail kijken naar de beoordelingen waarin dit thema wordt genoemd, om echt te begrijpen waarom het naar voren is gebracht).
→ Ook hier is kennis van zaken essentieel om je resultaten te begrijpen.
Aan de andere kant, als onze ontwerpen of lenzen worden genoemd, is dat vaak gekoppeld aan een recensie met een hoge score, wat zou kunnen betekenen dat het een van onze sterke punten is.
Zie dit artikel voor meer alternatieve visualisaties voor Wordcloud.
Om verder te gaan
We zouden nog verder kunnen gaan en proberen om onderwerpen te detecteren in onze beoordelingen: je zou de Top2Vec bibliotheek kunnen gebruiken om onderwerpen te extraheren en de correlatie tussen onderwerpen en scores te bekijken (elke bibliotheek voor onderwerpmodellering zal werken, maar Top2Vec heeft het voordeel dat het geweldige resultaten geeft terwijl het geen voorbewerking vereist, noch een vooraf bepaald aantal onderwerpen).
Dit artikel laat zien hoe je met een pragmatische en eenvoudige analyse klantinzichten kunt krijgen uit je tekstuele data . Bedankt voor het lezen tot nu toe en aarzel niet om contact met ons op te nemen als je opmerkingen hebt over dit onderwerp! Je kunt onze blog hier bezoeken voor meer informatie over onze machine learning projecten.

BLOG






