Lees ons artikel over

.

Propensity modeling kan worden gebruikt om de impact van uw communicatie met klanten te vergroten en de uitgaven van uw reclamebudget te optimaliseren.

Google Analytics data is een goed gestructureerde data bron die gemakkelijk kan worden omgezet in een machine learning-ready dataset.

Backtests op historische data en technische statistieken kunnen u een eerste indruk geven van de prestaties van uw model, terwijl u met live tests en zakelijke statistieken de impact van uw model kunt bevestigen.

Ons aangepaste machine learning-model presteerde beter dan bestaande baselines: tijdens live tests in termen van ROAS (Return on advertising spend): +221% vs op regels gebaseerd model en +73% vs off-the-shelf machine learning (Google Analytics sessie kwaliteitsscore).

Dit artikel gaat uit van basisprincipes in machine learning en marketing.

Wat is propensity modeling?

Proportionaliteitsmodellering is inschatten hoe waarschijnlijk het is dat een klant een bepaalde actie zal uitvoeren. Er zijn verschillende acties die nuttig kunnen zijn om in te schatten:

  • Een product kopen
  • Churn
  • Uitschrijving
  • etc ...

In dit artikel richten we ons op het schatten van de geneigdheid om een artikel op een e-commercewebsite te kopen.

Maar waarom koopbereidheid schatten? Omdat het toelaat omaanpassen hoe we met een klant willen communiceren. Stel bijvoorbeeld dat we een heel eenvoudig propensity-model hebben dat de klanten voor een bepaald product indeelt in “Cold” (koud), “Warm” (warm) en “Hot” (heet) (“Hot” zijn klanten met de grootste kans om te kopen en “Cold” de minste):

Image

Nou, op basis van deze classificatieu kunt voor elke klasse een specifieke gerichte reactie geven. U wilt misschien een andere marketingaanpak hanteren bij een klant die op het punt staat om te kopen dan bij een klant die misschien nog niet eens van uw product heeft gehoord. Ook als u een beperkt mediabudget hebt, kunt u dit richten op klanten met een hoge waarschijnlijkheid om te kopen en niet te veel uitgeven aan klanten met een kleine kans.

Dit eenvoudige type classificatie op basis van regels kan goede resultaten opleveren en is meestal beter dan geen classificatie, maar het heeft verschillende beperkingen:

  • Het is waarschijnlijk niet alle data die u tot uw beschikking hebt, of het nu gaat om preciezere informatie over het klanttraject of uw website of andere data bronnen die u tot uw beschikking hebt, zoals CRM data.

  • Hoewel het voor de hand lijkt te liggen dat klanten die geclassificeerd zijn als “Heet” eerder geneigd zijn om te kopen dan “Warm”, die eerder geneigd zijn om te kopen dan “Koud”, geeft deze aanpak ons geen specifieke cijfers over hoe waarschijnlijk het is dat ze zullen kopen. Hebben “warme” klanten 3% kans om te kopen? 5% ? 10% ?
  • Met behulp van eenvoudige regels wordt het aantal klassen dat u kunt verkrijgen beperkt, wat beperkt hoe aangepast uw doelgerichte reactie is kunnen zijn.

Om met deze beperkingen om te gaan, kunnen we een meer data-gedreven aanpak gebruiken: gebruik machinaal leren op onze data naar een waarschijnlijkheid van aankoop voorspellen voor elke klant.

Google Analytics begrijpen data

Google Analytics is een analytische webservice die het gebruik data en verkeer op websites en applicaties bijhoudt.

Image

Google Analytics data kan gemakkelijk geëxporteerd naar Big Query (Google Cloud Platform volledig beheerd data magazijn service) waar het toegankelijk is via een SQL-achtige syntaxis:

Image

Merk op dat de Big Query-exporttabel met Google Analytics data een geneste tabel op sessieniveau:

  • Sessies zijn een lijst van acties die een specifieke klant binnen een bepaald tijdsbestek uitvoert. Ze beginnen wanneer een klant een pagina bezoekt en eindigen na 30 minuten activiteit.
  • Elke klant kan meerdere sessies hebben.
  • Elke sessie kan uit meerdere treffers (d.w.z. gebeurtenissen) bestaan en elke treffer kan verschillende attributen of aangepaste statistieken hebben (daarom is de tabel genest, als u bijvoorbeeld de data op trefwoordniveau wilt bekijken, moet u de tabel plat maken).
Image

In deze query kijken we bijvoorbeeld alleen naar Functies op sessieniveau:

ImageImage

En in deze query hebben we een Unnest-functie gebruikt om dezelfde informatie op te vragen op trefniveau:

ImageImage

Raadpleeg voor meer informatie over GA data de documentatie. Merk op dat ons project ontwikkeld is op GA360, dus als u de nieuwste versie, GA4, gebruikt, zullen er enkele kleine verschillen zijn in het data model, vooral de tabel op gebeurtenisniveau. Er zijn openbare voorbeeldtabellen van GA360 en GA4 data beschikbaar op Big Query.

Nu we toegang hebben tot onze ruwe data bron, moeten we feature engineering uitvoeren voordat we onze tabel kunnen voeden aan een machine-learning algoritme

De juiste functies creëren

Het doel van de feature engineering-stap is om de ruwe Google Analytics data (geëxtraheerd uit Big Query) om te zetten in een tafel klaar te gebruiken voorMachinaal leren.

GA data is zeer goed gestructureerd en vereist minimale data opruimstappen. Er is echter nog steeds veel informatie aanwezig in de tabel, waarvan er veel niet bruikbaar zijn voor machinaal leren of niet zo gebruikt kunnen worden, dus het selecteren en maken van de juiste kenmerken is belangrijk. Hiervoor hebben we kenmerken ontwikkeld die het meest gecorreleerd leken te zijn met het kopen van een product.

We hebben 4 soorten functies gemaakt:

Image

Merk op dat we al deze kenmerken op klantniveau berekenen, wat betekent dat we informatie van meerdere sessies voor elke klant samenvoegen (met het veld fullVisitorId als sleutel)

Algemene kenmerken

Globale functies zijn numerieke kenmerken die algemene informatie over de sessie geven.

Image

Merk op dat bounce rate gedefinieerd is als % van het aantal keren dat de klant slechts één webpagina bezocht tijdens een sessie.

Het was ook belangrijk om informatie op te nemen over de frequentie van gebeurtenissenEen klant die bijvoorbeeld net uw website heeft bezocht, is waarschijnlijk eerder geneigd om iets te kopen dan een klant die uw website 3 maanden geleden heeft bezocht. Voor meer informatie over dit onderwerp kunt u de theorie op RFM (recency, frequency monetary value).

Dus hebben we een functie toegevoegd Frequentie sinds laatste sessie = 1 / Aantal dagen sinds laatste sessie waarmee de waarde kan worden genormaliseerd tussen 0 en 1

Favoriete functies

We wilden ook wat informatie toevoegen over de belangrijkste categoriale data beschikbaar zoals browser of apparaat. Aangezien die informatie op sessieniveau is, kunnen er verschillende waarden zijn voor een enkele klant, dus nemen we alleen de waarde die het meest voorkomt per klant (d.w.z. de favoriet). Om categorische kenmerken met een te hoge kardinaliteit te vermijden, houden we alleen de 5 meest voorkomende waarden voor elk kenmerk en vervangen we alle andere waarden door een “Andere” waarde.

Image

Productkenmerken

Hoewel de eerste twee soorten kenmerken zeker nuttig zijn om ons te helpen de vraag te beantwoorden “Gaat een klant op mijn website kopen?”, zijn ze niet specifiek genoeg als we het volgende moeten weten “Gaat de klant een specifiek product kopen?. Om deze vraag te helpen beantwoorden, hebben we productspecifieke functies gebouwd die alleen het product bevatten waarvoor we de aankoop proberen te voorspellen:

Image

Voor Frequentie sinds laatste sessie met minstens één interactie met dit product, gebruiken we dezelfde formule als voor de Frequentie van sessies in de Algemene kenmerken. We kunnen echter gevallen hebben waarin er 0 sessies zijn met minstens één interactie met het product, in welk geval we vullen met 0. Dit is logisch vanuit zakelijk oogpunt omdat onze hoogst mogelijke waarde 1 is (als de klant sinds gisteren een sessie heeft gehad).

