Egy már betanított prediktív modellt akarunk értelmezni. A magyarázandó modell egy logisztikus regressziós pipeline, amely két standardizált folytonos feature-ből becsli a késés valószínűségét. A magyarázat egysége a betanított predikciós függvény viselkedése: mit tesz a modell az adott bemenettel, nem pedig a valódi üzleti vagy fizikai hatásmechanizmus. A bemenet egy szintetikus adatállomány: és együttesen normális eloszlású, korrelációjuk körülbelül ; a bináris cél Bernoulli-változó. A megfigyelési egység egy rendelés. Az eredmény három magyarázati forma: standardizált regressziós koefficiens, permutációs fontosság, valamint PDP/ICE görbék; mindegyikhez tartozik egy pontosan megnevezett érvényességi korlát.
Előzetes becslés: mivel mindkét feature egyformán, logit-együtthatóval hat a generáló folyamatban, de zajosabb komponenst is tartalmaz, várható, hogy a permutációs fontosság -re kissé nagyobb lesz. A koefficiensek hasonló nagyságúak lehetnek, de a -as korreláció miatt instabilabbak.
A logisztikus modell a logit-skálán lineáris:
Itt
a
-edik
standardizált feature értéke a
-edik
megfigyelésre,
pedig a hozzá tartozó regressziós koefficiens (regression coefficient).
A sklearn lineáris modelljében a becsült coef_
tömb alakja
,
ahol
a feature-ök száma. Ha
egy szórással nő, miközben a másik feature változatlan, akkor a log odds
-gyel
változik; valószínűségi skálán a változás nem konstans, mert a
logisztikus függvény nemlineáris. A koefficiens tehát feltételes
meredekség a modellen belül. Erősen korrelált
esetén a közös jel magyarázatát a két együttható között osztja meg a
modell, ezért egyedi standard hibájuk nagy lehet akkor is, ha a modell
predikciója stabil. A
pontbecslés nem tesztstatisztika; konfidenciaintervallumhoz bootstrap
vagy statsmodels kell (Predikciós, paraméter- és
Monte Carlo intervallum).
A permutációs fontosság (permutation importance, PI) azt méri, mennyit romlik egy előre rögzített pontossági mérőszám, ha a kérdéses feature oszlopát véletlenné tesszük:
Itt
a scoring, például ROC AUC vagy a negatív Brier-pontszám
(neg_brier_score);
az eredeti adaton mért érték,
pedig az
-edik
permutáció után számított érték. Az
sklearn.inspection.permutation_importance
importances kimenete
alakú, ennek sorátlaga és szórása adja a jelentett értéket. Az
ismétlés a permutáció véletlen zaját csökkenti, de nem statisztikai
konfidenciaintervallum. A
mértékegysége megegyezik
mértékegységével; ROC AUC esetén az eltérés
közé esik, és lehet negatív is, ha a permutáció véletlenül javítja a
pontszámot.
Korrelált feature-öknél két torzítás is felléphet. Ha hordozza jelének nagy részét, permutálása alig ront, mert helyettesíti; így a PI alábecsüli a változó predikciós szerepét. Másrészt a permutálás olyan párokat hozhat létre, amelyek a tanító eloszlásban szinte nem léteznek, ezért a modell extrapolál, és a romlás felfúvódhat. A PI tehát az adott modell, adateloszlás és scoring közös tulajdonsága; megváltoztatott adateloszlásra nem vihető át automatikusan.
A parciális függésgörbe (partial dependence plot, PDP) a modell predikciójának átlagos alakját mutatja a kiválasztott feature mentén, miközben a többi feature értékét a megfigyelt sorokból vesszük, és átlagolunk:
Itt az -edik sor komplementer feature-értéke, pedig a vizsgált feature rácsértéke. Ha a rács pontból áll, a PDP egy alakú számsor. Egy kézi mini-példa: legyen és a modell , a megfigyelt párok . Ekkor PDP-je: -ra , -re .
Az individuális feltételes várható görbe (individual conditional expectation, ICE) nem átlagol a megfigyelések fölött, hanem minden sorra külön hagyja a komplementer értékeket:
Az ICE alakja , átlaga éppen a PDP. Ha a modellben interakció van, az ICE görbék nem párhuzamosak; ha nincs, a logit-skálán additív modellben alakjuk azonos családból való, de a valószínűségi skálán az eltolás miatt nem párhuzamosak. A PDP tehát elfedheti az ellentétes irányú csoportok kioltódását, ezért a PDP-t és az ICE-t együtt érdemes nézni.
A lokális magyarázat (local explanation) egyetlen megfigyelésre ad felbontást: miért lett éppen egy adott rendelés becsült késési valószínűsége? Additív felbontásra törekszünk:
A tagokkal a referencia értékhez viszonyított hozzájárulást kapunk. Lineáris modellben, ha a referenciát a train-átlagra választjuk, a tagok a SHAP-stílusú additív felbontást adják független feature-ök mellett; a valódi SHAP-csomag használata itt nem szükséges. Fontos: a lokális magyarázat egyetlen predikcióra igaz, három különböző sor három eltérő hozzájárulást mutathat.
A következő kód szintetikus adatot készít, treníroz egy standardizált
logisztikus regressziót, és kiszámolja a koefficienst, a PI-t, a PDP/ICE
görbéket és egy sor lokális felbontását. A kódot
local_explanation_demo.py néven a projektgyökérbe tesszük.
A kimenet szemléltető, nem a könyvírás során végrehajtott mérés; a
pontos értékek seedtől és könyvtárverziótól függhetnek.
# local_explanation_demo.py
# Szemléltető kód, nem a könyvgenerálás által futtatott mérés.
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.pipeline import Pipeline
from sklearn.linear_model import LogisticRegression
from sklearn.inspection import permutation_importance, PartialDependenceDisplay
rng = np.random.default_rng(20261020)
n = 400
x1 = rng.normal(0.0, 1.0, n)
x2 = 0.8 * x1 + 0.6 * rng.normal(0.0, 1.0, n)
# Generáló logit; a valóságban ezt a kutató nem ismerné.
logit_true = -1.0 + 1.5 * x1 + 1.5 * x2
p_true = 1.0 / (1.0 + np.exp(-logit_true))
y = rng.binomial(1, p_true)
X = pd.DataFrame({"x1": x1, "x2": x2})
X_train, X_test, y_train, y_test = train_test_split(
X, y, test_size=0.25, random_state=2, stratify=y
)
model = Pipeline([
("scale", StandardScaler()),
("lr", LogisticRegression(max_iter=1000, random_state=0)),
])
model.fit(X_train, y_train)
coef = model.named_steps["lr"].coef_[0]
intercept = model.named_steps["lr"].intercept_[0]
print("Standardizált koefficiensek (log odds per szórás):", coef)
print("Intercept a standardizált térben:", intercept)
pi = permutation_importance(
model, X_test, y_test,
scoring="roc_auc", n_repeats=30, random_state=1,
)
print("PI átlag (AUC-romlás):", pi.importances_mean)
print("PI szórás:", pi.importances_std)
fig, ax = plt.subplots(1, 2, figsize=(10, 4))
PartialDependenceDisplay.from_estimator(
model, X_test, features=[0], kind="both",
grid_resolution=20, ax=ax[0],
)
PartialDependenceDisplay.from_estimator(
model, X_test, features=[1], kind="both",
grid_resolution=20, ax=ax[1],
)
fig.suptitle("PDP és ICE a két standardizált feature-re")
fig.tight_layout()
fig.savefig("local_pdp_ice.png", dpi=150, bbox_inches="tight")
row = X_test.iloc[[0]]
row_scaled = model.named_steps["scale"].transform(row)[0]
contrib = coef * row_scaled
logit_val = intercept + contrib.sum()
p_val = 1.0 / (1.0 + np.exp(-logit_val))
print("Sor:", row.to_dict(orient="records")[0])
print("Lokális hozzájárulások logit-skálán:", list(zip(X.columns, contrib)))
print("Rekonstruált logit:", logit_val, "valószínűség:", p_val)Futtatás Linux/macOS terminálból a projektgyökérben:
python local_explanation_demo.pyWindows PowerShellből:
python .\local_explanation_demo.pyA lab pyproject.toml alap numerikus csomagjait
feltételezi; a scikit-learn pontos verzióját a projekt
zárja. Egy lehetséges helyi futtatás kimenete (szemléltető, nem mért
érték): a standardizált koefficiensek valahol
és
körül, a PI pedig
-re
például
,
-re
AUC-romlás. A PDP növekvő, telítődő görbe mindkét feature-nél; az ICE
vonalak szétszórtak, mert a másik feature értéke eltolja őket.
A generáló folyamatból ismert kézzel számolható kontroll: ha
,
akkor
,
ezért
.
A betanított modell interceptje közel lehet ehhez, mert a
StandardScaler a train-adaton zéró átlagú feature-öket hoz
létre; az eltérés a train-minta véletlen ingadozásából adódik.
A koefficiens értelmezése: standardizált egységre vetített feltételes log odds hatás. Ha , akkor a modell szerint egy szórásnyi növelése a másik feature rögzítése mellett -vel növeli a log oddsot. Ez a mondat akkor is igaz, ha és korrelált; viszont a korreláció miatt az egyes együtthatók bizonytalanabbak, és a modell szétoszthatja a közös magyarázó erőt. Ezért nem állítjuk, hogy esetén „fontosabb” lenne; a kettő közötti különbség akár mintavételi zaj is lehet.
A PI ennél óvatosabb nyelvet igényel. A és érték annyit mond: a tesztadaton a modell ROC AUC-ja ennyivel romlik, ha az adott oszlopot permutáljuk. Mivel a két feature erősen korrelál, a másik változó részben pótolhatja a permutáltat; a tényleges szerep tehát nagyobb lehet a mért romlásnál. Másrészt a permutáció irreális párokat gyárt, ami felfújhatja a fontosságot. A PI korlátja ezért nem pusztán becslési zaj, hanem az együttes eloszlás megsértése.
A lokális felbontásban a contrib értékek logit-skálán
értendők. Például ha egy teszt-sorra
,
standardizált érték, akkor
,
,
összegük
;
az intercept hozzáadásával kapjuk a logitot. Ez a felbontás additív,
ezért alkalmas arra, hogy elmondjuk: „ez a rendelés főleg azért kapott
alacsony késési valószínűséget, mert
a referencia alatt van”.
Értelmezés. Tegyük fel, hogy egy futtatásban , , és a PI éppen ellentétes: romlása , -é . Fogalmazd meg egy mondatban, mit mond a koefficiens, és miért nem ellentmondás a PI.
Implementálás kézi kontrollal. Egy standardizált térben becsült modell paraméterei , , . Számítsd ki rögzítése mellett a értéket az rács minden pontján, és rajzold fel kézzel az így kapott egyéni görbét. Ez épp egy ICE-görbe.
Hibadiagnózis. Egy kolléga a permutációs fontosságot a train-adaton számolta, kiválasztotta a legnagyobb PI-jű változókat, majd ugyanazon a tesztadaton jelentette a jóságot, amelyen a végső AUC-t is nézte. Nevezd meg a két hibát, és mondd meg, hogyan helyeznéd a szelekciót a modellértékelési ciklusba a Feature-szelekció és magas dimenzió és Küszöb, kalibráció és ritka esemény szabályai szerint.
Megváltoztatott feltétel. Adj a demóhoz egy
zajváltozót: x3 = rng.normal(0.0, 1.0, n), és tanítsd újra
a pipeline-t. Milyen értéket vársz
koefficiensére és PI-jére? Miért nem elegendő egyetlen pontbecslés annak
eldöntésére, hogy
valóban haszontalan? Hogyan módosítanád az értékelést a
döntéshez?
A azt jelenti, hogy egy szórásnyi növelése átlagosan log odds növekedést ad, ha rögzített. A PI nem ellentmondás, mert más kérdésre válaszol: a permutáció során elrontása okozhat nagyobb romlást akkor is, ha az együtthatója kisebb, mert hordozhatja a közös jel nagy részét, vagy mert az AUC nem logit-skálán mér, és a küszöb környéki predikciók érzékenyebbek.
Az ICE-görbe pontjai , ahol . A számolt értékek: -re , ; -re , ; -ra , ; -re , ; -re , . A görbe tehát a és közötti tartományban a telítődő logisztikus alakot követi, ahol a rögzített az eltolást adja. A feladatban közölt együtthatók szemléltető bemenetek; a saját futtatásnál a kapott becslésekkel kell újraszámolni.
Az első hiba: a train-adaton mért PI optimista lehet a túlillesztés miatt, és a modell általánosító érzékenységét nem méri. A második hiba: a tesztadatot végső értékelés előtt használták fel válogatásra, ezért a jelentett AUC már nem érintetlen teszt; a tesztet csak egyszer, a véglegesített pipeline értékelésére szabad használni. Helyes ciklus: a feature-szelekció a belső train részen belül, például beágyazott validációval vagy a tanító foldokon belül számolt PI-vel történjen; a végső teszt csak a befagyasztott pipeline-ra kerül.
Az
koefficiense várhatóan nullához közeli, PI-je pedig
körüli, mert a generáló folyamat nem használja. Egyetlen pontbecslés nem
elegendő, mert a véletlen permutációk és a mintavételi zaj pozitív PI-t
is adhat zajváltozónak. A döntéshez nézd a
pi.importances_std értékét, növeld az
n_repeats számát, és hasonlítsd a fontosságot
nullfeature-re vagy a negatív tartományhoz: ha a PI nulla körül
szóródik, a változót nem érdemes megtartani.
A leggyakoribb félreértés: „a fontos prediktor egyben jó beavatkozási
cél”. A PI vagy a PDP a modell asszociációs viselkedését írja le, nem a
világbeli oksági hatást. Például egy kampánymodellben az
app_letoltes erős prediktora lehet a vásárlásnak, de a
letöltés kikényszerítése nem feltétlenül növeli a vásárlást, mert a
letöltés és a vásárlás közös oka lehet az érdeklődés. A korreláció és a
regresszió az együttes eloszlásból tanul (Esemény,
feltételes valószínűség és Bayes); a beavatkozás hatásához
randomizált kísérlet vagy explicit oksági elemzés kell (Randomizálás és kísérleti protokoll, Kísérlet eredményének tudományos közlése). A jelen
szintetikus demóban ismerjük a generáló paramétereket, de a becsült
magyarázat akkor is a modellről szól, nem automatikusan a generáló
folyamatról.
Önellenőrzés: meg tudod-e nevezni, mi a magyarázandó modell és mi az állítás egysége? Tudod-e, mi a PI mértékegysége és mit sért a permutáció korrelált feature-öknél? El tudod-e mondani, miért nem azonos a PDP az oksági beavatkozási görbével? Ha a lokális hozzájárulások összege nem adja vissza a logitot, hol keresnéd a hibát?
A regressziós koefficiens feltételes log odds meredekség; a permutációs fontosság a modell és scoring közös romlása, amely korrelált feature-öknél alul- vagy felülbecsülhet, mert a permutáció megsérti az együttes eloszlást. A PDP átlagos predikciós görbe, az ICE egyedi görbéket mutat, és az átlag elfedheti a heterogenitást. A lokális magyarázat egyetlen sor additív felbontása. Egyik eszköz sem oksági bizonyíték. Következő alkalmazás: a Kalibrált valószínűség és predikciós bizonytalanság kalibrált valószínűség és predikciós bizonytalanság, ahol a magyarázatokat a modell megbízhatóságával vetjük össze.