Machine Learning Workflow cz 1 – przygotowanie modelu

Przygotowanie modelu

Jakiś czas temu pisałem o tym jak wygląda workflow w uczeniu maszynowym.

Pozwolę to sobie tutaj przypomnieć:

  1. Pozyskanie danych
  2. Zadanie pytania na które chcemy znać odpowiedź w oparciu o zebrane dane (chyba najtrudniejsza część procesu)
  3. Przygotowanie danych (wczytanie je do pamięci, wyczyszczenie, doprowadzenie do postaci łatwej do zinterpretowania przez komputer – jednym słowem przetworzenie)
  4. Wybór odpowiedniego algorytmu (jest determinowany przez problem, który chcemy rozwiązać, ale też przez liczbę dostępnych danych itd.)
  5. Wytrenowanie tzw. modelu, czyli przygotowanie jednostki (np. obiektu) zdolnego odpowiedzieć na zadane w punkcie 2 pytanie – to tu jest szukany wzorzec.
  6. Przetestowanie modelu. Jest to sprawdzenie dokładności z jaką nasz model „przewiduje przyszłość”. Innymi słowy sprawdzenie skuteczności wzorca.
  7. W razie potrzeby iteracja od punktu, który wg. naszej wiedzy przyniesie poprawę wyników.

Powyższe punkty można pogrupować w taki sposób:

  1. Punkty od 1 do 3 – Przygotowanie modelu (na który składają się dane i określony problem(pytanie))
  2. Punkty od 4 do 5 – Trenowanie modelu
  3. Punkt 6 – Przetestowanie modelu

Dzisiaj napiszę kilka słów o przygotowaniu modelu

Pierwszym krokiem jest oczywiście zebranie odpowiednich danych (o tym skąd je brać pisałem króciutko tutaj – może kiedyś rozwinę temat). Nigdy nie wykorzystywałem zawodowo uczenia maszynowego, ale zakładam że często, w wielkim skrócie, wygląda to tak: Przychodzi pan w krawacie i mówi „Masz do dyspozycji bazę danych naszego internetowego sklepu. Chcielibyśmy żebyś znalazł sposób na zwiększenie sprzedaży. Powiedzmy o jakieś 10, może 15 procent”.

1. Zebranie danych

Wierzysz, że z pomocą uczenia maszynowego da się rozwiązać ten problem, ale wiesz też że nie posiadasz wiedzy biznesowej wystarczającej by wyselekcjonować istotne dane z bazy.  Wówczas bierzesz do współpracy gościa który ma pojęcie o danych którymi dysponuje firma, i który ma pojęcie o sprzedaży w owym sklepie – jednym słowem zna dziedzinę problemu. Razem zastanawiacie się co niby możecie zrobić by rozwiązać problem, którym jest zwiększenie sprzedaży.

Twój towarzysz niedoli twierdzi, że to czy ktoś wyda u was pieniądze czy nie jest w dużej mierze determinowane przez to ile czasu delikwent spędza na stronie sklepu. Uważa też, że istotnym czynnikiem jest ilość odwiedzonych przez potencjalnego klienta podstron. Dyskutujecie trochę i przeglądacie bazę. Pod koniec dnia przygotowujesz zapytanie do bazy. Wyselekcjonowaliście te kolumny. które według was mają znaczenie – okazuje się że przygotowany przez Ciebie data set liczy sobie 35 kolumn dla 5000 wierszy (znasz się na rzeczy i stwierdziłeś, że taka próba da Ci wiarygodny wynik). To był ciężki, ale owocny dzień. Pora łyknąć coś na sen i szykować się na następny.

2. Zadanie odpowiedniego pytania

Tutaj sprawa jest teoretycznie prosta. Pytanie w machine learning jest synonimem problemu do rozwiązania. Ten został postawiony na początku: Znaleźć sposób na zwiększenie sprzedaży. Spróbujmy to jednak trochę rozwinąć. Punkt od którego zaczynamy to : „Znajdź sposób na zwiększenie sprzedaży o ok. 10%-15%”. Wśród danych, które wyselekcjonowałeś razem z – nazwijmy go – Analitykiem znajduje się kolumna przechowująca informację o tym czy odwiedzający dokonał zakupu czy nie. Wydaje mi się, że w tym przypadku nie ma opcji by zmierzyć o ile faktycznie wzrośnie sprzedaż, bez wdrożenia rozwiązania, ale możemy starać się przewidzieć czy dany klient dokona zakupu.

