Pracuję nad małym projektem, w którym staramy się przewidzieć ceny towarów (ropa, aluminium, cyna itp.) Na następne 6 miesięcy. Mam 12 takich zmiennych do przewidzenia i mam dane z kwietnia 2008 r. - maja 2013 r.
Jak powinienem przejść do prognozowania? Zrobiłem następujące:
- Zaimportowane dane jako zestaw danych Timeseries
- Sezonowość wszystkich zmiennych zmienia się w zależności od Trendu, więc przechodzę do modelu multiplikatywnego.
- Zapisałem dziennik zmiennej, aby przekonwertować na model addytywny
- Dla każdej zmiennej dane zostały rozłożone za pomocą STL
Planuję użyć wygładzania wykładniczego Holta Wintersa, ARIMA i sieci neuronowej do prognozowania. Dzielę dane jako szkolenie i testowanie (80, 20). Planujesz wybrać model z mniejszą MAE, MPE, MAPE i MASE.
Czy robię to dobrze?
Czy miałem również jedno pytanie, zanim przejdę do ARIMA lub sieci neuronowej? Jeśli tak, za pomocą czego? Dane pokazują zarówno sezonowość, jak i trend.
EDYTOWAĆ:
Dołączanie wykresu szeregów czasowych i danych
Year <- c(2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2009, 2009,
2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2010,
2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010,
2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011,
2011, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012,
2012, 2012, 2013, 2013)
Month <- c(4, 5, 6, 7, 8, 9, 10, 11, 12, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11,
12, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 1, 2, 3, 4, 5, 6, 7,
8, 9, 10, 11, 12, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 1, 2)
Coil <- c(44000, 44500, 42000, 45000, 42500, 41000, 39000, 35000, 34000,
29700, 29700, 29000, 30000, 30000, 31000, 31000, 33500, 33500,
33000, 31500, 34000, 35000, 35000, 36000, 38500, 38500, 35500,
33500, 34500, 36000, 35500, 34500, 35500, 38500, 44500, 40700,
40500, 39100, 39100, 39100, 38600, 39500, 39500, 38500, 39500,
40000, 40000, 40500, 41000, 41000, 41000, 40500, 40000, 39300,
39300, 39300, 39300, 39300, 39800)
coil <- data.frame(Year = Year, Month = Month, Coil = Coil)
EDYCJA 2: Jedno pytanie, czy możesz mi powiedzieć, czy moje dane mają sezonowość lub trend? A także proszę o wskazówki, jak je zidentyfikować.
źródło
Odpowiedzi:
Powinieneś użyć pakietu prognozy , który obsługuje wszystkie te modele (i więcej) i sprawia, że ich dopasowanie jest bardzo proste:
Odradzam wygładzanie danych przed dopasowaniem modelu. Twój model z natury będzie próbował wygładzić dane, więc wstępne wygładzanie tylko komplikuje sytuację.
Edytuj na podstawie nowych danych:
Wygląda na to, że arima jest jednym z najgorszych modeli, jakie można wybrać do tego zestawu treningowego i testowego.
Zapisałem twoje dane w wywołaniu pliku
coil.csv
, załadowałem je do R i podzieliłem na zestaw szkoleniowy i testowy:Następnie dopasowuję kilka modeli szeregów czasowych: arima, wygładzanie wykładnicze, sieć neuronowa, tbaty, nietoperze, rozkład sezonowy i strukturalne szeregi czasowe:
Potem zrobiłem kilka prognoz i porównałem z zestawem testowym. Zawarłem naiwną prognozę, która zawsze przewiduje płaską, poziomą linię:
Jak widać, model arima źle wpływa na trend, ale podoba mi się wygląd „podstawowego modelu strukturalnego”
Na koniec zmierzyłem dokładność każdego modelu na zestawie testowym:
Zastosowane mierniki opisano w Hyndman, RJ i Athanasopoulos, G. (2014) „Prognozowanie: zasady i praktyka” , którzy również są autorami pakietu prognostycznego. Gorąco polecam przeczytanie ich tekstu: jest dostępny bezpłatnie online. Strukturalne szeregi czasowe to najlepszy model pod względem kilku wskaźników, w tym MASE, który jest wskaźnikiem, który preferuję przy wyborze modelu.
Ostatnie pytanie brzmi: czy model konstrukcyjny miał szczęście w tym zestawie testowym? Jednym ze sposobów oceny tego jest sprawdzenie błędów zestawu treningowego. Błędy zestawu treningowego są mniej niezawodne niż błędy zestawu testowego (ponieważ mogą być nadmiernie dopasowane), ale w tym przypadku model konstrukcyjny wciąż wychodzi na wierzch:
(Zwróć uwagę, że sieć neuronowa się nakłada, doskonale spisując się na zestawie treningowym i słabo na zestawie testowym)
Wreszcie, dobrym pomysłem byłoby przeprowadzenie krzyżowej weryfikacji wszystkich tych modeli, być może poprzez szkolenie w latach 2008-2009 / testy w 2010 r., Szkolenie w latach 2008-2010 / testy w 2011 r., Szkolenie w latach 2008-2011 / testy w 2012 r., Szkolenie w latach 2008-2012 / testowanie w 2013 r. i błędy uśredniania we wszystkich tych okresach. Jeśli chcesz pójść tą drogą, mam częściowo kompletny pakiet do krzyżowej weryfikacji modeli szeregów czasowych na github, który chciałbym, abyś wypróbował i przesłał mi informacje zwrotne / prośby o:
Edycja 2: Sprawdźmy, czy pamiętam, jak korzystać z własnego pakietu!
Przede wszystkim zainstaluj i załaduj pakiet z github (patrz wyżej). Następnie zweryfikuj krzyżowo niektóre modele (używając pełnego zestawu danych):
(Należy pamiętać, że zmniejszyłem elastyczność modelu sieci neuronowej, aby zapobiec nadmiernemu dopasowaniu)
Po dopasowaniu modeli możemy porównać je według MAPE (cv.ts nie obsługuje jeszcze MASE):
Auć. Wygląda na to, że nasza prognoza strukturalna miała szczęście. Na dłuższą metę naiwna prognoza tworzy najlepsze prognozy, uśrednione w horyzoncie 12 miesięcy (model arima jest nadal jednym z najgorszych modeli). Porównajmy modele w każdym z 12 horyzontów prognozy i zobaczmy, czy któryś z nich kiedykolwiek przebije model naiwny:
Co ciekawe, model wygładzania wykładniczego zawsze wybiera model naiwny (linia pomarańczowa i linia niebieska pokrywają się w 100%). Innymi słowy, naiwna prognoza „cen cewek w przyszłym miesiącu będzie taka sama, jak cen cewek w tym miesiącu” jest bardziej dokładna (w prawie każdym horyzoncie prognozy) niż 7 wyjątkowo wyrafinowanych modeli szeregów czasowych. O ile nie masz żadnych tajnych informacji, których rynek cewek jeszcze nie wie, pokonanie naiwnej prognozy ceny cewki będzie niezwykle trudne .
Nigdy nie jest to odpowiedź, którą ktoś chce usłyszeć, ale jeśli Twoim celem jest dokładność prognozy, powinieneś użyć najdokładniejszego modelu. Użyj naiwnego modelu.
źródło
Podjęte podejście jest rozsądne. Jeśli dopiero zaczynasz prognozować, polecam następujące książki:
Pierwsza książka to klasyk, który gorąco polecam. Druga książka to książka o otwartym kodzie źródłowym, do której można się odwołać w zakresie metod prognozowania i sposobu jej zastosowania przy użyciu prognozy
R
pakietu oprogramowania typu open source . Obie książki stanowią dobre tło dla metod, których użyłem. Jeśli poważnie myślisz o prognozowaniu, poleciłbym Zasady prognozowania Armstronga, które stanowią zbiór ogromnych badań w prognozowaniu, które dla praktyków mogą być bardzo pomocne.W przypadku konkretnego przykładu na cewce przypomina mi to pojęcie przewidywalności, które większość podręczników często ignoruje. Niektóre serie, takie jak seria, po prostu nie mogą być prognozowane, ponieważ są mniej wzorcowe, ponieważ nie wykazują trendów, sezonowych wzorców ani żadnej systematycznej zmiany. W takim przypadku sklasyfikowałbym serię jako mniej przewidywalną. Zanim przejdę do metod ekstrapolacji, spojrzę na dane i zadam pytanie, czy moja seria jest przewidywalna? W tym konkretnym przykładzie prosta ekstrapolacja, taka jak prognoza losowego marszu, która wykorzystuje ostatnią wartość prognozy, okazała się najdokładniejsza .
Jeszcze jeden dodatkowy komentarz na temat sieci neuronowej: Sieci neuronowe są znane z tego, że zawodzą w konkursach empirycznych . Wypróbowałbym tradycyjne metody statystyczne dla szeregów czasowych przed próbą użycia sieci neuronowych do zadań prognozowania szeregów czasowych.
Próbowałem modelować twoje dane
R's forecast package
, mam nadzieję, że komentarze same się wyjaśniają.Wykorzystując MAE do przechowywania danych, wybrałbym ARIMA na prognozę krótkoterminową (1–12 miesięcy). na dłuższą metę polegałbym na losowej prognozie marszu. Należy pamiętać, że ARIMA wybrała model marszu losowego ze znoszeniem (0,1,0) + znoszeniem, który jest znacznie dokładniejszy niż czysty model przypadkowego chodzenia w tego rodzaju problemach, szczególnie krótkoterminowych. Zobacz poniższy wykres. Jest to oparte na funkcji dokładności, jak pokazano w powyższym kodzie.
Konkretne odpowiedzi na konkretne pytania: Czy miałem jedno pytanie, zanim przejdę do ARIMA lub sieci neuronowej, czy powinienem wygładzić dane? Jeśli tak, za pomocą czego?
Dane pokazują zarówno sezonowość, jak i trend.
Praktyczne wskazówki dotyczące poprawy dokładności:
Łącz różne metody prognozowania: - Możesz spróbować użyć metod niezwiązanych z ekstrapolacją, takich jak prognozowanie przez analogię , prognozowanie osądowe lub inne techniki i połączyć je ze swoimi metodami statystycznymi, aby uzyskać dokładne prognozy. Zobacz ten artykuł, aby poznać zalety łączenia. Próbowałem połączyć powyższe 5 metod, ale prognozy nie były dokładne jako indywidualne metody, jednym z możliwych powodów jest to, że indywidualne prognozy są podobne. Czerpiesz korzyści z łączenia prognoz, łącząc różne metody, takie jak prognozy statystyczne i prognozy.
Wykrywanie i zrozumienie wartości odstających: - Dane ze świata rzeczywistego są wypełnione wartościami odstającymi. Identyfikuj i odpowiednio traktuj wartości odstające w szeregach czasowych. Polecam przeczytanie tego postu . Patrząc na dane cewki, czy spadek przed 2009 r. Jest wartością odstającą?
Edytować
Dane wydają się podążać za pewnym rodzajem trendów makroekonomicznych. Domyślam się, że tendencja spadkowa obserwowana przed 2009 r. Następuje po spadku koniunktury gospodarczej w latach 2008–2009 i zacznie rosnąć po 2009 r. Jeśli tak jest, to wszyscy razem uniknęlibyśmy stosowania jakichkolwiek metod ekstrapolacji, a zamiast tego opierali się na solidnej teorii, w jaki sposób te trendy gospodarcze zachowują się, takie jak te wymienione przez @GraemeWalsh.
Mam nadzieję że to pomoże
źródło