Analisis seri waktu validasi silang


37

Saya telah menggunakan paket caret dalam R untuk membangun model prediksi untuk klasifikasi dan regresi. Caret menyediakan antarmuka terpadu untuk menyetel model hiper-parameter dengan validasi silang atau strapping boot. Misalnya, jika Anda sedang membangun model 'tetangga terdekat' yang sederhana untuk klasifikasi, berapa banyak tetangga yang harus Anda gunakan? 2? 10? 100? Caret membantu Anda menjawab pertanyaan ini dengan mengambil sampel ulang data Anda, mencoba berbagai parameter, dan kemudian menggabungkan hasilnya untuk memutuskan mana yang menghasilkan akurasi prediksi terbaik.

Saya suka pendekatan ini karena ini menyediakan metodologi yang kuat untuk memilih model hiper-parameter, dan setelah Anda memilih hiper-parameter akhir itu memberikan estimasi yang divalidasi silang tentang seberapa 'baik' modelnya, menggunakan akurasi untuk model klasifikasi dan RMSE untuk model regresi.

Sekarang saya memiliki beberapa data deret waktu yang ingin saya bangun model regresi, mungkin menggunakan hutan acak. Apa teknik yang baik untuk menilai akurasi prediksi model saya, mengingat sifat data? Jika hutan acak tidak benar-benar berlaku untuk data deret waktu, apa cara terbaik untuk membangun model ensembel yang akurat untuk analisis deret waktu?


Saya menemukan pertanyaan yang sangat menarik. Apakah ada cara saya bisa menandai pertanyaan untuk mengikutinya?
mariana soffer

1
@mariana soffer Klik ikon 'Bintang' di bawah panah atas / bawah.
Zach

4
Caret sekarang mendukung validasi silang seri-waktu - r-bloggers.com/time-series-cross-validation-5
captain_ahab

1
@Zach Ini 'postingan lama tapi saya ingin tahu apakah Anda memiliki pemikiran baru? Apakah Anda mengetahui adanya karya terbaru tentang validasi model sekuensial?
horaceT

Jawaban:


10

Teknik validasi silang k-times "klasik" didasarkan pada kenyataan bahwa masing-masing sampel dalam set data yang tersedia digunakan (k-1) -kali melatih model dan 1 kali untuk mengujinya. Karena sangat penting untuk memvalidasi model deret waktu pada data "masa depan", pendekatan ini tidak akan berkontribusi pada stabilitas model.

Salah satu properti penting dari banyak deret waktu (paling?) Adalah korelasi antara nilai-nilai yang berdekatan. Seperti yang ditunjukkan oleh IrishStat, jika Anda menggunakan bacaan sebelumnya sebagai variabel independen dari calon model Anda, korelasi ini (atau kurangnya independensi) memainkan peran penting dan merupakan alasan lain mengapa validasi silang k-times bukanlah ide yang baik.

Salah satu cara untuk mengatasi masalah ini adalah dengan "mengecualikan" data dan menghiasnya. Jika proses hubungan dekorasi berhasil, maka menggunakan validasi silang pada deret waktu menjadi kurang bermasalah. Namun, itu tidak akan memecahkan masalah memvalidasi model menggunakan data masa depan

Klarifikasi

dengan memvalidasi model pada data masa depan yang saya maksud membangun model, menunggu data baru yang tidak tersedia selama konstruksi model, pengujian, fine-tuning dll dan memvalidasinya pada data baru .

dengan oversampling data yang saya maksud mengumpulkan data deret waktu pada frekuensi jauh lebih tinggi dari yang sebenarnya diperlukan. Misalnya: sampel harga saham setiap 5 detik, ketika Anda benar-benar tertarik dengan perubahan setiap jam. Di sini, ketika saya mengatakan "pengambilan sampel", saya tidak bermaksud "menginterpolasi", "memperkirakan" dll. Jika data tidak dapat diukur pada frekuensi yang lebih tinggi, teknik ini tidak ada artinya


Apa cara 'klasik' untuk memvalidasi model pada data masa depan? Apa yang Anda maksud dengan 'oversampling?' Terima kasih!
Zach

ThalhalT

@ bgbg Saya menghadapi masalah yang sangat mirip dan baru saja menemukan posting Anda. Bisakah Anda mengutip beberapa referensi tentang data time series yang terlalu banyak dicocokkan dan didekorasi? Saya akan berpikir jika memori dalam seri waktu cukup singkat (dapat menunjukkan bahwa pas dengan arima), orang hanya bisa mengambil sampel "non-tumpang tindih" dan melakukan validasi silang yang biasa. Pikiran apa pun dihargai.
horaceT

9

