Fungsi ETS (), bagaimana cara menghindari ramalan yang tidak sesuai dengan data historis?

16

Saya sedang mengerjakan alogoritma di R untuk mengotomatiskan perhitungan perkiraan bulanan. Saya menggunakan, antara lain, fungsi ets () dari paket perkiraan untuk menghitung perkiraan. Ini bekerja dengan sangat baik.

Sayangnya, untuk beberapa seri waktu tertentu, hasil yang saya dapatkan aneh.

Silakan, cari di bawah kode yang saya gunakan:

train_ts<- ts(values, frequency=12)
fit2<-ets(train_ts, model="ZZZ", damped=TRUE, alpha=NULL, beta=NULL, gamma=NULL, 
            phi=NULL, additive.only=FALSE, lambda=TRUE, 
            lower=c(0.0001,0.0001,0.0001,0.8),upper=c(0.9999,0.9999,0.9999,0.98), 
            opt.crit=c("lik","amse","mse","sigma","mae"), nmse=3, 
            bounds=c("both","usual","admissible"), ic=c("aicc","aic","bic"),
            restrict=TRUE)  
ets <- forecast(fit2,h=forecasthorizon,method ='ets')   

Silakan, Anda akan menemukan di bawah kumpulan data riwayat yang bersangkutan:

 values <- c(27, 27, 7, 24, 39, 40, 24, 45, 36, 37, 31, 47, 16, 24, 6, 21, 
35, 36, 21, 40, 32, 33, 27, 42, 14, 21, 5, 19, 31, 32, 19, 36, 
29, 29, 24, 42, 15, 24, 21)

Di sini, pada grafik, Anda akan melihat data historis (hitam), nilai pas (hijau) dan perkiraan (biru). Perkiraan ini jelas tidak sejalan dengan nilai yang dipasang.

Apakah Anda punya ide tentang bagaimana "mengikat" yang forecat menjadi "sejalan" dengan penjualan historis? masukkan deskripsi gambar di sini

mehdik
sumber
Ini adalah salah satu ramalan paling aneh yang pernah saya temui ets. Rata-rata / level data historis adalah sekitar 20 dan rata-rata / level perkiraan adalah sekitar 50. Tidak yakin mengapa ini akan terjadi? dapatkah Anda menjalankan dasar etsdan melihat apakah Anda mendapatkan hasil yang sama?
peramal
Terima kasih banyak atas waktu dan jawabannya! Saya setuju dengan Anda satu fakta bahwa poin terakhir dapat dilihat sebagai "pencilan" (21 vs 7 atau 6 atau 5 tahun sebelumnya) Ini dapat dideteksi karena menggunakan interval kepercayaan berdasarkan data masa lalu dan harus bersih sebelum mengkalibrasi perkiraan statistik. Tetapi jika kita berasumsi bahwa itu adalah penjualan "normale", adakah cara untuk menghindari perilaku ini dengan membatasi ramalan, atau setidaknya diperingatkan bahwa ramalan itu dua kali lebih besar dari sejarah? Batas alpha, beta dan gamma tidak relevan dalam kasus itu. Sekali lagi, terima kasih banyak atas bantuan Anda dalam hal ini!
MehdiK
Saya telah memilih jawaban Anda, sekarang saya berasumsi Anda dapat meninggalkan komentar. Di masa depan, silakan tinggalkan komentar langsung di bawah jawaban sehingga orang-orang yang merespons akan memperhatikannya. Terima kasih
peramal
ETS dan semua model deret waktu univariat mengasumsikan bahwa perilaku masa lalu memprediksi perilaku masa depan. Jika ada titik data abnormal maka Anda perlu memberi tahu model bahwa ada anomali. Model tidak akan tahu nilainya normal, Anda harus menentukan dalam model bahwa nilainya outlier.
peramal

Jawaban:

10

Seperti @forecaster tunjukkan, ini disebabkan oleh pencilan pada akhir seri. Anda dapat melihat masalah dengan jelas jika Anda memplot komponen level yang diperkirakan di atas:

plot(forecast(fit2))
lines(fit2$states[,1],col='red')

Perhatikan kenaikan level di akhir seri.

