Jak przewidzieć ruch na podstawie danych z poprzednich szeregów czasowych?

18

Jeśli mam sklep detaliczny i mam sposób, aby zmierzyć, ile osób wchodzi do mojego sklepu co minutę, i oznaczyć te dane datą, to jak mogę przewidzieć przyszły ruch pieszy?

Przyjrzałem się algorytmom uczenia maszynowego, ale nie jestem pewien, którego użyć. W moich danych testowych trend rok do roku jest dokładniejszy w porównaniu do innych rzeczy, które próbowałem, takich jak KNN (z, jak sądzę, rozsądnymi parametrami i funkcją odległości).

Wydaje się, że może to być podobne do modelowania finansowego, w którym masz do czynienia z danymi szeregów czasowych. Jakieś pomysły?

użytkownik 1132959
źródło
Może ten dokument może być przydatny. knime.org/files/knime_bigdata_energy_timeseries_whitepaper.pdf Chodzi o modelowanie szeregów czasowych, w tym sezonowości. - Rosaria
Rosaria

Odpowiedzi:

17

Problem z modelami takimi jak KNN polega na tym, że nie uwzględniają one sezonowości (zależne od czasu zmiany trendów). Aby wziąć to pod uwagę, należy skorzystać z analizy szeregów czasowych.

Do danych zliczania, takich jak twoje, możesz użyć uogólnionych liniowych automatycznych regresyjnych modeli średniej ruchomej (GLARMA). Na szczęście istnieje pakiet R, który je implementuje ( glarma ).

Winieta jest dobrym źródłem informacji dla teorii za narzędzie.

Christopher Louden
źródło
2
Innym bardzo użyteczny zestaw do prognozowania i analizie szeregów czasowych jest prognoza prof Rob J. Hyndmanem.
Def_Os
Czy wiesz, czy jest to już zaimplementowane w innym języku? Nie jestem profesjonalistą z R. Z pewnością przynajmniej przeczytam gazetę.
user1132959,
Nie znam żadnego z nich. Jeśli chcesz używać Pythona, możesz użyć pakietu rpy2 , aby wywołać funkcję glarma podczas wykonywania większości reszty programowania w Pythonie. Większość innych języków ma również takie złącze.
Christopher Louden
10

Myślę, że powyższe odpowiedzi Christophera są całkowicie sensowne. Jako alternatywne podejście (a może tylko jako uzupełnienie udzielonej mu porady), mógłbym zacząć od wizualizacji danych, aby zorientować się, co się dzieje.

Jeśli jeszcze tego nie zrobiłeś, możesz spróbować dodać miesiąc daty i dzień tygodnia jako funkcje - jeśli skończysz z KNN, pomoże to modelowi zwiększyć sezonowość.

Jako inny sposób na przyjęcie tego, możesz rozważyć rozpoczęcie od naprawdę, naprawdę podstawowego modelu (takiego jak OLS). Często są one dalekie od generowania rozsądnych prognoz.

Wreszcie, im więcej wiemy o twoich danych, tym łatwiej będzie nam pomóc w generowaniu sugestii - Jakie ramy czasowe przestrzegasz? Z jakich funkcji obecnie korzystasz? itp.

Mam nadzieję że to pomoże --

Mark T Patterson
źródło
Tak, wizualizacja jest niezbędnym pierwszym krokiem w każdej analizie.
Christopher Louden
Dodałem miesiąc, dzień miesiąca, dzień tygodnia i rok jako funkcje. Próbowałem nawet liniowo zmniejszać wartość „Najnowsze”. Chyba nie próbowałem OLS. Obserwuję ramy czasowe, które mogą wynosić od kilku tygodni do wielu lat. Jeśli chodzi o wizualizację, próbowałem to zrobić. Problem polega na tym, że chcemy, aby oprogramowanie mogło automatycznie przewidywać, bez interwencji człowieka, różnych klientów.
user1132959
3

Możesz spróbować Neural Network. Możesz znaleźć 2 świetne wyjaśnienia, jak stosować NN do szeregów czasowych tutaj i tutaj .

Pamiętaj, że najlepszą praktyką jest:

  • Odznacz / usuń dane wejściowe (aby NN nie nauczył się sezonowości).
  • Zmień skalę / Normalizuj dane wejściowe.

Ponieważ to, czego szukasz, to problem regresji, funkcje aktywacyjne powinny być lineari nie sigmoidlub tanhstarasz się je zminimalizować sum-of-squares error(jako przeciwieństwo maksymalizacji negative log-likelihoodproblemu klasyfikacji).

Orelus
źródło
Patrzyłem na sieci neuronowe jako opcję, ale nie wiedziałem, jakich parametrów użyłbym. Będę musiał spróbować.
user1132959
Sigmoid i Tanh mają się dobrze, nieliniowość chce się nauczyć bardziej złożonych interakcji, a wagi odwzorują je na dowolny zakres, który sieć uzna za niezbędny
Jan van der Vegt
3

