Szeregi czasowe: rozmowa z doświadczonym inżynierem z Uber
- Czym jest prognozowanie na szeregach czasowych (time series forecasting)?
- Jakie zastosowanie mają szeregi czasowe w biznesie?
- Jaka jest różnica pomiędzy statystyką a uczeniem maszynowym?
- Które podejście sprawdza się najlepiej w stosunku do prognozowania szeregów czasowych?
- Na co należy zwracać szczególną uwagę przy wykorzystywaniu uczenia maszynowego do prognozowania szeregów czasowych?
- Czy odbywają się konkursy związane z prognozowaniem szeregów czasowych?
- Jak konkursy wpływają na rozwój technologii?
- Czym jest M4 Competition?
- Jak działa model hybrydowy który łączy uczenie maszynowe ze statystyką?
Prognozowanie szeregów czasowych jest prawdopodobnie jedną z tych dziedzin, która przy minimalnym wysiłku daje namacalne korzyści. Mało tego – okazuje się, że wiele firm dotychczas robiło to w tak prymitywny sposób, że wystarczy minimalna zmiana podejścia, aby uzyskać pozytywną różnicę.
Tak się złożyło, że słuchałem wiele podcastów o różnych tematykach, na przykład biznesowej i był jeden odcinek, który mówił o poradach dla przedsiębiorców. W tym odcinku był poruszony temat mówiący o tym, że wiele przedsiębiorstw nie wie, ile pieniędzy spodziewać się pod koniec miesiąca.
Wystarczy obliczyć, ile średnio zarabiasz w dni robocze, i następnie jeżeli już wiesz ile zarabiasz średnio w ciągu dnia, a do końca miesiąca pozostało Ci, na przykład siedem dni roboczych, to wystarczy przemnożyć tą wartość średnią razy siedem i tyle jeszcze zarobisz do końca miesiąca. Kiedy tego słuchałem z zaciekawieniem, ponieważ sam zajmuję się tego typu tematami i chciałem dowiedzieć się czegoś nowego, aby zyskać nowe spojrzenie oraz doświadczenie, to dało mi to do myślenia, bo skoro takie proste podejście jest w stanie pomóc, to tym samym prostsze modele uczenia maszynowego radzą sobie z tym jeszcze lepiej ze względu na większą jakość prognozy oraz predykcji.
Jeżeli, na przykład wyliczymy sobie taką średnią, i ta średnia przypada akurat na czarny piątek w listopadzie, który był niedawno, to wtedy całkowicie sobie zaburzysz cały system. Więc nie możesz sobie wziąć jakiejkolwiek średniej z dowolnego dnia roboczego. Prawdopodobnie wymagane jest uwzględnienie sezonów. Dodatkowo, trzeba brać pod uwagę cykle, przesunięcia. Biznes ciągle się rozwija. Coś dodaje, coś usuwa. W grę wchodzą również większe koszty, i tak dalej. Tych dodatkowych rzeczy trochę jest. Warto wtedy zastosować pewne narzędzie, które pozwoli na uwzględnienie tego wszystkiego.
O znaczeniu szeregów czasowych powiedziałem więcej w odcinku 39. Tytuł tego odcinka to: “10 przykładów jak uczenie maszynowe może pomóc Twojemu biznesowi”. Tam powiedziałem więcej o sposobach mapowania oraz innych tematach, które pomagają rozwiązać wyżej wymienione problemy.
Prawdopodobnie wiesz też, że prowadzę kurs, który nazywa się: “Praktyczne prognozowanie szeregów czasowych”. Właśnie trwa pierwsza edycja. Muszę przyznać, że naprawdę włożyłem w to wiele wysiłku i zawsze kiedy mam zamiar wystartować z kolejną edycją, to mówię sobie: nigdy więcej, ponieważ przerasta to troszkę moje możliwości. Jestem już na tyle zmęczony, że gdybym zobaczył dinozaura przebiegającego obok mnie, to nawet nie zwróciłbym na niego uwagi, bo po prostu nie miałbym już kompletnie siły o tym myśleć i analizować tego zadziwiającego zjawiska :). Z drugiej strony, kiedy już kończę taki kurs i obserwuję, jak ludzie się uczyli i potem relacjonują, że mogą to zastosować na różnych obszarach, to jest to bardzo satysfakcjonujące.
Też między innymi, są do wyboru dwa pakiety. Pakiet indywidualny oraz wspólny, gdzie wdrażamy rozwiązania na konkretnych danych, i natychmiast otrzymujemy spodziewane wyniki. To jest bardzo pocieszające i motywujące. Wtedy czujesz, że wszystko co robisz ma jakiś sens.
Dlatego, jeżeli na poważnie rozważasz robienie prognoz sprzedaży, popytu oraz innych rzeczy związanych z tym tematem, to zapraszam Cię bardzo gorąco do udziału w drugiej edycji, która odbędzie się w marcu i będzie trwała sześć tygodni. Więcej o tym powiem kolejnym razem. Mam zamiar zaprosić kilku absolwentów do kolejnych rozmów, prawdopodobnie w styczniu, może w lutym.
W pewnym momencie, kiedy bardziej skupiłem swoją uwagę na kursach oraz konferencjach to stwierdziłem, że to bardzo fajne uczucie pomagać ludziom oraz dzielić się z nimi posiadaną wiedzą. Z drugiej strony, nie da się odciąć od robienia rzeczy samodzielnie, wprost, wdrażania ich na produkcję. Nagle może się okazać, że wiedza którą posiadam i którą zdobyłem w sposób praktyczny, po czym przestałem się tym zajmować, staje się trochę mniej aktualna. Wtedy podjąłem decyzję, że nadal muszę osobiście zajmować się rzeczami związanymi z biznesem, z konkretnymi danymi. Wcześniej to bardziej wyglądało jak consulting z jedną osobą, teraz to zaczyna nabierać wyższych obrotów. Jestem współzałożycielem firmy Intelligene. Aktualnie mamy wiele projektów, niektóre z nich związane są właśnie z szeregami czasowymi. Uzyskanie zgody na powiedzenie o tych tematach to dość trudna sprawa, ale mam nadzieję, że niedługo uda mi się wszystko załatwić i będę w stanie zdradzić więcej.
Na razie trochę upraszczając, załóżmy że to jest taka prognoza popytu. Kiedy obserwowałem ten problem i powiedzmy, że uda się poprawić prognozę o jeden procent przy obecnych obrotach, to nagle się okazuje, że już w pierwszym roku wszystkie koszty związane z tym projektem się pokrywają i kolejnym krokiem są tylko oszczędności.
W ogóle, trochę mnie dziwi to, że większe firmy podchodzą do tego tak późno. Częściowo wynika to z biurokracji, z zamieszania, z polityki wewnętrznej. I aby rozwiązać ten problem, to więcej czasu spędzamy na aspektach prawnych, formalnych, zamiast na rozwiązywaniu konkretnych problemów. Ale ja to wszystko przyjmuję z pokorą. Po prostu uznałem, że tak funkcjonuje ten świat.
Podsumowując, postaram się przekazać więcej informacji o firmie którą współtworzę. O tych wszystkich planach, które zapowiadają się bardzo ciekawie. Aktualnie rozpoczynamy współpracę z czterema większymi firmami, które na pewno znasz. Ale to na razie sekret. 🙂
Teraz przechodzimy do sedna tematu. Potrzebowałem osoby, która powie więcej o szeregach czasowych. Chodzi o prawdziwego weterana który, jak to się mówi “zjadł zęby” w tym obszarze i taką osobę znalazłem. Jest nią Sławomir Smyl. Sławek pracuje w Uberze. Jest on bardzo otwarty na świat oraz na nowoczesne metody, które potrafi adaptować. Moim głównym celem było zapytać wprost, czy metody statystyczne radzą sobie lepiej od uczenia maszynowego. Wbrew pozorom, oczekiwałem, że metody statystyczne w przypadku konkursu M4 poradzą sobie lepiej. Było tam 100 000 szeregów czasowych. Problem z tymi szeregami był taki, że one nie posiadały żadnego kontekstu, tylko samą wartość zmieniająca się w czasie.
Załóżmy, że mamy na przykład kurs waluty (złotówka – dolar), to mamy tych szeregów czasowych powiedzmy 10 000, ale nie mamy żadnych informacji ani kontekstu. Wiemy tylko, że ta wartość zmienia się w czasie. Zwykle w takich zastosowaniach metody statystyczne działają lepiej, ale tutaj dzięki jednej sztuczce, która zastosował Sławek, udało się usprawnić wynik i tym samym wygrać ten konkurs. Zajął on pierwsze miejsce, i to po raz kolejny potwierdza jego talent oraz zdolności w tej dziedzinie. Jest on bardzo fajnym człowiekiem.
Serdecznie zapraszam!
Cześć Sławek, przedstaw się: kim jesteś, czym się zajmujesz, gdzie mieszkasz?
Dzień dobry. Nazywam się Sławek Smyl. Jestem Data Scientist, czyli tak zwanym naukowcem od danych. Mieszkam w okolicach San Francisco i pracuję w Uberze. Moją specjalnością jest prognozowanie szeregów czasowych. Zajmuję się tym od 4-5 lat. Poprzednio pracowałem przy Windows Azure, gdzie zajmowałem się symulowaniem tego systemu. Zajmowałem się również walką ze zorganizowaną przestępczością, co było związane z nielegalnym użyciem Azure. Poprzednio miałem do czynienia z komputerami, a już w bardzo zamierzchłej przeszłości byłem fizykiem medycyny. Studiowałem w Krakowie.
Co ostatnio czytałeś?
Jak byłem w Polsce, w sierpniu to czytałem “The Money Formula” autorstwa Paula Wilmotta i Davida Orrella. Paull Wilmott jest to taka legenda matematyki finansowej. David Orrell też jest matematykiem z Oxfordu. Jest to książka, która opisuje historię finansów i matematyki finansowej, zaczynając od Newtona, a kończąc na skomplikowanych instrumentach finansowych. Jest to ciekawa ekspozycja, która mówi o tym, jak ekonomiści kopiowali metody i modele fizyczne. W fizyce dziewiętnastowiecznej mieliśmy model gazu doskonałego. Ekonomiści tworzyli swoje modele zakładając, że społeczeństwo składa się z niezależnych i idealnie racjonalnych agentów, którzy myślą tylko o sobie, ale jest też ta równowaga i niewidzialna ręka. Ciekawa ekspozycja historyczna, chociaż pod koniec autorzy twierdzą, że wszystkie te elementy które spowodowały kryzys finansowy w 2008 są dalej na miejscu, także oni nie są optymistami.
Rozumiem, że ta książka jest napisana dość przystępnym językiem?
Ja myślę, że tak. Ja ją kupiłem dlatego, że słuchałem doktora Davida Orrella podczas konferencji dotyczącej prognozowania. On opowiadał tam, że opcje finansowe można atakować używając matematyki i fizyki kwantowej, więc to było interesujące, ale w tej książce nic nie ma na ten temat, dzięki czemu jest zupełnie przystępna. Również ekspozycja historyczna początków Newtona jest bardzo ciekawa.
Jesteś mistrzem szeregów czasowych. Przez ostatnie 5 lat głównie tym się zajmujesz. Nie miałem okazji spotkać wielu osób, które potrafiłyby się skupić na jednym, dość wąskim temacie. Wyjaśnij czym jest prognozowanie na szeregach czasowych (time series forecasting).
Na pewno każdy się z tym kiedyś spotkał. Jakikolwiek wykres w czasie, na przykład ilość wypadków samochodowych od roku 1952 do dzisiaj, czy jakaś krzywa w skali jeden punkt na rok, czy kwartalna produkcja masła czy mleka. Ta sama rzecz, która rozwija się w czasie i zapisujemy ją z miesiąca na miesiąc, czy z sekundy na sekundę, to jest szereg czasowy. EKG jest szeregiem czasowym. Jest to po prostu krzywa w czasie.
Jakie zastosowanie mają szeregi czasowe w biznesie? Czy można nimi uzyskać jakąkolwiek wartość dodaną?
W zasadzie wszystkie biznesy potrzebują przewidywania. Za pomocą szeregów czasowych można wykonać, na przykład analizy w sensie klasyfikacji. Podobno jak ktoś ma stan przedzawałowy, to na EKG co pewien czas pojawia się taki dziwny zygzak, więc można to klasyfikować jako stan przedzawałowy. Czy zawał nastąpi za 15 minut, czy za pół godziny, tego nie wiemy. Chodzi bardziej o klasyfikację. Natomiast w biznesie ważniejsze jest ile sprzedamy, ile będzie reklamacji, ilu nowych klientów do nas przyjdzie. Praktycznie cokolwiek, co dzieje się w biznesie. Biznes dzieje się w czasie, więc nieważne co robimy, to zawsze ma to wymiar czasu i jakąkolwiek decyzję w biznesie podejmujemy, jest ona jakoś związana z przewidywaniem. Ludzie muszą robić przewidywanie: Jak się będzie rozwijał ich biznes? Czego będzie potrzebował? I właśnie można to robić mniej, lub bardziej matematycznie. Zależy to też od tego, czy mamy dobre dane.
W teorii statystyka i uczenie maszynowe mają wiele wspólnego. W praktyce jest inaczej. Spróbujmy przedstawić, gdzie jest ta różnica, bo cięzko powiedzieć, że uczenie maszynowe jest czymś zupełnie nowym. Jest tam sporo statystyki. Z drugiej strony, statystyka to nie jest uczenie maszynowe. Na czym polega ta różnica? Gdzie jest ta granica?
Wydaje mi się, że to jest głównie związane z tym kto to robi, i jak łatwo się tego używa. Statystycy z reguły mają swoje w miarę proste modele, które dobrze funkcjonują. Natomiast algorytmy przewidywania szeregów czasowych mają ok. 50 lat, powoli się zmieniają, powoli stają się coraz lepsze, i tym głównie zajmują się statystycy. Natomiast masz też ludzi z działu Computer Science, którzy podchodzą do tego z innej strony. Ale koniec końców, w obu przypadkach jest tak samo. Czyli jest tam jakiś model, bardziej czy mniej skomplikowany, i ten model ma jakieś parametry, i ostatecznie robi przewidywanie. Według mnie, jest to bardziej kwestia tradycji i takiego podejścia, że w statystyce mają to już we krwi, że jak produkują coś, to to jest dosyć łatwe do użycia. Jest tam jakiś program w R czy w Python. Można nawet kupić program do przewidywania, gdzie użytkownik po prostu podaje do komputera tą krzywą, naciska jeden przycisk, i jest.
Natomiast jeśli chodzi o Machine Learning, to z reguły zakłada się, że ktoś wie jak tego używać. Programista, Data Scientist, który nad tym spędzi czas, napisze program, będzie się bawił z różnymi parametrami i w końcu być może wyjdzie mu coś lepiej, niż osobom od statystyki. Ale także jest to kwestia kultury i łatwości użycia. Te algorytmy statystyczne są bardzo łatwe do użycia, a Machine learning to jest mieszanka programowania, budowania modeli, i tak dalej. Jest to znacznie bardziej skomplikowane.
Które podejście sprawdza się najlepiej w szeregach czasowych? Czy metody statystyczne radzą sobie lepiej, albo jest odwrotnie?
Ja myślę, że to wszystko zależy od kontekstu, ale generalnie nie ma czegoś takiego, że jedna z nich jest znacznie lepsza, choćby właśnie z uwagi na łatwość użycia. Jeżeli ja mogę używać, na przykład pakietu Forecast, albo nawet kupię program za kilkaset dolarów czy więcej, i wystarczy mi że nacisnę jakiś przycisk i mam przewidywanie, to po pierwsze, te statystyczne metody są znacznie łatwiejsze do użycia. Po drugie, one z reguły pracują znacznie szybciej. Jest to liczba rzędu poniżej jednej sekundy na jedną krzywą, co może mieć znaczenie. Ludzie w dzisiejszych czasach mają ogromne ilości danych, i na przykład potrzebują przerobić w miarę szybko kilkadziesiąt tysięcy z nich.
Nie możesz siedzieć 10 minut nad każdą, a już zwłaszcza nie możesz wizualnie oglądać każdej z nich i decydować jakie tu parametry zastosować. Jeżeli chodzi o szybkość, łatwość użycia to właśnie te statystyczne metody są najlepsze. Czasami też możesz mieć dużo regresorów, gdzie nie masz tylko tej krzywej, ale oprócz tej krzywej masz jeszcze inne rzeczy, na przykład: w tym województwie była lepsza pogoda, a w tym, na przykład zwiększa się ilość maszyn. Czyli masz dodatkowe informacje. Jak masz dodatkowe informacje które są dobre, to w tym momencie uczenie maszynowe zaczyna mieć przewagę. Jak masz czystą krzywą, bez niczego innego, to prawdopodobnie metody statystyczne będą wtedy lepsze.
Chciałem jeszcze dodać, że jeżeli chodzi o szybkość, to trzeba wspomnieć, że jest ten czas na trenowanie i przygotowanie tego modelu, oraz czas na predykcję. Jeśli chodzi o predykcję, to jest ona szybka, natomiast jeśli chodzi o przygotowanie modelu, to już niekoniecznie. Na przykład, chociażby ta ARIMA, gdzie musisz zbadać stacjonarność, dobrać parametry, itd.
Ale to wciąż są okolice jednej sekundy. A w przypadku jakiejś tam sieci neuronowej, czy podobnych, to mówimy o wielu minutach, być może nawet wielu godzinach. Także to wciąż są różnice. I jeśli mowa o dłuższym trenowaniu, taki model statystyczny robi treningi i przewidywanie w tym samym momencie. A w przypadku uczenia maszynowego to są dwa oddzielne kroki. Najpierw trenujesz, przez co jest to bardziej skomplikowane.
Na co należy zwracać szczególną uwagę przy stosowaniu uczenia maszynowego do prognozowania? Bardziej mam na myśli szeregi czasowe.
Chyba na przygotowanie danych. Praktycznie te wszystkie metody uczenia maszynowego są generalne. One nie są napisane z myślą o szeregach czasowych. Pomijając sieci neuronowe, one nie mają pojęcia czasu, więc ten czas musisz sam wprowadzić, na przykład mając takie dwa okienka, input i output, które przesuwają się po tej krzywej, z każdym krokiem wyciągasz cechy z tego okienka input i przewidujesz co jest w output. Więc Ty musisz przerobić tą krzywą czasową na coś, co uczenie maszynowe rozumie, czyli właśnie na ten input-output. Jest to dość skomplikowane i wcale nie takie oczywiste. Wiele osób popełnia wtedy błędy. A jeżeli tego nie zrobisz dobrze, to często nawet najlepsze algorytmy uczenia maszynowego nie zadziałają. To jest częsta przyczyna dla którego te sprawdzone, proste algorytmy statystyczne zwyciężają w porównaniu z uczeniem maszynowym. One wiedzą co to jest szereg czasowy, one mają w sobie to pojęcie. A tutaj użytkownik to musi przygotować, a to przygotowanie danych nie jest takie proste.
Jeśli chodzi o uczenie maszynowe, to przygotowanie danych jest rzeczywiście dużym wyzwaniem. Pozwolę sobie zmienić temat i ciekawy jestem jednej rzeczy. Bierzesz udział w konkursach, na przykład takich jak M4, i zajmujesz tam, na przykład pierwsze miejsce. Jak konkursy wpływają na rozwój technologii, i przede wszystkim jaką rolę mają w tym szeregi czasowe?
Wygrałem dwa z tych konkursów i uważam, że są one bardzo istotne. Generalnie, cały Deep learning, ten ogromny postęp w sieciach neuronowych który nastąpił w ciągu ostatnich 8 czy 10 lat, to w dużej mierze jest wynikiem tego, że właśnie te dziedziny przyjęły modele z konkursów. Było coś takiego jak ImageNet, czyli coroczny konkurs do rozpoznawania obrazów. I to było niesamowite, jak ludzie co roku produkowali nowe rozwiązania z reguły używając sieci neuronowe. Co roku był duży postęp w wielu dziedzinach. Ludzie piszą artykuły, gdzie mają jakiś dziwny algorytm, który podobno działa super na trzech krzywych, które oni sobie w jakiś sposób dobrali. Nie jest to przekonywujące. Gdy masz duży zbiór danych i pokażesz, że na tym dużym zbiorze danych Twój algorytm naprawdę poprawia rekord świata, to wtedy jest to czymś co mówi, czy Twoja metoda jest intelektualnie interesująca, czy też wygląda głupio, czy też nie jest przekonywująca, ale faktem jest że poprawiłeś rekord świata. I to zmusza ludzi, aby się temu przyjrzeć. Wtedy ludzie stwierdzają: okej, Twoje wyjaśnienie nie ma za bardzo sensu, ale jest naprawdę super i my to ulepszymy.
To powoduje, że ludzie biorą dobre elementy z jednej metody, poprawiają je i dzięki temu wszystko idzie do przodu. Ja bardzo się cieszę, że M4 się odbyło. Zresztą, w 2016 wygrałem konkurs. Jest to organizacja inżynierska. Brałem udział w konkurencji GEFCom, czyli mówiącej o zużyciu energii elektrycznej, jak i również o M4. To mi naprawdę dużo dało. Ja przy każdym takim konkursie uczę się bardzo dużo i mam doświadczenie, które nie zawsze jest tak łatwo można zdobyć w pracy. W pracy czasami nie masz takiego dużego zbioru danych, albo zajmujesz się ciągle tym samym. Tu masz coś nowego. Według mnie, jak się kończy taki konkurs, to po pierwsze wiadomo, która metoda była najlepsza, a po drugie powstaje ten zbiór danych przez co ludzie, którzy nawet nie brali udziału w tym konkursie, mogą go używać, pisać artykuły o tym, itd. Także dla mnie, to jest zupełnie fundamentalne i bardzo się cieszę, że te konkursy miały miejsce.
Fajnie to ująłeś, też bardzo popieram konkursy. A jakie są najciekawsze konkursy związane z szeregami czasowymi i prognozami szeregów czasowych?
Wydaje mi się, że nie ma ich zbyt wiele. Najciekawsza jest seria, którą robił Makridakis. Zaczęło się to w 1978, kiedy napisał artykuł w którym pokazywał, że proste metody statystyczne takie jak, na przykład że czegoś będzie tyle samo za rok, co dzisiaj, czyli taka metoda, że bierzemy dziś obecne dane, działają równie dobrze jak bardziej skomplikowane, na przykład jak ARIMA. On miał duży kłopot z przekonaniem innych statystyków którzy nie mogli w to uwierzyć, że tak zaawansowana metoda matematycznie poprawna jak ARIMA, mogłaby być na tym samym poziomie, co coś takiego jak naiwne przewidywanie. Odbyła się tam zażarta dyskusja i on, aby ją przerwać, zorganizował właśnie pierwszy konkurs M1.
Rezultaty były zgodne z tym, o czym właśnie mówił w swoim artykule, że naprawdę nie ma specjalnej różnicy. Później ludzie go krytykowali, więc zorganizował M1, M2, M3. M3 odbywało się w 2000 roku. Było tam 3000 szeregów czasowych, po której była długa przerwa. W tamtym roku było ogłoszone M4, które się skończyło w tym roku. 100 000 krzywych. Głównie z biznesu, ale i nie tylko. Krzywe z różnych miejsc, nie wiadomo dokładnie skąd. W każdym razie, są tam krzywe miesięczne, jak i trzystuletnie więc to jest ciekawe, skąd profesor Makridakis to ściągnął.
W tym wypadku chodziło o porównanie metod uczenia maszynowego z metodami statystycznymi. Profesor Makridakis przewidywał, że uczenie maszynowe nie będzie działać za dobrze, bo tak zawsze było historycznie od 2000 roku, i generalnie miał rację. 240 osób się zarejestrowało, około czterdziestu wysłało wyniki, a z nich tylko 6 używało uczenia maszynowego, i one wypadły bardzo marnie. Druga metoda używała kilku statystycznych metod, ale wagi pomiędzy nimi było zrobione za pomocą uczenia maszynowego. I ja wygrałem za pomocą metody, która właściwie łączy obie rzeczy. Zarówno uczenie maszynowe, jak i metody statystyczne, co nazywane jest wygładzaniem wykładniczym. To było zaskoczeniem, ale profesor Makridakis to bardzo otwarty człowiek i mimo swojego wieku wcale nie jest dogmatykiem. On naprawdę stara się znaleźć to, co działa.
Czy jest to metoda statystyczna, standardowa, prosta czy skomplikowana. Jego interesuje tylko czy działa, i dlaczego uczenie maszynowe generalnie, rzecz biorąc nie działa. Bardzo się cieszył, że jest coś nowego, czyli metoda, która łączy to stare dobre podejście statystyczne z sieciami neuronowymi. To było dla niego największe odkrycie tego konkursu, zarówno jak i jego wynik.
Wejdźmy trochę w szczegóły. Wygrałeś konkurs, zbudowałeś model hybrydowy który potrafi łączyć świat statystyki z uczeniem maszynowym. Zdradź nam coś więcej na ten temat. Co tam dokładnie zrobiłeś?
Użyłem prostych formuł używanych w równaniach wykładniczych, czyli proste algorytmy do przewidywania szeregów czasowych, które dobrze działają. Wziąłem niektóre z tych formuł i w trakcie tej pętli uczącej się sieci neuronowej, robiłem w trakcie takie mini-przygotowanie danych, w której te formuły wygładzały moje krzywe i usuwały efekty sezonowe. Teraz sieć neuronowa widziała ładną krzywą bez tych efektów sezonowych, tak samo znormalizowaną i mogła się skoncentrować na tym co jest bardzo istotne, czyli na trendzie. Wcale nie musi on być liniowy. Może być nieliniowy, lub taki troszeczkę pokrzywiony w górę, albo w dół. Więc masz te dobre, tradycyjne równania, i istotne jest to, że jest to jeden algorytm dlatego, że parametry tych formuł są tak samo optymalizowane przez ten sam algorytm, który optymalizuje wagi tych sieci neuronowe. Także tu nie ma dwóch etapów, tylko jeden. Algorytm sieci neuronowe został rozszerzony o te formuły z tradycyjnych algorytmów statystycznych i to zadziałało bardzo dobrze. Było to tylko możliwe od niedawna, bo to wymaga czegoś takiego jak Dynamic Computational Graph Systems.
To jest nowy rodzaj systemów sieci neuronowe. Mają one około roku lub półtora. Jest to Pyro i Pytorch. To pozwala na znacznie większą swobodę w budowie modeli, w taki sposób, że model który trenujemy zmienia się od jednej krzywej, to drugi nie jest taki sam. Także możemy mieć nie tylko generalne parametry jak, na przykład pakiet z czarną skrzynką tej sieci neuronowej, ale każda krzywa ma parę swoich parametrów. Oczywiście nie wszystkie, ale każda ma swoje własne słupki sezonowości. Czyli masz generalny model tej sieci neuronowej i oddzielnych parametrów dla każdej krzywej osobno. Mamy tutaj model hierarchiczny, ponieważ zawierają one generalne, wszystkie zmienne dla każdej krzywej, jak i kilka oddzielnych parametrów dla każdej z nich. Jest to możliwe tylko dzięki Dynamic Computational Graph Systems.
Wspomniałeś o konkursie w którym macie 100 000 szeregów czasowych. Masz model hybrydowy, czyli łączysz sieci neuronowe z wygładzaniem wykładniczym. Jak długo ten model się uczył?
W tych 100 000 krzywych było kilka oddzielnych kategorii. Na przykład 48 000 krzywych miesięcznych, czyli jeden punkt na miesiąc. 24 000 krzywych kwartalnych, czyli jeden punkt na kwartał. 20 parę tysięcy krzywych rocznych, czyli jeden punkt na rok. Było tam bodajże sześć kategorii różnych krzywych i dla każdej z nich trzeba było wytrenować oddzielny model. Ja pracowałem ciężko przez wiele miesięcy próbując różnych algorytmów, różnych podejść, różnych parametrów, ale w końcu jak już wiedziałem co mam robić w ciągu tych ostatnich paru dni, to zdecydowałem się te wszystkie modele przekalkulować od początku do końca w ciągu tygodnia na jednym paroletnim komputerze. Także ten najdłuższy, miesięczny zajął mi trzy-cztery dni.
Jak teraz opowiadasz o tym rozwiązaniu, to brzmi bardzo ciekawie, tym bardziej, że jest to najlepsze rozwiązanie jakie udało się zbudować. Natomiast, czy odważyłbyś się tego użyć w produkcji?
Jak najbardziej, i właśnie obecnie moim głównym zadaniem jest przeniesienie do produkcji ulepszonego modelu z M4. To jest moje moje główne, oficjalne zadanie którym zajmuje się w pracy.
Wspomniałeś o jednej takiej rzeczy. Do tych sieci neuronowych potrzebne są możliwości budowania dynamicznych grafów, i to jest prawdopodobnie robione w Tor, ale wiem, że i tak zrobiłeś to po swojemu, na niższym poziomie. Czego dokładnie użyłeś i czy to rozwiązanie jest gdzieś dostępne?
To nie jest tak, że ja to zrobiłem od podstaw. Owszem, napisałem troszeczkę rozszerzeń, ale generalnie używałem mniej popularnego, ale podobnego programu. Używałem dynet. Można go sobie ściągnąć. Całkiem przyzwoity program. Ja wybrałem dynet z tego powodu, że oni mają dobre wsparcie do C++. Ja nie chciałem używać Pythona, z uwagi na to, że wiedziałem, że to 100 000 muszę zrobić jak najszybciej.
Poza tym, miałem nadzieję, że mogę to zrobić w multithreading, czyli że mogę napisać trochę bardziej zaawansowany program, który będzie procesował na wielu wątkach. Koniec końców, to się nie udało. Ja to troszkę rozszerzyłem, napisałem trochę klas, ale to nie jest tak, że ja wystartowałem od zera. To byłoby za dużo. Jak się wpisze w Google “M4 Forecast Competition GitHub”, to znajdziemy tam wszystkie metody, które mają krótki opis i kod. Także tam można wszystko znaleźć.
Z tych 40-paru osób, które cokolwiek tam wysłali, to tylko sześć wykorzystało uczenie maszynowe. Z drugiej strony, uczenie maszynowe w połączeniu ze statystyką wygrało. I jak to teraz zinterpretować? Czy to uczenie maszynowe dobrze sobie radzi z szeregami czasowymi? Czy jednak wymagana jest ta kombinacja. Ty trochę złamałeś te stereotypy. Co teraz można z tym zrobić?
Opowiem jeszcze taką anegdotę. Zarejestrowało się 240 osób, a w końcu tylko 30- pare wysłało swoje projekty. Częściowo dlatego, że ludzie robili tak zwany backtesting, czyli sprawdzali jak ich metoda działa. Załóżmy, że mamy krzywą miesięczną i zadaniem jest przewidzieć następnych 18 miesięcy, czyli 18 punktów. Krzywa którą ja mam, ma na przykład, 50 punktów, więc mogę udawać, że tak naprawdę mam 32 punkty. Z tych 32 przewidzieć te 18, czyli skrócić tą krzywą o horyzont do przewidywania i nauczyć się przewidywania na tej krótszej krzywej. Następnie sprawdzić jak nam idzie. To jest prawidłowe podejście, które ja zastosowałem. Ludzie to sprawdzali, porównywali i okazywało się, że wcale nie jest tak łatwo wykorzystać standardowe metody, bo organizatorzy podali standardowe wyniki i metody do porównania. Jedna moja znajoma pracowała, po czym stwierdziła, że nie jest w stanie pokonać tych standardowych metod i zrezygnowała z dalszego udziału. Także kto wie, być może na początku było więcej osób które próbowały użyć uczenia maszynowego, ale koniec końców zrezygnowali. To jest jedna z możliwości dlaczego chętnych było więcej, ale nie dotarli do końca.
Jest to generalnie trudny konkurs dla metod uczenia maszynowego, ponieważ masz tysiące tych krzywych, ale bez żadnego opisu. Jedna może okazać, na przykład ilość transakcji w bankomacie, druga to może być, na przykład ilość wylewów rzeki w jakimś tam okresie. Więc masz tysiące krzywych i nie wiadomo skąd one pochodzą. Mają zupełnie inny wygląd, wyginają się w różnym rytmie, pod różnymi kątami. Ich sezonowe wpływy są zupełnie inne. Więc uczenie maszynowe w tym momencie ma kłopoty, ponieważ jedna krzywa wyklucza drugą. Ucząc się z jednej, druga jest zupełnie inna. Także to jest najtrudniejsze zadanie, jakie uczenie maszynowe ma w przewidywaniu szeregów czasowych.
Na przykład jak w Uber przewidujesz ilość podróży samochodem, to mamy inne rzeczy. Możemy wiedzieć w którym mieście, nawet w którym rejonie miasta, jaka jest tam średnia zarobków za godzinę. Mamy wiele innych atrybutów, które są bardzo istotne i to powoduje, że uczenie maszynowe, które ładnie radzi sobie z dużą ilością, i dobrze wyciąga te informacje z dużej ilości atrybutów, w tym momencie będzie miało przewagę. Natomiast, jak mamy taką “gołą” krzywą, bez niczego innego, to jest ciężko. Ja myślę, że to jest podstawowa sprawa. Brak tych dodatkowych atrybutów powoduje, że zadanie jest ciężkie. Nie, że niewykonalne, ale bardzo ciężkie. Z jednej strony można stwierdzić, że uczenie maszynowe wygrało, a z drugiej niekoniecznie, bo bez tych formuł, które były w środku tego algorytmu nie wygrałoby. Więc oba tłumaczenia są właściwe. Ja myślę, że to jest dobry algorytm. Ten algorytm może być wzbogacony przez dodatkowe cechy, atrybuty. I to, czy to był triumf uczenia maszynowego, zależy od punktu widzenia.
Czy masz w planach wdrożyć te rozwiązania do Ubera?
Tak, to jest właśnie moje główne zadanie w pracy. Przy czym weź pod uwagę, że nie ma jednej metody na wszystko. W różnych kontekstach łatwe, tradycyjne metody statystyczne są jak najbardziej na miejscu. To, że my to wdrożymy nie znaczy, że każda krzywa w Uberze będzie tym przewidywana. Być może ich zastosowanie trochę się rozszerzy, ale robimy to tylko wtedy, kiedy to ma sens, a nie dlatego że wszyscy tego używają. To, że w jakiejś sytuacji metoda jest najlepsza, nie znaczy, że będzie najlepsza w pozostałych.
Czy coś oprócz tego, że w trakcie konkursu M4 tyle osób się poddało jeszcze Cię zaskoczyło?
Zaskoczyła mnie mała ilość rozwiązań z użyciem uczenia maszynowego. Wydaje mi się, że Ci którzy dotrwali do końca tego konkursu i przedstawili swoje wyniki, byli to głównie statystycy, którzy częściowo dodawali uczenia maszynowego, ale to była tradycyjna szkoła. Jest to trochę deprymujące. Młode pokolenie rośnie. Oni się mniej boją różnych sieci neuronowych. Z resztą to widać na corocznych konferencjach, w której do najważniejszych w tych dziedzinach, można zaliczyć między innymi International Symposium on Forecasting. Uczęszczam na nią od około 5 lat, i ta ilość ludzi którzy przychodzą na moje wykłady rośnie. Więc widać, że to młodsze pokolenie jest bardziej zainteresowane tymi nowymi metodami, i dobrze.
Jak można znaleźć Ciebie w sieci?
Najłatwiej wpisać Slawek Smyl w LinkedIn i tam można mnie znaleźć.
Dzięki wielkie Sławek za tę rozmowę. Za tą chęć podzielenia się wiedzą, której masz bardzo dużo, w szczególności jeśli chodzi o szeregi czasowe. Jeszcze raz dzięki za podzielenie się wszelkimi informacjami. Do zobaczenia!
Dziękuję bardzo.
Bardzo dziękuję za wysłuchanie tego odcinka. Mam nadzieję, że udało Ci się wyciągnąć z niego wiele ciekawych informacji. Dziękuję Ci bardzo za wspólnie spędzony czas, za słuchanie BiznesMysli, za inspirację, oraz za wszystkie informacje zwrotne, które od Ciebie dostaję, i życzę Tobie wszystkiego najlepszego. Cześć! Na razie! Trzymaj się!