Zpět na domů

Hodnocení akcí bez A/B: Diff-in-Diff a PSM

Článek popisuje metody hodnocení efektu otevřených akcí bez A/B testů: Diff-in-Diff s LFL uživateli a Propensity Score Matching. Uvádějí se příklady výpočtů, kód a kontroly kvality skupin.

Diff-in-Diff a PSM: hodnocení akcí bez testů
Advertisement 728x90

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šší.

Google AdInline article slot

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:

Google AdInline article slot

| Období | Cílová skupina | Všichni uživatelé |

|--------------|----------------|--------------------|

| Před akcí | 2500 Kč | 1350 Kč |

Google AdInline article slot

| 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

Advertisement 728x90

Číst dál