Jednostka 5 / 11

Inżynieria cech: generowanie wariantów, kodowanie, skalowanie i unikanie wycieków

Zyski:

  • Możliwość tworzenia znaczących cech pochodnych w oparciu o wiedzę dziedzinową i kodowania kategorii kategorycznych za pomocą odpowiednich metod (one-hot, label, target)
  • Możliwość skalowania zmiennych numerycznych w zależności od typu modelu (standaryzacja, normalizacja) i unikania niepotrzebnego lub niepełnego skalowania
  • Możliwość uniknięcia wycieków funkcji poprzez uczenie się wszystkich transformacji po podziale treningu/testu i tylko na podstawie treningu

W uczeniu maszynowym istnieje stare powiedzenie: „Stosowane uczenie maszynowe to zasadniczo inżynieria funkcji”. Ponieważ sukces modelu często zależy od tego, jakie dane wejściowe wprowadzisz do modelu, a nie od wybranego algorytmu. Inżynieria cech to sztuka wytwarzania znaczących sygnałów z surowych danych, z których model może się uczyć. Sztuczna inteligencja jest na tym etapie bogatym źródłem pomysłów: gdy pytasz, „jakie funkcje można wyprodukować z tych danych”, podaje dziesiątki sugestii. Jednak niektóre z tych sugestii mogą być cenne, niektóre mogą być bezużyteczne, a jeszcze inne mogą być niebezpieczne (wyciek). Twoim zadaniem jest to uporządkować.

Dlaczego inżynieria funkcji

Surowe dane rzadko kiedy trafiają do modelu w najlepszej formie. O ile sama kolumna „data urodzenia” nie ma żadnego znaczenia, o tyle wygenerowana z niej wartość „wiek” jest mocnym sygnałem. Możesz wyodrębnić atrybuty takie jak „dzień tygodnia”, „dzień/noc”, „czy jest święto” ze „znacznika czasu zamówienia”. Można połączyć dwie kolumny, aby uzyskać współczynnik („stosunek zadłużenia do dochodów”). W tym przypadku inżynieria cech przekłada wiedzę dziedzinową na sygnał matematyczny; I właśnie dlatego jest to etap wymagający największej ludzkiej inteligencji.

Zamiana zmiennych kategorycznych na liczby: kodowanie

Modele zazwyczaj działają z liczbami, a nie z tekstem. Konwersja zmiennych kategorycznych (takich jak miasto, kolor, typ produktu) na liczby nazywa się kodowaniem. Trzy popularne metody:

Kodowanie one-hot: otwiera osobną kolumnę o wartości 0/1 dla każdej kategorii. Dla „miasta” powstają kolumny Stambułu, Ankary, Izmiru; Jeśli klient pochodzi ze Stambułu, tylko ta kolumna będzie wynosić 1. Idealne rozwiązanie, gdy liczba kategorii jest mała; Jeśli kategorii jest zbyt wiele, powstają setki kolumn (nazywa się to „eksplozją rozmiaru”).

Kodowanie etykiet: nadaje numer każdej kategorii (Stambuł=0, Ankara=1). To proste, ale może przypadkowo nauczyć model sekwencji (np. Ankara > Stambuł); dlatego używa się go ostrożnie w kategoriach nieuporządkowanych.

Kodowanie docelowe: Zastępuje każdą kategorię średnią zmiennej docelowej w tej kategorii. Jest to bardzo potężne, ale najniebezpieczniejsze źródło wycieku: jeśli weźmie się pod uwagę cel danych testowych, model widzi przyszłość. Należy go obliczać wyłącznie na podstawie danych uczących i ostrożnie (w ramach walidacji krzyżowej).

Skalowanie: duże liczby nie przytłaczają modelu

Niektóre modele (odległościowe, liniowe, sieci neuronowe) są wrażliwe na skalę zmiennych. Jeśli „dochód” (0–500 000) i „wiek” (0–100) mieszczą się w tym samym schemacie, dochód może dominować po prostu dlatego, że jest większy. Skalowanie rozwiązuje ten problem. Dwie popularne metody: standaryzacja (przelicza każdą wartość na „ile odchyleń standardowych od średniej”) i normalizacja (normalizacja min-max — kompresuje wartości do zakresu 0-1). Modele oparte na drzewach (drzewa decyzyjne, las losowy) są niewrażliwe na skalę, nie wymagają skalowania.

Uwaga: Parametry skalowania i kodowania (średnia, odchylenie standardowe, mapowanie kategorii i średnich) należy obliczać wyłącznie na podstawie danych uczących, a następnie to samo należy zastosować do danych testowych. Uwzględnienie danych testowych oznacza wyciek i sprawia, że ​​model wygląda lepiej niż w rzeczywistości.

Serce wycieków w inżynierii cech

Generowanie funkcji to miejsce, z którego najczęściej dochodzi do wycieku danych. Dwa typowe błędy: Przeciek czasu — tworzenie funkcji zawierającej przyszłe informacje (w tym dni po dniu prognozy przy obliczaniu „średniej z ostatnich 30 dni”). Wyciek statystyk — obliczenie cechy (średniej skalowania, docelowej wartości kodowania) ze wszystkich danych przed podziałem treningowym/testowym. Reguła: ucz się każdej transformacji po wykonaniu najpierw podziału pociągu/testu i tylko na podstawie danych treningowych. Najbezpieczniejszym sposobem na regularne robienie tego jest użycie potoku — struktury, która zbiera wszystkie transformacje w jednym łańcuchu i stosuje je po podziale.

Metoda

po co

Ryzyko wycieku

uwaga

Kodowanie na gorąco

Zmienna z kilkoma kategoriami

niski

Eksploduje rozmiar w wielu kategoriach

Kodowanie etykiet

Posortowana kategoria

niski

Brak porządku uczy niewłaściwej kolejności

kodowanie docelowe

Wiele kategorii, silny sygnał

bardzo wysoki

Tylko z wykształcenia, w CV

standaryzacja

Modele liniowe/odległościowe

średni

Parametr zależy tylko od wykształcenia

Funkcja okna czasowego

szeregi czasowe

wysoki

Dodaj przyszłość

trzy mini etui

Przypadek 1 – Cenna własność. Zespół kredytowy wygenerował funkcję „stosunku zadłużenia do dochodu” na podstawie surowych kolumn „miesięczny dochód” i „miesięczna spłata zadłużenia”. Ta pojedyncza funkcja pochodna zwiększyła dokładność modelu z 71% do 79%; ponieważ to stopa, a nie dochód bezwzględny, tak naprawdę determinowała ryzyko. Lekcja: wskaźniki generowane przez wiedzę dziedzinową są mocnymi sygnałami.

Przypadek 2 — Wyciek kodowania celu. Jeden zespół przekształcił „kod pocztowy” w liczbę z docelowym kodowaniem (średni współczynnik rezygnacji w tym obszarze), ale zrobił to na podstawie wszystkich danych przed podziałem. Model dał 94% na zestawie testowym, spadając do 68% w produkcji. 6 tygodni wysiłku poszło na marne. Lekcja: kodowanie celów odbywa się ostrożnie, tylko w ramach szkolenia.

Przypadek 3 — Zapominanie o skalowaniu. Jeden z analityków włączył przychody (0–400 000) i wiek klienta (18–75) do modelu opartego na odległości bez skalowania. Model uwzględnił niemal wyłącznie dochody, niwelując efekt wieku. Po dodaniu skalowania segmentacja stała się znacząca. Lekcja: skalowanie nie jest zaniedbywane w modelach odległościowych/liniowych.

Cztery szablony do kopiowania

1) Generowanie pomysłów na funkcje (eliminacja zależy od Ciebie):

Twoja rola: asystent inżyniera funkcji. Moje kolumny df: data_urodzenia, czas_zamówienia (znacznik czasu), dochód_tl, dług_tl, miasto, kategoria_produktu. Cel: „czy pożyczka zostanie spłacona” (0/1). Zaproponuj 15 cech, które można wygenerować na podstawie tych kolumn; określić ryzyko wycieku (niskie/średnie/wysokie) dla każdego z nich. Wyraźnie zaznacz te, które zawierają przyszłe informacje.

2) Bezpieczne kodowanie (post-split):

Napisz kod, który za jednym razem koduje „miasto” i „kategoria_produktu”. WAŻNE: dopasuj kodowanie tylko do danych treningowych, a następnie przekształć dane testowe (za pomocą sklearn OneHotEncoder). Wyjaśnij, jak radzisz sobie z kategorią niewidoczną (handle_unknown) w edukacji.

3) Bezszczelna konwersja za pomocą Pipeline:

Skonfiguruj sklearn Pipeline: zastosuj StandardScaler do kolumn numerycznych, OneHotEncoder do kolumn kategorialnych, dodaj klasyfikator na końcu. Gwarancja, że ​​wszystkie transformacje zostaną wyuczone PO podziale pociągu/testu i tylko podczas szkolenia. Wyjaśnij kod i dlaczego jest on szczelny.

