Odhad efektu akcí bez A/B testování: Diff-in-Diff a Propensity Score Matching
Otevřené akce bez randomizace vyžadují alternativní metody hodnocení. Hlavní přístupy jsou Diff-in-Diff pro porovnání dynamiky a Propensity Score Matching (PSM) pro vytvoření podobné kontrolní skupiny. Tyto metody umožňují odlišit efekt akce od sezónnosti a přirozených trendů.
Kontrolní skupina je nezbytná, aby se odlišilo působení akce od vnějších faktorů. Bez ní by růst metrik v předvánočním období vypadal jako efekt akce, zatímco ve skutečnosti jde o sezónní nárůst.
Diff-in-Diff: základní přístup s obecným kontrolem
Metoda Diff-in-Diff počítá rozdíl v dynamice metrik mezi cílovou skupinou (účastníci akce) a kontrolní skupinou (všichni uživatelé). Porovnání jednoduše před/po akci ignoruje základní rozdíly: účastníci akce často mají vyšší loajalitu a jejich průměrná objednávka je na začátku vyšší.
Používá se na Like-for-Like (LFL) uživatele – aktivní jak před, tak během akce. Tím se vyloučí vliv přílivu nových uživatelů.
Kroky výpočtu:
- Pro LFL uživatele všech: dynamika období akce k předobdobí.
- Pro LFL účastníky akce: stejná dynamika.
- Rozdíl = efekt akce.
Příklad s průměrnou objednávkou:
| Období | Cílová skupina | Všichni uživatelé |
|--------------|----------------|--------------------|
| Před akcí | 2500 Kč | 1350 Kč |
| Během akce | 3000 Kč | 1500 Kč |
| Delta | +20% | +11% |
Efekt: 20 % - 11 % = +9 %. Inkrement: 3000 / 1,09 ≈ 2752 Kč (základ), přírůstek 248 Kč.
Nevýhoda: účastníci akce mohou mít odlišnou dynamiku než celková hromada, např. jinou sezónnost.
Zlepšený Diff-in-Diff: tématický kontrolní přístup
Pro offline akce (např. sleva na koláče) je kontrolní skupinou zákazníků podobných produktů v těch samých obchodech (jiná pečivo). Skupiny jsou konceptuálně blízké: pečivo v těch samých lokalitách, ale jedna s akcí, druhá bez.
Tím se snižuje zkreslení, ale neodstraní se úplně: milovníci koláčů se mohou chovat jinak než milovníci pizzy (úspornost vs objem).
Propensity Score Matching: syntéza kontrolní skupiny
PSM imituje randomizaci A/B testu. Na základě znaků před akcí (LTV, aktivní dny, průměrná objednávka, věk účtu) se vytvoří model, který předpovídá pravděpodobnost účasti (propensity score od 0 do 1).
Model se učí na datech bez flagu účasti, pak se párují dvojice podle score pomocí k-NN. Kontrolní základna musí být několikanásobně větší než cílová pro přesný výběr.
Příklad kódu s XGBoost:
# definujeme hyperparametry modelu, lze zkomplikovat a optimalizovat přes optuna
model_params = {
'objective': 'binary:logistic',
'eval_metric': 'logloss',
'learning_rate': 0.4,
'max_depth': 3,
'min_child_weight': 10,
'subsample': 0.8,
'colsample_bytree': 0.8,
'lambda': 1.0,
'alpha': 0.1,
'random_state': seed,
'n_estimators': 100
}
# trénujeme model s boostingem
pm = GradientBoostedPropensityModel(early_stop=False, **model_params)
ps = pm.fit_predict(all_data[features], all_data['test'])
# spojujeme do párů
matcher = NearestNeighborMatch(replace=False, ratio=1, random_state=seed)
all_data['score'] = ps
matched = matcher.match(all_data, 'test', ['score'])
# konečné skupiny
matched[(matched['test'] == 0)].describe()
matched[(matched['test'] == 1)].describe()
Kontrola kvality:
- Podobnost metrik skupin.
- Kalibrace: při score=0,5 je 50 % účastníků akce.
- Identická distribuce znaků.
S vytvořenými skupinami se použije Diff-in-Diff. Omezení:
- Předpokládá se zachování podobnosti dynamiky v budoucnosti.
- Sezónnost podle regionů.
- Zkreslení z omezené základny: výběr z neúčastníků, včetně těch, kdo fyzicky nemohli účastnit.
Co je důležité
- Kontrolní skupina je povinná: bez ní se efekt akce smísí s trendy.
- Diff-in-Diff je jednoduchý a rychlý: použijte LFL pro všechny uživatele nebo tématický kontrolní přístup.
- PSM je přesnější: vyžaduje data a výpočty, ale je blíže k A/B testu.
- Vždy ověřte skupiny: metriky, kalibrace, distribuce.
- Preferujte A/B testy: pokud je možné, vyhněte se post-hoc oceněním.
— Editorial Team
Zatím žádné komentáře.