Clustering en klantsegmentatie

Wat is clustering en klantsegmentatie?

Clustering is records groeperen zodat de leden van een groep meer op elkaar lijken dan op de rest, zonder dat iemand die groepen op voorhand vastlegt. De clustercursus van Google noemt het een unsupervised techniek die ongelabelde voorbeelden groepeert op basis van hun gelijkenis. Wat je terugkrijgt, is een clusternummer per record. Wat dat nummer betekent, mag jij uitzoeken.

Klantsegmentatie is de bedrijfspraktijk die het meeste clusterwerk in een bedrijf betaalt. Je wil stoppen met 2.400 klanten als één publiek te behandelen en groepen die zich anders gedragen ook anders aanpakken.

De meeste segmentatie in het dagelijkse werk is trouwens geen clustermodel. In Dynamics 365 Customer Insights is een segment gewoon een regel die je zelf schrijft uit voorwaarden op velden uit je klanten- en verkooptabellen: klanten die in maart besteld hebben en boven een bedrag uitkwamen dat jij kiest. Clustering haal je erbij als je nog niet weet hoe die regel moet luiden.

Daar loopt ook de grens met classificatie. Bij text classification schrijf je eerst de lijst met labels en zet het model elk item in één daarvan, dus er is per item een juist antwoord waartegen je precisie en recall kan meten. Bij clustering heeft niemand die lijst geschreven. Het algoritme stelt de groepen voor en jij geeft ze achteraf een naam, of dat lukt niet en dan houdt de oefening daar op.

De algoritmes die je tegenkomt

k-means. Jij zegt hoeveel groepen je wil. Het zet evenveel middelpunten in de data, wijst elk record toe aan het dichtstbijzijnde, verschuift elk middelpunt naar het midden van wat het ving, en herhaalt dat. Scikit-learn is er duidelijk over: k-means heeft het aantal clusters nodig als parameter. Het is snel en het convergeert altijd, maar de doelfunctie gaat ervan uit dat clusters convex en isotroop zijn, waardoor het volgens scikit-learn slecht overweg kan met langgerekte clusters of onregelmatige vormen. Op klantendata zie je dat als ronde bollen die uit een wolk geknipt zijn waar nooit ronde bollen in zaten.

Hiërarchische clustering. Elke klant begint als zijn eigen groep, de twee dichtste groepen versmelten, en dat herhaalt tot alles in één groep zit. Scikit-learn noemt die boom een dendrogram, met de wortel als het ene cluster dat alle records bevat en de bladeren als clusters van één record. Je knipt de boom door op de hoogte die je een werkbaar aantal groepen geeft, dus drie, vier en vijf lees je af uit dezelfde run. Die boom met het oog lezen werkt op een paar honderd rijen en niet meer op tienduizenden.

DBSCAN. Scikit-learn beschrijft de blik die dit algoritme hanteert: clusters zijn zones met hoge dichtheid, gescheiden door zones met lage dichtheid, waardoor de gevonden clusters elke vorm kunnen hebben, in tegenstelling tot k-means. Het vraagt nooit hoeveel groepen je wil, want je stelt in plaats daarvan een straal rond een punt in en een minimumaantal buren. En het mag zeggen dat een record nergens thuishoort: een punt dat ver genoeg van elke dichte zone ligt, krijgt het label noise. k-means heeft die uitweg niet en moet jouw ene rare klant in een groep duwen, waar hij het middelpunt meesleurt. De prijs is dat je die straal op jouw data moet afstellen. Te klein en zowat alles komt terug als noise, te groot en de clusters smelten samen tot één.

Clusteren op embeddings. Vrije tekst heeft geen numerieke kolommen waarop je afstand kan meten, dus zet je elk stuk tekst eerst om in een embedding: een reeks getallen waarin afstand verwantschap betekent. De gids van OpenAI zegt het zo en zet clustering, tekst groeperen op gelijkenis, bij de toepassingen. Dat is de weg van 4.000 vrije klachtenvelden naar twaalf terugkerende thema's die niemand had opgeschreven.

De voorbereiding bepaalt het resultaat

Schaal je kolommen, of je hebt er één geclusterd. Geef k-means een tabel met omzet van 200 tot 400.000 euro naast een aantal bestellingen van 1 tot 180, en de afstand wordt bijna volledig in euro gemeten. Twee klanten die 10.000 euro uit elkaar liggen, zitten op die kolom 100 miljoen uit elkaar in kwadratische afstand, terwijl twee klanten met 20 bestellingen verschil er 400 uit elkaar zitten op de hunne. Google zegt de eis zonder omweg: gelijkenisberekeningen vragen dat de kenmerken dezelfde schaal hebben, en de gewone oplossing is een z-score per kolom. Sla je dat over, dan zijn je vier groepen omzetkwartielen met extra stappen.

