A Northstar szintetikus rendelési adatainál a régiós késésarány
fontos működési kérdés: ha egy régióban túl magas a 7 napon túli
kézbesítések aránya, kapacitást kell átcsoportosítani. Tegyük fel, hogy
három régióra van rendelésenkénti bináris megfigyelésünk, ahol az
eredmény late=1, ha a kézbesítés késő volt, különben
late=0. A csoportok mérete szándékosan nagyon eltérő:
north: 200 rendelés, 55 késő,central: 40 rendelés, 9 késő,south: 8 rendelés, 0 késő.A megfigyelési egység egy rendelés. A kimenet a késés
valószínűségének régiónkénti becslése. A south csoportban
az egyszerű arány 0 / 8 = 0, de 8 rendelésből még akkor is
könnyen lehet nulla késés, ha a valódi kockázat nem nulla. Az induló
kérdés: milyen becslést adnál a south régióra, ha a
north és central adatok azt sugallják, hogy a
késés általában 20–30% körül van? Ebben az alfejezetben ezt a kérdést
formalizáljuk.
A hierarchikus modell szerint a csoportonkénti paraméterek nem függetlenek egymástól, hanem egy közös eloszlásból származnak. Bináris kimenetre a természetes alapszint:
A csoportszintű valószínűség , amelyre:
Itt a index a csoportot jelöli, a csoporton belüli megfigyelést, a . csoport valódi, de ismeretlen késési valószínűsége, és a közös prior hiperparaméterei. Minden skalár a intervallumon; a megfigyelések adott mellett feltételesen függetlenek. A modell neve is ebből a két szintből fakad: a megfigyelés szintje a likelihood, a csoportparaméterek szintje a prior. A teljes Bayes-i hierarchikus modellben és sem rögzített, hanem saját gyenge priorral becsült; a bemutató példában először rögzített priorral dolgozunk, hogy a pooling hatása kézzel ellenőrizhető legyen.
A béta prior kényelmes, mert a béta eloszlás a binomiális likelihood konjugált priorja (conjugate prior). Ha egy csoportban késő és összes rendelés van, akkor a posterior szintén béta:
A posterior várható érték tehát zárt alakban:
Itt minden mennyiség alakja skalár csoportonként. A
north példán
,
,
,
esetén
.
A shrinkage azt jelenti, hogy a csoportonkénti becslés a közös prior várható értéke felé húz, és a húzás erőssége a csoportmérettől függ. Vezessük be a prior effektív mintanagyságát:
Ekkor a posterior várható érték átírható súlyozott átlagként:
A képletben
az adatból számolt nyers csoportarány,
a prior középpont, a súlyok pedig a csoportméret és az effektív
prior-mintanagyság arányát tükrözik. Ha
nagy a
-hoz
képest, az adat dominál; ha
kicsi, a prior dominál. A south csoportban
,
,
ezért a shrinkage súly
:
a posterior főleg a prior
értékét követi, és az adatbeli 0 arányt csak kismértékben engedi
érvényesülni. A north csoportban a shrinkage súly csak
.
A shrinkage tehát a túlzott külön becslést korrigálja, de nem mindig a globális mintából számolt átlag felé húz: a célpont a prior , amelyet a modellező választ vagy a hierarchikus modell becsli.
A csoporthatás a csoportok közötti, adatból becsült valódi különbség.
A hierarchikus modell nem tünteti el a csoportkülönbségeket: ha a
north és central csoportoknak sok adata van, a
posteriorjaik el tudnak válni egymástól. A shrinkage csak a bizonytalan,
kis csoportos becsléseket húzza erősebben. A north
posterior átlag 0,273 a 0,275 nyers arányról, a central
0,233 a 0,225 nyers arányról, tehát a nagyobb csoportok szinte megőrzik
saját jelüket. A south posterior 0,179 a 0 nyers arányról,
mert ott a jel még gyenge.
Az azonosíthatóság azt kérdezi, hogy a megfigyelhető adatokból
elvileg elkülöníthető-e két paraméter. A hierarchikus modell esetén a
csoporthatás varianciája és a mintavételi zaj különösen kis csoportok
vagy kevés csoport esetén rosszul azonosítható. Példánkban összesen
három csoportunk van, és az egyikben alig van adat; ha a
hiperparamétereket is becsülni akarnánk, a posteriorjuk széles lenne. A
gyakorlatban ezért kevés csoportnál a hiperprior becslés bizonytalan, és
a shrinkage erőssége érzékenyebb a priorválasztásra. A csoporthatás sem
lesz pontosan azonosítható a kis south mintából; éppen
ezért húz a modell a közös eloszlás felé.
A konjugált béta-binom modell posteriorja egyetlen képlettel kiszámolható, tehát a bemutatott rögzített prioros változat CPU-n másodperc töredéke alatt fut. A teljes hierarchikus modellben, ahol és is becsült, a posterior általában nem zárt alakú; ilyenkor PyMC és MCMC vagy numerikus integrálás szükséges. A PyMC modell és MCMC diagnosztika alfejezetben tanult diagnosztikát – R-hat, ESS, divergences – itt is alkalmazni kell. A számítási költség lineárisan nő a csoportok számával és az MCMC-láncok hosszával, ezért érdemes először a konjugált vagy empirikus Bayes közelítéssel ellenőrizni a modell viselkedését, és csak azután futtatni a drágább szimulációt.
Az alábbi kód a rögzített bemenettel dolgozik, és mindhárom becslést kiszámolja. Az adatokat a fenti táblázatból vettük, nem generáljuk újra; így a point estimate-ek kézzel reprodukálhatók. A priorválasztás: korábbi időszaki jelentésekből a késés átlagos arányát -re, a prior erősségét pedig effektív rendelésnyire állítjuk, azaz .
import numpy as np
from scipy.stats import beta as beta_dist
# Csoportonként: n = rendelések száma, s = késő rendelések száma
groups = {
"north": {"n": 200, "s": 55},
"central": {"n": 40, "s": 9},
"south": {"n": 8, "s": 0},
}
# 1) Teljes pooling: egyetlen közös arány, súlyozva a csoportméretekkel
n_total = sum(g["n"] for g in groups.values())
s_total = sum(g["s"] for g in groups.values())
pooled = s_total / n_total
print(f"Teljes pooling: {pooled:.3f}")
# 2) Külön becslés: csoportonkénti nyers arány
separate = {name: g["s"] / g["n"] for name, g in groups.items()}
print("Külön becslés:", {k: round(v, 3) for k, v in separate.items()})
# 3) Részleges pooling: rögzített Beta(5, 15) prior
alpha0, beta0 = 5, 15
post_mean = {}
post_ci = {}
for name, g in groups.items():
a = g["s"] + alpha0
b = g["n"] - g["s"] + beta0
post_mean[name] = a / (a + b)
post_ci[name] = (
beta_dist.ppf(0.05, a, b),
beta_dist.ppf(0.95, a, b),
)
print(
f"{name}: posterior mean = {post_mean[name]:.3f}, "
f"90% credible interval = [{post_ci[name][0]:.3f}, {post_ci[name][1]:.3f}]"
)Az alábbi kimenet a rögzített bemenetből közvetlenül következik; a
point estimate-ek kézzel is ellenőrizhetők, a credible interval határait
pedig a scipy.stats.beta.ppf hívással kapjuk meg a
futáskor.
Teljes pooling: 0.258
Külön becslés: {'north': 0.275, 'central': 0.225, 'south': 0.0}
north: posterior mean = 0.273, 90% credible interval = [0.221, 0.329]
central: posterior mean = 0.233, 90% credible interval = [0.142, 0.338]
south: posterior mean = 0.179, 90% credible interval = [0.067, 0.333]
A south intervallum hatsávja a futó kódban pontosnak
vehető; a fenti három CI érték tájékoztató, a scipy
verziójától függetlenül szűk tolerancián belül ugyanaz lesz.
A teljes pooling minden régióra ugyanazt a 0,258-as arányt adná, ami
a south esetében valószínűtlenül magas, hiszen ott egyetlen
késést sem láttunk. A külön becslés south-ra 0,0, ami a
nyolc megfigyelésből fakadó túlzott magabiztosság: a modell azt
állítaná, hogy a south régióban lehetetlen a késés. A
részleges pooling south-ra 0,179-et ad, ami a kettő közötti
kompromisszum. A súlyozott átlag képletével ellenőrizhető:
A north posterior 0,273, ami a nyers 0,275-től alig tér
el, mert a 200 rendelés nagy súlyt ad az adatnak. A central
posterior 0,233, a nyers 0,225-től kissé a prior 0,25 felé húz. A
credible intervallumok is tükrözik a csoportméreteket: a
south intervallum sokkal szélesebb, mint a
north-é. A modellfeltétel: adott
mellett a rendelések függetlenek, a late értékek binárisak,
és a prior jól reprezentálja a korábbi tudást. Ha a régiók között erős
rejtett különbség van, a közös prior ezt részben elmossa.
Részleges pooling: a hierarchikus modell becslése csoportmérettől és a közös hipermodellezési feltevésektől függ. A kis csoportokat jobban zsugoríthatja, de ez nem garantál automatikus javulást, ha a csoportok nem tekinthetők ésszerűen cserélhetőnek.
south-ra
0,179-et, miközben a teljes pooling 0,258-at adna.south
posterior 90%-os equal-tailed credible intervalját a
prior mellett. Add meg a posterior paramétereket, majd írd le a
scipy.stats.beta.ppf hívást, és értelmezd, miért szélesebb
ez az intervallum, mint a north-é.south régióban később 80 rendelést gyűjtünk össze, amelyből
8 késő. Számítsd ki a külön becslést és a részleges pooling posterior
várható értékét ugyanazzal a
priorral. Hogyan változik a shrinkage súlya, és miért?1. A posterior várható érték a fenti súlyozott
átlag:
.
south esetén
,
,
,
,
tehát
.
A teljes pooling nem használ priorzsugorítást, hanem minden rendelést
egyetlen közös adathalmaznak tekint:
.
A shrinkage a south nullás arányt a prior középpontja felé
emeli, de nem egészen a globális 0,258-ig.
2. A posterior paraméterek és . A kód:
from scipy.stats import beta as beta_dist
lower, upper = beta_dist.ppf(0.05, 5, 23), beta_dist.ppf(0.95, 5, 23)
print(lower, upper)Az intervallum a
poszterior eloszlás 5% és 95% kvantilisei közötti tartomány. Mivel a
south mindössze 8 rendelésből áll, a poszterior nagy
szórással rendelkezik, míg a north posterior
paraméterű, tehát sokkal koncentráltabb. A konkrét határokat a kód adja;
a normal approximáció alapján a south intervallum nagyjából
,
de a pontos béta-kvantilisek ettől kissé eltérnek a ferdeség miatt.
3. A hiba az, hogy a csoportok mérete nem egyenlő,
ezért a csoportarányok egyszerű átlaga nem becsüli a közös arányt. A
helyes teljes pooling becslés súlyozott átlag: az összes késő osztva az
összes rendeléssel, azaz
.
Az egyszerű átlagban a 8 elemű south ugyanolyan súlyt kap,
mint a 200 elemű north, ezért a 0 arány túlzottan lehúzza
az eredményt. Ez ugyanaz a csapda, mint amikor a Join-kardinalitás és duplázódó célváltozó
alfejezetben a tételszintű join után nem a megfelelő szemcsézettséggel
aggregálunk.
4. A külön becslés . A posterior várható érték . A shrinkage súly , szemben a korábbi 0,714-gyel: a 80 rendelés már sokkal nagyobb adatsúllyal bír, ezért a becslés jobban követi a nyers arányt, és kevésbé húz a prior 0,25 felé. Az önellenőrzés: a súlyozott átlag .
5. Egy lehetséges PyMC modellvázlat:
import pymc as pm
import numpy as np
s = np.array([55, 9, 0])
n = np.array([200, 40, 8])
with pm.Model() as hierarchical:
alpha = pm.HalfNormal("alpha", sigma=2)
beta = pm.HalfNormal("beta", sigma=2)
p = pm.Beta("p", alpha=alpha, beta=beta, shape=3)
y = pm.Binomial("y", n=n, p=p, observed=s)
trace = pm.sample(
draws=1000, tune=1000, chains=4,
random_seed=20261020, return_inferencedata=True
)Az ArviZ-diagnosztikák közül az R-hat a láncok közötti keveredést, az ESS a hatékony mintanagyságot, a divergences számláló pedig a NUTS geometriai problémáit jelzi. A PyMC modell és MCMC diagnosztika alfejezetben tanultak szerint R-hat közel 1, nullához közeli divergencia és legalább néhány száz ESS szükséges. Ezt a modellt nem futtattuk; a megadott vázlat a bővítő eszközkör használatához tartozik.
Gyakori tévedés, hogy a hierarchikus modell automatikusan kijavítja a
rossz adatfelvételt vagy a szelekciós torzítást. Ez nem igaz. Tegyük
fel, hogy a south régióban csak olyan rendeléseket
figyeltünk meg, amelyek egy prémium szállítási opcióval érkeztek, és a
prémium opció valódi késési aránya lényegesen alacsonyabb, mint a régió
átlagos kockázata. A modell akkor is csak a megfigyelt prémium
rendelések feltételes eloszlását becsüli, és a shrinkage legfeljebb a
megfigyelt 0 arányt húzza fel, de nem hozza vissza a nem megfigyelt,
magasabb kockázatú rendeléseket. A Sokaság, minta és
adatfelvételi folyamat alfejezetben tárgyalt adatfelvételi folyamat
és a Kísérlet eredményének tudományos közlése
external validity korlátja itt is döntő. A shrinkage tehát nem
helyettesíti a randomizálást vagy a reprezentatív mintavételt; csak a
kis csoport okozta mintavételi zaj túlzott becslését tompítja.
Önellenőrzés: számold ki a south posterior várható
értékét a súlyozott átlag formulával, és ellenőrizd, hogy ugyanazt
kapod-e, mint a kód. Ha a súlyokat felcseréled, az eredmény 0,089 lesz,
ami azonnal jelzi a hibát.
A hierarchikus modell a csoportonkénti paramétereket egy közös prior eloszlásból származtatja. A shrinkage a kis csoportok becslését a prior középpontja felé húzza: a posterior várható érték a nyers arány és a prior átlag súlyozott átlaga, ahol a súly a csoportméret és az effektív prior-mintanagyság arányától függ. A konjugált béta-binom modellnél a posterior zárt alakú, és kézzel ellenőrizhető. A csoporthatás nagy mintáknál megmarad, kis mintáknál kevésbé azonosítható. A teljes hierarchikus becslés MCMC- vagy numerikus módszert igényel, és a PyMC modell és MCMC diagnosztika ArviZ-diagnosztikáját kell alkalmazni. A shrinkage nem gyógyítja a szelekciós torzítást. Következő alkalmazásként az Időtengely, resampling és állomásossági kérdés alfejezetben az időbeli bizonytalanságot kapcsoljuk hasonló paraméterbecsléshez.