Większość problemów biznesowych można sprowadzić do dwóch podstawowych kategorii: klasyfikacji i regresji. W ostatnim artykule poruszałem problemy klasyfikacji i algorytmy służące do ich rozwiązywania. Dziś przyszła kolej na algorytmy regresyjne, rozwiązujące problemy, których istotą jest wyznaczenie wartości numerycznych.
Na wstępie muszę wspomnieć o pewnych założeniach:
- Wszystko o czym piszę, to moje subiektywne postrzeganie problemów i ich rozwiązań. Bazuje to zarówno na moim prywatnym doświadczeniu, jak i ogólnie przyjętych zasadach.
- W artykule przyjmuję pewne uproszczenia i nie wchodzę w szczegóły. W prawdziwym życiu należy starannie przeanalizować problem, który rozpatrujemy. Przy dwóch pozornie identycznych problemach, najlepszy wynik może być uzyskany przy pomocy różnych algorytmów. Nie ma dwóch identycznych przypadków.
- Przedstawiam jedynie zestaw reguł, pomagający „przefiltrować” najpopularniejsze algorytmy i zawęzić poszukiwania.
- Głównym celem jest tu uwidocznienie procesu myślowego przebiegającego w głowie doświadczonego badacza danych, wraz ze stosownym uzasadnieniem podejmowanych wyborów.
Reasumując: wszystko o czym piszę pomoże Ci lepiej zrozumieć działanie i charakterystykę najpopularniejszych algorytmów. Wartością dodaną będzie również zaoszczędzony na poszukiwaniach czas. Przy podejmowaniu ostatecznej decyzji dobrze zdefiniuj problem, zrozum dane i cel biznesowy.
Artykuł ten jest drugą częścią cyklu „Wybór odpowiedniego algorytmu”. Cały cykl składa się z następujących artykułów: Część 1 – wprowadzenie. Część 2 – algorytmy klasyfikacyjne. Część 3 – algorytmy regresyjne. Część 4 – algorytmu grupujące.
Opis problemu
Z regresją mamy do czynienia wszędzie tam, gdzie zmienna modelowana (opisywana, czy też zmienna celu) przyjmuje wartości ciągłe. Przy określaniu typu problemu wartości przyjmowane przez predyktory nie odgrywają żadnej roli (mogą być to zmienne kategoryczne lub numeryczne, ciągłe czy dyskretne). To zmienna celu definiuje nam typ problemu z jakim się borykamy.
Mamy zatem jedną zmienną typu ciągłego (np. wielkość sprzedaży w nadchodzącym roku, wyrażona w złotówkach), którą modelujemy w oparciu o dostępne predyktory.
- Prognozowanie wielkości sprzedaży w danym roku fiskalnym. Na podstawie szeregu zmiennych dyskretnych (nazwy klientów, lista nowych produktów, historyczne dane dotyczące produktów, etc.) oraz ciągłych (sprzedaż w ubiegłych latach, wielkość „lejka” na bieżący rok) można prognozować sprzedaż w nadchodzących dniach i miesiącach. Te kilka dni marginesu daje czas na reakcję kierownictwu.
- Wycena danej spółki. W oparciu o raporty kwartalne analitycy i gracze giełdowi są w stanie podać realną wycenę firmy, będącą alternatywą dla wyceny widniejącej na GPW (liczba wyemitowanych akcji * cena akcji). Dzięki temu można podejmować decyzje o sprzedaży bądź kupnie akcji danej spółki. Jeżeli spółka jest przewartościowana podejmujemy decyzję o sprzedaży. Jeśli spółka jest znacznie niedowartościowana, warto rozważyć zakup akcji.
- Potencjalny zysk ze sprzedaży danego produktu. Bazując na opisie produktu oraz danych historycznych sprzedaży produktów podobnych można estymować jego przyszłą sprzedaż.
- Wyznaczenie wartości danej nieruchomości. Posiadając takie informacje jak: położenie nieruchomości, typ zabudowy, rok budowy, standard wykończenia, liczba pokoi, piętro oraz dane historyczne nt. sprzedaży nieruchomości w okolicy, można przeprowadzić analizę której zmienną modelowaną jest cena nieruchomości. (btw. ciekawą analizę wykonał Łukasz Prokulski – szczerze polecam!).
- Obliczanie zdolności kredytowej danej osoby. Znając podstawowe informacje o danej osobie (wiek, miejsce zatrudnienia, zarobki roczne, okres zatrudnienia, etc.) można estymować jej zdolność kredytową.
Oczywiście powyższe zestawienie nie wyczerpuje tematu i przykłady można szerzyć. Celem jest tu jednak zobrazowanie problemu niż przekrojowa analiza zastosowań 🙂
Mierzenie dokładności algorytmów decyzyjnych
Wyznaczanie wartości ciągłych wydaje się być już na pierwszy rzut oka problemem znacznie trudniejszym niż problemy klasyfikacji. Znacznie trudniej jest poprawnie wytypować wartość ciągłą, nawet gdy znamy medianę i odchylenie standardowe próby z populacji, niż wskazać jedną z dwóch wartości znanych wartości (tak jak to jest w przypadku problemów klasyfikacji). Wobec tego zmierzenie wyników działania algorytmu jest też nieco trudniejsze.
Do podstawowych miar służących do oceny jakości modelu możemy zaliczyć:
- Błąd średniokwadratowy – MSE (ang. Mean Squared Error). Jest wartością oczekiwaną kwadratu błędów. Błędem określamy tu różnicę pomiędzy wartością uzyskaną za pomocą algorytmu a wartością rzeczywistą. Wraz ze spadkiem MSE rośnie dopasowanie modelu.
- Pierwiastek błędu średniokwadratowego – RMSE (ang. Root Mean Squared Error). Już sama nazwa wskazuje nam czym jest RMSE i jak się go liczy 🙂
- Średni błąd bezwzględny – MAE (ang. Mean Absolute Error). Warto dodać, że dzięki MAE możemy uzyskać jeszcze jedną pomocniczą miarę dopasownia algorytmu: MAPE.
- Średni bezwzględny błąd procentowy – MAPE (ang. Mean Absolute Percentage Error). Mówi nam ona o procentowym obciążenie algorytmu błędem (MAE/średnia wartość zmiennej modelowanej ze zbioru walidującego).
Wybór odpowiedniego algorytmu
Podobnie jak w przypadku algorytmów klasyfikacyjnych przy wyborze optymalnego algorytmu należy się kierować kilkoma podstawowymi kryteriami:
- Szybkość działania – w przypadku algorytmów liniowych, takich jak np. regresja liniowa zarówno czas wykonywania jak i uczenia będzie relatywnie krótki w porównaniu do np. sieci neuronowej.
- Interpretowalność – cecha mówiąca o tym czy działanie danego algorytmu może być łatwo interpretowane przez człowieka.
- Skalowalność – ilość zasobów jakich potrzebuje wybrany algorytm do pełnego wykonania.
- Liniowość – cecha mocno skorelowana z szybkością. Z definicji algorytmy liniowe będą działać szybciej niż nieliniowe.
- Jakość predykcji – mierzona za pomocą miar takich jak: RMSE, czy też MAE.
Opis poszczególnych algorytmów
Regresja liniowa
- Opis algorytmu:
Algorytm pierwszego wyboru przy prognozowaniu wartości ciągłych. Jeden z najpopularniejszych i najprostszych algorytmów. Zakłada on istnienie zależności liniowej pomiędzy zmienną modelowaną a predyktorem/-ami. Jest to być może pewne uproszczenie, ale w większości przypadków jst ono zasadne, np. im więcej produktów sprzeda dana firma, tym większy osiągnie przychód.W najprostszym przypadku regresji liniowej przedstawia ona jedną zmienną modelowaną i jeden predyktor. Zależność pomiędzy nimi jest modelowana na dwuwymiarowym układzie współrzędnych za pomocą prostej o odpowiednim nachyleniu. Odzwierciedla ona trend i zmienność danych.Rozwiązaniem problemu prognozowania z użyciem regresji liniowej będą odpowiednio dobrane parametry . To one definiują jak bardzo prosta jest dopasowana do danych. Oczywiście celem jest tu minimalizowanie sumy pionowych odległości wszystkich obserwacji od prostej. Wykorzystuje się do tego m.in. metodę estymacji najmniejszych kwadratów.Regresja liniowa jest prosta w zrozumieniu i użyciu. Zapewnia szybkie uczenie, a czas wykonywania algorytmu jest krótki. Ma jednak jedną dużą wadę o której należy pamiętać: jest bardzo wrażliwa na wartości odstające. Jedna odstająca obserwacja może nam znacznie zaburzyć proces optymalizacji współczynników modelu. Dane wejściowe powinny być zatem dobrze wyczyszczone zarówno z wartości odstających, brakujących oraz duplikatów.UWAGA: algorytm jest bardzo wrażliwy na wartości odstające obserwacji!
- Liczba obserwacji: duża.
- Dokładność algorytmu: niska/średnia.
- Czas uczenia: krótki – dzięki prostej strukturze i niskiej złożoności obliczeniowej.
- Czas wykonywania: krótki.
- Liniowość: tak.
Sieć neuronowa
- Opis algorytmu:
Algorytm używany zarówno w problemach klasyfikacji jak i regresji. Ostatnio przeżywający drugą młodość ze względu na popularność deep learningu. Jest jednym z bardziej wyrafinowanych algorytmów uczenia maszynowane. Inspirowany działaniem ludzkiego mózgu.Schemat działania sieci neuronowej jest opisywany za pomocą acyklicznego grafu skierowanego. Głównym elementem sieci neuronowej jest neuron przetwarzający. W sieci znajduje się wiele neuronów, które posiadają dowolną liczbę wejść i wyjść. Neurony pogrupowane są w warstwy, w których każdy neuron jest połączony z każdym neuronem warstwy poprzedzającej. Wartości zmiennych są zatem przekazywane w sposób postępujący, pomiędzy poszczególnymi warstwami sieci neuronowej. W kolejnym warstwach są wykonywane operacje na zmiennych, aż do osiągnięcia wartości wynikowej na końcu grafu.
- Liczba obserwacji: mała/średnia (ze względu na długi czas uczenia. Co ciekawe sieć neuronowa znakomicie radzi sobie z większą liczbą predyktorów.)
- Dokładność algorytmu: wysoka.
- Czas uczenia: długi.
- Czas wykonywania: średni/długi.
- Liniowość: nie.
Drzewo decyzyjne – regresyjne
- Opis algorytmu:
Podstawowa wersja drzewa decyzyjnego. Mimo, iż drzewo decyzyjne budowane jest w oparciu o decyzje binarne, to obecnie używane pakiety implementujące algorytm radzą sobie również ze zmiennymi ciągłymi. Zawierają one mechanizm przekształcający zmienne ciągłe w predyktor binarny. Dla przykładu, w przypadku zmiennej „Spalanie” mówiącej nam o średnim spalaniu danego auta, można sklasyfikować ilość zużytej benzyny na 100 km: „mniej niż 10” i „więcej niż 10”. Nieco bliżej drzewu decyzyjnego przyglądałem się w poprzedniej części cyklu.
- Liczba obserwacji: duża.
- Dokładność algorytmu: średnia/wysoka.
- Czas uczenia: krótki.
- Czas wykonywania: średni.
- Liniowość: nie.
Regresyjny las losowy (ang. Regression forest)
- Opis algorytmu:
Algorytm buduje n drzew (n jest parametrem wejściowym algorytmu). Ostateczna decyzja co do wyznaczenia predykcji jest podejmowana za pomocą głosowania większościowego. Każde kolejne drzewo jest budowane w oparciu o próbę bootstrapową. Polega ona na wylosowaniu ze zwracaniem k obserwacji z ciągu uczącego o długości K. Co więcej, w każdym drzewie podział odbywa się za pomocą m wylosowanych cech (atrybutów) danej obserwacji. Liczba wylosowanych cech jest mniejsza niż liczba wszystkich dostępnych cech.Zatem w lesie losowym powstaje n drzew, składających się z k obserwacji (każde drzewo może mieć unikalny zestaw cech), bazujących na m z pośród wszystkich cech.
- Liczba obserwacji: duża.
- Dokładność algorytmu: wysoka.
- Czas uczenia: krótki.
- Czas wykonywania: średni/długi.
- Liniowość: nie.
Drzewo decyzyjne wzmocnione (ang. Boosted decision tree) – regresyjne
- Opis algorytmu:
Wariacja drzewa decyzyjnego. Wykorzystuje procedurę wzmacniającą AdaBoost (ang. Adaptive Boosting). Podobnie jak w przypadku lasu losowego algorytm losuje nowe ciągi uczące. Główna różnica polega na tym, iż każde kolejne budowane drzewo stara się kompensować błędy swojego poprzednika. Owo „ulepszanie” jest możliwe dzięki przypisaniu wag do obserwacji. W przypadku popełnienia błędu, zwiększana jest waga danego elementu i jest on częściej losowany w kolejnym algorytmie.Jeśli chodzi o zastosowanie drzew, jeśli głównym celem jest dokładność jaką osiągnie model predykcyjny, to ogólna zasada wygląda następująco:Boosted Decission Tree > RandomForest > Bagging Decission Tree > Decission Tree
- Liczba obserwacji: duża.
- Dokładność algorytmu: wysoka.
- Czas uczenia: krótki.
- Czas wykonywania: średni/długi.
- Liniowość: nie.
Podsumowanie
Oczywiście powyższe zestawienie nie wyczerpuje tematu. Jest jeszcze co najmniej kilka algorytmów regresyjnych którym warto się przyjrzeć ale przecież nie o mnożenie przykładów chodzi 🙂 Jeśli mierzysz wysoko i Twoim celem jest szlifowanie wyniku na Kaggle, to pewni skłonisz się ku bibliotece XGBoost i dostępnym tam algorytmom wykorzystującym „wzmocnienie”. Jeśli natomiast chcesz rozwiązać podstawowy problem i bardziej zależy Ci na szybkości i prostocie to w zupełności wystarczy Ci podstawowa regresja liniowa, która doskonale się sprawdzi w większości przypadków 😊
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 :-)
Fajny artykuł, super że podsumowałeś na końcu najważniejsze cechy każdego z algorytmów. Chętnie zobaczyłbym również w jakich sytuacjach dane algorytmy głupieją, tak jak opisałeś to w przypadku regresji liniowej 🙂
Jacku, dziękuję za komentarz! 🙂 Ciekawa sugestia. Tak się składa, że ten temat będzie wkrótce rozwijany i postaram się odnieść do Twojej propozycji. Dziękuję i zapraszam już wkrótce po więcej! 🙂