Kies kenmerken die bij de vraag passen. Verkoopaandacht verdelen vraagt bestelritme, breedte van het assortiment en hoe recent er besteld werd. Leveringsrondes plannen vraagt locatie en volume. Gooi je beide reeksen in één run, dan mengen de groepen twee vragen en beantwoorden ze er geen van beide.

Haal de identificatienummers eruit. Klantnummer, nummer van de vertegenwoordiger, artikelcode, postcode als getal. De afstandsberekening gebruikt ze vrolijk mee, en de afstand tussen klant 1002 en klant 1003 betekent niets. Postcode is degene die erdoor glipt, want die lijkt geografisch en staat op volgorde, dus vormt er zich een groep rond een cijferreeks in plaats van rond een regio die iemand op een kaart zou tekenen. Uitschieters verdienen dezelfde beurt vooraf: Google waarschuwt dat middelpunten door uitschieters meegetrokken worden, of dat uitschieters hun eigen cluster krijgen in plaats van genegeerd te worden, en raadt aan om ze eerst te verwijderen of af te toppen.

Hoeveel groepen, en hoe je dat eerlijk beslist

De elleboog komt eerst. Draai k-means voor k van 2 tot 8 en zet de som van de kwadratische afstanden binnen de clusters uit, wat scikit-learn inertia noemt en omschrijft als een maat voor hoe samenhangend clusters intern zijn. Die daalt sowieso als k stijgt, en je zoekt de knik waar ze niet langer snel daalt. Soms is die knik duidelijk. Vaak is de lijn een vloeiende bocht en lezen drie mensen er drie knikken uit.

De silhouette komt daarna. Per record is dat (b - a) / max(a, b), met a de gemiddelde afstand tot de andere leden van het eigen cluster en b de gemiddelde afstand tot het dichtstbijzijnde cluster waar het niet toe behoort. De score loopt van -1 tot 1: rond 1 zit het record comfortabel in zijn groep, rond 0 op een grens, en een negatieve waarde betekent dat een ander cluster beter paste. Neem het gemiddelde over alle records en vergelijk dat over de waarden van k. Het uitgewerkte voorbeeld van scikit-learn is eerlijk over hoe ver je daarmee komt, want op hun data twijfelt de silhouette-analyse tussen 2 en 4, en het geeft een manier van lezen die het overnemen waard is: een waarde van k is een slechte keuze als er clusters onder het algemene gemiddelde scoren en als de clustergroottes sterk schommelen.

Wat de knoop doorhakt, is geen van beide. Leg de profielen van de groepen voor aan je verkoopverantwoordelijke en stel twee vragen per groep. Kan je deze groep in één zin beschrijven, en wat ga je er vanaf morgen anders voor doen? Een groep die een naam en een actie krijgt, is een groep. Een groep die geen van beide krijgt, is een kleur op een grafiek, en die bij de buurgroep voegen kost je niets.

RFM, de aanpak die je eerst moet verslaan

Voor je aan het bovenstaande begint, bestaat er een segmentatie die drie kolommen nodig heeft en geen model. RFM geeft elke klant een score op recency (hoe lang geleden de laatste bestelling), frequency (hoeveel bestellingen in de periode) en monetary (hoeveel er uitgegeven werd). De versie van Optimove verdeelt elk van de drie in vier trappen, wat 64 combinaties geeft, en die vouw je samen tot een handvol groepen waar mensen een naam op plakken.

Voor de meeste groothandels en installateurs wint dat het van een clustermodel, om redenen die niets met nauwkeurigheid te maken hebben. Het is SQL, dus het draait elke nacht opnieuw op dezelfde definitie. Een vertegenwoordiger kan lezen waarom een klant in een groep zit: laatste bestelling 14 maanden geleden, vier bestellingen ooit. En het blijft vergelijkbaar, dus de groep van deze maand betekent hetzelfde als die van vorige maand. Draai een clustering volgend kwartaal opnieuw en cluster 3 kan een andere verzameling mensen zijn met hetzelfde nummer erop.

Optimove benoemt de beperking er zelf bij: het model kijkt naar drie factoren en laat er misschien andere buiten die even zwaar wegen, en het is van nature historisch. Stap naar clustering zodra je kenmerken hebt die RFM niet kan dragen, zoals breedte van het assortiment, seizoen, marge of hoeveel service een klant kost.

Uitgewerkt voorbeeld: 2.400 zakelijke klanten

Een technische groothandel wil weten hoe hij zijn verkoopaandacht verdeelt. Vijf kenmerken per klant, allemaal over de laatste twaalf maanden: omzet, aantal bestellingen, dagen sinds de laatste bestelling, aantal verschillende artikelgroepen en gemiddeld kortingspercentage. Klantnummer, postcode en het nummer van de vertegenwoordiger blijven eruit. Alle vijf de kolommen krijgen een z-score, zodat een euro en een bestelling even zwaar binnenkomen.

