ML Atlas

02 · Dane · 4 min czytania · aktualizacja

Czym jest inżynieria cech (feature engineering) i dlaczego poprawia modele?

W skrócie

Inżynieria cech to tworzenie nowych zmiennych z wiedzy o problemie: proporcji, progów, interakcji. Daje prostemu modelowi kształty, których sam nie zbuduje.

Co to jest

Inżynieria cech (ang. feature engineering) to przekształcanie surowych danych w zmienne, z których model łatwiej się uczy: łączenie kolumn w proporcje, wyciąganie składników z dat i tekstów, tworzenie progów, interakcji i agregatów. To moment, w którym wiedza o dziedzinie trafia do modelu.

Model widzi świat wyłącznie przez cechy, które mu podamy. Jeśli prawdziwa zależność jest prosta w dobrze dobranych cechach, a skomplikowana w surowych, to przekształcenie cech zastępuje modelowi wiele pracy — albo daje mu możliwość, której sam nie ma.

Intuicja: przewidując ryzyko kredytowe, sam dochód i sama rata mówią mniej niż ich iloraz. Bank od dawna liczy „ratę jako procent dochodu” — to jest właśnie cecha zbudowana z wiedzy.

Mechanizm — dlaczego tak działa

Każdy model ma ograniczony zestaw kształtów, które potrafi wyrazić. Regresja liniowa i logistyczna widzą tylko sumy ważone cech: wpływ każdej cechy jest monotoniczny i nie zależy od wartości innych cech. Jeśli ryzyko rośnie, potem maleje (zależność w kształcie litery U), albo efekt jednej cechy zależy od drugiej (interakcja), model liniowy tego nie zobaczy. Nowa cecha — próg, kwadrat, iloczyn — przenosi tę nieliniowość do danych, a model nadal pozostaje prosty i interpretowalny.

Drzewa i sieci neuronowe teoretycznie same budują nieliniowości, ale płacą za to danymi. Drzewo, by odtworzyć iloraz dwóch zmiennych, potrzebuje wielu podziałów „schodkowych”, a każdy podział wymaga przykładów. Dobrze dobrana cecha skraca tę drogę i zmniejsza ryzyko przeuczenia na małych zbiorach. Dlatego w konkursach na danych tabelarycznych inżynieria cech często daje więcej niż zmiana algorytmu.

Typowe rodziny cech: transformacje (logarytm dla zmiennych skośnych, pierwiastek), dyskretyzacja (przedziały wieku), interakcje (iloczyny, różnice, ilorazy), agregaty (średnia wydatków klienta z ostatnich 30 dni), cechy z dat (dzień tygodnia, czas od zdarzenia), cechy z tekstu (tytuł w imieniu, długość opisu), wskaźniki braków.

Ograniczenia są dwa. Po pierwsze, każda nowa cecha to okazja do przeuczenia, jeśli wybieramy ją, patrząc na wynik walidacji wiele razy — szczególnie przy małych zbiorach. Po drugie, łatwo o wyciek danych: agregat liczony na całym zbiorze, cecha korzystająca z informacji z przyszłości albo średnia celu w grupie bez walidacji poza foldem. Uczenie głębokie zmniejszyło rolę ręcznych cech dla obrazów, dźwięku i tekstu, ale w danych tabelarycznych pozostają one podstawowym narzędziem.

Na przykładzie

Regresja logistyczna na Titanicu z sześcioma surowymi cechami (klasa, płeć, wiek z imputacją medianą, sibsp, parch, opłata) osiąga w 10-krotnej walidacji krzyżowej 79,2% trafności. Dodanie „wielkości rodziny” (sibsp + parch + 1) jako zwykłej liczby nie zmienia nic — nadal 79,2%. Dlaczego? Zależność nie jest monotoniczna: samotni pasażerowie przeżyli w 30,4%, rodziny 2–4-osobowe w 57,9%, a rodziny pięcio- i więcej osobowe tylko w 16,1%. Jedna waga liniowa tego nie opisze.

Trzy cechy zbudowane z wiedzy o katastrofie zmieniają wynik. Flaga „duża rodzina” (5 i więcej osób), flaga „dziecko” (kolumna who, wyprowadzona z tytułów w nazwiskach; dzieci przeżyły w 59,0%, dorośli mężczyźni w 16,4%) oraz iloczyn płeć × klasa razem podnoszą trafność do 82,5%. Ten sam algorytm, te same dane, tylko podane w kształcie, który pasuje do mechanizmu „najpierw kobiety i dzieci, a lepsze klasy bliżej szalup”.

Dane: Titanic

W praktyce

  • W pandas: df.assign(...), pd.cut (przedziały), np.log1p, df.groupby(...).transform('mean') dla agregatów.
  • W scikit-learn: FunctionTransformer, PolynomialFeatures(interaction_only=True), KBinsDiscretizer, SplineTransformer; wszystko w ColumnTransformer i Pipeline.
  • Każdą cechę sprawdzaj walidacją krzyżową, a nie wynikiem na zbiorze testowym.
  • Agregaty i statystyki celu licz tylko na danych treningowych lub poza foldem.
  • Prowadź listę cech i hipotez — inaczej trudno odróżnić prawdziwy zysk od szczęśliwego losowania.
  • Typowy błąd: cecha, która nie będzie dostępna w chwili przewidywania (np. „liczba dni hospitalizacji” przy predykcji przy przyjęciu).

Najczęstsze pytania

Czy sieci neuronowe nie robią inżynierii cech same?
W dużej mierze tak dla obrazów, dźwięku i tekstu, gdzie uczą się reprezentacji z milionów przykładów. Na małych danych tabelarycznych dobrze dobrane ręczne cechy wciąż często wygrywają, bo zastępują dane, których brakuje.
Skąd brać pomysły na cechy?
Z mechanizmu: co w rzeczywistości powoduje wynik? Pomagają rozmowy z ekspertami dziedzinowymi, EDA (gdzie zależność jest nieliniowa lub zależy od grupy) oraz analiza błędów modelu — na jakich przypadkach się myli.
Czy dodawanie wielu cech może zaszkodzić?
Tak. Każda cecha bez informacji to dodatkowy szum, a przy małej liczbie przykładów rośnie ryzyko przeuczenia i fałszywych odkryć. Stąd potrzeba regularyzacji i selekcji cech.

Źródła

  • Zheng A., Casari A. „Feature Engineering for Machine Learning”. O’Reilly, 2018.
  • Kuhn M., Johnson K. „Feature Engineering and Selection: A Practical Approach for Predictive Models”. CRC Press, 2019.
  • Géron A. „Hands-On Machine Learning with Scikit-Learn, Keras, and TensorFlow”, 3rd ed., 2022, rozdz. 2.
  • Kaufman S., Rosset S., Perlich C. (2012). „Leakage in data mining: Formulation, detection, and avoidance”. ACM Transactions on Knowledge Discovery from Data, 6(4).

Zobacz też