Negatív binomiális regresszió
1. Matematikai háttér: Negatív binomiális regresszióMiért negatív binomiális regresszió?A negatív binomiális regresszió olyan esetekben hasznos, amikor a célváltozó (dependens változó) diszkrét, nemnegatív egész szám (pl. események száma, mint hibák száma, ügyfélpanaszok száma), és a Poisson-regresszió nem megfelelő, mert az adatok túlzott szórást (overdispersion) mutatnak, vagyis a variancia nagyobb, mint a várható érték.Matematikai alapok
2. Proof-of-Concept Python implementációAz alábbi kód egy egyszerű negatív binomiális regressziós modellt illeszt egy szintetikus adathalmazra, és validálja az eredményeket.3. Kód magyarázata
- Negatív binomiális eloszlás:
- A negatív binomiális eloszlás modellezi, hány sikertelen próbálkozás történik egy adott számú siker elérése előtt, vagy alternatív módon, hány esemény történik egy adott idő alatt, ha a szórás nagyobb, mint a Poisson-eloszlásé.
- Valószínűségi sűrűségfüggvény (PMF):ahol:
P(Y = y) = \binom{y + r - 1}{y} \cdot p^r \cdot (1 - p)^y
- ( Y ): a célváltozó (pl. események száma),
- ( r ): a "sikerek" száma (diszperziós paraméter),
- ( p ): a siker valószínűsége,
- ( y ): a megfigyelt érték.
- Alternatív parametrizációban a várható érték () és a diszperziós paraméter (
\mu
) használatos:\alpha
Itt\text{E}(Y) = \mu, \quad \text{Var}(Y) = \mu + \alpha \mu^2
szabályozza az overdispersion mértékét. Ha\alpha
, a modell Poisson-regresszióvá redukálódik.\alpha = 0
- Regresszió keretrendszere:
- A negatív binomiális regresszió a célváltozó várható értékét () az magyarázó változókhoz köti egy log-link függvény segítségével:
\mu
ahol:\log(\mu_i) = \beta_0 + \beta_1 x_{i1} + \beta_2 x_{i2} + \dots + \beta_k x_{ik}
- : az ( i )-edik megfigyelés várható értéke,
\mu_i
- : a regressziós együtthatók,
\beta_0, \beta_1, \dots, \beta_k
- : az magyarázó változók.
x_{i1}, x_{i2}, \dots, x_{ik}
- A link függvény biztosítja, hogy .
\mu_i > 0
- A negatív binomiális regresszió a célváltozó várható értékét (
- Diszperziós paraméter ():
\alpha
- Az paraméter szabályozza a variancia és a várható érték közötti kapcsolatot.
\alpha
- Nagyobb nagyobb overdispersion-t jelez.
\alpha
- A modell becslése során az -t is becsülik, általában maximum likelihood módszerrel.
\alpha
- Az
- Maximum likelihood becslés:
- A negatív binomiális regresszió paramétereit (,
\beta
) maximum likelihood becsléssel határozzák meg, optimalizálva a valószínűségi függvényt:\alpha
ahol ( P ) a negatív binomiális eloszlás sűrűségfüggvénye.L(\beta, \alpha) = \prod_{i=1}^n P(Y_i = y_i | X_i, \beta, \alpha)
- A negatív binomiális regresszió paramétereit (
- Link függvény: Általában log-linket használnak, de más link függvények (pl. identity, sqrt) is lehetségesek, bár ritkák.
- Diszperziós paraméter (): A statsmodels automatikusan becsüli, de manuálisan is állítható, ha specifikus overdispersion-t akarsz modellezni.
\alpha
- Regularizáció: Ha túl sok magyarázó változód van, L1/L2 regularizációt lehet alkalmazni (bár a statsmodels alapértelmezett NB modellje ezt nem támogatja közvetlenül).
- Konvergencia: Az optimalizációs algoritmus (pl. Newton-Raphson) iterációinak száma és konvergencia kritériumai finomhangolhatók.
2. Proof-of-Concept Python implementációAz alábbi kód egy egyszerű negatív binomiális regressziós modellt illeszt egy szintetikus adathalmazra, és validálja az eredményeket.
python
import numpy as np
import pandas as pd
import statsmodels.api as sm
import statsmodels.formula.api as smf
from sklearn.metrics import mean_squared_error
import matplotlib.pyplot as plt
# 1. Szintetikus adathalmaz generálása
np.random.seed(42)
n = 100
X1 = np.random.uniform(0, 10, n) # Folytonos magyarázó változó
X2 = np.random.binomial(1, 0.5, n) # Bináris magyarázó változó
mu = np.exp(1.5 + 0.3 * X1 + 0.5 * X2) # Log-link függvény
alpha = 0.5 # Diszperziós paraméter
y = np.random.negative_binomial(mu / alpha, 1 / (1 + alpha)) # Negatív binomiális eloszlás
# Adatkeret létrehozása
data = pd.DataFrame({'y': y, 'X1': X1, 'X2': X2})
# 2. Negatív binomiális regresszió illesztése
model = smf.negativebinomial('y ~ X1 + X2', data=data).fit()
# 3. Eredmények kiírása
print("Modell összefoglaló:")
print(model.summary())
# 4. Predikciók és validáció
y_pred = model.predict(data[['X1', 'X2']])
mse = mean_squared_error(data['y'], y_pred)
print(f"\nMean Squared Error: {mse:.4f}")
# Diszperziós paraméter kiírása
print(f"Estimált diszperziós paraméter (alpha): {model.params['alpha']:.4f}")
# 5. Vizualizáció
plt.scatter(data['X1'], data['y'], label='Megfigyelt', alpha=0.5)
plt.scatter(data['X1'], y_pred, label='Predikált', alpha=0.5)
plt.xlabel('X1')
plt.ylabel('Y')
plt.title('Negatív binomiális regresszió predikciói')
plt.legend()
plt.show()
- Adathalmaz generálása:
- Szintetikus adatokat hozunk létre, ahol a célváltozó (( y )) negatív binomiális eloszlást követ.
- ( X1 ): folytonos magyarázó változó (0-10 között).
- ( X2 ): bináris magyarázó változó (0 vagy 1).
- A várható érték () a log-link függvényből származik:
\mu
.\mu = \exp(\beta_0 + \beta_1 X1 + \beta_2 X2)
- Modell illesztése:
- A statsmodels.formula.api.negativebinomial függvényt használjuk a negatív binomiális regresszióhoz.
- A modell automatikusan becsüli az -t (diszperziós paraméter).
\alpha
- Validáció:
- A modell predikcióit összehasonlítjuk a megfigyelt értékekkel a Mean Squared Error (MSE) segítségével.
- A diszperziós paramétert külön kiírjuk, hogy lásd az overdispersion mértékét.
- Vizualizáció:
- A megfigyelt és predikált értékeket ábrázoljuk egy szórásdiagramon, hogy vizuálisan is validálható legyen a modell.
- Modell összefoglaló: A model.summary() kiírja az együtthatókat (), a p-értékeket, és az
\beta_0, \beta_1, \beta_2
-t.\alpha
- MSE: Az alacsony MSE jó illeszkedést jelez.
- Vizualizáció: A szórásdiagram segít ellenőrizni, hogy a predikciók követik-e a megfigyelt adatokat.
- Diszperziós paraméter (): A statsmodels automatikusan becsüli, de manuálisan is megadható a negativebinomial függvényben a loglike_method és alpha paraméterekkel (pl. alpha=0.5).
\alpha
- Link függvény: A statsmodels alapértelmezett log-linkjét másra cserélheted egyedi implementációval, de ez ritka.
- Iterációk és konvergencia: A fit metódus maxiter és tol paramétereivel szabályozhatod az optimalizációt.
- Adat-előfeldolgozás: Ha az adataid zajosak, érdemes skálázni vagy transzformálni az magyarázó változókat.
- Összehasonlítás lineáris regresszióval:
- Futtass egy lineáris regressziót ugyanazon az adathalmazon (smf.ols), és hasonlítsd össze az MSE-t. A negatív binomiális regresszió jobb eredményt ad, ha az adatok overdispersed-ek.
- Goodness-of-fit:
- Ellenőrizd a deviance-t és a log-likelihood-et a model.summary()-ból.
- Reziduális elemzés:
- Vizsgáld meg a reziduálisokat (model.resid) a modell illeszkedésének validálására.
Megjegyzések
Megjegyzés küldése