Powrót do strony głównej

Ocena akcji bez A/B: Diff-in-Diff i PSM

Artykuł opisuje metody oceny efektu otwartych akcji bez testów A/B: Diff-in-Diff z użytkownikami LFL i Propensity Score Matching. Podane są przykłady obliczeń, kod i sprawdziany jakości grup.

Diff-in-Diff i PSM: ocena akcji bez testów
Advertisement 728x90

Ocena efektu promocji bez testów A/B: Diff-in-Diff i Matching według wyników prawdopodobieństwa

Promocje otwarte, które nie wykorzystują randomizacji, wymagają alternatywnych metod oceny. Głównymi podejściami są metoda Diff-in-Diff do porównania dynamiki oraz Matching według wyników prawdopodobieństwa (PSM) do tworzenia podobnych grup kontrolnych. Te techniki pozwalają oddzielić wpływ promocji od sezonowości i naturalnych trendów.

Grupa kontrolna jest niezbędna, by odróżnić wpływ akcji od czynników zewnętrznych. Bez niej wzrost wskaźników w okresie przed świętami może wyglądać jak skutek promocji, choć w rzeczywistości wynika tylko z sezonowego wzrostu popytu.

Diff-in-Diff: podstawowe podejście z ogólną grupą kontrolną

Metoda Diff-in-Diff oblicza różnicę w dynamice wskaźników między grupą docelową (uczestnicy promocji) a kontrolną (wszyscy użytkownicy). Porównanie przed/po promocji pomija różnice bazowe: uczestnicy często są bardziej lojalni, ich średnia wartość zamówienia jest początkowo wyższa.

Google AdInline article slot

Zastosowana jest do użytkowników LFL (Like-for-Like) — aktywnych zarówno przed, jak i w czasie promocji. Pozwala to wyeliminować wpływ przybycia nowych użytkowników.

Kroki obliczeń:

  • Dynamika okresu promocji w stosunku do okresu przedpromocyjnego dla wszystkich użytkowników LFL.
  • Analogiczna dynamika dla uczestników promocji LFL.
  • Różnica to efekt promocji.

Przykład z średnią wartością zamówienia:

Google AdInline article slot

| Okres | Grupa docelowa | Wszyscy użytkownicy |

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

| Przed promocją | 2500 zł | 1350 zł |

Google AdInline article slot

| Podczas promocji | 3000 zł | 1500 zł |

| Delta | +20% | +11% |

Efekt: 20% – 11% = +9%. Inkrement: 3000 / 1,09 ≈ 2752 zł (bazowy), wzrost 248 zł.

Wady: uczestnicy promocji mogą mieć inną niż ogół dynamikę, np. inny cykl sezonowy.

Ulepszona metoda Diff-in-Diff: kontrola tematyczna

W przypadku promocji offline (np. zniżka na pączki) grupą kontrolną są kupujący podobne produkty w tych samych sklepach (np. inne pieczywo). Grupy są konceptualnie zbliżone: pieczywo w tych samych lokalizacjach, jedna z promocją, druga bez.

To zmniejsza przesunięcie, ale nie eliminuje go całkowicie: miłośnicy pączków mogą zachowywać się inaczej niż miłośnicy pizzy (oszczędność vs objętość).

Matching według wyników prawdopodobieństwa: symulacja grupy kontrolnej

PSM symuluje losowanie z testów A/B. Na podstawie cech przed promocją (LTV, liczba aktywnych dni, średnia wartość zamówienia, wiek konta) buduje się model przewidywania prawdopodobieństwa udziału (score prawdopodobieństwa od 0 do 1).

Model trenuje się na danych bez flagi udziału, następnie dopasowuje pary według score za pomocą k-NN. Baza kontrolna powinna być kilkukrotnie większa niż grupa docelowa, aby zapewnić dokładne dopasowanie.

Przykładowy kod z XGBoost:

# ustawiamy hiperparametry modelu dopasowania, można rozszerzyć przez 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
}

# trenujemy model z boostingiem
pm = GradientBoostedPropensityModel(early_stop=False, **model_params)
ps = pm.fit_predict(all_data[features], all_data['test'])

# łączenie w pary
matcher = NearestNeighborMatch(replace=False, ratio=1, random_state=seed)
all_data['score'] = ps
matched = matcher.match(all_data, 'test', ['score'])

# końcowe grupy
matched[(matched['test'] == 0)].describe()
matched[(matched['test'] == 1)].describe()

Sprawdzanie jakości:

  • Zgodność wskaźników grup.
  • Kalibracja: przy score=0.5 — 50% uczestników promocji.
  • Identyficzne rozkłady cech.

Po uzyskaniu grup stosuje się metodę Diff-in-Diff. Ograniczenia:

  • Zakłada się zachowanie podobnej dynamiki w przyszłości.
  • Sezonowość w regionach.
  • Przesunięcie z ograniczonej bazy: dopasowanie tylko z osób, które nie mogły wziąć udziału.

Co ważne

  • Kontrola jest obowiązkowa: bez niej efekt promocji miesza się z trendami.
  • Diff-in-Diff jest prosta i szybka: używaj LFL dla wszystkich lub kontrolę tematyczną.
  • PSM jest dokładniejsze: wymaga danych i obliczeń, ale zbliża się do A/B.
  • Zawsze sprawdzaj grupy: wskaźniki, kalibracja, rozkłady.
  • Preferuj A/B: jeśli możliwe, unikaj ocen po fakcie.

— Editorial Team

Advertisement 728x90

Czytaj dalej