Meramalkan beberapa periode dengan pembelajaran mesin

9

Saya akhir-akhir ini memanfaatkan kembali pengetahuan dalam Time Series dan menyadari bahwa pembelajaran mesin sebagian besar hanya memberikan perkiraan satu langkah di depan.

Dengan prakiraan satu langkah ke depan yang saya maksud adalah prakiraan yang, misalnya, jika kita memiliki data per jam, gunakan data dari jam 10 pagi hingga jam 11 pagi dan 11 pagi untuk jam 12 pagi dll.

masukkan deskripsi gambar di sini

Dapatkah metode pembelajaran mesin menghasilkan ramalan h-langkah-depan? Dengan prakiraan h-step-ahead saya maksudkan, misalkan, dengan mengasumsikan data per jam, kami menggunakan data dari jam 10 pagi untuk membuat prakiraan 7 langkah di depan untuk mendapatkan perkiraan untuk 11,12,13,14,14,15,15,16,17 ' jam.

Contoh pic: masukkan deskripsi gambar di sini

Terkait dengan pertanyaan utama saya, saya bertanya-tanya:

  • Apa alasan mengapa saya tidak melihat orang menggunakan pembelajaran mesin untuk membuat ramalan h-step-depan?
  • Jika ada metode menggunakan pembelajaran mesin, apakah ini lebih atau kurang tepat daripada ARIMA?
Ke 5
sumber

Jawaban:

7

(Bagian dari ini diambil dari pos saya sebelumnya ) Pertama-tama Anda perlu membedakan dua cara berbeda untuk melakukan peramalan seri multistep kali: Peramalan rekursif dan peramalan langsung:

  • n
  • nthn

Sekarang untuk menjawab pertanyaan utama Anda:

Dapatkah metode pembelajaran mesin menghasilkan ramalan h-langkah-depan?

Ya metode ML dapat, dan mereka dapat menghasilkan prakiraan h-langkah di depan menggunakan prakiraan multistep rekursif dan langsung. Tidak hanya itu, tetapi untuk peramalan multi-langkah langsung mereka sebenarnya lebih cocok untuk tugas daripada model tradisional seperti ARIMA atau Exponential Smoothing. Namun perhatikan bahwa untuk peramalan multi-langkah langsung, Anda harus menentukan terlebih dahulu langkah-h ke depan yang Anda inginkan untuk meramalkan dan melatih model Anda, sedangkan untuk peramalan berulang Anda dapat menggunakan model Anda untuk sejumlah langkah di masa depan yang Anda inginkan .

Selain itu Chevillon & Hendry berpendapat bahwa dalam beberapa kasus peramalan multi-langkah langsung lebih akurat daripada peramalan rekursif - menyiratkan bahwa ML akan lebih akurat daripada metode tradisional.

Untuk pertanyaan Anda yang lain:

  • Apa alasan mengapa saya tidak melihat orang menggunakan pembelajaran mesin untuk membuat ramalan h-step-depan?

Banyak orang menggunakan ML untuk peramalan multi-langkah, terutama menggunakan jaringan saraf: metode nynar Hyndman tersedia dalam paket R Forecast, paket nnfor R Kourentzes, model DeepAR Amazon, dan banyak lainnya.

XGBoost telah berhasil digunakan di beberapa kompetisi seri waktu Kaggle juga.

Lihat Bontempi et al. untuk diskusi umum.

  • Jika ada metode menggunakan pembelajaran mesin, apakah ini lebih atau kurang tepat daripada ARIMA?

Itu adalah pertanyaan terbuka, dan jelas tergantung pada data dan aplikasi yang diramalkan.

Skander H.
sumber
1

Saya telah bermain dengan deret waktu untuk deteksi anomali dalam beberapa bulan terakhir dan saya dapat berbagi dengan Anda pengalaman saya.

