Mierniki współliniowości

Innym podejściem do identyfikacji wieloliniowości jest współczynnik inflacji wariancji. VIF wskazuje procent wariancji zawyżonej dla współczynnika każdej zmiennej. Zaczynając od wartości 1 (brak współliniowości), VIF pomiędzy 1-5 wskazuje na umiarkowaną współliniowość, podczas gdy wartości powyżej 5 wskazują na wysoką współliniowość. Niektóre przypadki, w których wysoki VIF byłby dopuszczalny, obejmują użycie terminów interakcyjnych, terminów wielomianowych lub zmiennych dummy (zmiennych nominalnych z trzema lub więcej kategoriami). Macierze korelacji umożliwiają identyfikację korelacji między parami zmiennych, natomiast VIF umożliwia ogólną ocenę wieloliniowości. Poniżej przedstawiono macierz korelacji dla większości zmiennych ciągłych, aby podkreślić różne współliniowe pary zmiennych. VIF można obliczyć za pomocą pakietu statsmodels; poniższy blok kodu przedstawia wartości VIF z uwzględnionymi (po lewej) i usuniętymi (po prawej) zmiennymi współliniowymi.

macierz korelacji dla zmiennych ciągłych; Współczynnik Kendalla (obraz wg 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)

wartości VIF dla zmiennych predykcyjnych (obraz wg autora)

Wartości VIF odpowiadają macierzy korelacji; np. zmienna-para NOX i INDUS, współczynnik korelacji jest powyżej 0.5 (0,61), a odpowiednie wartości VIF są powyżej 5. Usunięcie współliniowych zmiennych RAD i NOX poprawiło wartości VIF. Usunięcie współliniowych zmiennych wyłącznie w oparciu o najwyższą wartość VIF nie jest gwarantowaną drogą do zbudowania najlepiej działającego modelu, co zostało omówione w następnej sekcji.

Budujemy model bazowy poprzez usunięcie wszystkich współliniowych zmiennych zidentyfikowanych w macierzy korelacji (przedstawionej powyżej), oczekując na usunięcie TAX i RAD w następnej kolejności.

# 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)

Ocena wartości VIF zmiennych predykcyjnych w modelu bazowym (zdjęcie autora)

Choć wydaje się, że upuszczenie zmiennej TAX na podstawie VIF jest lepsze, ostrożnym podejściem jest sprawdzenie za pomocą skorygowanej metryki R-squared (skorygowanej o liczbę predyktorów, metryka wzrasta tylko wtedy, gdy kolejna dodana zmienna poprawia model bardziej niż można by się spodziewać przez przypadek).

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

Podsumowanie metryk modeli (w/o TAX) (obraz autora)
# Without RAD
model = sm.OLS(y, sm.add_constant(X_noRAD)).fit()
print_model = model.summary()
print(print_model)

.

Summary of model metrics (w/o RAD) (image by author)

Z wyższej skorygowanej wartości R-squared, możemy wywnioskować, że model działa lepiej, gdy zmienna RAD została usunięta! Po rozwiązaniu problemu nieliniowości, następnym krokiem może być zbadanie możliwości dodania warunków interakcji, aby potencjalnie zwiększyć wydajność modelu.

.

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany.