W literaturze można znaleźć mnóstwo przykładów opisujących kolejne etapy procesu modelowania danych. Większość z nich kończy się jednak w chwili, gdy model osiąga zadowalającą jakość, a jego przygotowanie pod wdrożenie produkcyjne jest niestety zazwyczaj pomijane, lub opisywane przez autorów bez należytej staranności.
Z tego artykułu dowiesz się: 1. Czym jest model produkcyjny? 2. Jak w prosty sposób poprawić jego jakość? 3. Jak optymalnie wykorzystać zasoby, którymi dysponujesz?
Scenariusz opisywany w większości książek wygląda podobnie: analiza zbioru, usuwanie braków danych i odstających wartości, wykonanie transformacji danych, wybieranie najlepszych zmiennych, podział zbioru na część uczącą, walidacyjną i testową (ew. uczącą i testową – przy scenariuszu z walidacją krzyżową), a następnie iteracyjne poprawianie wyniku poprzez dobór algorytmu, parametrów i zmiennych, aż do osiągnięcia satysfakcjonującego rezultatu.
Jednym z kluczowych kroków w całym procesie jest podział zbioru (szalenie istotny jest odpowiedni podział zbioru – poruszę ten temat w jednym z kolejnych wpisów). Jego głównym celem jest przygotowanie modelu do prognozowania na nowych danych, których wcześniej „nie widział”.
Dzieląc zbiór, celowo zmniejszamy rozmiar próby uczącej o ok. 10% – 40%, tak by móc użyć wyodrębnionej części do m.in. badania jakości powstałego modelu. Warto przy tym pamiętać, że liczba obserwacji użytych do uczenia jest jednym z kluczowych czynników wpływających na jakość modelu predykcyjnego. Nie sposób zatem oprzeć się wrażeniu, że część potencjału drzemiącego w danych zostaje nieco zmarnowana. Można jednak temu zapobiec.
Model produkcyjny
Głównym celem modelu produkcyjnego, jest jak najdokładniejsze rozwiązanie zadanego problemu. Zadaniem badacza danych jest sprawienie, by cel ten został zrealizowany z optymalnym wykorzystaniem dostępnych zasobów:
- Wiedzy (swojej, członków zespołu, specjalistów branżowych).
- Czasu przeznaczonego na kolejne iteracje (sprinty) prac.
- Dostępnych danych.
Można założyć, że w końcowej fazie projektu pierwsze dwa zasoby zostały odpowiednio wykorzystane i nie ma czasu na weryfikację kolejnych hipotez. Pozostaje zatem numer 3, a więc optymalne wykorzystanie dostępnych danych, które może wpłynąć na jakość finalnego produktu.
Maraton Analizy Danych Już niebawem odbędzie się pierwsza edycja Maratonu Analizy Danych (26 – 27 maja, Warszawa), której to mam okazję być oficjalnym patronem. Maraton Analizy Danych to hackathon, seria wykładów oraz “wioska firm” w jednym. Wykorzystując dane dotyczące przestrzeni miejskiej w Polsce, uczestnicy spróbują poprawić sytuację polskich miast np. minimalizując ich zakorkowanie lub poprawiając stan środowiska. Wydarzenie ma na celu integrację studentów reprezentujących świat naukowy z firmami z branży analizy danych, stwarzając idealne warunki do współdziałania na rzecz społeczeństwa. Więcej informacji o maratonie danych znajdziesz na oficjalnej stronie wydarzenia. Serdecznie zapraszam w imieniu swoim i organizatorów! :)
Optymalne wykorzystanie dostępnych danych
Podczas budowania modelu predykcyjnego nie posiadamy „nowych” danych, na podstawie których model w przyszłości będzie wyznaczać predykcję. Musimy je zatem sztucznie wygenerować, by sprawdzić jakość naszego rozwiązania. Można wyróżnić dwa najpopularniejsze podejścia do podziału zbioru:
- Część ucząca 60%-80% (uczenie modelu), walidująca 10%-20% (optymalizacja modelu) i testowa 10%-20% (końcowy test jakości modelu).
- Część ucząca 70%-90% (uczenie modelu w procesie walidacji krzyżowej) i testowa 10%-30% (końcowy test jakości modelu).
Już samo zdecydowanie się na wariant drugi, jest poniekąd optymalizacją wykorzystania dostępnych danych (abstrahując od tego, które z podejść jest rzeczywiście lepsze). W obu przypadkach pozostaje jednak kilkadziesiąt procent dostępnych danych, które nie zostały wykorzystane w procesie uczenia modelu.
Pod koniec projektu zbiór walidujący i testowy, nie są już dłużej potrzebne, gdyż spełniły swoje zadanie. Dzięki nim sprawdzono jakość modelu i optymalizowano jego parametry. Nic nie stoi zatem na przeszkodzie, by ponownie wykorzystać je w procesie uczenia.
Przygotowanie modelu produkcyjnego
Biorąc pod uwagę wszystkie powyższe wnioski, mając przygotowany i podzielony zbiór, przykładowy proces przygotowywania modelu przed wdrożeniem mógłby wyglądać następująco:
- Wykonać walidację krzyżową na zbiorze uczącym.
- Sprawdzić średni uzyskany wynik i z pomocą współczynnika zmienności zweryfikować stabilność modelu. Jeżeli obie uzyskane wartości są satysfakcjonujące, to należy przejść do kolejnego kroku. W przeciwnym wypadku wykonywana jest kolejna iteracja modelowania.
- Przetestować model na zbiorze testowym. Jeśli uzyskany wynik jest zbliżony do średniej z testu krzyżowego (+/- współczynnik zmienności), to można przejść do kolejnego kroku.
- Ponownie wykonać proces uczenia „zwycięskiego” modelu na całym zbiorze.
Opisane powyżej podejście jest prostym sposobem na poprawę jakości finalnego produktu. Wielkość próby uczącej jest jednym z kluczowych czynników wpływających na wynik, jaki osiąga model, dlatego elementem robiącym różnicę jest tu krok czwarty. To właśnie ponowne uczeniu modelu o najlepszych parametrach, z wykorzystaniem wszystkich dostępnych danych decyduje o optymalnym wykorzystanie zbioru.
Podsumowanie
Pamiętam, że sam po raz pierwszy użyłem tego podejścia przy jednym z konkursów na Kaggle, gdy jeszcze zapoznawałem się z platformą. Dowiedziałem się o nim z grupy dyskusyjnej Kaggle postanowiłem to przetestować. Okazało się, że praktycznie bez wysiłku udało mi się poprawić jakość modelu i finalny wynik.
Czy znałeś to podejście? Czy stosowałeś je kiedyś w praktyce? Proszę, daj znać co o tym myślisz. Jeśli masz jakieś uwagi, spostrzeżenia lub pytania to proszę podziel się nimi w komentarzu 🙂
PODOBAŁ CI SIĘ TEN ARTYKUŁ?
Jeśli tak, to zarejestruj się, by otrzymywać informacje o nowych wpisach.
Dodatkowo w prezencie wyślę Ci bezpłatny poradnik :-)
Ale pomimo tego, że zacząłeś modelowanie na próbach rozdzielonych (już nieważne czy z cross-walidacją czy nie), to ostatecznie modelujesz na całości bez próby testowej/walidacja ej! Jak zatem sprawdzisz stabilność i jakość takiego modelu? Równie dobrze można było od razu modelować na całości. Drugi problem, którego nie poruszasz, a który często jest problemem, to wielkość próby
Kasiu, dziękuję za ciekawy komentarz! 🙂 Wydaje mi się, że wiem, z czego wynikają Twoje wątpliwości. Postaram się odpowiedzieć najlepiej, jak tylko potrafię. Dla czytelności podzielę odpowiedź na trzy punkty, do których się odniosę 🙂
1. „ostatecznie modelujesz na całości bez próby testowej/walidacja” – tak, ostatecznie uczę model na całym dostępnym zbiorze, ale dopiero po wykonaniu kilku istotnych kroków, w których badam jakość modelu, stabilność i to czy nie jest on przetrenowany.
2. „Jak zatem sprawdzisz stabilność i jakość takiego modelu? Równie dobrze można było od razu modelować na całości.” – jakość i stabilność takiego modelu sprawdzam krok wcześniej:
– na zbiorze uczącym, z użyciem walidacji krzyżowej,
– na zbiorze testowym.
Gdybyśmy zaczęli od razu modelować na całym zbiorze, bez wykonania podziału, to nie bylibyśmy w stanie stwierdzić, czy model nie jest przetrenowany (uprzedzam pytanie: CV na całym zbiorze to za mało).
Błąd na train i test powinien być zbliżony. Ważne jest odpowiednie przygotowanie zbioru. Mam tu na myśli użycie stratyfikacji przy podziale, zadbanie o to by oba zbiory (tr i te) były „podobne”, przy jednoczesnym zapobieganiu szeroko rozumianym przeciekom danych (btw. kolejna rzecz, której rzadko się słyszy na studiach).
Są oczywiście jeszcze inne aspekty przemawiające za takim, a nie innym podejściem, np. prezentacja osiągniętych rezultatów do klienta. Raportujemy finalny wynik uzyskany na zbiorze testowym i wyniki walidacji krzyżowej ze zbioru uczącego – to one informują o tym jakich wyników +/- możemy się spodziewać po wdrożeniu modelu do produkcji.
3. „Drugi problem, którego nie poruszasz, a który często jest problemem, to wielkość próby” – tak, nie poruszyłem tego w tym wpisie. Wielkość próby, przygotowanie zbioru, oraz jego podział to tematy, które chciałbym kiedyś poruszyć w osobnych wpisach 🙂
Hej Mateusz!
Dzięki! Bardzo fajny wpis! Myślę, że to podejście jest optymalne pod względem wykorzystania danych. Ja pierwszy raz w realnej sytuacji będę miał okazję przetestować je w najbliższych miesiącach.
Jestem ciekaw jaką metodykę stosujesz dla wyliczenia współczynnika zmienności dla modelu. Np. ile iteracji stosujesz? Czy masz tu jakąś złotą regułę?
Pozdrowienia,
Aleksander
Hej Aleksander!
Na wstępie dziękuję za Twój komentarz i miłe słowo. Cieszę się, że wpis Ci przypadł do gustu 🙂
Co do Twojego pytania, to myślę, że jest tu wskazany zdrowy rozsądek. Zazwyczaj współczynnik zmienności wyznaczam podczas walidacji krzyżowej, dzieląc zbiór uczący na 10 części. Ile wykonuję takich iteracji? To zależy od osiąganych wyników: stabilności i jakości modelu mierzonej poprzez np. Gini. Nie mam tutaj „złotej reguły”.
Przy badaniu stabilności modelu nie można zapominać o jego jakości. Jeżeli startuję z „wysokiego C” i już w pierwszej iteracji osiągam stabilność modelu na poziomie ok. 99% (współczynnik zmienności równy 1%), to wystarczy, że dowiozę ten wynik do końca modelowania, nie skupiając się na tym, ile iteracji wykonam po drodze. Dbam o to by osiągnąć zadowalającą jakość modelu przy zachowaniu wysokiej stabilności.
By zobrazować powyższe podam przykład z życia. Podczas poprzedniego projektu mieliśmy sytuację, w której już na samym początku modelowania osiągnęliśmy stabilność w okolicach 99.5%. Jakość modelu nie była jednak zadowalająca, więc kontynuowaliśmy prace wykonując kolejne iteracje. Finalnie stabilność spadła do ok. 98.8%, przy jednoczesnym kilkuprocentowym wzroście współczynnika Gini.
Na jednej z branżowych konferencji, jeden z prelegentów (był to bodajże Rafał Łukawiecki) wspomniał o badaniu stabilności modelu. Według niego nie najgorszym wynikiem jest stabilność na poziomie powyżej 96% (współczynnik zmienności mniejszy niż 4%). Zgodnie z jego teorią o bardzo stabilnym modelu możemy mówić, jeśli osiąga on wynik stabilności na poziomie 99% (współczynnik zmienności ok. 1%).
PS: Trzymam kciuki za Twoje pierwsze doświadczenia i testy tej metody w najbliższych miesiącach! 🙂
Hej Mateusz,
super, dziękuję bardzo za wyczerpującą odpowiedź i kciuki 🙂
O ile możesz o tym powiedzieć: jak ten model, o którym wspomniałeś (88.8%) radził sobie później na produkcji? Czy otrzymywaliście zadowalające rezultaty?
Pozdrawiam serdecznie,
Aleksander
Hej Aleksander 🙂
Najmocniej przepraszam, ale wkradł się błąd (już go poprawiłem). Miałem na myśli 98.8%, a nie 88.8%. Ta druga wartość byłaby oczywiście niedopuszczalna 😉 Finalnie współczynnik zmienności osiągnął ok. 1.2%. Model o którym wspominałem nie został jeszcze produkcyjnie wdrożony, więc nie mamy jeszcze wyników.