Egy egyszerű projektbemutató az általánosított lineáris modellek Pythonban való illesztésében

Bevezetés

Annak ellenére, hogy számos cikket írtam a témában, és a biztosítási ágazatban dolgozom, valójában soha nem építettem be egy Generalized Linear Model (GLM)-et a semmiből.

Megdöbbentő tudom.

Úgyhogy úgy döntöttem, bontogatom a szárnyaimat, és megvalósítok egy kis projektet, ahol minden elméleti tudásomat a gyakorlatban is kamatoztathatom!

Ebben a cikkben egy egyszerű projekten szeretném végigvezetni Önt a GLM-ek segítségével a New York-i kerékpáros átkelőhelyek mennyiségének modellezésére. Röviden kitérünk a GLM-ek mögött meghúzódó főbb technikai részletekre és használatuk motivációira is.

A projekthez felhasznált adatok a New York-i Közlekedési Minisztériumtól származnak, és itt érhetők el a Kaggle-en CC0-licenccel. Kaggle ezt az adatkészletet a NYC Open Data-ból szerezte be, amelyet itt talál.

Az általánosított lineáris modellek áttekintése

A teljesség kedvéért ebben a bejegyzésben a GLM-ek mögött meghúzódó főbb fogalmakat tárgyalom. A mélyebb megértés érdekében azonban erősen ajánlom, hogy tekintse meg korábbi cikkeimet, amelyek igazán mélyrehatóan belemerülnek a technikai részletekbe:



«Poisson-regresszió és általánosított lineáris modellek
A Poisson-regresszió és az általánosított lineáris modellek elméleti bevezetésetowardsdatascience.com





«A logisztikai regresszió lényege
A logisztikai regresszió eredetének magyarázata általánosított lineáris modellekkeltowardsdatascience.com



Motiváció

A „Általános lineáris modellek” szó szerint „általánosítják” a „Lineáris regressziót” egy nem normál célváltozóra.

Például itt modellezni fogjuk a kerékpáros átkelőhelyek mennyiségét New Yorkban. Ha ezt lineáris regressziós problémaként modelleznénk, akkor azt feltételeznénk, hogy a kerékpárok száma a tulajdonságainkhoz képest «normál eloszlást) követne.

Ezzel két probléma van:

  • A normál eloszlás folyamatos, míg a kerékpárok száma diszkrét.
  • A normál eloszlás lehet negatív, de a kerékpárok száma pozitív.

Ezért GLM-eket használunk a rendszeres lineáris regresszió ezen problémáinak és korlátainak leküzdésére.

Matematika

A lineáris regresszió általános képlete:

Ahol X a jellemzők, a β pedig az együtthatók strong>, ahol a β_0 az elfogó és az E[Y | X] az Y várható értéke (átlaga) adataink alapján X.

Ahhoz, hogy ezt a Lineáris regressziós képletet nem normál eloszlásokra alakítsuk át, csatolunk valami úgynevezett link függvényt, g():

A link funkció szó szerint „összekapcsolja” a lineáris kombinációs bemenetet a kívánt céleloszláshoz.

A link függvény empirikusan vagy matematikailag megtalálható minden eloszláshoz. A fent hivatkozott cikkekben végigmegyek néhány disztribúció hivatkozási függvényeinek származtatásán.

Nem minden terjesztésre vonatkozik a GLM esernyője. Az eloszlásoknak az exponenciális család részét kell képezniük. Azonban a legtöbb gyakori eloszlás: Gamma, Poisson, Binomial és Bernoulli mind ennek a családnak a részei.

A normál eloszlás (lineáris regresszió) kapcsolatfüggvényét "identitás"-nak nevezik.

Poisson-regresszió

Kerékpárunk térfogatának modellezéséhez aPoisson-eloszlást fogjuk használni. Ez az eloszlás azt írja le, hogy mekkora valószínűséggel fordul elő bizonyos számú esemény egy adott időkereten belül, átlagos előfordulási arány mellett.

Ha többet szeretne megtudni a Poisson disztribúcióról, tekintse meg az erről szóló cikkemet "itt".

A Poisson-regresszió esetén a linkfüggvény a természetes napló:

Amint láthatja, a kimenetünk most mindig pozitív lesz, mivel az exponenciálist használjuk. Ez azt jelenti, hogy elkerüljük az esetleges nem értelmes eredményeket, ellentétben azzal, ha a lineáris regressziót használjuk, ahol a kimenet negatív lehetett.

Ismétlem, nem végeztem teljes alapos elemzést a GLM-ekről, mivel az kimerítő lenne, és korábban már foglalkoztam ezekkel a témákkal. Ha többet szeretne megtudni a GLM-ekről, feltétlenül tekintse meg a fent hivatkozott cikkeimet vagy az általam megadott hiperhivatkozásokat!

Modellező Walk Through

Csomagok

Először letöltjük az alap Data Science csomagokat és a statsmodels csomagot is a GLM modellezéshez.

