Прогнозирование нескольких периодов с машинным обучением


9

Недавно я повторил свои знания о временных рядах и понял, что машинное обучение в основном дает только прогнозы на шаг впереди.

Под прогнозами на шаг впереди я подразумеваю прогнозы, которые, например, если у нас есть почасовые данные, используют данные с 10:00 для прогнозирования 11:00 и 11:00 для 12:00 и т. Д.

введите описание изображения здесь

Могут ли методы машинного обучения давать прогнозы на h шагов вперед? С прогнозами с опережением на h я имею в виду, что, например, исходя из почасовых данных, мы используем данные с 10 часов утра, чтобы сделать прогноз на 7 шагов вперед, чтобы получить оценки для 11,12,13,14,15,16,17 ' часы

Пример картинки: введите описание изображения здесь

В связи с моим главным вопросом мне интересно:

  • По каким причинам я не вижу никого, кто бы использовал машинное обучение для прогнозирования на h-шаг вперед?
  • Если есть метод, использующий машинное обучение, является ли он более или менее точным, чем ARIMA?

Ответы:


7

(Часть этого взята из моего предыдущего поста ) Прежде всего вам необходимо различить два разных способа прогнозирования многоступенчатых временных рядов: рекурсивное прогнозирование и прямое прогнозирование:

  • N
  • NTчасN

Теперь, чтобы ответить на ваш главный вопрос:

Могут ли методы машинного обучения давать прогнозы на h шагов вперед?

Да, методы ML могут, и они могут производить прогнозирование на h шагов вперед, используя как рекурсивные, так и прямые многоэтапные прогнозы. Не только это, но и для прямого многошагового прогнозирования они на самом деле больше подходят для этой задачи, чем традиционные модели, такие как ARIMA или Exponential Smoothing. Тем не менее, обратите внимание, что для прямого многошагового прогнозирования вам нужно заранее указать h-шаги вперед, для которых вы хотите прогнозировать и обучать свою модель соответствующим образом, тогда как для рекурсивного прогнозирования вы можете использовать эту модель для любого количества будущих шагов, которые вы хотите ,

Более того, Chevillon & Hendry утверждают, что в некоторых случаях прямое многоэтапное прогнозирование является более точным, чем рекурсивное прогнозирование, подразумевая, что ML будет более точным, чем традиционные методы.

Для других ваших вопросов:

  • По каким причинам я не вижу никого, кто бы использовал машинное обучение для прогнозирования на h-шаг вперед?

Многие люди используют ML для многоэтапного прогнозирования, особенно с использованием нейронных сетей: метод nnetar от Hyndman, доступный в пакете R Forecast, пакет Kourentzes 'nnfor R, модель Amazon DeepAR и многие другие.

XGBoost также успешно использовался в нескольких соревнованиях временных рядов Kaggle.

Смотри Bontempi et al. для общего обсуждения.

  • Если есть метод, использующий машинное обучение, является ли он более или менее точным, чем ARIMA?

Это открытый вопрос, и, очевидно, он зависит от данных и приложения, для которого прогнозируется.


1

Я играл с временными рядами для обнаружения аномалий в последние несколько месяцев, и я могу поделиться с вами своим опытом.

Временной ряд, с которым я работал, характеризовался двумя сезонностями (ежедневной и еженедельной), отсутствием тренда и множеством пиков при дневном освещении.

Я провел несколько экспериментов, а затем выбрал модель, основанную на нейронных сетях LSTM, потому что в моем случае она превзошла ариму, но, конечно, как и все в статистике, общего решения не существует.

Предсказать более чем один временной шаг в будущем с помощью нейронной сети довольно просто, вам нужно будет вывести N значений вместо одного, и этот выходной N будет сравниваться с реальными N наблюдениями.

Исходя из своего опыта, я могу сказать вам, что при использовании низкого N (скажем, 1) модель будет строго использовать несколько временных шагов в прошлом, чтобы предсказать новый, без реального "изучения" сезонности. С другой стороны, при слишком большом увеличении N изучаются сезонности, но общая точность уменьшается.

Для целей моего анализа я нашел N = 4 (2 часа в будущем) хорошим компромиссом.


1

Чтобы ответить на ваш вопрос в более общем плане, можно использовать машинное обучение и прогнозировать h-пошаговые прогнозы . Сложность заключается в том, что вам необходимо преобразовать свои данные в матрицу, в которой вы располагаете, для каждого наблюдения действительное значение наблюдения и прошлые значения временного ряда для определенного диапазона. Вам нужно будет вручную определить, какой диапазон данных представляется релевантным для прогнозирования вашего временного ряда, фактически, так же, как и для параметра ARIMA. Ширина / горизонт матрицы имеет решающее значение для правильного предсказания следующего значения, принятого вашей матрицей. Если ваш горизонт ограничен, вы можете пропустить эффекты сезонности.

После того, как вы это сделаете, для прогнозирования h-шагов вперед вам нужно будет спрогнозировать первое следующее значение на основе вашего последнего наблюдения. Затем вам нужно будет сохранить прогноз как «фактическое значение», которое будет использоваться для прогнозирования второго следующего значения через сдвиг во времени , точно так же, как модель ARIMA. Вам придется повторять процесс h раз, чтобы получить h-шаги вперед. Каждая итерация будет опираться на предыдущий прогноз.

Пример использования кода R будет следующим.

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)

Теперь очевидно, что нет общих правил, чтобы определить, являются ли модель временного ряда или модель машинного обучения более эффективной. Вычислительное время может быть выше для моделей машинного обучения, но, с другой стороны, вы можете включать любые типы дополнительных функций для прогнозирования ваших временных рядов, используя их (например, не только числовые или логические функции). Общий совет - проверить оба и выбрать наиболее эффективную модель.


Хотя вы можете упомянуть, что то, что вы называете сдвигом во времени, на самом деле делает стандартная арима. Вот почему Арима-Предсказания имеют тенденцию быть очень линейными.
5

Да, точно. Я отредактирую свой ответ, чтобы уточнить этот шаг.
AshOfFire

1
В моделях временного ряда вы также можете включить дополнительные функции.
Тим

Правильно, с ARIMAX, но они должны быть числовыми, и добавленные коэффициенты не могут быть так же легко интерпретированы, как коэффициенты, используемые в ARMA.
AshOfFire
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.