Прогнозування декількох періодів за допомогою машинного навчання


9

Нещодавно я переробив свої знання в Time Series і зрозумів, що машинне навчання здебільшого дає лише на крок попереду прогнози.

Під прогнозами на крок вперед я маю на увазі прогнози, які, наприклад, якщо ми маємо погодинні дані, використовують дані з 10 ранку до прогнозу 11 ранку та 11 ранку до 12 ранку тощо.

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

Чи можуть методи машинного навчання давати прогнози на крок наперед? Під прогнозами h-крок вперед я маю на увазі, що, наприклад, припускаючи погодинні дані, ми використовуємо дані з 10 ранку, щоб зробити прогноз на 7 кроків вперед, щоб отримати оцінки за 11,12,13,14,15,16,17 ' o годинник.

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

Пов'язане з моїм головним питанням, я дивуюся

  • З яких причин я не бачу, щоб хтось використовував машинне навчання для складання прогнозів на крок вперед?
  • Якщо існує метод, що використовує машинне навчання, то він більш-менш точний, ніж ARIMA?

Відповіді:


7

(Частина цього взята з моєї попередньої посади ) Перш за все вам потрібно розрізнити два різні способи виконання багатоступеневого прогнозування серій разів: Рекурсивне прогнозування та пряме прогнозування:

  • У рекурсивному прогнозуванні (його також називають ітераційним прогнозуванням) ви тренуєте свою модель лише на крок вперед прогнози. Після закінчення тренінгу ви застосовуєте остаточну модель рекурсивно, щоб прогнозувати 1 крок вперед, 2 кроки вперед тощо, поки ви не досягнете бажаногоnкроки прогнозу горизонту. Для цього ви подаєте прогноз кожного наступного кроку назад в модель, щоб генерувати наступний крок. Цей підхід використовується традиційними алгоритми прогнозування , як ARIMA і експоненціальне згладжування алгоритми, а також може бути використаний для прогнозування на основі машинного навчання (див цього поста для прикладу, і цей пост в протягом деякого обговорення).
  • Пряме прогнозування - це коли ви тренуєте окрему модель для кожного кроку (тому ви намагаєтесь "безпосередньо" прогнозувати nth крок вперед, а не досягти nкроки рекурсивно. Див. Ben Taied та ін. для обговорення прямого прогнозування та більш складних комбінованих підходів.

Тепер, щоб відповісти на ваше головне питання:

Чи можуть методи машинного навчання давати прогнози на крок наперед?

Так, методи МЛ можуть, і вони можуть виробляти прогноз на крок наперед, використовуючи рекурсивні та прямі багатоступеневі прогнози. Мало того, але для прямого багатоетапного прогнозування вони справді більше підходять до завдання, ніж традиційні моделі, такі як ARIMA або Exponential Smoothing. Однак зауважте, що для прямого багатоступеневого прогнозування вам потрібно вказати перед тим, як подати h-кроки вперед, на які ви хочете прогнозувати і відповідно тренувати свою модель, тоді як для рекурсивного прогнозування ви можете використовувати свою модель для будь-якої кількості майбутніх кроків, які ви хочете .

Більш того, Chevillon & Hendry стверджують, що в деяких випадках пряме багатоетапне прогнозування є більш точним, ніж рекурсивне прогнозування - маючи на увазі, що ML буде більш точним, ніж традиційні методи.

Для Ваших інших питань:

  • З яких причин я не бачу, щоб хтось використовував машинне навчання для складання прогнозів на крок вперед?

Багато людей використовують ML для багатоступеневого прогнозування, особливо використовують нейронні мережі: метод nnetar Hyndman, доступний в пакеті R прогнозу, пакет nnfor Kourentzes, модель DeepAR Amazon та багато інших.

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

Див. Bontempi та ін. для загального обговорення.

  • Якщо існує метод, що використовує машинне навчання, то він більш-менш точний, ніж ARIMA?

Це питання відкрите, і, очевидно, залежить від даних та програми, для якої прогнозують.


1

В останні кілька місяців я грав із тимчасовими рядами щодо виявлення аномалії і можу поділитися з вами своїм досвідом.

Часовий ряд, з яким я працював, характеризувався двома сезонністю (щоденними та щотижневими), відсутністю тенденції та багатьма піками під час денного світла.

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

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

Зі свого досвіду можу сказати, що, використовуючи низький N (скажімо, 1), модель суворо використовуватиме кілька кроків у минулому для прогнозування нового, не реально «вивчаючи» сезонність. З іншого боку, збільшуючи N занадто мутації, сезонність вивчається, але загальна точність зменшується.

З метою мого аналізу я вважав, що N = 4 (2 години в майбутньому) є хорошим компромісом.


1

Щоб відповісти на ваше питання в більш загальному розумінні, можна скористатися машинним навчанням та передбачити прогнози на крок вперед . Складна частина полягає в тому, що вам потрібно переробити свої дані в матрицю, в якій у вас є для кожного спостереження фактичне значення спостереження та минулі значення часового ряду для визначеного діапазону. Вам потрібно буде вручну визначити, який діапазон даних, які здаються релевантними для прогнозування вашого часового ряду, насправді, як ви б параметризували модель ARIMA. Ширина / горизонт матриці є критично важливим, щоб правильно передбачити наступне значення, прийняте вашою матрицею. Якщо ваш горизонт обмежений, ви можете пропустити наслідки сезонності.

Коли ви зробите це, щоб передбачити h-кроки вперед, вам потрібно буде передбачити перше наступне значення на основі останнього спостереження. Тоді вам доведеться зберігати передбачення як "фактичне значення", яке буде використовуватися для прогнозування другого наступного значення через зміщення часу , подібно до моделі ARIMA. Вам потрібно буде повторити процес h 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.