Używam sieci neuronowych do przewidywania szeregów czasowych. Pytanie, przed którym teraz stoję, brzmi: jak zakodować datę / godzinę / numer seryjny. każdego zestawu wejściowego jako danych wejściowych do sieci neuronowej?
Czy powinienem używać kodowania 1 C (używanego do kodowania kategorii), jak opisano tutaj ?
Czy powinienem po prostu karmić go czasem (w milisekundach od 1-1-1970)?
A może podawanie czasu jest niepotrzebne, dopóki chronię go resztą danych chronologicznie?
Odpowiedzi:
Sieci neuronowe nie są magią. Jeśli traktujesz je takimi, jakimi są i po prostu rzucasz im dane, nie myśląc, że będziesz miał bardzo zły czas.
Musisz się zatrzymać i zadać sobie pytanie: „Czy milisekundy od 1970 r. Rzeczywiście będą przewidywać to, co mnie interesuje?” Odpowiedź, na którą powinieneś natychmiast dotrzeć, brzmi: nie. Dlaczego? W każdym przypadku, na którym naprawdę Ci zależy (wydarzenia w przyszłości, przeszłość już się wydarzyła) zmienna czasowa przyjmuje wartość większą niż dowolna wartość, którą zmienna czasowa przyjmuje w danych treningowych. Taka zmienna jest bardzo mało pomocna. Co gorsza, prawdopodobnie nie spowoduje to nadmiernego dopasowania (poważnego problemu dla potężnych modeli nieliniowych, takich jak sieci neuronowe), jeśli nie będziesz ostrożny.
Teraz sens może mieć zmienna, taka jak tydzień roku lub miesiąca, która może pomóc w modelowaniu efektów sezonowych lub rocznych. Zrobiłem trochę pracy w przewidywaniu chorób rolniczych, w których dzień Juliana okazał się bardzo ważną zmienną. Opierając się na tym doświadczeniu, podejrzewam, że lepiej byłoby zakodować ten typ zmiennej jako zmienną kategoryczną zamiast porządkowej, twoje doświadczenie może być bardzo. Zauważ, że miesiąc lub tydzień w roku są powtarzalnymi zdarzeniami, które prawdopodobnie zobaczysz wiele razy w twoich danych szkoleniowych i można wyjaśnić, dlaczego taka zmienna może wpłynąć na wynik finansowy. Porównaj to z milisekundami od 1970 roku, co jest monotonicznie rosnącą wartością.
Na koniec, ze stwierdzenia „Czy podawanie czasu jest niepotrzebne, dopóki chronię je resztą danych chronologicznie?” brzmi to tak, jakbyś nie miał pojęcia, jak działają sieci neuronowe. W przypadku standardowej sieci neuronowej ze sprzężeniem zwrotnym kolejność karmienia sieci twoimi danymi nie będzie miała wpływu na prognozy. Kolejność może wpływać na trening, jeśli używasz stochastycznego lub mini-gradientowego spadku, ale jest to tylko artefakt iteracyjnej (w przeciwieństwie do partii) metody treningu. Jeśli chcesz modelować zależność czasową za pomocą sieci neuronowej, musisz użyć czegoś w rodzaju przesuwanego okna lub cyklicznej sieci neuronowej.
źródło
w komentarzach podajesz, że pracujesz nad prognozami finansowych szeregów czasowych. to, czy uwzględnić czas w danych wejściowych, zależy w pewnym stopniu od domeny. ogólnie rzecz biorąc, jest to istotne, jeśli w danych znajduje się jakiś „cykliczny” składnik czasu. na przykład może być jakiś efekt tygodniowy w twoich danych, jeśli działa przez kilka tygodni, lub jakiś efekt śróddzienny, jeśli obejmuje jeden dzień. to jeśli masz wiele cykli, dołącz dane wejściowe, które odzwierciedlają pozycję w cyklu, np. od lub lub powiedz .[−1,1] [0,1] sin(t)
jeśli okaże się, że istnieje spójny trend, np. wzrost lub spadek w czasie, powiedz że bardziej odpowiednie jest wydobycie go z danych wejściowych przed zasileniem danych wejściowych za pomocą tak zwanego „zniechęcającego”. Innymi słowy odjąć wzór dla tego trendu i przewidywania tendencji plusa różnicę ale NN skupia się jedynie na różnicy , a nie trend .f(t) f(t) dt=ft+gt gt ft
źródło