PROGNOZOWANIE Z WYKORZYSTANIEM UCZENIA MASZYN Któż z nas nie chciałby trafnie przewidywać przyszłości? Potrzeba przewidywania występuje nieomal wszędzie: w życiu codziennym, gdy np. chcemy zaplanować najlepszy termin wakacji, potrzebujemy trafnej prognozy pogody; w zarządzaniu, gdy potrzebujemy przewidzieć popyt; w produkcji, gdzie np. możemy przewidywać uzyski poszczególnych produktów. Istnieje wiele różnych sposobów przewidywania, a w tym artykule zajmiemy się prognozowaniem na podstawie danych o przebiegu zjawiska w przeszłości. Prognoza stworzona na potrzeby tego artykułu, będzie wyznaczana przez model stworzony za pomocą sieci neuronowych, jednej z najpopularniejszych metod uczenia maszyn (ang. machine learning). Zagadnienie omówimy na praktycznym przykładzie. Pokażemy oczywiście w pewnym skrócie wszystkie kroki projektu analitycznego: analizę biznesową, eksplorację i przygotowanie danych, stworzenie modelu prognostycznego i jego ocenę. Analiza biznesowa Pierwszym krokiem każdego projektu analitycznego jest analiza biznesowa, w szczególności dokładne zdefiniowanie celu projektu, przełożenie tego celu na język danych, ustalenie dostępnych danych, określenie ograniczeń i wymagań dotyczących projektu. Chodzi o to, aby uniknąć sytuacji, gdy wynikiem projektu jest bardzo trafny model, który jednocześnie jest bezużyteczny. TYTUŁ: Prognozowanie w wykorzystaniem uczenia maszyn DZIAŁ: PROCESY W FIRMIE AUTOR: Tomasz Demski Business Development Director, StatSoft Polska. Brał udział w wielu projektach związanych z wdrożeniem narzędzi analitycznych, budową modeli analitycznych i data mining realizowanych dla przedsiębiorstw z różnych branż. Artykuł prezentuje zagadnienie prognozowania przyszłości na podstawie informacji o prze biegu zjawiska w przeszłości. Prognoza stworzona na potrzeby tego artykułu, będzie wyznaczana przez model stworzony za pomocą sieci neuronowych, jednej z najpopularniejszych metod uczenia maszyn (ang. machine learning). Dla przykładu rozważmy przewidywanie liczby kontaktów z biurem obsługi klienta na potrzeby optymalizacji zasobów. Najmniejszy błąd prognozy może mieć model wykorzystujący do wyznaczania przewidywań liczbę kontaktów z poprzedniego dnia. Jednak taki model jest bezużyteczny, gdy zmiana liczby pracowników zaplanowanych na konkretny dzień jest możliwa z wyprzedzeniem co najmniej dwóch dni: potrzebną prognozę dostaniemy za późno, aby podjąć działania. W naszym przypadku zadanie polegało na codziennym przewidywaniu na następne siedem dni liczby klientów placówki handlowej w poszczególnych godzinach. Podczas analizy biznesowej ustalono, że maksymalny dopuszczalny, średni bezwzględny błąd procentowy prognozy dla nowych danych ma wynieść 7%. Do dyspozycji mamy dane z przeszłości o liczbie klientów placówki handlowej w ciągu godziny za okres od początku stycznia do końca sierpnia. Ponadto mamy dane kalendarzowe : dzień tygodnia, czy danego dnia było święto i godzinę. Placówka pracowała w godzinach od 6 do 22, siedem dni w tygodniu, była również otwarta w święta. Nasze dane to dane rzeczywiste przeskalowane i zaszumione dla zachowania poufności. Wybór metody prognozowania Głównym celem projektu jest uzyskanie jak najtrafniejszych przewidywań i dlatego użyjemy sieci neuronowych, które nie są łatwo interpretowalne dla człowieka, ale za to dają trafne przewidywania. Sieci neuronowe są jedną z najczęściej używanych 30 INFORMACJA ZARZĄDCZA 15/2018
Rysunek 1. Schemat sieci neuronowej Rysunek 2. Funkcje przejścia: linia ciągła krzywa logistyczna, przerywana ReLU metod uczenia maszyn. Inspiracją dla sieci neuronowych jest działanie układu nerwowego. Sztuczną sieć neuronową tworzą połączone ze sobą jednostki sztuczne neurony. Na Rysunku 1 widzimy schemat prostej sieci. Jeśli naszym zadaniem jest przewidywanie wartości zmiennej zależnej (wyjścia) na podstawie zmiennych niezależnych (wejść), to najczęściej stosujemy sieci złożone z warstw, a sygnał przechodzi z jednej warstwy do drugiej: są to tzw. sieci jednokierunkowe. Zazwyczaj sieć ma warstwę wejściową, jedną lub wiele warstw ukrytych oraz warstwę wyjściową. Jednostki warstwy wejściowej wstępnie przetwarzają zmienne niezależne modelu (najczęściej skalują je do przedziału [0,1]) i podają wstępnie przetworzone wartości na wejścia jednostek warstwy ukrytej. 15/2018 INFORMACJA ZARZĄDCZA 31
Rysunek 3. Przestrzeń robocza Statistica Rysunek 4. Przebieg sprzedaży Każda z jednostek warstwy ukrytej i wyjściowej ma wiele wejść i jedno wyjście. Na wejściach neuronu podajemy wyjścia innych neuronów. Każdemu wejściu przypisana jest waga. Uczenie sieci neuronowej polega właśnie na znalezieniu najlepszych wag. W celu wyznaczenia wartości na wyjściu neuronu najpierw wykonywana jest agregacja wartości na wejściu. Najczęściej mnożymy wartości na wejściu przez wagi i sumujemy. Do tak uzyskanej liczby dodajemy jeszcze stałą (wyraz wolny lub przesunięcie). Wyjście neuronu obliczane jest jako wartość tzw. funkcji przejścia (lub aktywacji), której argumentem jest wynik agregacji. Tradycyjnie jako funkcję przejścia stosuje się funkcję przypominającą rozciągniętą literę S, np. funkcję logistyczną postaci f(x)= 1/(1+exp{-x}). W głębokim uczeniu (ang. deep learning) używana jest funkcja ReLU: jest ona równa 0 dla ujemnych wartości x, a dla dodatnich x jest równa x. Funkcje aktywacji przedstawione są na Rysunku 2. Kluczową zaletą sieci neuronowych jest możliwość odtworzenia dowolnej zależności między zmiennymi niezależnymi a zależnymi. Wadą sieci jest to, że ich model jest trudny w interpretacji, nie dostajemy jawnego wzoru lub reguły, tak jak to jest w przypadku regresji liniowej i drzew decyzyjnych. Ponadto sieci wymagają danych dobrej jakości: występowanie obserwacji odstających, pustych zmiennych, braków danych utrudnia znalezienie dobrego modelu. Opracowano wiele sposobów uczenia sieci, funkcji przejścia, dodatkowych przekształceń oraz technik umożliwiających uzyskanie 32 INFORMACJA ZARZĄDCZA 15/2018
Rysunek 5. Profil godzinowy liczby klientów w różnych dniach tygodnia optymalnych sieci. Z praktycznego punktu widzenia nie musimy się nimi zajmować, gdyż zastosujemy narzędzie, które sprawdza automatycznie wiele ustawień i wybiera najlepsze. Narzędzie analityczne Model prognostyczny stworzymy w programie Statistica (statistica.pl). Modele uczenia maszynowego w Statistice tworzymy w środowisku graficznym, bez konieczności pisania żadnego kodu (aczkolwiek można korzystać ze skryptów Python i R). Podstawowym środowiskiem Statistiki jest przestrzeń robocza. Jest to coś w rodzaju tablicy, na której rysujemy schemat operacji wykonywanych przez program. Schemat taki obejmuje wszystkie kroki wydobywania z danych użytecznej wiedzy: od pobrania danych, przez ich sprawdzenie, oczyszczenie, przekształcenie, właściwą analizę, aż do zastosowania jej wyników dla nowych danych, zapisania wyników w zewnętrznej bazie danych itp. W przestrzeni roboczej źródła danych procedury analityczne i wyniki reprezentowane są przez ikony (tzw. węzły), a przepływ danych obrazują strzałki łączące węzły (zob. Rysunek 3). Najważniejsze zalety przestrzeni roboczych to: łatwa orientacja w złożonych projektach analitycznych, uruchomienie wieloetapowych analiz jednym poleceniem, modyfikowanie scenariuszy analiz przy minimalnym nakładzie pracy, wszystkie etapy analiz, pośrednie wyniki i dokumenty ujęte są w jednym dokumencie, automatyczna dokumentacja projektów. Ze względu na te zalety przestrzenie robocze są standardem w zaawansowanej analityce i są wykorzystywane w wielu narzędziach różnych dostawców. Eksploracja i przygotowanie danych Prognozowanie zaczynamy od przejrzenia przebiegu prognozowanych danych, najczęściej za pomocą wykresu liniowego. W tym celu umieszczamy w przestrzeni ikonę reprezentującą dane i podłączamy do niej ikonę (węzeł) tworzący wykres (Rysunek 3). Na Rysunku 4 widzimy przebieg liczby klientów w kolejnych godzinach. W oczy rzucają się dwa problemy: Po pierwsze, w środku przebiegu mamy dziurę w danych. Niestety, w tym okresie system zbierania danych miał awarię i dane są niedostępne. Na szczęście mamy na tyle dużo danych, że nie musimy tej luki uzupełniać; Drugi problem to gwałtowny skok liczby klientów w okolicach obserwacji nr 2721. W tym wypadku system gromadzenia danych również zawiódł: wszystkie transakcje odpowiadające godzinom od 19 do 21 zostały przypisane godzinie 21, a godzinie 19 i 20 przypisano 0. Przekłamanie to musimy skorygować chociaż są to tylko trzy obserwacje, mogą one negatywnie wpłynąć na budowany model. Do przestrzeni roboczej dodajemy węzeł poprawiający dane. Liczba klientów w kolejnych godzinach wykazuje bardzo silne wahania z dużą częstotliwością. Jednocześnie nie widać wyraźnego trendu. Wahania liczby klientów związane są ze 15/2018 INFORMACJA ZARZĄDCZA 33
Rysunek 6. Kompletna przestrzeń robocza Rysunek 7. Porównanie obserwowanej i przewidywanej liczby klientów zmiennością sprzedaży w dniach tygodnia i poszczególnych godzinach. Na Rysunku 5 widzimy profile godzinowe pokazujące, jaka była liczba klientów w poszczególnych godzinach dla różnych dni tygodnia. Zwróćmy uwagę, że mamy nie tylko różne wartości dla poszczególnych dni, ale wzór zależności liczby klientów od godziny jest inny dla każdego dnia. Kolejny krok to obliczenie zmiennych pochodnych, które będziemy wykorzystywać do prognozowania liczby klientów. Do przestrzeni roboczej wstawiamy węzeł Przekształcenia zmiennych, który dodaje do danych nowe zmienne. Będzie to zmienna z liczbą klientów z poprzedniego tygodnia oraz identyfikator dnia tygodnia (poniedziałku, wtorku itd.). Tworzenie i ocena modelu prognostycznego Do przewidywania użyjemy sieci neuronowych. Jak już wcześniej wspomnieliśmy, sieci są w stanie nauczyć się bardzo złożonych wzorców. Problemem jest to, że mogą nauczyć się danych na pamięć i będą świetnie sobie radziły dla danych z przeszłości i bardzo źle przewidywały przyszłość. Dlatego, do prawidłowej oceny skuteczności modelu, podzielimy dane na dwie części: próbę uczącą wykorzystujemy do tworzenia modelu, innymi słowy uczenia go, próbę walidacyjną, dla której stosujemy model i oceniamy jego przydatność. W zagadnieniach prognozowania najczęściej rolę próby walidacyjnej pełni końcowa część szeregu. My do walidacji użyje- 34 INFORMACJA ZARZĄDCZA 15/2018
my trzech ostatnich tygodni. Będzie to łącznie 336 obserwacji. Do przestrzeni roboczej wstawiamy węzeł, który dzieli dane na dwie części, czyli tworzy dwa nowe węzły przestrzeni. Do węzła z danymi uczącymi podpinamy węzeł sieci neuronowych. Sieci neuronowe dają zaawansowanemu użytkownikowi do dyspozycji wiele ustawień. My skorzystamy z automatycznego poszukiwania najlepszych parametrów. W modelu wykorzystamy zmienne: LiczbaPT liczba klientów sprzed tygodnia, Święto informacja, czy danego dnia było święto, Dtyg dzień tygodnia, Godzina identyfikator godziny. Węzeł sieci neuronowych domyślnie dzieli dane na trzy części: próbę uczącą, testową i walidacyjną. Ponieważ już wydzieliliśmy próbę walidacyjną, to w węźle sieci podzielimy dane na dwie części: uczące, na których będziemy uczyć sieć, i testowe, na podstawie których program podejmie decyzję o zatrzymaniu procesu uczenia i wyborze najlepszego modelu. W uczeniu maszynowym najczęściej wybiera się od 20 do 30% danych jako próbę testową: my wybierzmy 20%. Po nauczeniu sieci program automatycznie utworzy nowe węzły przestrzeni: Węzeł PMML zawiera kod modelu w języku PMML, Węzeł Szybkie wdrażanie służący do stosowania modelu dla nowych danych. Do węzła Szybkie wdrażanie podłączamy dane walidacyjne, a do wyników tego węzła podłączamy węzły tworzące wykres liniowy i obliczające miary dopasowania naszego modelu. Kompletną przestrzeń roboczą przedstawia Rysunek 6. Średni błąd bezwzględny dla naszego modelu wynosi około 3, a względne odchylenie przeciętne wynosi około 4,8% o tyle procent średnio myli się nasza sieć. Taka wielkość miar dopasowania jest całkiem zadowalająca w przypadku naszego zadania. Przy ocenie modelu prognostycznego zawsze powinniśmy obejrzeć wykres zestawiający przebieg w czasie wartości prognozowanych i obserwowanych. Pozwala to ocenić, czy model prawidłowo oddał wzorzec przebiegu oraz czy model i wartości rzeczywiste nie rozjeżdżają się. Na wykresie na Rysunku 7 widzimy porównanie prognozy i rzeczywistej liczby klientów w ostatnim tygodniu. Wydaje się, że model jest poprawny, faktyczny przebieg liczby klientów został odtworzony, nie ma też jakichś bardzo dużych pojedynczych odchyleń. Zauważalnie większy błąd mamy dla trzeciego dnia, dzieje się tak dlatego, że tydzień wcześniej mieliśmy awarię i dane zostały utracone. W związku z tym do obliczenia prognozy użyliśmy danych nie sprzed tygodnia, ale sprzed dwóch tygodni, co pogorszyło trafność prognozy. Podsumowanie W przedstawionym przykładzie, dzięki wykorzystaniu metody sieci neuronowych stworzyliśmy model prognostyczny dla rzeczywistych danych. Pracowaliśmy w przestrzeniach roboczych Statistica (https://bit.ly/2kyaisw). Pomimo typowych problemów z jakością rzeczywistych danych, w dość prosty sposób udało nam się utworzyć skuteczny model. ANALITYKA DANYCH DO OPTYMALIZACJI DECYZJI I DZIAŁAŃ MODELE PREDYKCYJNE, DATA MINING, MACHINE LEARNING, DEEP LEARNING BUSINESS INTELLIGENCE, BIG DATA PLATFORMY DECYZYJNE Z PÓŁKI I NA ZAMÓWIENIE SCENARIUSZE DECYZYJNE I SILNIKI SCORINGOWE WSPARCIE DOŚWIADCZONYCH ANALITYKÓW I WDROŻENIOWCÓW ANALITYKA DANYCH DLA BIZNESU SPRZEDAŻ I MARKETING ZARZĄDZANIE RYZYKIEM KREDYTOWYM WYKRYWANIE FRAUDÓW ANALIZA MIGRACJI KLIENTÓW (CHURN) PROGNOZOWANIE WINDYKACJA WIELE INNYCH ZASTOSOWAŃ StatSoft Polska Sp. z o.o. ul. Kraszewskiego 36 30-110 Kraków tel.: 12 428 43 00 info@danewiedzasukces.pl, info@statsoft.pl 15/2018 INFORMACJA ZARZĄDCZA 35