4) Funkcja okna czasowego (kontrola wycieków):

Wygeneruj atrybut „liczba zamówień w ciągu ostatnich 30 dni” dla każdego klienta, ale NIGDY nie dołączaj danych po dniu prognozy. Wyjaśnij wiersz po wierszu, że kod nie patrzy w przyszłość. Podam kolumnę z datą referencyjną.

Słaba zachęta/silna zachęta

Słaba zachęta:

Dodaj dobre właściwości do tych danych.

„Dobrze” jest nieokreślone, cel jest niejasny, nie ma kontroli wycieków. Sztuczna inteligencja generuje losowe, być może nieszczelne, funkcje.

Potężny monit:

Twoja rola: inżynier funkcji. Cel: „rezygnacja w ciągu 30 dni” (0/1), szacowana data odniesienia: save_date. W df znajduje się historia transakcji. Zadanie: Wygeneruj 8 cech, odpowiedz na pytanie „Czy mam te informacje w momencie przewidywania” dla KAŻDEGO. Dodanie daty po dacie referencyjnej w funkcjach okna czasowego. Napisz kod w sposób zgodny z potokiem, który ma zostać wykonany po sekcji pociągu/testu.

Tutaj od początku definiowany jest cel, czas odniesienia i kontrola wycieków.

Typowe błędy

  • Uczenie się transformacji ze wszystkich danych przed podziałem. Jeśli parametr skalowania/kodowania widzi dane testowe, następuje wyciek.
  • Nieostrożne użycie kodowania docelowego. Jest to najpotężniejsza, ale najbardziej nieszczelna metoda; tylko ze szkolenia, podczas walidacji krzyżowej.
  • Dodawanie przyszłości za pomocą funkcji okna czasowego. Jeśli obliczenia „ostatnie 30 dni” zostaną wprowadzone po dniu prognozy, model widzi przyszłość.
  • Niepotrzebne skalowanie w modelu drzewiastym i niepełne skalowanie w modelu liniowym. Decyzje dotyczące skalowania podejmowane są w zależności od typu modelu.
  • Dodawanie każdej sugestii funkcji AI bez żadnych pytań. Sugestie mogą obejmować bezużyteczne i nieszczelne funkcje.
Wskazówka: zapisz jedno pytanie dla każdej wygenerowanej przez siebie cechy: „Czy mogę obliczyć tę wartość na podstawie informacji, które posiadam w momencie dokonywania prognozy?” Jeśli odpowiedź nie jest jednoznaczna „tak”, nie korzystaj z tej funkcji. Ta pojedyncza dyscyplina eliminuje większość wycieków związanych z funkcjami.

Podsumowując

Inżynieria cech to sztuka generowania znaczących sygnałów z surowych danych i często w większym stopniu decyduje o powodzeniu modelu niż algorytmu. Kodowanie kategorii (one-hot, label, target), skalowanie liczb (standaryzacja, normalizacja) i tworzenie cech pochodnych w oparciu o wiedzę dziedzinową to podstawowe narzędzia. Ale ta faza jest także sednem wycieku: wszystkich transformacji należy się nauczyć po podziale treningu/testu i wyłącznie na podstawie danych treningowych. AI generuje mnóstwo pomysłów; To ludzki osąd odróżnia to, co cenne od tego, co niebezpieczne.

Zadanie aplikacji

Wybierz zmienną docelową i zaprojektuj co najmniej pięć cech pochodnych z posiadanych kolumn. Dla każdego z nich należy odpowiedzieć pisemnie na pytanie „czy jestem dostępny w momencie prognozy” i wyeliminować przynajmniej jedno jako „wysokie ryzyko wycieku”. Następnie zakoduj bezpieczne funkcje w potoku, które mają zostać zaimplementowane po partycji.

lista kontrolna

  • [ ] Czy zastosowałem wszystkie transformacje po podziale pociągu/testu?
  • [ ] Czy parametry skalowania/kodowania nauczyłem się tylko na szkoleniu?
  • [ ] Czy odpowiedziałem na pytanie „czy mam to w momencie przewidywania” dla każdej funkcji?
  • [ ] Czy zachowałem szczególną ostrożność w przypadku metod wysokiego ryzyka, takich jak kodowanie docelowe?
  • [ ] Czy zdecydowałem się skalować odpowiednio do typu modelu (drzewo/liniowy)?