Gościowi w krawacie może się wydawać, że między problemem „zwiększ sprzedaż…” a pytaniem „czy klient dokona zakupu?” istnieje pewien dysonans. Dla nas tylko pozornie, bo w
w rzeczywistości my po prostu ukierunkowaliśmy pytanie odpowiednio do naszych celów.

Na postawione pytanie można jasno odpowiedzieć: tak lub nie, czyli 1 lub 0. W  takim razie by dokończyć formułowanie pytania w sposób określający jednocześnie cel, trzeba określić jaka skuteczność nas interesuje. Standardowo progiem startowym jest ok. 70%. Czyli jeżeli model, który przygotowujesz, będzie po zastosowaniu algorytmu uczącego przewidywał poprawnie 700 na 1000 klientów to możesz odtrąbić swój sukces, a następnie szukać sposobu poprawienia wyniku 🙂

Jeżeli Twój Analityk nie jest gamoniem i słusznie, w oparciu o swoją wiedzę biznesową, przewiduje że na podstawie zebranych danych można faktycznie uzyskać odpowiedź to na horyzoncie widnieje jutrzenka podwyżki. Postanawiasz razem z Analitykiem, który już urósł do rangi Twojego Kumpla, zostać na nadgodziny.

3. Przygotowanie (przetworzenie) danych

Jest jasno sformułowany problem do rozwiązania. Są dane w oparciu o które ma zostać utworzony model. Czy można już przygotowywać algorytm uczący? Jednym z kluczowych, dla uzyskania odpowiedniej skuteczności, kroków jest odpowiednie przygotowanie danych. Co to oznacza i dlaczego zebrane dane miałyby wymagać dodatkowego przygotowania? Zwykle „surowe” dane, pobrane prosto z bazy nie mogą w takiej postaci trafić do algorytmu ponieważ ich, eufemistycznie mówiąc „niedoskonałości” mogą negatywnie wpływać na wyniki. O jakiego typu niedoskonałościach mówimy?

  • W kolumnach mogą znajdować się brakujące wartości.
  • Kolumny pochodzące z relacyjnych baz danych mogą pochodzić z nieznormalizowanych tabel.
  • Dane mogą być nieujednolicone tzn. w jednej kolumnie wartość boolowska może być reprezentowana jako tak/nie a w innej jako 1/0.
  • Podobne dane mogą być podane w różnych wartościach lub skalach. Np. w jednej kolumnie waluta jest w USD, a w innej w złotówkach.
  • Generalnie warto przekształcać wartości nienumeryczne na numeryczne.
  • Kolejnym problemem może być istnienie kilku kolumn przedstawiających tą samą wartość tylko w inny sposób.
  • Zawsze trzeba też zweryfikować czy w zbiorze nie znajdują się dane nie mające nic wspólnego z zadanym pytaniem.

Dopiero kiedy upewnimy się, że nasz zbiór danych jest wolny od powyższych problemów, możemy przejść do wyboru algorytmu. O tym więcej napiszę w przyszłym tygodniu.

W kolejnym wpisie związanym z DSP2017

napiszę o przygotowywaniu modelu w moim projekcie(znajdzie się tam miejsce na wprowadzenie do Jupyter Notebook), a zwłaszcza o formułowaniu pytania (co dosyć mocno determinuje dalsze prace) i przygotowywaniu danych. Myślę że gdzieś na horyzoncie pojawi się też wprowadzenie do scikit-learn (biblioteka dostarczająca praktycznie wszystkiego co potrzebne do ML) oraz do matplotlib(biblioteka do wizualizacji danych), ale być może pozostanę tylko na przykładach do projektu więc nic nie obiecuję.

Dodaj komentarz

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