Salah satu cara untuk membuat model lebih kuat untuk pencilan adalah mengurangi ruang parameter sehingga parameter penghalusan harus mengambil nilai yang lebih kecil:

fit2 <- ets(train_ts, upper=c(0.3,0.2,0.2,0.98))  
plot(forecast(fit2))

masukkan deskripsi gambar di sini

Rob Hyndman
sumber
apa ramalan :: auto.arima setara dengan saran kedua Anda untuk menangani pencilan?
Brash Equilibrium
1
Dengan model ARIMA, Anda dapat menangani outlier dengan variabel dummy yang disetel ke 1 pada waktu-waktu yang bermasalah. Cukup gunakan argumen xreg di auto.arima atau Arima.
Rob Hyndman
6

Ini adalah kasus buku teks tentang memiliki pencilan pada akhir seri dan konsekuensinya yang tidak diinginkan. Masalah dengan data Anda adalah bahwa dua poin terakhir adalah outlier , Anda mungkin ingin mengidentifikasi dan memperlakukan outlier sebelum Anda menjalankan algoritma peramalan. Saya akan memperbarui jawaban dan analisis saya hari ini pada beberapa strategi untuk mengidentifikasi outlier. Di bawah ini adalah pembaruan cepat.

Ketika saya menjalankan kembali ets dengan dua titik data terakhir dihapus, saya mendapatkan perkiraan yang masuk akal. Silahkan lihat di bawah ini:

values.clean <- c(27, 27, 7, 24, 39, 40, 24, 45, 36, 37, 31, 47, 16, 24, 6, 21, 
                  35, 36, 21, 40, 32, 33, 27, 42, 14, 21, 5, 19, 31, 32, 19, 36, 
                  29, 29, 24, 42, 15)## Last two points removed

train_ts.clean<- ts(values.clean, frequency=12)
fit2.clean<-ets(train_ts.clean)  
ets.f.clean <- forecast(fit2.clean,h=24)
plot(ets.f.clean)

masukkan deskripsi gambar di sini

peramal cuaca
sumber
5

@peramal cuacaAnda benar bahwa nilai terakhir adalah outlier TETAPI periood 38 (nilai kedua dari belakang) bukanlah outlier ketika Anda memperhitungkan tren akun dan aktivitas musiman. Ini adalah momen yang menentukan / mengajar untuk menguji / mengevaluasi alternatif pendekatan yang kuat. Jika Anda tidak mengidentifikasi dan menyesuaikan untuk anomali maka variasinya meningkat menyebabkan item lain tidak ditemukan. Periode 32 juga merupakan pencilan. Periode 3,32 dan 1 juga outlier. Ada tren yang signifikan secara statistik dalam seri untuk 17 nilai pertama tetapi mereda setelah itu dimulai pada periode 18. Jadi, sebenarnya ada dua tren dalam data. Pelajaran yang bisa dipetik di sini adalah bahwa pendekatan sederhana yang menganggap tidak ada tren atau bentuk tertentu dari tren dan / atau secara diam-diam mengasumsikan bentuk spesifik dari proses auto-regresif perlu dipertanyakan secara serius. Ke depan ramalan yang baik harus mempertimbangkan kemungkinan kelanjutan dari kegiatan luar biasa yang ditemukan pada titik pamungkas (periode 39). Tidak mungkin untuk mengekstrak ini dari data.

Ini adalah model yang mungkin berguna:

masukkan deskripsi gambar di siniStatistik model akhir ada di sini masukkan deskripsi gambar di sini. Grafik Aktual / Fit dan Forecast menarik karena menyoroti aktivitas yang luar biasa.masukkan deskripsi gambar di sini

IrishStat
sumber
+1 jawaban Anda selalu mendidik dan mencerahkan. Saya mengerti denyut nadi dan waktu, apakah efek yang diperbaiki adalah murni model deterministik?
peramal
@forecaster Ya, efek tetap / pulsa musiman murni dterdistrik ... sama seperti pulsa / level bergeser dan tren waktu setempat. Selanjutnya bulan Agustus (8) tidak signifikan dan tidak ada dalam daftar akhir.
IrishStat