0Pricing
Learn AI with Python · Lekcja

Kodowanie docelowe i zaawansowana obsługa danych kategorialnych

Kodowanie docelowe, kodowanie częstości, kodowanie binarne i embeddingi dla kolumn o dużej liczbie kategorii.

Kodowanie docelowe i zaawansowana obsługa danych kategorialnych to bezpłatna lekcja Learn AI with Python na CoddyKit. To lekcja 3 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej Learn AI with Python, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs Learn AI with Python zawiera 4 lekcji w sumie.

Problem kodowania zmiennych kategorialnych

Modele potrzebują liczb, a kategorie są tekstem. Kodowanie one-hot sprawdza się w przypadku niewielu kategorii, ale cechy o wysokiej kardynalności (tysiące miast, produktów) tworzą zbyt wiele kolumn.

Ograniczenia kodowania one-hot i etykiet

Kodowanie one-hot powoduje eksplozję wymiarowości. Zwykłe kodowanie etykiet wprowadza fałszywe uporządkowanie (miasto 5 nie jest większe od miasta 2). W przypadku danych o wysokiej kardynalności potrzebne są inteligentniejsze metody kodowania.

Czym jest kodowanie targetu

Kodowanie targetu zastępuje każdą kategorię średnią wartości docelowej dla tej kategorii. Miasto zostaje zastąpione średnim wskaźnikiem rezygnacji klientów z tego miasta — pojedynczą, użyteczną informacyjnie liczbą.

import pandas as pd

means = df.groupby("city")["target"].mean()
df["city_encoded"] = df["city"].map(means)

Ryzyko przeuczenia

Rzadkie kategorie, dla których istnieje niewiele wierszy, otrzymują skrajne średnie, co powoduje wyciek informacji o wartości docelowej i przeuczenie. Kategoria występująca tylko raz skopiowałaby dokładnie tę pojedynczą etykietę. Problem ten rozwiązuje się za pomocą wygładzania.

Wygładzanie oszacowania

Wygładzanie łączy średnią kategorii ze średnią globalną, nadając wagę liczbie próbek w kategorii. Rzadkie kategorie są przesuwane w stronę średniej globalnej, co zmniejsza wariancję.

import pandas as pd

global_mean = df["target"].mean()
agg = df.groupby("city")["target"].agg(["mean", "count"])
smoothing = 10
agg["enc"] = (agg["count"] * agg["mean"] + smoothing * global_mean) / (agg["count"] + smoothing)
df["city_enc"] = df["city"].map(agg["enc"])

Biblioteka category_encoders

Pakiet category_encoders implementuje te kodery za pomocą interfejsu API scikit-learn, dzięki czemu można je włączać do potoków i stosować w spójny sposób do zbiorów treningowych i testowych.

import category_encoders as ce

encoder = ce.TargetEncoder(cols=["city", "product"], smoothing=10)
X_enc = encoder.fit_transform(X_train, y_train)
X_test_enc = encoder.transform(X_test)

Unikanie wycieku w praktyce

Zawsze należy dopasowywać koder wyłącznie do danych treningowych, a następnie przekształcać dane walidacyjne/testowe. Jeszcze lepiej używać walidacji krzyżowej lub kodowania out-of-fold, aby każdy wiersz był kodowany na podstawie danych, które go nie zawierają.

import category_encoders as ce
from sklearn.pipeline import make_pipeline
from sklearn.linear_model import LogisticRegression

pipe = make_pipeline(
    ce.TargetEncoder(cols=["city"]),
    LogisticRegression(),
)
# fit inside CV to encode without leakage

Kodowanie binarne

BinaryEncoder przekształca kategorie w cyfry binarne, używając zaledwie log2(N) kolumn zamiast N. Jest to kompaktowy kompromis między kodowaniem one-hot a kodowaniem targetowym.

import category_encoders as ce

encoder = ce.BinaryEncoder(cols=["product_id"])
X_enc = encoder.fit_transform(X_train)
# 256 categories -> 8 binary columns

Inne przydatne kodery

category_encoders oferuje także CountEncoder (częstość występowania każdej kategorii), LeaveOneOutEncoder (średnia targetu z pominięciem bieżącego wiersza) oraz CatBoostEncoder (uporządkowane statystyki targetu).

import category_encoders as ce

count_enc = ce.CountEncoder(cols=["city"])
loo_enc = ce.LeaveOneOutEncoder(cols=["city"])

Obsługa wysokiej kardynalności

W przypadku bardzo wysokiej kardynalności kodowanie targetowe/licznościowe kompresuje dane do jednej kolumny, kodowanie binarne pozostaje kompaktowe, a grupowanie rzadkich kategorii w koszyku „other” zmniejsza szum. Wybór zależy od kardynalności i ryzyka wycieku.

import pandas as pd

freq = df["product"].value_counts()
rare = freq[freq < 20].index
df["product"] = df["product"].replace(rare, "other")

Wybór kodera

Niewiele kategorii: one-hot. Modele drzewiaste z wieloma kategoriami: kodowanie targetowe lub CatBoost. Potrzebna kompaktowość: kodowanie binarne. Zawsze należy chronić się przed wyciekiem, dopasowując koder wyłącznie do danych treningowych i stosując wygładzanie lub schematy out-of-fold.

Szybki test

Proszę sprawdzić swoją wiedzę na temat kodowania zmiennych kategorycznych.

Podsumowanie

Podsumowanie: Kodowanie targetowe zastępuje kategorię jej średnią targetu, używając wygładzania w celu ograniczenia wpływu rzadkich kategorii. Należy używać category_encoders (TargetEncoder, BinaryEncoder, CatBoost/LeaveOneOut) i dopasowywać koder wyłącznie do danych treningowych lub stosować kodowanie out-of-fold, aby uniknąć wycieku. Kompaktowe kodery obsługują cechy o wysokiej kardynalności, z którymi kodowanie one-hot sobie nie radzi.

Często zadawane pytania

Czy lekcja „Kodowanie docelowe i zaawansowana obsługa danych kategorialnych” jest bezpłatna?

Tak — pełny tekst „Kodowanie docelowe i zaawansowana obsługa danych kategorialnych” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu Learn AI with Python, przejdź na CoddyKit PRO. Kurs Learn AI with Python zawiera 4 lekcji w sumie.

Co nauczysz się w „Kodowanie docelowe i zaawansowana obsługa danych kategorialnych”?

Kodowanie docelowe, kodowanie częstości, kodowanie binarne i embeddingi dla kolumn o dużej liczbie kategorii. Ćwiczysz Learn AI with Python z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.

Czy potrzebuję doświadczenia, aby zacząć Learn AI with Python?

Nie wymagamy żadnego doświadczenia. Learn AI with Python w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 3 z 4.

Ile czasu zajmuje lekcja „Kodowanie docelowe i zaawansowana obsługa danych kategorialnych”?

Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.

Czy mogę pisać i uruchamiać kod w tej lekcji Learn AI with Python?

Tak. Każda lekcja Learn AI with Python zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.

Wszystkie lekcje w tym kursie

  1. Metody wyboru cech
  2. Tworzenie cech interakcyjnych i wielomianowych
  3. Kodowanie docelowe i zaawansowana obsługa danych kategorialnych
  4. Automatyczne tworzenie cech za pomocą Featuretools
← Powrót do Learn AI with Python