http://robjhyndman.com/researchtips/crossvalidation/ berisi tip cepat untuk validasi silang seri waktu. Mengenai menggunakan hutan acak untuk data deret waktu .... tidak yakin meskipun sepertinya pilihan yang aneh mengingat bahwa model ini dilengkapi dengan menggunakan sampel bootstrap. Ada beberapa metode deret waktu klasik (misalnya ARIMA) yang dapat digunakan, seperti halnya teknik ML seperti Neural Nets (contoh, contoh pdf ). Mungkin beberapa pakar time series dapat mengomentari seberapa baik teknik ML bekerja dibandingkan dengan algoritma spesifik time series.


2
Ini cukup banyak menyentuh paku di kepala. Saya mencoba mencari cara untuk menerapkan teknik Machine Learning ke dalam analisis deret waktu.
Zach

Saya telah berhasil menggunakan hutan acak untuk perkiraan sebelumnya. Lihat: biomedcentral.com/1471-2105/15/276
captain_ahab

6

Berikut adalah beberapa contoh kode untuk model deret waktu validasi silang. Saya memperluas kode ini di blog saya , menggabungkan paket foreach untuk mempercepat dan memungkinkan untuk istilah xreg yang mungkin dalam validasi silang.

Berikut salinan kode dari blog Rob Hyndman:

library(fpp) # To load the data set a10
plot(a10, ylab="$ million", xlab="Year", main="Antidiabetic drug sales")
plot(log(a10), ylab="", xlab="Year", main="Log Antidiabetic drug sales")

k <- 60 # minimum data length for fitting a model
n <- length(a10)
mae1 <- mae2 <- mae3 <- matrix(NA,n-k,12)
st <- tsp(a10)[1]+(k-2)/12

for(i in 1:(n-k))
{
  xshort <- window(a10, end=st + i/12)
  xnext <- window(a10, start=st + (i+1)/12, end=st + (i+12)/12)
  fit1 <- tslm(xshort ~ trend + season, lambda=0)
  fcast1 <- forecast(fit1, h=12)
  fit2 <- Arima(xshort, order=c(3,0,1), seasonal=list(order=c(0,1,1), period=12), 
      include.drift=TRUE, lambda=0, method="ML")
  fcast2 <- forecast(fit2, h=12)
  fit3 <- ets(xshort,model="MMM",damped=TRUE)
  fcast3 <- forecast(fit3, h=12)
  mae1[i,1:length(xnext)] <- abs(fcast1[['mean']]-xnext)
  mae2[i,1:length(xnext)] <- abs(fcast2[['mean']]-xnext)
  mae3[i,1:length(xnext)] <- abs(fcast3[['mean']]-xnext)
}

plot(1:12, colMeans(mae1,na.rm=TRUE), type="l", col=2, xlab="horizon", ylab="MAE",
     ylim=c(0.65,1.05))
lines(1:12, colMeans(mae2,na.rm=TRUE), type="l",col=3)
lines(1:12, colMeans(mae3,na.rm=TRUE), type="l",col=4)
legend("topleft",legend=c("LM","ARIMA","ETS"),col=2:4,lty=1)

Hasil


Hai Zach. Saya menerapkan versi kode Hyndman yang sedikit berbeda untuk mendeteksi jumlah istilah yang sesuai untuk model regresi dengan deret waktu. Sayangnya, plot kesalahan CV menunjukkan beberapa minimum lokal yang membuat saya bertanya tentang bagaimana memilih jumlah istilah dengan benar. Masalah penuh dijelaskan di sini . Pernahkah Anda menghadapi hal serupa sebelumnya?
jroberayalas

5

Jika Anda memiliki data deret waktu maka Anda mungkin memiliki "masalah derajat kebebasan". Sebagai contoh jika Anda memiliki 4 pengamatan yang diambil pada interval per jam dan kemudian memutuskan untuk menggunakan 241 pengamatan pada interval 1 menit, Anda memiliki 241 pengamatan tetapi mereka tidak harus independen. Saat Anda mengirimkan 241 nilai / pengukuran ini ke paket analitik, paket tersebut mungkin berharap bahwa ini adalah 241 nilai independen saat mulai menjalankan sihir khusus itu. Jika Anda memiliki data deret waktu, Anda mungkin harus memutakhirkan analitik Anda. Saya tidak tahu program yang Anda rujuk tetapi itu merupakan dugaan yang masuk akal dari saya (saya bisa saja salah!) Bahwa itu adalah tes (tes F / tes T ... dll) mungkin tidak berlaku untuk set masalah Anda.


1

Saya dapat merekomendasikan Anda 2 makalah menarik untuk dibaca yang sedang online 1.Streamed Learning: One-Pass SVMs, oleh Piyush Rai, Hal Daum'e III, Suresh Venkatasubramanian 2.Streaming k-means aproksimasi, oleh Nir Ailon

Semoga ini sedikit memperjelas ide-ide Anda


Bisakah Anda memberikan tautan ke kertas-kertas itu? Terima kasih.
Zach

Zach di sini adalah snowbird.djvuzone.org/2008/abstracts/180.pdf dan yang lainnya adalah www1.cs.columbia.edu/~rjaiswal/ajmNIPS09.pdf . Semoga ini bisa membantu
mariana soffer
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.