Míry kolinearity

Jiný přístup k identifikaci multikolinearity je pomocí faktoru inflace rozptylu. VIF udává procento inflace rozptylu pro koeficient každé proměnné. Počínaje hodnotou 1 (žádná kolinearita) znamená VIF v rozmezí 1-5 mírnou kolinearitu, zatímco hodnoty nad 5 znamenají vysokou kolinearitu. Mezi případy, kdy je vysoká hodnota VIF přijatelná, patří použití interakčních členů, polynomických členů nebo fiktivních proměnných (nominálních proměnných se třemi nebo více kategoriemi). Korelační matice umožňují identifikovat korelaci mezi dvojicemi proměnných, zatímco VIF umožňuje celkové posouzení multikolinearity. Níže je uvedena korelační matice pro většinu spojitých proměnných, aby se zdůraznily různé kolineární dvojice proměnných. VIF lze vypočítat pomocí balíčku statsmodels; níže uvedený blok kódu uvádí hodnoty VIF se zahrnutými (vlevo) a odstraněnými (vpravo) kolineárními proměnnými.

korelační matice pro spojité proměnné; Kendallův koeficient (obrázek podle autora)
# Setting the predictor variables
X_o = df_wdummy]
X_r1 = df_wdummy]#
from statsmodels.stats.outliers_influence import variance_inflation_factorvif = pd.Series()], index=X_o.columns,
name='vif_full')
vif_r = pd.Series()], index=X_r1.columns,
name='vif_collinear_rvmd')
pd.concat(, axis=1)

Hodnoty VIF pro predikční proměnné (obrázek podle autora)

Hodnoty VIF odpovídají korelační matici; například u dvojice proměnných NOX a INDUS je korelační koeficient vyšší než 0.5 (0,61) a příslušné hodnoty VIF jsou vyšší než 5. Odstranění kolineárních proměnných RAD a NOX zlepšilo hodnoty VIF. Vyřazení kolineárních proměnných pouze na základě nejvyšší hodnoty VIF není zaručenou cestou k sestavení nejvýkonnějšího modelu, jak je rozvedeno v následující části.

Sestavíme základní model vyřazením všech kolineárních proměnných identifikovaných v korelační matici (zobrazené výše), přičemž čekáme, až budou dále vyřazeny TAX a RAD.

# Baseline variables 
X_bl = df_wdummy]
y_bl = df_wdummy# Explore mitigating multi-collinearity
vif_bl = pd.Series()], index=X_bl.columns,
name='vif_bl')X_noTAX = X_bl.drop(,axis=1)
X_noRAD = X_bl.drop(,axis=1)
vif_noTAX = pd.Series()],
index=X_noTAX.columns, name='vif_noTAX')
vif_noRAD = pd.Series()],
index=X_noRAD.columns, name='vif_noRAD')
pd.concat(, axis=1)

Posouzení hodnot VIF predikčních proměnných v základním modelu (obrázek autora)

Přestože se zdá, že vypuštění proměnné TAX na základě VIF je lepší, obezřetným přístupem je kontrola prostřednictvím upravené metriky R-squared (upravená o počet prediktorů, metrika se zvyšuje pouze v případě, že další přidaná proměnná zlepšuje model více, než by se očekávalo náhodou).

# Without TAX
model = sm.OLS(y, sm.add_constant(X_noTAX)).fit()
print_model = model.summary()
print(print_model)

Souhrn metrik modelu (bez TAX) (obrázek autor)
# Without RAD
model = sm.OLS(y, sm.add_constant(X_noRAD)).fit()
print_model = model.summary()
print(print_model)

.

Souhrn modelových metrik (bez RAD) (obrázek podle autora)

Z vyššího upraveného R-čtverce, můžeme vyvodit, že model funguje lépe s vypuštěnou proměnnou RAD! Po vyřešení problému s multikolinearitou by dalším krokem mohlo být prozkoumání přidání interakčních členů k potenciálnímu zvýšení výkonnosti modelu.

.

Napsat komentář