Rangkaian waktu yang telah saya kerjakan ditandai dengan dua musiman (harian dan mingguan), tidak ada tren dan banyak puncak di siang hari.

Saya melakukan beberapa percobaan dan kemudian saya memilih model yang didasarkan pada jaring saraf LSTM karena dalam kasus saya itu mengungguli arima, tetapi tentu saja karena semuanya dalam statistik, tidak ada solusi umum.

Untuk memprediksi lebih dari satu langkah waktu di masa depan dengan jaringan syaraf cukup sederhana, Anda perlu menampilkan nilai N alih-alih satu dan bahwa keluaran N akan dibandingkan dengan pengamatan N yang sebenarnya.

Dari pengalaman saya, saya dapat memberitahu Anda bahwa dengan menggunakan N rendah (katakanlah 1), model ini akan menggunakan beberapa langkah waktu di masa lalu untuk memprediksi yang baru, tanpa benar-benar "mempelajari" musiman. Di sisi lain, dengan meningkatkan N terlalu mutch, musiman dipelajari tetapi akurasi keseluruhan menurun.

Untuk keperluan analisis saya, saya menemukan N = 4 (2 jam di masa depan) sebagai kompromi yang baik.

cventr
sumber
1

Untuk menjawab pertanyaan Anda dalam istilah yang lebih umum, dimungkinkan untuk menggunakan pembelajaran mesin dan memprediksi prakiraan h-langkah di depan . Bagian yang sulit adalah bahwa Anda harus membentuk kembali data Anda ke dalam matriks yang Anda miliki, untuk setiap pengamatan nilai aktual dari pengamatan dan nilai-nilai masa lalu dari deret waktu untuk rentang yang ditentukan. Anda perlu menentukan secara manual berapa kisaran data yang tampak relevan untuk memprediksi deret waktu Anda, pada kenyataannya, seperti parameter parameter model ARIMA. Lebar / cakrawala matriks sangat penting untuk memprediksi dengan benar nilai selanjutnya yang diambil oleh matriks Anda. Jika cakrawala Anda dibatasi, Anda mungkin kehilangan efek musiman.

Setelah Anda melakukan itu, untuk memprediksi h-langkah-ke depan, Anda harus memprediksi nilai pertama berikutnya berdasarkan pengamatan terakhir Anda. Anda kemudian harus menyimpan prediksi sebagai "nilai aktual", yang akan digunakan untuk memprediksi nilai berikutnya kedua melalui pergeseran waktu , seperti model ARIMA. Anda harus mengulangi proses tersebut h kali untuk mendapatkan langkah-h depan Anda. Setiap iterasi akan bergantung pada prediksi sebelumnya.

Contoh menggunakan kode R adalah sebagai berikut.

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)

Sekarang jelas, tidak ada aturan umum untuk menentukan apakah model deret waktu atau model pembelajaran mesin lebih efisien. Waktu komputasi mungkin lebih tinggi untuk model pembelajaran mesin, tetapi di sisi lain, Anda dapat menyertakan semua jenis fitur tambahan untuk memprediksi deret waktu Anda dengan menggunakannya (mis. Bukan hanya fitur numerik atau logis). Saran umum adalah menguji keduanya, dan memilih model yang paling efisien.

AshOfFire
sumber
Meskipun Anda mungkin ingin menyebutkan bahwa apa yang Anda sebut pengalihan waktu sebenarnya adalah apa yang dilakukan arima standar. Itu sebabnya Arima-Prediksi cenderung sangat linier.
5
Ya persis. Saya akan mengedit jawaban saya untuk memperjelas langkah ini.
AshOfFire
1
Dalam model deret waktu, Anda juga dapat menyertakan fitur tambahan.
Tim
Benar, dengan ARIMAX, tetapi harus berupa angka, dan koefisien yang ditambahkan tidak dapat dengan mudah ditafsirkan sebagai koefisien yang digunakan dalam ARMA.
AshOfFire