Pułapka zmiennych dummy – błąd, który psuje Twój model AI
Źródło: Link
Źródło: Link
Szkolenia, warsztaty i wdrożenia AI. Dopasowane do Twojego zespołu.
Budujesz model AI, który ma przewidywać ceny mieszkań. Masz dane: lokalizacja (Warszawa, Kraków, Gdańsk), liczba pokoi, metraż. Problem? Algorytm nie rozumie słów. Musisz zamienić "Warszawa" na liczby.
I tu wchodzi pułapka, o której mało kto mówi na początku.
Większość algorytmów uczenia maszynowego to matematyczne maszyny. Regresja liniowa, sieci neuronowe, drzewa decyzyjne – wszystkie operują na liczbach. Podasz im "Warszawa" – dostaną błąd.
Rozwiązanie? Zamienić kategorie na zmienne binarne. Zamiast jednej kolumny "Miasto" tworzysz trzy:
Mieszkanie w Warszawie? Warszawa=1, reszta=0. To się nazywa kodowanie dummy (ang. dummy encoding) lub one-hot encoding – jakby każda kategoria dostawała własną flagę.
Brzmi logicznie.
I tu zaczyna się problem.
Załóżmy, że masz te trzy zmienne: Warszawa, Kraków, Gdańsk. Patrzysz na wiersz danych:
Skąd wiesz, że to Gdańsk? Bo dwie pozostałe są zerem. Teraz odwrotnie:
Nie musisz już patrzeć na Gdańsk – wiesz, że to musi być 1. Informacja jest redundantna. Jedna zmienna jest całkowicie przewidywalna na podstawie pozostałych.
To się nazywa współliniowość (ang. multicollinearity).
Dla algorytmów regresji to katastrofa.
Regresja liniowa próbuje znaleźć wagi dla każdej zmiennej. "Jak bardzo Warszawa wpływa na cenę? A Kraków?" Problem w tym, że gdy zmienne są współliniowe, algorytm nie potrafi rozdzielić ich wpływu.
Matematycznie: macierz staje się osobliwa (nieodwracalna). Praktycznie: dostajesz błędy, niestabilne współczynniki lub wyniki bez sensu.
Przykład: model mówi, że mieszkanie w Warszawie kosztuje +500 tys. zł, ale w Krakowie -500 tys. zł. Liczby się kompensują, ale nic nie znaczą.
Zasada jest prosta: jeśli masz N kategorii, stwórz N-1 zmiennych dummy.
Trzy miasta? Dwie zmienne. Pięć kolorów? Cztery zmienne.
Wracamy do przykładu:
Gdańsk staje się kategorią referencyjną (ang. reference category). Gdy obie zmienne są zerem – wiesz, że to Gdańsk. Informacja jest zachowana, współliniowości nie ma.
Teraz model może powiedzieć: "Mieszkanie w Warszawie kosztuje +300 tys. zł w porównaniu do Gdańska".
To ma sens.
Technicznie – dowolna. Matematycznie nie ma różnicy.
Praktycznie? Wybierz tę, która jest:
To ułatwia interpretację wyników.
Większość bibliotek do ML robi to automatycznie. Warto wiedzieć, co się dzieje pod maską.
Funkcja pd.get_dummies() ma parametr drop_first=True:
import pandas as pd
Df = pd.DataFrame({'miasto': ['Warszawa', 'Kraków', 'Gdańsk', 'Warszawa']})
Df_encoded = pd.get_dummies(df, columns=['miasto'], drop_first=True)
Wynik: dwie kolumny zamiast trzech. Pierwsza kategoria (alfabetycznie) zostaje pominięta.
Domyślnie R robi to sam przy tworzeniu modeli:
model <- lm(cena ~ miasto, data = df)
Pierwsza kategoria (alfabetycznie lub według poziomów faktora) staje się referencją.
OneHotEncoder ma parametr drop='first':
from sklearn.preprocessing import OneHotEncoder
Encoder = OneHotEncoder(drop='first', sparse=False)
X_encoded = encoder.fit_transform(X)
Bez tego dostajesz pełny zestaw zmiennych – i potencjalną pułapkę.
Nie wszystkie algorytmy są wrażliwe na współliniowość.
Drzewa decyzyjne (i lasy losowe, gradient boosting) radzą sobie bez problemu. Nie liczą współczynników – dzielą dane na podstawie progów. Dla nich redundantna zmienna to po prostu ignorowany szum.
Sieci neuronowe też są odporne – regularyzacja i dropout radzą sobie z nadmiarem zmiennych.
Problem dotyczy głównie:
Jeśli używasz XGBoost do klasyfikacji – możesz zostawić wszystkie zmienne. Ale jeśli budujesz model regresji i chcesz interpretować współczynniki – musisz uważać.
Pułapka zmiennych dummy to nie błąd w danych – to błąd w sposobie ich kodowania.
Jedna zmienna za dużo i Twój model przestaje rozumieć, co wpływa na wynik.
Zasada: N kategorii = N-1 zmiennych dummy. Jedna zostaje za drzwiami jako punkt odniesienia.
Większość narzędzi robi to za Ciebie – ale tylko jeśli wiesz, gdzie szukać odpowiedniego parametru.
Przeczytaj też:
Podoba Ci się ten artykuł?
Co piątek wysyłam podsumowanie najlepszych artykułów tygodnia. Zapisz się!
90 minut praktycznej wiedzy o AI. Pokaze Ci krok po kroku, jak zaczac oszczedzac 10 godzin tygodniowo dzieki sztucznej inteligencji.
Zapisz sie na webinar