– 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,
Cześć Mirek, mam pytanie: Jeśli zrobimy inżynierię cech na takim datasecie titanica (rozdzielimy przedrostki Ms., Mrs, pogrupujemy jakieś dane, dodamy nowe zmienne) to co robimy z danymi jakie wrzucamy do predykcji? Bo przecież więcej cech (obrobionych cech ) było użytych do trenowania. Do predykcji wrzucamy dane jak te pochodzące z pierwotnego pliku train czy musimy do predykcji też dokonać takich zmian na danych. Porównując: w przypadku nlp robimy tam zabawę z usuwaniem stopwords, lematyzacje… to potem do predykcji znowu robimy usuwanie stopwords i lematyzację czy tekst wrzucamy takim jaki jest w rzeczywistości?
Hej Natalia!
Zawsze jak budujesz model i w jakiś sposób „oczyszczasz” lub „przygotowujesz” dane to należy w ten sam sposób potraktować dane, dla których będziesz zrobić predykcję.
To tak jakbyś zbudowała model np. do oceny ryzyka kredytowego i wykluczyła np. mężczyzn mających 40-50 lat, a potem chciała używać na nich modelu. Warto dbać by budować model i przygotowywać próbkę dokładnie jak będziesz używać na produkcji by było to 1 do 1 🙂 Zatem jak robisz na danych treningowych lematyzacje i stopwords to zanim zrobisz na nowych danych predyckję powinnaś powtórzyć te same kroki.
Pozdrawiam serdecznie,
Mirek