Het belangrijkste probleem bij het evalueren van referral programma's is de endogeniteit van zelfselectie: gebruikers met hoge betrokkenheid hebben van nature een hogere LTV en nodigen vaker vrienden uit, wat de illusie van een hoge effectiviteit van het kanaal creëert. Voor een correcte evaluatie passen we causal inferentie methoden toe: Propensity Score Matching (PSM) om bias door waargenomen kenmerken te elimineren, of Instrumental Variables (IV) als er een gerandomiseerde instrument is (bijvoorbeeld een willekeurige bannervertaling).
Om rekening te houden met de tijdsvertragingen tussen het verzenden van een uitnodiging en de conversie van een verwijzing, gebruiken we Survival Analysis (de Kaplan-Meier of Cox Proportional Hazards model) in plaats van eenvoudige cohortanalyse. Dit stelt ons in staat om gecensureerde gegevens (right-censoring) correct te verwerken, wanneer een deel van de gebruikers de levenscyclus nog niet heeft voltooid. De LTV berekenen we door de retentiecurve te integreren met disconting of de BTYD (Pareto/NBD) methode voor het voorspellen van toekomstige transacties.
Context: In een mobiele voedselbezorgapp is er een referral programma met tweezijdige bonussen gelanceerd. Na een kwartaal toonde het rapport in Tableau aan dat gebruikers die de referral link activeerden, een LTV hadden die 40% hoger was dan het gemiddelde op het platform. De Product Manager vroeg om uitbreiding van het budget, maar het analytische team vermoedde dat het verschil niet door het programma kwam, maar door de basiskenmerken van supergebruikers.
Probleem: Het was onmogelijk om het werkelijke incrementele effect van de correlatie met betrokkenheid te scheiden. Het toepassen van eenvoudige SQL-query's om groepen te vergelijken gaf een vertekend resultaat door confounders (bestel frequentie, tijd in het product). Zonder een correcte evaluatie liep het bedrijf het risico te veel te betalen voor een kanaal met negatieve of bijna nul marge.
Oplossing 1: Directe vergelijking van cohort door SQL
We vergeleken de cohort "Uitgenodigden" (behandeling) en "Niet uitgenodigden" (controle) door aggregatie in BigQuery, waarbij we ARPU en retentie op de 90e dag berekenden.
Voordelen: Directe implementatie, duidelijke visualisatie voor stakeholders, lage resource vereisten.
Nadelen: Kritische zelfselectie bias en overlevingsbias. Gebruikers die al van plan waren om in het product te blijven, gebruiken vaker referenties. Het resultaat is opgeblazen en ongeschikt voor besluitvorming.
Oplossing 2: Propensity Score Matching op historische gegevens
In Python (scikit-learn) hebben we een logistische regressiemodel gebouwd om de propensity score te beoordelen - de kans om deel te nemen aan het programma op basis van pre-treatment kenmerken (leeftijd van het account, historiek van bestellingen, gemiddelde besteding). Vervolgens hebben we Nearest Neighbors toegepast voor 1:1 matching en de LTV alleen in vergelijkbare subgroepen vergeleken.
Voordelen: Elimineert bias door waargenomen variabelen (observable confounders), werkt op retrospectieve gegevens zonder de noodzaak van een experiment. Maakt het snel mogelijk om de ATT (Average Treatment Effect on the Treated) te verkrijgen.
Nadelen: Elimineert geen niet waargenomen kenmerken (unobserved confounders) zoals extraversie of sociaal kapitaal. Bij niet-balanceerde gegevens (weinig uitgenodigden) ontstaan er problemen met de algemene ondersteuning (common support) en wordt een deel van de steekproef weggegooid, waardoor de power afneemt.
Oplossing 3: Instrumentele variabelen en Survival Analysis
We vonden een natuurlijk experiment: 50% van de gebruikers zagen willekeurig een banner voor het referral programma op het hoofdscherm (instrument Z), wat de kans op deelname (X) beïnvloedde, maar niet direct op de LTV (Y). We evalueerden het effect via 2SLS (Two-Stage Least Squares) in de linearmodels bibliotheek voor Python, waarbij we LATE (Local Average Treatment Effect) verkregen. Om rekening te houden met vertragingen pasten we Survival Analysis toe: we bouwden een risicomodel (hazard function) voor de tijd tot de eerste bestelling van de verwijzing en corrigeerden de LTV op basis van de conversiekans op elk moment in de tijd.
Voordelen: De IV-methode elimineert zowel waargenomen als niet waargenomen confounders, wat een oorzakelijke schatting oplevert. Survival-analyse verwerkt incomplete gegevens correct en stelt ons in staat om de tijdsdynamiek te modelleren.
Nadelen: Vereist een geldige instrument (relevantie en exogeniteit), wat moeilijk te bewijzen is. Verminderde statistische power van IV-schattingen (brede vertrouwensintervallen). De interpretatie van LATE verschilt van ATE (gemiddeld effect alleen voor "compliers").
Gekozen oplossing:
We kozen een hybride aanpak: gebruikten randomisatie van de banner voor IV-schatting van het netto-effect van deelname, daarna pasten we een niet-lineair model Survival Analysis toe (Cox met tijd-variabele covariaten) voor de berekening van verwachten LTV rekening houdend met de tijd voor conversie van de verwijzingen. Dit stelde ons in staat om het effect van het programma te scheiden van het effect van zelfselectie.
Resultaat:
Het werkelijke incrementele effect was +12% op de LTV voor de compliers-groep, in plaats van +40% zoals in het oorspronkelijke rapport. De analyse van vertragingen toonde aan dat 85% van de conversies van verwijzingen binnen de eerste 14 dagen na de klik plaatsvindt, wat het evaluatietijdspad van 90 naar 30 dagen verkortte. Het bedrijf herkeek de unit-economie, waarbij de kosten van acquisitie (CAC) met 18% werden verlaagd door lange verwachtingen van retentie te vermijden.
Vraag 1: Hoe test je de aanname SUTVA (afwezigheid van interferentie tussen units) in een referral programma, waar netwerkeffecten bestaan tussen degenen die uitnodigen?
SUTVA wordt geschonden als de dichtheid van uitnodigingen in de sociale kring de kans op conversie beïnvloedt (bijvoorbeeld door oversaturatie of een viraal effect). Om dit te testen gebruiken we clustering: we splitsen gebruikers in geografische clusters of segmenten op basis van sociale grafieken via Graph Analysis (NetworkX).
Vervolgens passen we Difference-in-Differences toe door clusters met hoge en lage penetratie van referral links te vergelijken. Als het effect in dichte clusters significant verschilt (lager door oversaturatie of hoger door sociaal bewijs), is SUTVA geschonden en moeten we modellen met intergroepinteracties (spatial models) gebruiken of de analyse beperken tot geïsoleerde segmenten.
Vraag 2: Waarom kun je geen gewone lineaire regressie (OLS) gebruiken voor het voorspellen van LTV in omstandigheden met gecensureerde gegevens, wanneer een deel van de gebruikers nog geen churn heeft ervaren?
OLS negeert het feit van censurering (right-censoring) en beschouwt de huidige LTV als definitief, wat leidt tot systematisch verlaagde schattingen voor "jonge" gebruikers. In plaats daarvan passen we Survival Analysis toe om de retentiecurve ( S(t) ) te evalueren, en integreren deze vervolgens om de verwachte levensduur te verkrijgen.
Alternatief gebruiken we probabilistische modellen voor herhaalde aankopen (BTYD), zoals Pareto/NBD of Gamma-Gamma, geïmplementeerd in de lifetimes bibliotheek voor Python. Deze modellen houden rekening met nog niet zichtbare transacties via probabilistische verdelingen van frequentie en tijd tussen aankopen, wat ons een niet-vertekende schatting van de toekomstige LTV geeft, zelfs voor actieve gebruikers.
Vraag 3: Hoe onderscheid je incrementele uitnodigingen (uitnodigingen die alleen dankzij het programma zijn gedaan) van organische uitnodigingen (die ook zonder stimulatie zouden zijn gedaan) bij het evalueren van het effect?
We gebruiken het Principal Stratification framework, en splitsen de populatie in vier groepen (strata): Always-takers (zou altijd hebben uitgenodigd), Compliers (uitgenodigd alleen vanwege het programma), Never-takers en Defiers. Via IV-analyse met een binaire instrument (bijvoorbeeld, gezien/gezien geen banner) evalueren we de LATE - het effect specifiek voor Compliers.
Voor meer gedetailleerde segmentatie passen we Causal Machine Learning methoden toe (EconML, CausalML in Python), zoals Causal Forest of Meta-learners (S-Learner, T-Learner), om de Conditional Average Treatment Effect (CATE) voor verschillende segmenten te beoordelen. Dit stelt ons in staat om te begrijpen voor welke gebruikers (bijv. lage/hoge besteding) het programma daadwerkelijk incrementele uitnodigingen genereert, en voor welke het eenvoudigweg organische delen vastlegt.