Czym jest inżynieria cech (feature engineering)?

– Tatusiu, dlaczego wyglądasz na bardzo zmęczonego?

– Ponieważ Skarbie miałem dzisiaj bardzo wyczerpujący dzień w pracy. Rozpoczęliśmy projekt polegający na szukaniu nowych cech dla modelu. Większość dnia intensywnie myśleliśmy z ekspertami na co należy zwrócić uwagę przy rozwiązywaniu naszego problemu.

– Nie mogłeś tego zrobić sam?

– Mógłbym spróbować. Jednak obawiam się, że wtedy mógłbym nie wziąć pod uwagę czegoś ważnego lub mógłbym nie wpaść na tak fajne pomysły jak inni.

A na czym to co robiliście polegało?

Zamyśliłem się jakby to zobrazować Jagódce.

– Hmm… widzisz ten zielony i brązowy klocek? Zazwyczaj służą do układania domku. Mogę jeszcze wymyślić, że jak je połączę to może udawać drzewo. A jakie Ty widzisz jeszcze inne zastosowania?

– O…wiem. Jeden może być mężem a drugi żoną. Żona będzie zielonym, bo zielony jest piękniejszy i ładniejszy. Albo będą autkami i będą się ścigać. Albo połączymy je i będą loooody! Lody jabłkowe w czekoladowym wafelku.

Widzisz. Właśnie jako ekspert pokazałaś mi jak mogę inaczej spojrzeć na te klocki. I teraz możemy wspólnie się zastanowić jak chcemy je wykorzystać i w co się pobawić – uśmiechnąłem się.

Bardzo często mówi się, że dane są paliwem dla uczenia maszynowego. Natomiast w rzeczywistości nie jest to do końca prawdą. Gdyby wziąć po prostu dane jakie mamy na wejściu, to w większości przypadków nie przygotowalibyśmy dobrych modeli. Wolę mówić, że dane są jak ropa naftowa. Zatem najpierw należy przeprowadzić odpowiedni proces zamiany surowej ropy w paliwo. Ten proces określiłbym jako inżynieria cech (ang. feature engineering).

Czym są cechy i inżynieria cech?

Poniżej przedstawiłem przykładowe dane opisujące pasażerów Titanica. Każdy z pasażerów posiada pewne cechy (podane są w kolumnach). To właśnie poprzez charakterystyki próbujemy wyjaśnić rzeczywistość dla maszyny. Im lepiej przygotujemy nasze cechy tym maszyna lepiej będzie mogła zrozumieć świat i przygotować lepszy model zgodnie z tym co chcemy prognozować. W poniższym przykładzie chcemy zamodelować odpowiedź (ang. target) czy dana osoba przeżyła zderzenie z górą lodową i uratowała się z Titanica.

Nad kilkoma z powyższych charakterystyk warto byłoby popracować. Na przykład „Cabin” mówi nam o rodzaju i numerze kabiny. Na pierwszy rzut oka może wydawać się to niezbyt ciekawe i bez wpływu na nasz model. Jednak jeżeli zagłębimy się w tą kwestię  (np. pytając eksperta z danej dziedziny o szczegóły) okaże się, że literka w oznaczeniu kabiny odpowiada numerowi pokładu, na którym kabina się znajdowała. A jak można się domyślić to im niżej, tym trudniej się wydostać w trakcie ewakuacji.

Inżynierię danych można jeszcze pokazać na znacznie prostszych przykładach:

  • PESEL – mając taką daną możemy pierwsze 6 cyfr przekształcić w datę urodzenia. Mając ją bez problemu możemy określić wiek osoby. A jeśli chcecie się pobawić zawsze możecie dodać jeszcze znak zodiaku czy chiński znak zodiaku :). Dodatkowo patrząc na przedostatnią cyfrę poznamy płeć właściciela numeru PESEL (parzysta to kobieta, nieparzysta to mężczyzna).
  • Data – mając datę możemy wyciągnąć wiele ciekawych elementów, np. dzień tygodnia, czy było święto, a jeśli jest to godzina. Wykorzystując datę można przygotować różne agregacje na poziomie określonego czasu, np. średnie wartości innej cechy w ciągu ostatniego tygodnia, miesiąca, kilku dni, a nawet następnie przygotować cechy będące trendami.
  • Imię – łącząc imię ze słownikami można sprawdzić płeć. A jeśli Ci się nie chce, wystarczy wziąć ostatnią literę i jeśli to „a” to z 95% prawdopodobieństwem będzie kobieta (pozostałe 5% to zakładam imiona pochodzenie obcego lub rozszalała wyobraźnia rodziców dziecka :)).
  • Historia transakcji na kontach – z historii operacji na rachunku można wyciągnąć mnóstwo cennych informacji, które następnie mogą zostać przerobione w ciekawe charakterystyki: wysokość wynagrodzenia, rodzaj umowy o pracę oraz miejsce zatrudnienia (na podstawie tytułu przelewu wynagrodzenia), liczba transakcji, wysokość akumulacji kapitału (wpływy przychodzące vs wychodzące), czy płaci raty w innych bankach, na jakie konta przelewa środki (w numerze konta ukryty jest konkretny bank), jaki preferuje rodzaj życia (jedzenie na mieście czy w domu, komunikacja miejska czy tankowanie na stacji). Następnie dla takich danych można przygotować trendy czy agregacje dzienne, tygodniowe, miesięczne, kwartalne, roczne. Itp. itd.

Podsumowując czym jest inżynieria cech

Inżynieria cech jest procesem wykorzystywania wiedzy domenowej na temat danych do tworzenia funkcji umożliwiających działanie algorytmów uczenia maszynowego. Poprawne przygotowanie charakterystyk bardzo zwiększa moc predykcyjną algorytmów uczenia maszynowego.

Mam nadzieję, że po powyższych przykładach już bardziej czujecie dlaczego można powiedzieć, że inżynieria cech (feature engineering) to sztuka. Pytanie czy się z takim porównaniem się zgadzanie – chętnie zobaczę Wasze opinie w komentarzach.

Można jeszcze zobrazować czym jest inżynieria cech na przykładzie poniższych kilku tabel z danymi jakie posiadają banki o klientach. Oraz jak po odpowiednim przygotowaniu (inżynieria cech) mają odpowiednią strukturę:

Ogólny proces tworzenia cech

Dobrym rozwiązaniem jest trzymanie się poniższego schematu, który sam staram się stosować:

1. Burza mózgów

Oczywiście to jak będzie wyglądała zależy od problemu, który przed Wami stoi. W niektórych przypadkach może się okazać, że jesteście najlepszymi kandydatami i taki proces wykonujecie sami lub z jedną dodatkową osobą. Przy bardziej skomplikowanych zagadnieniach warto pozbierać ekspertów z różnym doświadczeniem i wiedzą, aby razem zastanowić się cechami.

2. Wybór charakterystyk

Po owocnym pierwszym kroku może okazać się, że jest bardzo dużo nowych cech. Czas nie jest z gumy i szkoda w pierwszym podejściu tracić go na przygotowanie wszystkich cech. Pamiętajcie o zasadzie Pareto: 20% cech da nam 80% zysku. Użyjcie swojej intuicji, aby zdecydować od czego warto zacząć – wraz z doświadczeniem będzie Wam szło coraz lepiej i sprawniej. Ponadto zawsze możecie jeszcze poradzić się eksperta.

3. Stworzenie charakterystyk

Oprócz tworzenia i wymyślania całkiem nowych charakterystyk warto pamiętać jeszcze o podstawowych statystykach takich jak średnia, minimum, maksimum itp. lub cechach w porównaniu do średniej, np. ile osoba jest wyższa od średniego wzrostu Polaka, ile ktoś zarabia więcej lub mniej od średniego wynagrodzenia.

4. Sprawdzenie wpływu na model

Po wcześniejszym przygotowaniu charakterystyk warto sprawdzić jak wpłynęły na model. W przypadku, gdy sam tworzę charakterystyki i wymagają one ode mnie czasu na przygotowanie to staram się mieć zautomatyzowany proces. Dzięki temu mogę od razu poznać wpływ. W większości przypadków jest to możliwe (nie mówię tutaj o skomplikowanych sieciach, które mogą liczyć się wiele godzin lub dni).

5. Dokręcanie przygotowanych cech

Jeśli mamy troszkę czasu można potestować i spróbować przygotować lepsze charakterystyki. Na przykład jeśli mamy charakterystykę mówiącą o liczbie przelewów przychodzących z firm pożyczkowych z ostatniego miesiąca to może małym nakładem pracy warto okno rozszerzyć do trzech miesięcy, albo skrócić do dwóch tygodni.

6. W razie potrzeby powrót do kroku 1 lub 3

Pamiętajcie, że jeśli nie powiecie stop to możecie tak kręcić się w kółko przez wiele miesięcy. Są sytuacje, gdzie przy danych, które posiadacie, nie da rady rozwiązać problemu na zakładanym poziomie. Natomiast w takim przypadku będziecie bogatsi o informacje, że warto zbierać więcej danych by rozwiązać dany problem.

Podsumowanie

Mam nadzieję, że powyższe wyjaśnienie jest dla Was jasne. A jeśli sami stosujecie jakieś dodatkowe elementy to wspomnijcie mi o nich – z przyjemnością dopisze do listy! A dodatkowo gdybyście się zastanawiali czy można w niektórych przypadkach zautomatyzować proces poszukiwania cech to tak. I o tym będzie w kolejnym poście.

Pozdrawiam serdecznie,

.

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *