Prognozowanie kilku okresów z uczeniem maszynowym


9

Niedawno podsumowałem swoją wiedzę na temat szeregów czasowych i zdałem sobie sprawę, że uczenie maszynowe daje głównie tylko jeden krok do przodu.

W przypadku prognoz o jeden krok do przodu mam na myśli prognozy, które np. Jeśli mamy dane godzinowe, wykorzystujemy dane od 10 rano do prognozy 11:00 i 11:00 na 12:00 itd.

wprowadź opis zdjęcia tutaj

Czy metody uczenia maszynowego mogą dać prognozy wyprzedzające o krok? Z prognozami o krok do przodu mam na myśli, że np. Zakładając dane godzinowe, wykorzystujemy dane z godziny 10 rano, aby sporządzić prognozę z wyprzedzeniem 7 kroków, aby uzyskać szacunki dla 11,12,13,14,15,16,17 ' godzina.

Przykładowy obrazek: wprowadź opis zdjęcia tutaj

Zastanawiam się nad moim głównym pytaniem:

  • Jakie są powody, dla których nie widzę, aby ktokolwiek korzystał z uczenia maszynowego do prognozowania o krok do przodu?
  • Jeśli istnieje metoda wykorzystująca uczenie maszynowe, czy jest mniej lub bardziej precyzyjna niż ARIMA?

Odpowiedzi:


7

(Część z tego pochodzi z mojego poprzedniego postu ). Przede wszystkim musisz rozróżnić dwa różne sposoby przeprowadzania wieloetapowego prognozowania szeregów czasowych: prognozowanie rekurencyjne i prognozowanie bezpośrednie:

  • W prognozowaniu rekurencyjnym (zwanym także prognozowaniem iterowanym) trenujesz swój model tylko o jeden krok do przodu. Po zakończeniu treningu stosujesz swój ostateczny model rekurencyjnie, aby prognozować 1 krok do przodu, 2 kroki do przodu itp., Aż osiągniesz pożądany horyzont prognozy kroków. Aby to zrobić, podajesz prognozę z każdego kolejnego kroku z powrotem do modelu, aby wygenerować następny krok. To podejście jest stosowane przez tradycyjne algorytmy prognozowania, takie jak ARIMA i algorytmy wygładzania wykładniczego, i może być również stosowane do prognozowania opartego na uczeniu maszynowym (zobacz ten post na przykład, a ten post na kilka dyskusji).n
  • Prognozowanie bezpośrednie ma miejsce wtedy, gdy trenujesz osobny model dla każdego kroku (więc próbujesz „bezpośrednio” przewidzieć krok naprzód zamiast osiągać rekursywnie kroków. Zobacz Ben Taied i in., Aby omówić bezpośrednie prognozowanie i bardziej złożone podejścia łączone.nthn

Teraz, aby odpowiedzieć na twoje główne pytanie:

Czy metody uczenia maszynowego mogą dać prognozy wyprzedzające o krok?

Tak, metody ML mogą i mogą generować prognozy o krok do przodu za pomocą zarówno rekurencyjnych, jak i bezpośrednich prognoz wieloetapowych. Nie tylko to, ale w przypadku bezpośredniego prognozowania wielostopniowego są one bardziej dostosowane do zadania niż tradycyjne modele, takie jak ARIMA lub Wygładzanie wykładnicze. Należy jednak pamiętać, że w przypadku bezpośredniego wielostopniowego prognozowania należy wcześniej określić liczbę kroków do przodu, dla których chcesz odpowiednio prognozować, i odpowiednio wyszkolić swój model, natomiast w przypadku prognozowania rekurencyjnego możesz użyć swojego modelu do dowolnej liczby przyszłych kroków, które chcesz .

Ponadto Chevillon i Hendry argumentują, że w niektórych przypadkach bezpośrednie wielostopniowe prognozowanie jest dokładniejsze niż prognozowanie rekurencyjne, co oznacza, że ​​ML byłby dokładniejszy niż tradycyjne metody.

W przypadku innych pytań:

  • Jakie są powody, dla których nie widzę, aby ktokolwiek korzystał z uczenia maszynowego do prognozowania o krok do przodu?

Wiele osób korzysta z ML do prognozowania wielostopniowego, szczególnie przy użyciu sieci neuronowych: metoda nnetar Hyndmana dostępna w pakiecie R Forecast, pakiet Kourentzes 'nnfor R, model DeepAR Amazona i wiele innych.

XGBoost został również z powodzeniem wykorzystany w kilku konkursach serii czasowej Kaggle.

Patrz Bontempi i in. do ogólnej dyskusji.

  • Jeśli istnieje metoda wykorzystująca uczenie maszynowe, czy jest mniej lub bardziej precyzyjna niż ARIMA?

To otwarte pytanie i oczywiście zależy od danych i aplikacji, dla których się przewiduje.


1

W ciągu ostatnich kilku miesięcy grałem szeregami czasowymi w celu wykrycia anomalii i mogę podzielić się z Wami moimi doświadczeniami.

Szeregi czasowe, z którymi pracowałem, charakteryzowały się dwiema sezonowościami (dzienną i tygodniową), brakiem trendów i wieloma szczytami w ciągu dnia.

Przeprowadziłem kilka eksperymentów, a następnie wybrałem model oparty na sieciach neuronowych LSTM, ponieważ w moim przypadku przewyższał on arimę, ale oczywiście jak wszystko w statystykach, nie ma ogólnego rozwiązania.

Aby przewidzieć więcej niż jeden krok w przyszłości za pomocą sieci neuronowej jest dość proste, musisz podać wartości N zamiast jednej, a wynik N zostanie porównany z rzeczywistymi obserwacjami N.

Z mojego doświadczenia mogę powiedzieć, że stosując niską N (powiedzmy 1), model będzie ściśle wykorzystywał kilka kroków czasowych w przeszłości, aby przewidzieć nowy, bez „uczenia się” sezonowości. Z drugiej strony, zwiększając N zbyt mutch, uczymy się sezonowości, ale ogólna dokładność maleje.

Dla celów mojej analizy N = 4 (2 godziny w przyszłości) jest dobrym kompromisem.


1

Aby odpowiedzieć na twoje pytanie w bardziej ogólny sposób, można skorzystać z uczenia maszynowego i przewidzieć prognozy na kolejne kroki . Problem polega na tym, że musisz przekształcić dane w macierz, w której masz dla każdej obserwacji rzeczywistą wartość obserwacji i przeszłe wartości szeregów czasowych dla określonego zakresu. Konieczne będzie ręczne zdefiniowanie zakresu danych, które wydają się istotne dla prognozowania szeregów czasowych, tak jak parametr modelu ARIMA. Szerokość / horyzont macierzy ma kluczowe znaczenie dla prawidłowego przewidywania następnej wartości pobranej przez macierz. Jeśli twój horyzont jest ograniczony, możesz przegapić efekty sezonowości.

Po wykonaniu tej czynności, aby przewidzieć kolejne kroki, musisz przewidzieć pierwszą następną wartość na podstawie ostatniej obserwacji. Będziesz musiał zapisać prognozę jako „wartość rzeczywistą”, która posłuży do przewidzenia drugiej następnej wartości poprzez przesunięcie czasowe , podobnie jak model ARIMA. Będziesz musiał iterować proces h razy, aby uzyskać h-kroki do przodu. Każda iteracja będzie opierać się na poprzedniej prognozie.

Przykładem użycia kodu R byłby następujący.

library(forecast)
library(randomForest)

# create a daily pattern with random variations
myts <- ts(rep(c(5,6,7,8,11,13,14,15,16,15,14,17,13,12,15,13,12,12,11,10,9,8,7,6), 10)*runif(120,0.8,1.2), freq = 24)
myts_forecast <- forecast(myts, h = 24) # predict the time-series using ets + stl techniques
pred1 <- c(myts, myts_forecast1$mean) # store the prediction

# transform these observations into a matrix with the last 24 past values
idx <- c(1:24)
designmat <- data.frame(lapply(idx, function(x) myts[x:(215+x)])) # create a design matrix
colnames(designmat) <- c(paste0("x_",as.character(c(1:23))),"y")

# create a random forest model and predict iteratively each value
rfModel <- randomForest(y ~., designmat)
for (i in 1:24){
  designvec <- data.frame(c(designmat[nrow(designmat), 2:24], 0))
  colnames(designvec) <- colnames(designmat)
  designvec$y <- predict(rfModel, designvec)
  designmat <- rbind(designmat, designvec)
}
pred2 <- designmat$y

#plot to compare predictions
plot(pred1, type = "l")
lines(y = pred2[216:240], x = c(240:264), col = 2)

Oczywiście nie ma ogólnych zasad określających, czy model szeregów czasowych czy model uczenia maszynowego jest bardziej wydajny. Czas obliczeniowy może być dłuższy w przypadku modeli uczenia maszynowego, ale z drugiej strony możesz uwzględnić wszelkiego rodzaju dodatkowe funkcje do przewidywania ich szeregów czasowych (np. Nie tylko funkcje numeryczne lub logiczne). Ogólną radą byłoby przetestowanie obu i wybranie najbardziej wydajnego modelu.


Chociaż możesz wspomnieć, że to, co nazywasz przesunięciem czasu, jest w rzeczywistości tym, co robi standardowa arima. Dlatego prognozy Arima są zwykle bardzo liniowe.
5

Tak, dokładnie. Zmienię swoją odpowiedź, aby wyjaśnić ten krok.
AshOfFire

1
W modelach z szeregiem czasowym możesz również zawierać dodatkowe funkcje.
Tim

Poprawnie, z ARIMAX, ale muszą być liczbowe, a dodanych współczynników nie można tak łatwo zinterpretować, jak współczynniki używane w ARiMR.
AshOfFire
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.