Vergelijkbare producteigenschappen

Naast het kijken naar de interactie van de klant met het product waarvoor we de waarschijnlijkheid van aankoop proberen te voorspellen, is het ook belangrijk om te weten dat de klant interactie had met andere producten met vergelijkbare functie en prijsklasse kan zeker nuttig zijn (d.w.z. vervangend product). Om deze reden hebben we een reeks Similar Product-functies toegevoegd die identiek zijn aan de Product-functies, behalve dat we ook gelijksoortige producten opnemen in de variabele reikwijdte. De vergelijkbare producten voor een bepaald product werden gedefinieerd met behulp van bedrijfsinvoer.

Image

We hebben nu onze kenmerk ontworpen dataset waarop we ons machine-learningmodel kunnen trainen.

Het model trainen

Aangezien we willen weten of een klant een bepaald product gaat kopen of niet, is dit een binair classificatieprobleem.

Voor onze eerste iteratie deden we het volgende om onze machine learning dataset (1 rij per klant) te maken:

  • Bereken de functies die de sessies in een tijdsbestek van 3 maanden gebruiken voor elke klant.
  • Bereken de doel van de sessies in een tijdsbestek van 3 weken volgend op het kenmerktijdvenster. Als er minstens één aankoop van het product is in het tijdsvenster, is Target gelijk aan 1 (gedefinieerd als Klasse 1), anders is Target gelijk aan 0 (gedefinieerd als Klasse 0).
  • Splits de data tussen een Train set en een Test met 80 / 20 willekeurige splitsing.
Image

Uit wat eerste data verkenning bleek echter al snel dat er een sterk onevenwicht tussen klassen: Klasse 1 / Klasse 0 verhouding was meer dan 1:1000 en we hadden niet genoeg Klasse 1 klanten. Dit kan zeer problematisch zijn voor machine-learningmodellen.

Om deze problemen op te lossen, hebben we onze aanpak op een aantal punten aangepast:

  • Wij de doelvariabele omgeschakeld van het maken van een kopen om een Toevoegen aan winkelwagentje. Ons model verliest dus iets aan zakelijke betekenis, maar een toename van het volume van Klasse 1 compenseert dit ruimschoots.
  • Wij het model getraind op verschillende verschuivende vensters,elk van 3 maanden + 3 weken, in plaats van één enkele. Naast het verhogen van onze volumes van data, verbetert dit de generalisatiecapaciteit van het model door te trainen op verschillende perioden van het jaar waarin de klanten verschillend aankoopgedrag kunnen vertonen. Merk op dat hierdoor dezelfde klant meerdere keren voorkomt in de dataset (in verschillende periodes). Om te voorkomen dat data weglekt, zorgen we ervoor dat hij altijd of in de training of in de test dataset zit.
  • Wij onze Klasse 0 onderbemonsterd, zodat de Klasse 1/Klasse 0-verhouding 1 is. Undersampling is een goede oplossing om het probleem van klassenonevenwichtigheid aan te pakken, in vergelijking met andere opties zoals oversampling of SMOTE, omdat we het volume van Klasse 1 al aanzienlijk konden verhogen met de eerste twee wijzigingen. Alleen de trainingsset wordt opnieuw gebalanceerdomdat we willen dat de testset dezelfde klassenratio's heeft als de toekomstige data waarop we het gaan testen. Merk op dat we met hogere ratio's hebben getest, zoals 5 of 10, maar dat 1 optimaal was voor de evaluatie van het model.
Image

Met behulp van deze dataset hebben we met verschillende classificatiemodellen getest: Lineair model, Random Forest en XGboost, waarbij we de hyperparameters verfijnden met behulp van rasterzoeken, en uiteindelijk een XGboost-model.

Ons model evalueren

Bij het evalueren van een propensity model zijn er twee hoofdtypen evaluaties die kunnen worden uitgevoerd:

  • Backtest Evaluatie
  • Evaluatie Livetest

Backtest Evaluatie

