Saya sedang mengerjakan proyek kecil di mana kami mencoba memprediksi harga komoditas (Minyak, Aluminium, Timah, dll.) Selama 6 bulan ke depan. Saya punya 12 variabel untuk diprediksi dan saya punya data dari Apr, 2008 - Mei 2013.
Bagaimana saya harus pergi tentang prediksi? Saya telah melakukan yang berikut:
- Data yang diimpor sebagai dataset Timeseries
- Musiman semua variabel cenderung bervariasi dengan Trend, jadi saya akan ke model multiplikasi.
- Saya mengambil log variabel untuk dikonversi menjadi model aditif
- Untuk setiap variabel dekomposisi data menggunakan STL
Saya berencana untuk menggunakan perataan eksponensial Holt Winters, ARIMA dan neural net untuk memperkirakan. Saya membagi data sebagai pelatihan dan pengujian (80, 20). Berencana memilih model dengan sedikit MAE, MPE, MAPE dan MASE.
Apakah saya melakukannya dengan benar?
Juga satu pertanyaan yang saya miliki adalah, sebelum beralih ke ARIMA atau neural net, apakah saya harus memuluskan data? Jika ya, menggunakan apa? Data menunjukkan Musim dan tren.
EDIT:
Melampirkan plot waktu dan data
Year <- c(2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2009, 2009,
2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2010,
2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010,
2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011,
2011, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012,
2012, 2012, 2013, 2013)
Month <- c(4, 5, 6, 7, 8, 9, 10, 11, 12, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11,
12, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 1, 2, 3, 4, 5, 6, 7,
8, 9, 10, 11, 12, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 1, 2)
Coil <- c(44000, 44500, 42000, 45000, 42500, 41000, 39000, 35000, 34000,
29700, 29700, 29000, 30000, 30000, 31000, 31000, 33500, 33500,
33000, 31500, 34000, 35000, 35000, 36000, 38500, 38500, 35500,
33500, 34500, 36000, 35500, 34500, 35500, 38500, 44500, 40700,
40500, 39100, 39100, 39100, 38600, 39500, 39500, 38500, 39500,
40000, 40000, 40500, 41000, 41000, 41000, 40500, 40000, 39300,
39300, 39300, 39300, 39300, 39800)
coil <- data.frame(Year = Year, Month = Month, Coil = Coil)
EDIT 2: Satu pertanyaan, dapatkah Anda memberi tahu saya jika data saya memiliki musiman atau tren? Dan juga tolong beri saya beberapa tips tentang cara mengidentifikasi mereka.
sumber
Jawaban:
Anda harus menggunakan paket perkiraan , yang mendukung semua model ini (dan banyak lagi) dan membuatnya mudah:
Saya akan menyarankan agar tidak merapikan data sebelum memasang model Anda. Model Anda secara inheren akan mencoba memuluskan data, jadi pra-smoothing hanya mempersulit.
Edit berdasarkan data baru:
Sebenarnya arima adalah salah satu model terburuk yang dapat Anda pilih untuk pelatihan dan rangkaian tes ini.
Saya menyimpan data Anda ke panggilan file
coil.csv
, memuatnya ke R, dan membaginya menjadi set pelatihan dan uji:Berikutnya saya cocok dengan banyak model deret waktu: arima, perataan eksponensial, jaringan saraf, kelelawar, kelelawar, dekomposisi musiman, dan deret waktu struktural:
Lalu saya membuat beberapa perkiraan dan dibandingkan dengan set tes. Saya menyertakan ramalan naif yang selalu memprediksi garis datar dan horizontal:
Seperti yang Anda lihat, model arima membuat tren salah, tapi saya agak suka tampilan "Model Struktural Dasar"
Akhirnya, saya mengukur akurasi masing-masing model pada set tes:
Metrik yang digunakan dijelaskan dalam Hyndman, RJ dan Athanasopoulos, G. (2014) "Peramalan: prinsip dan praktik" , yang juga merupakan penulis paket prakiraan. Saya sangat menyarankan Anda membaca teks mereka: tersedia secara online gratis. Rangkaian waktu struktural adalah model terbaik oleh beberapa metrik, termasuk MASE, yang merupakan metrik yang cenderung saya sukai untuk pemilihan model.
Satu pertanyaan terakhir adalah: apakah model struktural beruntung pada set tes ini? Salah satu cara untuk menilai ini adalah dengan melihat kesalahan set pelatihan. Kesalahan set pelatihan kurang dapat diandalkan daripada kesalahan set tes (karena mereka bisa terlalu pas), tetapi dalam kasus ini model struktural masih keluar di atas:
(Perhatikan bahwa jaringan saraf overfit, berkinerja sangat baik pada set pelatihan dan buruk pada set tes)
Akhirnya, itu akan menjadi ide yang baik untuk memvalidasi silang semua model ini, mungkin dengan pelatihan pada 2008-2009 / pengujian pada 2010, pelatihan 2008-2010 / pengujian pada 2011, pelatihan 2008-2011 / pengujian pada 2012, pelatihan pada 2008-2012 / pengujian pada 2013, dan rata-rata kesalahan di semua periode waktu ini. Jika Anda ingin turun ke rute itu, saya memiliki paket yang sebagian lengkap untuk model seri waktu validasi silang di github yang ingin saya coba dan berikan saya umpan balik / tarik permintaan di:
Sunting 2: Mari kita lihat apakah saya ingat bagaimana menggunakan paket saya sendiri!
Pertama-tama, instal dan muat paket dari github (lihat di atas). Kemudian validasi silang beberapa model (menggunakan dataset lengkap):
(Perhatikan bahwa saya mengurangi fleksibilitas model jaringan saraf, untuk mencoba mencegahnya dari overfitting)
Setelah kami cocok dengan model, kami dapat membandingkannya dengan MAPE (cv.ts belum mendukung MASE):
Aduh. Tampaknya perkiraan struktural kami beruntung. Dalam jangka panjang, ramalan naif membuat ramalan terbaik, rata-rata di cakrawala 12 bulan (model arima masih merupakan salah satu model terburuk). Mari kita bandingkan model di masing-masing dari 12 horizon perkiraan, dan lihat apakah ada di antara mereka yang pernah mengalahkan model naif:
Yang menarik, model pemulusan eksponensial selalu memilih model naif (garis oranye dan garis biru tumpang tindih 100%). Dengan kata lain, perkiraan naif dari "harga kumparan bulan depan akan sama dengan harga kumparan bulan ini" lebih akurat (di hampir setiap horizon perkiraan) daripada 7 model deret waktu yang sangat canggih. Kecuali Anda memiliki informasi rahasia yang belum diketahui pasar, mengalahkan perkiraan harga kumparan naif akan sangat sulit .
Tidak pernah ada jawaban yang ingin didengar orang, tetapi jika akurasi perkiraan adalah tujuan Anda, Anda harus menggunakan model yang paling akurat. Gunakan model naif.
sumber
Pendekatan yang Anda ambil masuk akal. Jika Anda baru mengenal peramalan, maka saya akan merekomendasikan buku-buku berikut:
Buku pertama adalah buku klasik yang sangat saya rekomendasikan. Buku kedua adalah buku sumber terbuka yang dapat Anda rujuk untuk metode perkiraan dan bagaimana penerapannya menggunakan perkiraan
R
paket perangkat lunak sumber terbuka . Kedua buku tersebut memberikan latar belakang yang baik tentang metode yang saya gunakan. Jika Anda serius tentang peramalan, maka saya akan merekomendasikan Prinsip Peramalan oleh Armstrong yang merupakan kumpulan dari sejumlah besar penelitian dalam peramalan bahwa praktisi mungkin merasa sangat membantu.Datang ke contoh spesifik Anda pada koil, itu mengingatkan saya pada konsep prakiraan yang sering diabaikan oleh kebanyakan buku teks. Beberapa seri seperti seri Anda tidak dapat diprediksi karena polanya kurang karena tidak menunjukkan tren atau pola musiman atau variasi sistematis. Dalam hal ini saya akan mengkategorikan seri sebagai kurang dapat diperkirakan. Sebelum merambah ke metode ekstrapolasi, saya akan melihat data dan mengajukan pertanyaan, apakah seri saya dapat diprediksi? Dalam contoh khusus ini, ekstrapolasi sederhana seperti ramalan jalan acak yang menggunakan nilai terakhir ramalan telah ditemukan paling akurat .
Juga satu komentar tambahan tentang jaringan saraf: Jaringan saraf terkenal gagal dalam kompetisi empiris . Saya akan mencoba metode statistik tradisional untuk deret waktu sebelum mencoba menggunakan jaringan saraf untuk tugas peramalan deret waktu.
Saya mencoba memodelkan data Anda
R's forecast package
, semoga komentarnya cukup jelas.Dengan menggunakan MAE pada data tahan, saya akan memilih ARIMA untuk perkiraan jangka pendek (1 - 12 bulan). untuk jangka panjang, saya akan mengandalkan ramalan jalan acak. Harap dicatat bahwa ARIMA memilih model jalan acak dengan drift (0,1,0) + drift yang cenderung jauh lebih akurat daripada model jalan acak murni dalam jenis masalah ini khususnya jangka pendek. Lihat tabel di bawah ini. Ini didasarkan pada fungsi akurasi seperti yang ditunjukkan pada kode di atas.
Jawaban spesifik untuk pertanyaan spesifik Anda: Juga satu pertanyaan yang saya miliki adalah, sebelum meneruskan ke ARIMA atau neural net, apakah saya harus memuluskan data? Jika ya, menggunakan apa?
Data menunjukkan Musim dan tren.
Kiat Praktis untuk meningkatkan akurasi:
Gabungkan berbagai metode peramalan: - Anda dapat mencoba menggunakan metode non ekstrapolasi seperti peramalan dengan analogi , peramalan menghakimi atau teknik lain dan menggabungkannya dengan metode statistik Anda untuk memberikan prediksi yang akurat. Lihat artikel ini untuk manfaat menggabungkan. Saya mencoba menggabungkan 5 metode di atas, tetapi prediksi tersebut tidak akurat sebagai metode individual, salah satu alasan yang mungkin adalah bahwa ramalan individu serupa. Anda menuai manfaat dari menggabungkan prakiraan saat Anda menggabungkan beragam metode seperti prakiraan statistik dan penilaian.
Mendeteksi dan Memahami Pencilan: - Data dunia nyata diisi dengan pencilan. Identifikasi dan perlakukan outlier dengan tepat dalam rangkaian waktu. Rekomendasikan membaca posting ini . Dalam melihat data koil Anda, apakah drop sebelum 2009 adalah outlier ??
Edit
Data tampaknya mengikuti beberapa jenis tren ekonomi makro. Dugaan saya adalah tren menurun yang terlihat sebelum 2009 mengikuti kemerosotan ekonomi yang terlihat antara 2008 - 2009 dan mulai meningkat pasca 2009. Jika ini masalahnya, maka saya akan bersama-sama menghindari menggunakan metode ekstrapolasi dan alih-alih mengandalkan teori yang kuat tentang bagaimana tren ekonomi ini berperilaku seperti yang dirujuk oleh @GraemeWalsh.
Semoga ini membantu
sumber