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:

  • onbeheerde verkenning data
  • sentimentanalyse met kenmerken belang
  • het analyseren van de correlatie tussen beoordelingen en
    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.

  • class="lazyload

    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:

    • Data mining of sentimentanalyse is meer verkennend: het zoekt uit wat het belangrijkst is, wat de belangrijkste redenen kunnen zijn waarom een recensie positief of negatief is.

    • Thema's impact wordt gebruikt om de verdeling van scores te koppelen aan reeds gedefinieerde bedrijfsconcepten (zoom, batterij, ...).

    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:

    • Een productcategorie

    • De oorspronkelijke tekst

    • De herziene tekst opgeschoond

    • De gereinigde tekst opgesplitst in tokens

    • De productbeoordeling

    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.

    • Bij de reviews met lage scores hebben we veel opmerkingen over de batterij, het scherm van het apparaat, de prijs of zelfs over een echte bug.

    • Bij beoordelingen met hoge scores zien we dat de fotokwaliteit en de functionaliteiten of het ontwerp vaak aan bod komen.

    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.

    Je kunt meer over ons en onze projecten vinden op onze Medium blog