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?
machine-learning
time-series
użytkownik 1132959
źródło
źródło
Odpowiedzi:
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.
źródło
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 --
źródło
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:
Ponieważ to, czego szukasz, to problem regresji, funkcje aktywacyjne powinny być
linear
i niesigmoid
lubtanh
starasz się je zminimalizowaćsum-of-squares error
(jako przeciwieństwo maksymalizacjinegative log-likelihood
problemu klasyfikacji).źródło
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:
gdzie
tI
jest 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.
źródło
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ą:
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.
źródło
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.
źródło
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
źródło