Eerst hebben we backtest evaluatie: hebben we ons model toegepast op verleden historisch data en controleerde of ons model correct klanten identificeert die gaan toevoegen aan hun winkelwagentje. Aangezien we een binaire classificator gebruiken, produceert het model een waarschijnlijkheidsscore tussen 0 en 1 om klasse 1 (Toevoegen aan winkelwagentje) te zijn.
verwarringmatrix en bereken de precisie / terughalen (of hun gecombineerde vorm in def1 score). Er zijn echter twee problemen met deze eenvoudige metriek:

  • Sommige kunnen moeilijk te interpreteren omdat de data-set onevenwichtig is (de precisiemetriek zal bijvoorbeeld over het algemeen erg laag zijn omdat we zo weinig Klasse 1 hebben)
  • Ze moeten beslissen over een waarschijnlijkheidsdrempel om onderscheid te maken tussen Klasse 0 en 1
Image

Dus besloten we om twee meetgegevens te gebruiken die meer interpreteerbaar:

  • PR AUC: Gebied onder de curve van precisie door recall grafiek(zie deze uitleg voor meer details). In wezen stelt deze metriek ons in staat om een globale evaluatie op elke mogelijke drempel.Deze metriek is zeer geschikt voor onevenwichtige data-sets waarbij de prioriteit ligt bij het maximaliseren van precisie en recall op de minderheidsklasse: Klasse 1 (in tegenstelling tot zijn neefje de ROC AUC).
  • Uplift: we sorteren klanten op hun waarschijnlijkheidsscore en we verdelen onze resultaten in 20 ventielen. Uplift wordt gedefinieerd als de Klasse 1-tarief in de top 5% / het Klasse 1-tarief in alle data-setsDus als we bijvoorbeeld 21 % Add to Cart in de top 5 % van de dataset vs 3 % Add to cart Rate in hele dataset hebben, hebben we een uplift van 7, wat betekent dat ons model 7 keer effectiever is dan een willekeurig model.

Vooral de resultaten op deze punten waren erg positief, Uplift was rond 13.5.

Backtest-evaluatie is een risicovrije methode voor een eerste beoordeling van een propensity model, maar het heeft verschillende beperkingen:

  • Aangezien dit alleen in het verleden gebeurt, wordt de uitvoer van het model niet echt gebruikt om invloed hebben op de mediabudgetstrategie.
  • Met onze statistieken hebben we alleen beoordeeld of het model in staat was om correct klanten te identificeren die een toevoeging aan hun winkelwagentje zouden doen, maar we hebben niet beoordeeld hoe de identificatie van die klanten een verkoopstijging zou opleveren.

Evaluatie Livetest

Dus om een beter idee te krijgen van de zakelijke waarde van ons model, moeten we het volgende doen evaluatie van live testen. Hier activeren we ons model en gebruiken we het om prioriteit te geven aan uitgaven voor reclamebudgetten:

Image

De resultaten die we tijdens de livetest hebben behaald, waren zeer solide:

  • Vergeleken met een eenvoudige, op regels gebaseerde aanpak voor evaluatiebereidheid, de ROAS van ons model was +221 %
  • Verder hebben we onze prestaties ook vergeleken met een sterke concurrent in de vorm van Google's kwaliteitsscore voor sessies: een score verstrekt door Google in de Google Analytics dataset, en in dat geval ons model stond nog steeds op +73 % ROAS. Dit laat zien hoe een aangepaste ML-aanpak aanzienlijke zakelijke waarde kan opleveren.

Conclusie

Naast het behalen van solide prestaties, is een sterk bijkomend voordeel van onze aanpak dat onze feature engineering zeer generiek is. Bijna geen van de feature engineering-stappen hoeft te worden aangepast om ons model toe te passen op een verschillend landbereik of productbereik. Na ons eerste succes in de livetest konden we zelfs ons model op een zeer efficiënte manier uitrollen naar meerdere landen en producten.

Bedankt voor het lezen. Ik hoor graag uw opmerkingen over deze aanpak. Hebt u ooit propensity modellen gebouwd? Zo ja, wat deed u anders?

Met dank aan Bruce Delattre, Rafaëlle Aygalenq en Cédric Ly.

Medium Blog bij Artefact.

Dit artikel werd oorspronkelijk gepubliceerd op Medium.com.
Volg ons op ons medium Blog !