Egy kísérleti tanulóprojektben a 7 napos vásárlói bevételt
vizsgáljuk. A megfigyelési egység egy ügyfél, a kimenet
revenue_7d_minor, azaz a 7 nap alatti bevétel EUR-centben.
A teljes Northstar lab helyett most egy tíz elemű, teljesen előállított
szintetikus mintát használunk, hogy minden lépés kézzel is ellenőrizhető
legyen:
x = [10, 12, 9, 14, 11, 13, 8, 15, 10, 12] # EUR-centModellfeltevésünk tanulási célból: a megfigyelések független, azonos eloszlású (iid) minták egy normális eloszlásból. Ez statisztikai tanulómodell, nem üzleti tény.
Három különböző bizonytalanságot fogunk riportálni ugyanahhoz a modellhez:
A cél ellenőrzési feltétele: a paraméter-intervallum és a predikciós intervallum a levezetett t-képletet kövesse, a predikciós intervallum legyen szélesebb a paraméter-intervallumnál, és a Monte Carlo-kvantilisek a megadott tolerancián belül közelítsék az analitikus predikciós intervallumot.
Induló feladat: a minta alapján számold ki fejben vagy papíron az átlagot és a korrigált tapasztalati szórást, majd becsüld meg, hogy a 95%-os predikciós intervallum nagyságrendileg mennyivel lesz szélesebb, mint a 95%-os paraméter-intervallum. A részletes levezetés után ugyanezt ellenőrizni fogjuk.
A variancia felbontása a kulcs. Ha független, varianciájú megfigyelés, akkor a mintaátlag varianciája
míg egy új megfigyelésé
Az új megfigyelés tehát az egyedi zajt is hordozza. Ha a mintaátlagot használjuk középpontnak, a predikciós hiba varianciája a kettő összege:
Ebből már látható, miért lesz a predikciós intervallum mindig szélesebb, mint a paraméter bizonytalanságát leíró intervallum: ugyanahhoz a -hoz egy szorzó társul.
A paraméter pontbecslése . Ha ismeretlen, a standardizált becslő Student-féle t-eloszlást követ szabadsági fokkal:
Itt a korrigált tapasztalati szórás,
amely , mértékegysége itt EUR-cent. Az szintű konfidenciaintervallum:
A
-kritikus
érték stats.t.ppf(1 - alpha/2, df) módon kapható. Az
intervallum a becslő mintavételi ingadozását írja le.
Frekventista értelmezése: ha az eljárást sok független mintán
megismételjük, a lefedettség hosszú távon
lesz. Ez nem azt jelenti, hogy az aktuális
95% valószínűséggel esik az aktuális intervallumba.
Egy új megfigyelésre vonatkozó intervallum más célt szolgál: egy jövőbeli értéket szeretnénk előre megragadni. Ismeretlen mellett
ezért az szintű predikciós intervallum:
A képlet alakja: loc = xbar,
scale = s * np.sqrt(1 + 1/n); a scipy.stats.t
ilyen paraméterezést használ. A predikciós intervallum tehát kettős
forrásból táplálkozik: a paraméterbecslés bizonytalanságából
()
és az új megfigyelés saját zajából
().
Kis mintán a
korrekció érdemi;
mellett
.
Ha a predikciós eloszlás kvantiliseit Monte Carlo-mintavétellel közelítjük, akkor a véges szimulációszám miatt a becsült kvantilisnek külön numerikus hibája van. Legyen az empirikus -kvantilis. Közelítő standard hibája:
ahol a szimulált eloszlás sűrűsége a valódi kvantilisnél, , pozitív egész. A képlet azt mutatja, hogy a Monte Carlo hiba sebességgel csökken: négyszerezése körülbelül felezi a numerikus standard hibát. Ez a hiba nem a modell statisztikai bizonytalansága, hanem a számítás felbontásából adódik; tetszőlegesen csökkenthető nagyobb -vel, míg a predikciós intervallum szélessége a mintából adódó valódi tanulási korlát.
Az érzékenységvizsgálat azt kérdezi: mennyire változik a konklúzió, ha a modellfeltevést vagy egy-egy adatpontot módosítjuk? A normális predikciós intervallum különösen érzékeny a kiugrókra, mert mind , mind a teljes mintából számítódik. Ha egy extrém bevételű ügyfél kerül a mintába, az átlag és a szórás is eltolódik, és az intervallum drámaian kiszélesedhet. Ilyenkor vagy robusztusabb összegzést, vagy transzformált modellt (például logaritmikus skálát) kell választani; a sensitivity célja nem az, hogy egyetlen „helyes” intervallumot adjon, hanem hogy láthatóvá tegye, melyik feltevésre támaszkodik az eredmény.
A kód önálló, csak NumPy-t és SciPy-t használ. Futtatás a projektgyökérből:
python s060_intervals.pyimport numpy as np
from scipy import stats
# Rögzített, teljesen szintetikus tanuló-minta: revenue_7d_minor, EUR-cent.
x = np.array([10, 12, 9, 14, 11, 13, 8, 15, 10, 12], dtype=float)
n = x.size # int, mintanagyság
df = n - 1 # int, szabadsági fok
alpha = 0.05
xbar = x.mean() # float, EUR-cent
s = x.std(ddof=1) # float, korrigált minta-szórás
t_crit = stats.t.ppf(1 - alpha / 2, df) # float, kritikus érték
# 1) Paraméter-intervallum mu-ra
se_mean = s / np.sqrt(n)
ci_lo = xbar - t_crit * se_mean
ci_hi = xbar + t_crit * se_mean
# 2) Predikciós intervallum egy új megfigyelésre
pi_scale = s * np.sqrt(1 + 1 / n)
pi_lo = xbar - t_crit * pi_scale
pi_hi = xbar + t_crit * pi_scale
# 3) Monte Carlo-szimuláció a t-predikciós eloszlásból,
# hogy a numerikus kvantilis-hibát is lássuk.
rng = np.random.default_rng(20261020) # reprodukálható seed
B = 10_000 # szimulációszám
mc_sample = stats.t.rvs(
df=df,
loc=xbar,
scale=pi_scale,
size=B,
random_state=rng,
)
mc_lo = np.quantile(mc_sample, alpha / 2)
mc_hi = np.quantile(mc_sample, 1 - alpha / 2)
# A felső 0.975 kvantilis Monte Carlo standard hibája.
# Sűrűség az y-skálán: f_T((y-loc)/scale) / scale.
f_upper = stats.t.pdf(t_crit, df) / pi_scale
mc_se_upper = np.sqrt((1 - alpha / 2) * (alpha / 2) / B) / f_upper
print(f"n={n}, df={df}, t={t_crit:.6f}")
print(f"xbar={xbar:.4f}, s={s:.4f}")
print(f"95% CI: [{ci_lo:.3f}, {ci_hi:.3f}]")
print(f"95% PI: [{pi_lo:.3f}, {pi_hi:.3f}]")
print(f"MC 95% PI: [{mc_lo:.3f}, {mc_hi:.3f}]")
print(f"MC SE felső kvantilis: {mc_se_upper:.4f}")A kimenetben a levezetett értékek a rögzített lista kézi számításából adódnak; az alábbi táblázat ezt mutatja. A tényleges helyi futtatáskor a Monte Carlo-kvantilisek a seed miatt determinisztikusak, de az utolsó tizedesjegyekben a SciPy-verzió numerikus részletei miatt lehet minimális eltérés.
| Mennyiség | Érték (EUR-cent) | Mit fejez ki |
|---|---|---|
| 95% CI -re | a mintaátlag mintavételi ingadozása | |
| 95% PI új ügyfélre | paraméterbizonytalanság + egyedi zaj | |
| MC kvantilis SE | a szimulációs numerikus hiba nagyságrendje |
A CI szélessége körülbelül , a PI szélessége körülbelül EUR-cent. A predikciós intervallum tényleg szélesebb, és a különbség a tényezőből, illetve az egyedi zajból következik.
A mintaátlag EUR-cent. A becsült szórás , a standard hiba . A 95%-os paraméter-intervallum félszélessége , tehát a CI . A predikciós intervallum félszélessége , tehát a PI .
A Monte Carlo-szimuláció ugyanabból a t-eloszlásból vesz mintát, ezért a replikációból becsült kvantiliseknek a fenti analitikus PI-t kell közelíteniük; a kvantilis Monte Carlo standard hibája a sűrűségbecslés alapján nagyságrendileg EUR-cent. Ez azt jelenti, hogy a szimulációs numerikus hiba a predikciós intervallum szélességéhez képest elhanyagolható, de külön kell jelenteni, mert a célja és a skálája más, mint a statisztikai intervallumé.
Ellenőrzési invariánsok:
ci_lo <= ci_hi és
pi_lo <= pi_hi;pi_hi - pi_lo > ci_hi - ci_lo, mert
;mc_lo és mc_hi az analitikus értékektől a
Monte Carlo hibán belül térhet el;mc_sample alakja (B,) és dtype-ja
float64.A paraméterintervallum a sokasági mennyiség bizonytalanságát, a predikciós intervallum egy új kimenet szóródását is tükrözi. A Monte Carlo-konfidenciaintervallum pedig egy szimulációs becslés numerikus mintavételi hibájára vonatkozik; ezeket nem szabad felcserélni.
Értelmezés. Magyarázd el saját szavakkal, miért tartalmazza a predikciós intervallum a varianciát, és miért nem elegendő az új ügyfél becsléséhez a paraméter konfidenciaintervallum. A 95%-os szint mit jelent a két intervallumnál?
Megvalósítás. Módosítsd a fenti kódot 90%-os
szintre. Számold ki a 90%-os CI-t és PI-t, és hasonlítsd össze a 95%-os
intervallumok szélességével. A stats.t.ppf hívásban mely
argumentum változik?
Hibakeresés. Egy kolléga a következő kódot írta a predikciós intervallumhoz:
z = stats.norm.ppf(0.975)
pi_lo = x.mean() - z * x.std(ddof=1)
pi_hi = x.mean() + z * x.std(ddof=1)Nevezd meg a két statisztikai hibát, és becsüld meg, mennyivel lesz keskenyebb vagy szélesebb ez az intervallum a helyes 95%-os PI-nél a fenti mintán.
revenue_7d_minor = 300.
Futtasd újra a CI-t és a PI-t. Hogyan változik a két intervallum
szélessége, és miért jelzi ez a normalitási feltevés érzékenységét?
Javasolj egy alternatív modellt vagy transzformációt, amely robusztusabb
lehet erre a kiugróra.A mintaátlag szórása , mert független megfigyelés átlagolása csökkenti az ingadozást. Egy új megfigyelés viszont egyetlen húzás, amelynek szórása , ezért az új érték és a becsült átlag eltérésének varianciája . A paraméter-CI azt az intervallumot adja, ahová a becslő körül esik; az új ügyfél ettől még szinte bizonyosan kívül lesz, mert az egyedi zaj hiányzik belőle. A 95% frekventista értelemben az eljárás hosszú távú lefedettségére vonatkozik; a CI a paraméterre, a PI az új megfigyelésre ad eljárási garanciát.
alpha = 0.10, és
t_crit = stats.t.ppf(0.95, df=9) értéke
.
A mintaátlag és a szórás változatlan. A 90%-os CI félszélessége
,
tehát a CI
.
A 90%-os PI félszélessége
,
tehát a PI
.
A CI szélessége
,
a PI szélessége
EUR-cent, mindkettő keskenyebb, mint a 95%-os változaté. Ez a példa is
mutatja, hogy a szint megadása nélkül az intervallum szélessége nem
értelmezhető.
Két hiba van. Egyrészt a kolléga a standard normális kritikus értéket, használja a helyett, ami kis mintán alulbecsüli a bizonytalanságot. Másrészt a predikciós skálából hiányzik a korrekció. A hibás félszélesség , a helyes , tehát a hibás intervallum körülbelül 17%-kal keskenyebb. Ha emellett nagyobb lenne, a és közötti eltérés csökkenne, de a akkor is megmaradna, mert az egyedi zaj minden mintanagyságnál jelen van.
Az új minta
elemű, az átlag
,
a korrigált szórás
.
A szélsőséges kiugró miatt mind a CI, mind a PI félszélessége drámaian
megnő, és a normális predikciós intervallum alsó határa akár negatív is
lehet, ami a bevételi adatoknál nem értelmes érték. Ez érzékenységi
jelzés: az eredmény nem robusztus a normalitási feltevés megsértésére.
Alternatíva például a log(revenue_7d_minor + 1)
transzformáció, majd a log-skálán normális modell és a végén
visszatranszformálás, vagy egy ferde eloszlást megengedő bootstrap
predikciós intervallum; mindkettő külön feltételek mellett
érvényes.
Az intervallum szélessége önmagában nem jelent jóságot, ha nem mondjuk meg, mire vonatkozik és milyen szintű. A fenti mintán a 95%-os CI szélessége , a 95%-os PI szélessége . Egy felületes összehasonlítás azt mondhatná, hogy a CI „jobb”, mert keskenyebb; valójában egyszerűen más kérdésre válaszol. Ellenpéldaként vegyünk egy 50%-os CI-t ugyanerre a mintára: a félszélesség , a teljes szélesség , tehát keskenyebb, mint a 95%-os CI. Ez mégsem erősebb állítás, hanem alacsonyabb lefedettségi szint. Ugyanígy egy rosszul megválasztott bootstrap intervallum is lehet szűkebb, ha figyelmen kívül hagyja az ügyfélszintű függést (Bootstrap a megfelelő mintavételi egységgel). A szélesség értékelése előtt tehát mindig rögzíteni kell: mi a cél, mi a megfigyelési egység, milyen a szint és milyen modellfeltevés mellett készült az intervallum.
Visszautalásként a Nagy számok és centrális határeloszlás standard hibája itt a -eloszlással kombinálódik, a Bootstrap a megfelelő mintavételi egységgel bootstrap-logikája pedig emlékeztet, hogy a megfelelő mintavételi egység nélkül a szimulációs intervallum is félrevezető lehet. A Kernelregisztráció és tiszta újrafuttatás reprodukálhatósági elve itt is érvényes: a Monte Carlo seed rögzítése nélkül a kvantilis-hiba sem reprodukálható.
Önellenőrző kérdések: a kódban a pi_scale mindig
nagyobb-e, mint se_mean? A Monte Carlo szimulációnak melyik
eloszlásból kell mintát venni? Ha
-t
négyszerezed, milyen arányban változik a Monte Carlo standard hiba?
A paraméter-intervallum a becslésének mintavételi bizonytalanságát adja meg, a predikciós intervallum ezen felül egy új megfigyelés egyedi zaját is tartalmazza, ezért utóbbi mindig szélesebb. A Monte Carlo szimuláció kvantiliseinek külön numerikus standard hibája van, amely szerint csökken, és nem keverhető a statisztikai bizonytalansággal. A normalitási feltevésre érzékenységvizsgálattal kell rákérdezni, például kiugró hozzáadásával vagy log-transzformált modellel. A következő alkalmazásban ezeket az intervallumfajtákat hipotézisvizsgálati döntésekkel kötjük össze: egy hatásméret, egy predikciós tartomány és egy szimulációs hibahatár együttes értelmezése ad korrekt statisztikai állítást.