Jak wspomniał Christopher Lauden, analiza szeregów czasowych jest najbardziej odpowiednia do tego rodzaju rzeczy. Jeśli jednak chciałbyś zastosować bardziej tradycyjne „podejście do uczenia maszynowego”, co w przeszłości zrobiłem, to zablokowanie twoich danych w pokrywających się oknach czasu jako funkcji, a następnie użyj ich do przewidzenia kolejnych dni (lub tygodni) ) ruch drogowy.

Twoja macierz funkcji wyglądałaby następująco:

t1 | t2 | ... | tN
t2 | t3 | ... | tN+1
t3 | t4 | ... | tN+2
...
tW | tW+1 | ... |tN+W

gdzie tIjest ruch w dzień I. Przewidywana funkcja to ruch w dzień po ostatniej kolumnie. Zasadniczo użyj okna ruchu, aby przewidzieć ruch na następny dzień.

Każdy model ML by do tego działał.

Edytować

W odpowiedzi na pytanie „czy możesz rozwinąć sposób korzystania z tej matrycy funkcji”:

Matryca funkcji ma wartości wskazujące ruch w przeszłości w danym okresie czasu (na przykład ruch godzinowy w ciągu 1 tygodnia) i używamy go do przewidywania ruchu w określonym okresie w przyszłości. Pobieramy nasze dane historyczne i tworzymy macierz funkcji historycznego ruchu i oznaczamy ją ruchem w pewnym okresie w przyszłości (np. 2 dni po oknie w obiekcie). Korzystając z pewnego rodzaju modelu uczenia maszynowego regresji, możemy pobrać historyczne dane o ruchu i spróbować zbudować model, który może przewidzieć ruch w naszym zestawie danych historycznych. Zakłada się, że przyszły ruch będzie przypominał ruch w przeszłości.

galamina
źródło
Czy mógłbyś rozwinąć sposób wykorzystania tej macierzy funkcji? Czy starasz się uczyć w oparciu o zmianę ruchu w ciągu dni?
user1132959
Zredagowałem odpowiedź, aby, mam nadzieję, dać więcej jasności.
gallamine
2

Po pierwsze, nie użyłbym nawet takich rzeczy jak uczenie maszynowe bez posiadania dogłębnej wiedzy. Prostymi rzeczami, które zrobiłbym, gdybym miał ten szereg czasowy, są:

  1. Napisz zapytania sql, aby dowiedzieć się, w których godzinach masz najbardziej ruchliwy, średni i niski ruch pieszy.
  2. Następnie spróbuj wyobrazić sobie cały szereg czasowy, a możesz użyć podstawowych algorytmów dopasowywania wzorców do wybierania wzorców.

Te dwie rzeczy pomogą ci zrozumieć, co mówi twój zestaw danych. Mając to pod ręką, prawdopodobnie będziesz w lepszym stanie do korzystania z algorytmów uczenia maszynowego.

Ponadto obecnie pracuję nad budowaniem czegoś na podstawie szeregów czasowych, a zastosowanie analizy szeregów czasowych pomoże ci znacznie więcej niż uczenie maszynowe. Na przykład istnieją algorytmy rozpoznawania wzorców, których można użyć, które wykorzystują dane na co dzień do wyświetlenia wzorców, i te, które wykorzystują dane z okresu od 3 do 6 miesięcy do przechwycenia wzorca.

Nischal Hp
źródło
0

Odradzałbym korzystanie z sieci neuronowej lub równoważnej, ponieważ, jak zakładam, masz taki dobry wcześniej na podstawie swoich doświadczeń ze sklepem (tj. Że prawdopodobnie istnieją codzienne / sezonowe trendy i pewien poziom płynności) i Wyobrażam sobie stosunkowo małą ilość danych. Lepszą opcją IMO byłoby wybranie metody jądra, takiej jak Proces Gaussa lub SVM.

jot__
źródło
0

Przywrócenie tego wątku do życia, ponieważ może to być przydatne dla innych osób lądujących tutaj z podobnymi pytaniami.

Facebook niedawno wydał i otworzył jedno ze swoich wewnętrznych narzędzi prognostycznych o nazwie Prophet https://facebookincubator.github.io/prophet/

Jest dostępny jako oba pakiety R & Python i okazuje się być ciekawym rozwiązaniem dla osób z niewielkim wykształceniem maszynowym. Jednak dodatkowa wiedza na temat ML pozwala dostroić i zoptymalizować produkowane modele.

Polecam dać Prorokowi pierwszy krok. Szybką wygraną w tym rozwiązaniu jest łatwość i szybkość budowania i testowania modelu: dosłownie można uzyskać rzut opadania w ciągu kilku minut. Zachowuje się bardzo dobrze w szeregach czasowych, „naturalnie” rejestrując sezonowość dostępnych danych.

Pod maską jest podobny do uogólnionego modelu dodatków (GAM) - więcej szczegółów na dedykowanym papierze: https://facebookincubator.github.io/prophet/static/prophet_paper_20170113.pdf

Alexandre Cortyl
źródło