import pandas as pd
import matplotlib.pyplot as plt
import numpy as np
import seaborn as sns
import statsmodels.api as sm
from statsmodels.formula.api import glm

Adat

Olvassa be és nyomtassa ki az adatokat:

data = pd.read_csv('nyc-east-river-bicycle-counts.csv')
data.head()

Itt láthatjuk a négy híd kerékpáros mennyiségét: Brooklyn, Manhattan, Williamsburg és Queensboro, a „Total” funkció alatti összegükkel.

A „Dátum” és az index oszlopai duplikálódnak, ezért tisztázzuk:

data.drop(['Unnamed: 0', 'Day'], axis=1, inplace=True)
data.head()

Figyelje meg, hogy a hőmérsékletnek két oszlopa van: magas és alacsony. Legyen ez egyetlen oszlop az átlaguk alapján:

data['Mean_Temp'] = (data['High Temp (°F)'] + data['Low Temp (°F)'])/2
data.head()

A csapadékoszlop tartalmaz néhány karakterláncot, ezért ezeket távolítsuk el:

data['Precipitation'].replace(to_replace='0.47 (S)', value=0.47, inplace=True)
data['Precipitation'].replace(to_replace='T', value=0, inplace=True)
data['Precipitation'] = data['Precipitation'].astype(np.float16)
data.head()

Vizualizációk

A kerékpár térfogatát befolyásoló két fő független változó a hőmérséklet és a csapadék. Ezt a két változót az „Összesen” célváltozóhoz viszonyíthatjuk:

fig = plt.figure(figsize=(22,7))
ax = fig.add_subplot(121)
ax.scatter(data['Mean_Temp'], data['Total'], linewidth=4, color='blue')
ax.tick_params(axis="x", labelsize=22) 
ax.tick_params(axis="y", labelsize=22)
ax.set_xlabel('Mean Temperature', fontsize=22)
ax.set_ylabel('Total Bikes', fontsize=22)
ax2 = fig.add_subplot(122)
ax2.scatter(data['Precipitation'], data['Total'], linewidth=4, color='red')
ax2.tick_params(axis="x", labelsize=22) 
ax2.tick_params(axis="y", labelsize=22)
ax2.set_xlabel('Precipitation', fontsize=22)
ax2.set_ylabel('Total Bikes', fontsize=22)

Modellezés

Most már felállíthatunk egy modellt a „Teljes” előrejelzésére az átlaghőmérséklet funkció segítségével a statsmodel csomagon keresztül. Mivel ez a kapcsolat Poisson, a természetes naplókapcsolat függvényt fogjuk használni:

model = glm('Total ~ Mean_Temp', data = data[['Total','Mean_Temp']], family = sm.families.Poisson())
results = model.fit()
results.summary()

AzR-stílusú formulát használtuk a GLM-hez, mivel ez jobb teljesítményt biztosít a háttérben.

Elemzés

A fenti kimenetből azt látjuk, hogy az átlagos hőmérséklet együtthatója 0,0263, a metszéspont pedig 8,1461.

A fent bemutatott Poisson-regressziós képlet segítségével az egyenes egyenlete a következő:

x = np.linspace(data['Mean_Temp'].min(),data['Mean_Temp'].max(),100)
y = np.exp(x*results.params[1] + results.params[0])
plt.figure(figsize=(10,6))
plt.scatter(data['Mean_Temp'], data['Total'], linewidth=3, color='blue')
plt.plot(x, y, label = 'Poisson Regression', color='red', linewidth=3)
plt.xticks(fontsize=18)
plt.yticks(fontsize=18)
plt.xlabel('Mean Temperature', fontsize=18)
plt.ylabel('Total Count', fontsize=18 )
plt.legend(fontsize=18)
plt.show()

Eureka! GLM-et szereltünk fel!

Az érdeklődő olvasó számára a statisztikai modellek által a GLM-hez illeszkedő algoritmust "iteratívan újrasúlyozott legkisebb négyzetek"nek nevezik.

A teljes kód/jegyzetfüzet elérhető a GitHubon itt:



Következtetés

Ebben a cikkben röviden megvitattuk a lineáris regresszió hiányosságait, és azt, hogy a GLM-ek hogyan oldják meg ezt a problémát azáltal, hogy szélesebb és általánosabb keretet biztosítanak a regressziós modellekhez. Ezután egy alap Poisson-regressziós egyenest illesztünk, hogy modellezzük a New York-i kerékpárok számát a napi átlaghőmérséklet függvényében.

Kapcsolódj Velem!

  • "Ha korlátlan számú történetet szeretne olvasni a Mediumon, feltétlenül regisztráljon itt!» 💜
  • "Hogy értesüljön, amikor e-mail-értesítéseket teszek közzé itt!» 😀
  • "LinkedIn"👔
  • "Twitter"🖊
  • "GitHub"🖥
  • "Kaggle"🏅

(Az összes hangulatjelet az OpenMoji – a nyílt forráskódú emoji- és ikonprojekt – tervezte. Licenc: CC BY-SA 4.0)