Egy termékesapat e-mail kampányt vezetett be, de a kezelést nem randomizálták: a marketingrendszer a legaktívabb ügyfeleknek küldte az ajánlatot. Az elemző azt a kérdést kapja: „mennyi bevételt hoz a kampány a kontrollhoz képest?” A megfigyelési egység egy ügyfél, a kezelés (küldtek-e ajánlatot), a kimenet a 7 napos bevétel euróban, a zavaró változó az előzetes aktivitás (a kampány előtti megnyitások száma). A generatív folyamat ismert: az aktivitás növeli a küldés esélyét és a bevételt is; a kampány valódi hatása euró. A mért adatban az -et ismerjük, a kimenetet is, de a kezelés kiosztása nem véletlen. Előzetes becslés: a nyers átlagkülönbség felfelé torzít, mert pozitívan hat -re és -ra; az -re korrigált becslés várhatóan körüli. A feladat: becsüljük meg a hatást, vizsgáljuk a közös tartományt (overlap), majd rejtsünk el egy második zavaró változót, és mutassuk meg, hogy a korrekció ekkor már nem elegendő.
A megfigyeléses becslés központi gondolata a hátsó ajtó intuíció (backdoor intuition). A DAG-on:
X
/ \
v v
T -> Y
Az egyszerre hat a kezelésre és a kimenetre. A nyers különbség nem csak a élen haladó hatást méri: tartalmazza az -en átmenő „hátsó ajtó” utat is. Ha -et blokkoljuk, azaz az összehasonlítást azonos -értékű rétegeken belül végezzük, a hátsó út megszakad. Ezt nevezzük korrekciónak (adjustment). A becsült átlagos oksági hatás (ATE, average treatment effect):
Itt a kimenet várható értéke a és feltétel mellett; diszkrét -re ezt a réteg átlagával becsüljük. Kis kontrollpélda: ha mellett három kezelt ügyfél bevétele , akkor . A feltételes várható érték tehát az a regressziós görbe, amely minden pontban az átlagát adja.
A gyakorlati becslés két fő úton történhet. A regressziós adjustment az modelljét illeszti a és magyarázó változókkal; a együtthatója a feltételes hatás becslése. A propensity score (hajlamérték) azt fejezi ki, mekkora eséllyel kerül valaki a kezelt csoportba az aktivitás mellett. A propensity score kiegyensúlyozó tulajdonsága szerint, ha elegendő a hátsó út blokkolásához, akkor a -re feltételesen a kezelés és a potenciális kimenetek közel függetlenek. Ezt kihasználhatjuk párosítással (matching): minden kezelt ügyfélhez hasonló score-ú kontrollt keresünk; vagy súlyozással (weighting): a kezelteket , a kontrollokat súllyal látjuk el, hogy a mintát mintegy újrasúlyozzuk a randomizált kísérlet eloszlásához. A stabilizált súlyok a marginális aránnyal osztanak: és , ezzel a szélsőséges súlyokat csökkentik.
A korrekció csak akkor értelmezhető, ha teljesül a pozitivitás (positivity): minden rétegben . Ha például minden nagyon aktív ügyfél kampányt kapott, akkor abban a rétegben nincs kontroll; a becslés ott extrapolál, és a kimenet kontrollbeli értékét már nem az adat határozza meg. Az overlap-vizsgálat a becsült propensity score eloszlását hasonlítja össze a kezelt és kontroll csoportban; ha a két hisztogram jól átfedi egymást, a pozitivitás a megfigyelt tartományon hihető.
A nem mért zavaró változó (unmeasured confounding) a leggyakoribb korlát. Legyen egy rejtett jellemző, amely egyszerre növeli a kezelés esélyét és a kimenetet, de az adatbázisban nem szerepel. Ekkor a DAG:
X U
/ \ / \
v v v v
T ---------> Y
Az -re való korrekció nem blokkolja az -n átmenő utat. A becsült hatás torzítását közelítőleg a két rejtett él erősségének szorzata adja: ha egységnyi növekedése -val növeli a kezelés valószínűségét, és -val a kimenetet, akkor a torzítás nagyságrendű. Az érzékenységi elemzés (sensitivity analysis) azt kérdezi: mekkora rejtett kellene ahhoz, hogy az észlelt hatást teljesen megmagyarázza? A propensity score tehát a mért -eket próbálja kiegyensúlyozni, de a nem mért utat nem tudja elzárni.
A következő kód a fenti folyamatot állítja elő, majd összehasonlítja
a nyers és a korrigált becslést, overlap-vizsgálatot készít, végül
elrejti
-t.
A kód automatikusan még nem ellenőrzött; a kimeneteket
# szemléltető megjegyzéssel jelöljük, és a generatív
paraméterekből levezetjük a várt irányt.
import numpy as np
import pandas as pd
import statsmodels.api as sm
import matplotlib.pyplot as plt
rng = np.random.default_rng(20261020)
n = 2000
# Mért zavaró változó: előzetes aktivitás, standard normális
X = rng.normal(0, 1, n)
# Kezelés: logit a mért X alapján
logit_score = 0.8 * X
p = 1 / (1 + np.exp(-logit_score))
T = rng.binomial(1, p, n)
# Valódi kimenet: tau=1.0 hatás, X lineáris hatása, zaj
epsilon = rng.normal(0, 1, n)
tau_true = 1.0
Y = 1.0 + tau_true * T + 1.5 * X + epsilon
df = pd.DataFrame({"X": X, "T": T, "Y": Y})
# 1) Nyers becslés
nyers = df.loc[df.T == 1, "Y"].mean() - df.loc[df.T == 0, "Y"].mean()
# 2) Regressziós adjustment
Xmat = sm.add_constant(df[["T", "X"]])
ols = sm.OLS(df["Y"], Xmat).fit()
tau_adj = ols.params["T"]
se_adj = ols.bse["T"]
ci_adj = ols.conf_int().loc["T"].to_numpy()
# 3) Propensity score becslése
logit_model = sm.Logit(df["T"], sm.add_constant(df["X"])).fit(disp=0)
df["ps"] = logit_model.predict(sm.add_constant(df["X"]))
# Overlap-vizsgálat
plt.hist(df.loc[df.T == 0, "ps"], bins=20, alpha=0.5, label="Kontroll (T=0)")
plt.hist(df.loc[df.T == 1, "ps"], bins=20, alpha=0.5, label="Kezelt (T=1)")
plt.xlabel("Becsült propensity score")
plt.ylabel("Gyakoriság")
plt.title("Overlap-vizsgálat")
plt.legend()
# 4) IPW becslés stabilizált súlyokkal
pi_hat = df["T"].mean()
w1 = pi_hat / df["ps"]
w0 = (1 - pi_hat) / (1 - df["ps"])
ipw_ate = (np.sum(w1 * df["T"] * df["Y"]) / np.sum(w1 * df["T"])
- np.sum(w0 * (1 - df["T"]) * df["Y"]) / np.sum(w0 * (1 - df["T"])))
# 5) Rejtett U bevezetése
U = rng.normal(0, 1, n)
T2 = rng.binomial(1, 1 / (1 + np.exp(-(0.8 * X + 0.6 * U))))
Y2 = 1.0 + tau_true * T2 + 1.5 * X + 0.7 * U + rng.normal(0, 1, n)
df2 = pd.DataFrame({"X": X, "T": T2, "Y": Y2, "U": U})
# Az elemzésben U-t "elfelejtjük"; csak T2 és X szerepel
Xmat2 = sm.add_constant(df2[["T", "X"]])
ols2 = sm.OLS(df2["Y"], Xmat2).fit()
tau_hidden = ols2.params["T"]
print(f"Nyers: {nyers:.3f}") # szemléltető
print(f"OLS adjustment: {tau_adj:.3f}, SE={se_adj:.3f}")
print(f"IPW stabilizált: {ipw_ate:.3f}") # szemléltető
print(f"Rejtett U melletti adjustment: {tau_hidden:.3f}") # szemléltetőA szemléltető futásban a következőkre számítunk. A nyers becslés nagyobb, mint , mert a nagy aktivitású ügyfelek egyszerre kapnak gyakrabban kampányt és költenek többet. Az OLS adjustment a együtthatóra a generált -hoz közeli értéket ad, és a -os konfidenciaintervallum a szemléltető futásban jellemzően tartalmazza az -t. Az IPW becslés hasonló pontbecslést produkál, de az IPW standard hibáját itt nem adjuk meg; ahhoz bootstrap vagy analitikus szendvicsbecslés kellene. Az overlap-ábra a két hisztogram jelentős átfedését mutatja, mert a propensity score a – tartományban marad. A rejtett változatban ezzel szemben a becsült hatás várhatóan fölé tolódik, mert növeli a kezelés esélyét és a kimenetet is; a torzítás iránya pozitív.
A kézi kontroll abból indul ki, hogy a generatív modellben . Az OLS adjustment a következő feltételes modellt becsüli: . Mivel az igazi kimenet lineáris, a a feltételes hatás, és a modellben nincs – interakció, az ATE megegyezik ezzel a feltételes hatással. A nyers becslés ellenőrzése: , és mivel , a nyers különbség -nál nagyobb. A propensity score és az OLS adjustment konzisztenciájának közös feltétele, hogy blokkolja a hátsó utat, a pozitivitás teljesül, és a kimeneti modell legalább közelítőleg helyes.
A rejtett esetben az -re korrigált becslés torzított, mert az kimaradásával a hátsó út egy része nyitva marad. A torzítás várható előjele ebben a szimulációban pozitív, mert és egyaránt pozitív. A numerikus nagyság a véletlentől függ, de a seedelt futtatásban a tanuló ellenőrizheti, hogy a becsült érték -tól szisztematikusan felfelé tér el. Fontos, hogy ezt ne nevezzük „mérési” eredménynek addig, amíg a kódot helyben nem futtattuk; a fenti számok csak a generatív összefüggésekből adódó elméleti várakozások.
Érzékenységi elemzés: a propensity score súlyozás önmagában nem bizonyítja a zavarás megszüntetését. A pozitivitás ellenőrzése, a súlyok eloszlása és a súlyozás utáni kovariáns-egyensúly ellenőrzése szükséges; rejtett zavarásra külön érzékenységi forgatókönyv kell.
Értelmezés. A DAG-ban , és nyilak vannak. Magyarázd el, miért torzított a nyers átlagkülönbség, és miért blokkolja az -re való korrekció a hátsó ajtó utat. Add meg a feltételes várható értékes becslés képletét abban az esetben, amikor két lehetséges értéket vesz fel: és .
Implementálás. A fenti kódban az IPW becslés
stabilizált súlyokat használ. Írd át a súlyozást úgy, hogy ne
stabilizált, hanem közönséges IPW súlyokat használjon, és futtasd le a
seedelt szimuláción. Milyen tulajdonságot vársz a becsült pontértéktől,
és miben térhet el a stabilizált változattól? (A futtatáshoz a kódban a
w1 = 1/df["ps"] és w0 = 1/(1-df["ps"]) sorokat
használd.)
Hibadiagnózis. Tegyük fel, hogy egy másik minta overlap-ábráján a kezelt csoport propensity score-ja mindenütt felett van. Mi a probléma a pozitivitással? Melyik rétegben nincs elegendő kontroll? Adj egy olyan -értéket, amelynél ez bekövetkezhet a fenti generatív folyamat módosításával, és írd le, hogyan csökkenthető a hiba (például szűkítéssel vagy adatgyűjtéssel).
Megváltozott feltétel. A rejtett szimulációban a paramétert először csökkentsd -re, majd a paramétert növeld -re. Mindkét esetben magyarázd el, hogyan változik a rejtett confoundingból adódó torzítás nagysága. Melyik paraméterváltozás erősebb hatású, és miért?
A nyers különbség két csatornát kever: a oksági hatását -ra és az közös hatását. A és közötti nyers asszociáció tartalmazza az -en átmenő utat, mert a nagy -ű ügyfelek gyakrabban kapnak kezelést és gyakrabban költenek. Az -re való adjustment a megfigyeléseket azonos -rétegeken belül hasonlítja össze, így az szerinti összetétel már nem torzít. Diszkrét esetén .
A nem stabilizált IPW súlyok és . A becsült ATE: . A pontbecslés várhatóan ugyancsak körüli, de a nem stabilizált súlyok varianciája nagyobb, mert a nagyon kis -ű rétegek hatalmas súlyt kapnak. A feladat ellenőrző invariánsa: a becslés nem térhet el -tól olyan rendszeres, mint a nyers becslés; a két IPW-változat pontbecslése közel esik egymáshoz, de a súlyok eloszlása eltér.
A feletti propensity score azt jelenti, hogy az adott tartományban szinte mindenki kezelt, tehát , ami sérti a pozitivitást. A kontrollréteg ott hiányzik, és a becslés a kontrollkimenetet extrapolációval pótolja. Például ha a generatív modellben a logit score -ről -re változik, akkor esetén , ami felett van. A hiba csökkenthető az elemzés átfedő tartományra szűkítésével (például csak megfigyelésekkel), vagy további kontrollok gyűjtésével abban a rétegben.
A torzítás szorzattal arányos. Ha -t -ról -re csökkentjük, a torzítás hatodára esik; ha -t -ről -re növeljük, a torzítás körülbelül kétszeresére nő. A két paraméter változásának hatása szimmetrikus a szorzatban, de az adott módosításoknál a csökkentés erősebb, mert hatásosabb, mint . A válaszban a gyakorlati üzenet: a rejtett változó mindkét irányú erőssége számít.
Gyakori tévedés: „A propensity score korrigál minden confoundingot.” Ellenpélda a fenti szimuláció: az -re való propensity score adjustment vagy IPW becslés sem szünteti meg az hatását, mert nem szerepel a mért változók között. A propensity score kizárólag a mért -eket egyensúlyozza; a nem mért hátsó út nyitva marad. Ezért a propensity score soha nem igazolja önmagában az oksági állítást. A Függetlenség, kovariancia és függő adat alfejezetben látott kovarianciafogalom itt is segít: a és közötti asszociáció akkor is jelen van, ha nem oksági ok, mert egy közös ok korrelációt hoz létre. A Diagnosztika és robusztus standard error alfejezetben tárgyalt robusztus standard error a heteroszkedaszticitást kezeli, nem a zavaró változót; hiába kicsi a SE, ha a pontbecslés torzított. Végül a Duplikáció, kulcs és adatminőségi szerződés alfejezetből a megfigyelési egység ellenőrzése itt is kötelező: egy ügyfél egy sor, a kampány és a kimenet ugyanabban a sorban.
Önellenőrző kérdések: (1) Mi a különbség a mért és a nem mért confounding között? (2) Mit jelent a pozitivitás, és milyen ábra mutatja a sérülését? (3) Miért lehet egy stabilizált IPW-becslés varianciája kisebb, mint a közönséges IPW-becslésé? (4) Melyik irányba torzít a fenti szimulációban a rejtett , és miért?
A megfigyeléses becslésben a nyers asszociáció keveri az oksági hatást és a közös okok hatását. A hátsó ajtó út azonosítása után a mért zavaró változóra való adjustment a rétegek közötti összehasonlítást teszi lehetővé. A pozitivitás és az overlap-vizsgálat azt ellenőrzi, hogy minden rétegben van-e kezelt és kontroll megfigyelés. A propensity score párosításra és súlyozásra használható, de nem blokkolja a nem mért utat. Az érzékenységi elemzés a rejtett változó erejét kérdezi, és a szimulált példa megmutatja, hogy egy rejtett a korrigált becslést is torzíthatja. A következő alkalmazás a kísérleti eredmény tudományos közlése, ahol ugyanezeket a korlátokat expliciten jelenteni kell.