De run loopt over k van 2 tot 8. De inertia knikt ergens tussen drie en vijf zonder te kiezen. De gemiddelde silhouette geeft 0,41 bij k = 3, 0,38 bij k = 4 en 0,29 bij k = 5, dus k = 4 gaat mee naar het verkoopoverleg.

Twee van de vier groepen komen terug met dezelfde beschrijving: drie tot acht bestellingen per jaar, één of twee artikelgroepen, niets bijzonders in hoe recent ze bestelden. Ze verschillen vooral in gemiddelde korting, 4,1 procent tegen 5,6, en niemand aan tafel zou daar een andere actie op zetten. Ze gaan samen. Vier eerlijke clusters, drie bruikbare groepen.

Kernklanten, 180 klanten, 62 procent van de omzet. Twintig bestellingen per jaar of meer, over zowat het hele assortiment, laatste bestelling binnen de maand. Een vaste verantwoordelijke per klant, een kwartaalgesprek, en een verwittiging zodra het bestelritme breekt, want als zo'n klant een kwartaal stilvalt, kost dat je meer dan wat een dozijn klanten uit de derde groep op een heel jaar bestellen.

Trouw maar smal, 690 klanten, 29 procent van de omzet. Drie tot acht bestellingen per jaar, bijna allemaal binnen één of twee artikelgroepen. Die worden gebeld over de artikelgroepen die ze nooit gekocht hebben, en die campagne wordt afgerekend op de vraag of hun aantal verschillende artikelgroepen stijgt, niet op hoeveel mensen de mail openden.

Occasioneel en wegzakkend, 1.530 klanten, 9 procent van de omzet. Eén of twee bestellingen, de laatste meer dan negen maanden geleden. Geen tijd van een vertegenwoordiger, wel een mailreeks en de webshop, en na twee kwartalen een beslissing over hoeveel van dat bestand het warm houden waard is.

Twee van die drie groepen waren ook uit een gewone RFM-oefening gerold. De clustering verdiende haar plaats op de breedte van het assortiment, het kenmerk dat de tweede groep van de eerste scheidde en dat RFM niet draagt.

Waar moet je op letten bij clustering en segmentatie

Een cluster is geen oorzaak. Het model vond klanten die zelden bestellen en weinig uitgeven. Het vond niet waarom, en het kan je niet zeggen of een campagne iemand van de derde naar de tweede groep verplaatst. Daar heb je een test met een controlegroep voor nodig, en de clustering zegt enkel op wie je die test draait.

De groepen schuiven op. Je klantenbestand verandert, dus een segmentatie van achttien maanden geleden beschrijft een bedrijf dat niet meer bestaat. Opnieuw draaien is ook niet gratis, want clusternummers lopen niet door en groep 2 in de nieuwe run is niet groep 2 uit de oude. De praktische zet is om de groepen vast te leggen als leesbare regels zodra je ze hebt, op drempels zoals omzet boven X en meer dan Y bestellingen, en de clustering één keer per jaar opnieuw te draaien om te checken of die regels nog kloppen.

Een segmentatie waar niemand iets mee doet, is een slide. De mislukking heeft een herkenbare vorm: een presentatie met vier gekleurde groepen, een tevreden vergadering, en een CRM waar niets getagd werd en waar geen enkele campagne veranderde. Beslis de actie per groep voor je de groepen toont, en schrijf de groep terug in het CRM als een veld, zodat er een lijst uit kan rollen.

Mensen segmenteren is profilering. Artikel 4(4) van de GDPR omschrijft profilering als elke vorm van geautomatiseerde verwerking van persoonsgegevens waarbij die gegevens gebruikt worden om bepaalde persoonlijke aspecten van een natuurlijke persoon te evalueren, en de definitie noemt economische situatie, persoonlijke voorkeuren, interesses, betrouwbaarheid en gedrag met naam. Geïdentificeerde klanten groeperen op hun koopgedrag valt daaronder, dus heb je er een rechtsgrond voor nodig en hoort het in je privacyverklaring. Zakelijke klanten onder een ondernemingsnummer zijn geen persoonsgegevens, een eenmanszaak en een contactpersoon met naam wel. De AI Act maakt gewone klantsegmentatie op zich niet hoogrisico, maar de lijst met hoogrisicotoepassingen in bijlage III noemt wel het beoordelen van de kredietwaardigheid van natuurlijke personen en risicobeoordeling en prijszetting bij levens- en ziekteverzekeringen. Een segmentatie die een kredietlimiet voedt, is dus een ander gesprek dan een die een mailcampagne voedt.

Laatst Bijgewerkt: September 4, 2026 Terug naar Woordenboek
Trefwoorden
clustering klantsegmentatie k-means rfm unsupervised learning machine learning embeddings predictive analytics datakwaliteit crm klantendata data-analyse