
Peramalan Deret Waktu – Forecasting Time Series merupakan salah satu topik mata kuliah dalam riset operasi dan statistik yang berguna untuk melakukan peramalan / estimasi suatu variabel di masa mendatang berbasis / domain waktu disebut time series/ deret waktu. Melalui kegiatan prediksi seperti apa kondisi masa depan akan mengubah perilaku kita sekarang, lebih tepatnya bisa mempersiapkan sesuatu lebih baik. Contoh kasus dalam forecasting yang sering kita temui yaitu (kalian bisa baca penerapan time series yang lain yaitu Mencari Fase pergerakan saham Sell In May And Go Away; Dekomposisi Runtun Waktu Time Series Transaksi Saham)
- pengendalian inventori / perencanaan produksi untuk memperkirakan permintaan suatu produk, mengontrol stok bahan baku dan barang jadi serta merencanakan jadwal produksi.
- kebijakan investasi – meramalkan informasi keuangan seperti suku bunga,nilai tukar, harga saham, harga emas.
- kebijakan ekonomi – perkiraan informasi ekonomi seperti pertumbuhan ekonomi, pengangguran, tingkat inflasi.
Belajar Statistik
Contents
- 1 Jangka Range Forecasting
- 2 Model Pendekatan Forecasting dan Pola Data
- 3 Proses Forecasting
- 4 Model Forecasting
- 5 Model Performance
- 6 Tools forecasting
- 7 Package Time Series Forecasting
- 8 Install Package fpp
- 9 Download dataset
- 10 Loading Package dan Dataset
- 11 Format Variabel Time Series
- 12 Model Exponential State Smoothing (ETS)
- 13 Model Autoregressive Integrated Moving Average (ARIMA)
- 14 Mengukur Kinerja Model Forecasting
Materi statistik yang saling berkaitan satu sama lain, bisa kalian pelajari materi yang lain Belajar Statistik
Jangka Range Forecasting
Secara umum dibagi menjadi 3 perencanaan forecasting berdasarkan praktik bisnis saat ini yaitu
- Jangka pendek dengan durasi waktu 3 -6 bulan yang bersifat operating
- Jangka menengah dengan durasi waktu 6 bulan – 2 tahun yang bersifat tactical
- Jangka panjang dengan durasi waktu diatas 2 tahun yang bersifat strategic
Model Pendekatan Forecasting dan Pola Data
Model pendekatan forecasting yang akan dibahas ini berbasis deret waktu/time series dengan arti bahwa kejadian masa lalu akan berdampak terhadap masa depan sehingga dengan mengumpulkan informasi masa yang diolah secara matematika/statistik menjadi dasar keputusan dimasa depan. Setiap data berbasis time series mempunyai bentuk/pola sebagai berikut
- Pola musiman/seasonal merupakan fluktuasi dari data yang terjadi secara periodik (data terbentuk dengan pola tertentu) dalam kurun waktu satu tahun, seperti triwulan, kuartalan, bulanan, mingguan, atau harian.
- Pola siklis terjadi apabila datanya dipengaruhi oleh fluktuasi ekonomi jangka panjang, seperti yang berhubungan dengan siklus perekonomian, biasanya pola ini dipengaruhi oleh faktor eksternal.
- Pola trend merupakan kecenderungan arah data dalamj angka panjang, dapat berupa kenaikan maupun penurunan.
- Sedangkan pola konstan merupakan kejadian yang tidak terduga dan bersifat acak
Dengan mengetahui setiap bentuk/pola data tersebut akan mempermudah kita dalam menggunakan sebuah metode/algoritma.
Proses Forecasting
Langkah-langkah yang diperlukan untuk forecasting tentu dimulai dari sebuah case studi untuk mengetahui sebuah permasalahan yang terjadi. Setiap case studi akan mempunyai beberapa variabel yang saling mempengaruhi, misalkan case studi mengenai penjualan beras dalam untuk mengetahui seberapa banyak stok yag harus disiapkan sebulan sebelumnya. Setiap data penjualan beras perbulan mempunyai pola musiman yaitu pada masa menjelang puasa/lebaran mengalami kenaikan sebanyak 7-10% lebih tinggi dibandingkan dengan bulan-bulan biasa dan setiap tahun mengalami kenaikan sebanyak 1-3% yang dipicu oleh jumlah penduduk yang semakin padat.
Model Forecasting
Model forecasting berdasarkan dengan metodenya dibagi menjadi 2 yaitu metode forecasting kualitatif yang hanya didasarkan pada penilaian secara subjek atas dasar experience dan intuisi alih-alih menggunakan data, sedangkan metode forecasting kuantitatif menggunakan angka-angka historis sebelumnya serta dipandu dengan analisis pola datanya. Metode kuantitatif dibagi lagi menjadi yaitu
- metode pemulusan/smoothing seperti single moving average, single exponential smoothing, double exponential smoothing, winter. Metode ini bertujuan untuk mengurangi faktor acak yang bersifat musiman dengan cara membuat rerata dari masa lampau
- Metode ARIMA (Autoregressive Integrated Moving Average) pada dasarnya menggunakan fungsi deret waktu, metode ini memerlukan pendekatan model identifikasi serta penaksiran awal dari paramaternya. Sebagai contoh: peramalan nilai tukar mata uang asing, pergerakan nilai IHSG. Detail tutorial bisa kalian pelajari di Pengertian dan Cara Perhitungan ARIMA serta Prediksi Model ARIMA
- Metode regresi didasarkan hubungan korelasi, misalkan kemampuan orang mencicil rumah berdasarkan gaji perbulan. Sudah pernah kita bahas di https://softscients.com/2020/04/18/buku-belajar-dasar-dasar-statistika-dengan-r-regresi-linear-berganda-r-squared/
Model Performance
Pengukuran kinerja model peramalan sudah pernah kita bahas di https://softscients.com/2020/03/26/buku-belajar-machine-learning-dengan-matlab-jenis-perhitungan-error-dalam-forecasting/. Seperti mean absolute deviation (MAD), mean squared deviation (MSD), serta mean absolute percentage error (MAPE) ataupun melihat nilai Akaike Information Criterion (AIC)
Tools forecasting
Tentu untuk melakukan forecasting kalian perlu sebuah tools yang terintegrasi seperti excel, R, python, SPPS. Tapi dalam tulisan ini kita akan menggunakan bahasa R saja karena lebih mudah dan banyak tersedia package yang membahas mengenai forecasting dengan nama package fpp. Package R tersebut sangat lengkap lho, ntar kita akan bahas satu-persatu.
Package Time Series Forecasting
Package forecasting yang akan kita gunakan yaitu fpp yang sangat lengkap dan mudah digunakan termasuk ploting data.
Install Package fpp
Akan semakin mudah kalau kita menggunakan package fpp, berikut perintah yang digunakan untuk install package fpp
install.packages('fpp')
Download dataset
Kalian bisa gunakan dataset passanger yang berisi informasi jumlah penumpang harian
https://data.transportation.gov/api/views/xgub-n9bw/rows.csv?accessType=DOWNLOAD
Datanya cukup besar sekitar 46mb dengan 658,572 records karena bersifat daily, untuk itu kalian harus olah terlebih dahulu menggunakan package dplyr. https://softscients.com/2020/04/11/buku-belajar-dasar-dasar-statistika-dengan-r-manipulasi-data-frame-dengan-dplyr/. Misalkan data tersebut disimpan dengan nama International_Report_Passengers.csv yang disimpan di folder dataset
Loading Package dan Dataset
Seperti biasa, kalian harus loading package dan dataset format CSV
library(fpp) library(dplyr) penumpang <-read.csv('dataset/International_Report_Passengers.csv')
Terlihat bahwa dataset penumpang terdiri dari 16 kolom, tapi kita hanya butuh date_dte, Year, Month, dan Total, untuk itu kita harus mengolah dataset menggunakan package dplyr untuk mengetahui sum(total) berdasarkan Month dan Year, dengan perintah select, group, dan summarise serta arrange agar bisa diolah perbulan-tahun.
data_bulan_tahun <- penumpang %>% select(Month,Year,Total) %>% group_by(Month,Year) %>% summarise(total_sales=sum(Total)) data_sorting<-arrange(select(data_bulan_tahun,Month,Year,total_sales),Year) print(data_sorting)
Hasil sebagai berikut terlihat bahwa data sudah ter sum() berdasarkan Month dan Year nya dengan variabel nama variabel data_sorting
Month Year total_sales <int> <int> <int> 1 1 1990 6271648 2 1 1991 6148863 3 1 1992 6901511 4 1 1993 7522394 5 1 1994 7734295 6 1 1995 8111345 7 1 1996 8532217 8 1 1997 9296872 9 1 1998 9794136 10 1 1999 10171126
Dimulai dari januari 1990 sampai dengan juni 2019
Kalau didalam excel kalian bisa menggunakan PIVOT tabel, hanya saja kalau datanya banyak sekali agak repot saja menggunakan excel, klik sana sini. Maka akan terasa lebih mudah menggunakan R saja.
Format Variabel Time Series
Variabel data_sorting akan kita ubah menjadi format Time Series dengan perintah ts() yaitu akan mengubah vector menjadi variabel time series dengan bentuk umum functionnya yaitu ts(vector, start=, end=, frequency=)
. Frekuensi adalah jumlah pengamatan per satuan waktu (1 = tahunan, 4 = kuartil, 12 = bulanan). Contohnya sebagai berikut yang menyebutkan secara detail bulan dan tahun urutannya dimulai dari awal sampai akhir yaitu 01/1990 sampai dengan 06/2019 dengan frekuensi sebesar 12 bulan
data_series = ts(data_sorting$total_sales,start=c(1990, 1),end=c(2019, 6), frequency=12) plot(data_series)
Terlihat sejak januari 1990 sampai dengan juni 2019 mengalami pola trend kenaikan yang kita beri nama data_series dengan type variabel berbentuk time series. Jadi harus diingat bahwa type variabel harus berbentuk time series!
print(data_series)
hasilnya
Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec 1990 6271648 5608228 7261485 6666438 6684581 7629021 8677938 9100434 7123752 6632612 6231111 6538180 1991 6148863 4672216 6092644 6038810 6741125 7482109 8374528 9139080 7257571 6914977 6134916 6774675 1992 6901511 6281298 7221718 7007566 7304494 7889414 8942150 9431506 7525113 7428989 6581619 7127455 1993 7522394 6394089 7622832 7315987 7671674 8185711 9570276 9938761 7928488 7768891 6704969 7516003 1994 7734295 6649478 8249397 7577301 7826280 8738038 9932014 10185170 8450237 8068429 7181674 7958271 1995 8111345 6920151 8437800 8335493 8438129 9320873 10650418 10921760 9184007 8699515 7911554 8590757 1996 8532217 8074669 9593858 8775419 9247058 10184481 11123114 11615672 9453882 9142661 8437653 9067967 1997 9296872 8402924 10304974 9289258 9967684 10661307 11690768 12241449 10215412 9734049 8999707 9519375 1998 9794136 8716860 10442123 10147269 10567532 11246359 12257403 12514817 10208884 10223480 9329460 9851648 1999 10171126 9074159 11354708 10620328 11016249 11861944 13151205 13348270 11069130 11131405 10334641 10075742 2000 10427758 9990809 12043042 11851265 12220377 13282355 14424004 14219474 11938750 11437476 10756570 11119393 2001 11233667 10010734 12264815 11796152 11685418 12939581 13964143 13970398 8321866 7605204 7704489 9115620 2002 9339827 8598628 10919725 9793932 10344350 11488631 12338081 12533622 9927823 10060299 9464381 10654709 2003 10436506 8948736 10330860 8930947 9379530 11123409 12576333 12781294 10044565 10199746 9986824 11069375 2004 10967999 10010520 11755742 11473968 11553914 12861245 14328484 13916190 11035667 11205590 10558376 11705730 2005 12014347 10529884 13204473 12048500 12619717 13783329 15186999 14325404 11810930 11526381 10870526 12189094 2006 12150715 10595377 13234515 13064802 13018957 14229608 15549459 14693986 12402740 11859472 11473918 12741160 2007 12455775 10882805 13678197 13175163 13328105 14633682 16055687 15654238 12695551 12704262 12221336 13362416 2008 13036238 11890636 14510742 13199419 13843595 14742116 15833305 15612317 11911286 12085175 11352207 12583174 2009 12204650 10482519 12606272 12708493 11903853 13359413 15143876 15011663 11781054 12028573 11157330 12752243 2010 12559476 10797080 13406541 12524436 13510088 14557825 16265644 15560107 12741005 13029124 11767883 13085763 2011 12906205 11166018 13715222 13725439 14098339 15018895 16973896 16039225 13408302 13354932 12304730 13750736 2012 13441837 11942221 14648648 14258621 14510659 15878348 17333274 16940090 13990252 13584080 12933032 14312139 2013 14000884 12268025 15476195 14546642 15581419 16674967 18083866 17957447 14449825 14536600 13448945 15419197 2014 14944960 12697485 15867883 15692977 16570866 17654128 19135514 19100833 15182418 15171010 13895018 16005963 2015 15717215 13557148 16585119 16261979 17390758 18557079 20824363 20465865 16513980 16594642 15193323 17284882 2016 16929160 14781989 17801777 17009369 18333256 19899165 22029902 21216933 17568431 17377970 16053481 18450238 2017 17930283 15075141 18313177 19155343 19353469 21208569 23350538 22626894 17924899 18155445 16906795 18960941 2018 18344712 16082295 20162009 19562594 20619470 22612169 24314837 23370960 19159089 19258623 18069012 19858149 2019 19030423 16412666 20488747 20264599 21237798 22977410
Model Exponential State Smoothing (ETS)
Misalkan kalian menggunakan model ETS exponential state smoothing untuk memprediksi 24 bulan kedepan untuk data juli 2019 s.d Juni 2021 menggunakan perintah ets() dilanjutkan perintah forecast() untuk melakukan prediksi/peramalan.
model_ets = ets(data_series) ets_24 = forecast(model_ets, h=24) # forecast 24 bulan kedepan plot(ets_24) summary(ets_24)
Hasil forecasting diperlihatkan dengan warna biru, sedangkan area gray/abu-abu mempresentasikan tingkat confidence sebesar 95%. Untuk detail lainnya kalian bisa melihat hasil print out sebagai berikut
Forecast method: ETS(M,Ad,M) Model Information: ETS(M,Ad,M) Call: ets(y = data_series) Smoothing parameters: alpha = 0.8566 beta = 4e-04 gamma = 1e-04 phi = 0.9784 Initial states: l = 6817511.3158 b = 31357.236 s = 0.9566 0.8713 0.9414 0.9642 1.2034 1.2051 1.0883 1 0.9667 1.0161 0.8347 0.9523 sigma: 0.0362 AIC AICc BIC 11272.00 11274.04 11341.65 Error measures: ME RMSE MAE MPE MAPE MASE ACF1 Training set 37920.27 404020.5 300411.2 0.2320452 2.602326 0.407756 0.04981481 Forecasts: Point Forecast Lo 80 Hi 80 Lo 95 Hi 95 Jul 2019 25455619 24273891 26637347 23648321 27262917 Aug 2019 25421559 23866991 26976128 23044052 27799067 Sep 2019 20369722 18883074 21856370 18096090 22643354 Oct 2019 19890465 18236301 21544629 17360640 22420290 Nov 2019 18410803 16712570 20109036 15813579 21008026 Dec 2019 20213938 18182137 22245739 17106566 23321309 Jan 2020 20123407 17946671 22300143 16794377 23452437 Feb 2020 17640964 15606468 19675460 14529471 20752456 Mar 2020 21475371 18853705 24097036 17465879 25484862 Apr 2020 20432061 17806882 23057240 16417197 24446926 May 2020 21138123 18293066 23983179 16786984 25489261 Jun 2020 23005174 19774161 26236186 18063766 27946581 Jul 2020 25474081 21752923 29195239 19783061 31165101 Aug 2020 25439597 21585418 29293775 19545140 31334053 Sep 2020 20383861 17188690 23579033 15497269 25270454 Oct 2020 19903972 16682823 23125122 14977650 24830295 Nov 2020 18423035 15350601 21495468 13724154 23121916 Dec 2020 20227076 16756654 23697499 14919523 25534630 Jan 2021 20136203 16587177 23685230 14708435 25563971 Feb 2021 17651938 14460211 20843666 12770612 22533265 Mar 2021 21488441 17507231 25469651 15399706 27577177 Apr 2021 20444227 16567362 24321092 14515074 26373381 May 2021 21150436 17049398 25251474 14878440 27422433 Jun 2021 23018284 18458828 27577741 16045197 29991371
Model Autoregressive Integrated Moving Average (ARIMA)
Penjelasan mengenai arima bisa kunjungi https://en.wikipedia.org/wiki/Autoregressive_integrated_moving_average. Kita gunakan saja perintah auto.arima() seperti berikut
model_arima = auto.arima(data_series) arima_24 = forecast(model_arima, h=24) plot(arima_24) summary(arima_24)
Hasil print out
Forecast method: ARIMA(2,1,2)(0,1,1)[12] Model Information: Series: data_series ARIMA(2,1,2)(0,1,1)[12] Coefficients: ar1 ar2 ma1 ma2 sma1 1.4580 -0.4826 -1.6838 0.6871 -0.5909 s.e. 0.2197 0.1939 0.2042 0.1987 0.0443 sigma^2 estimated as 1.62e+11: log likelihood=-4885.42 AIC=9782.85 AICc=9783.1 BIC=9805.84 Error measures: ME RMSE MAE MPE MAPE MASE ACF1 Training set 21107.87 392166.7 265140.4 0.05333484 2.30696 0.359882 -0.001879505 Forecasts: Point Forecast Lo 80 Hi 80 Lo 95 Hi 95 Jul 2019 24804732 24288861 25320604 24015775 25593690 Aug 2019 24024173 23371771 24676574 23026411 25021935 Sep 2019 19855081 19121689 20588473 18733455 20976707 Oct 2019 19902205 19110810 20693600 18691870 21112540 Nov 2019 18652533 17815177 19489889 17371908 19933159 Dec 2019 20602530 19726601 21478458 19262912 21942147 Jan 2020 19952520 19043120 20861920 18561713 21343327 Feb 2020 17484639 16545608 18423670 16048515 18920763 Mar 2020 21205509 20239916 22171103 19728761 22682258 Apr 2020 20960426 19970819 21950034 19446953 22473900 May 2020 21848037 20836589 22859485 20301160 23394913 Jun 2020 23564316 22532910 24595721 21986917 25141714 Jul 2020 25418507 24309983 26527032 23723165 27113849 Aug 2020 24652125 23488991 25815259 22873265 26430985 Sep 2020 20490736 19284426 21697045 18645845 22335627 Oct 2020 20542248 19299501 21784995 18641630 22442866 Nov 2020 19295258 18020571 20569945 17345793 21244723 Dec 2020 21247046 19943738 22550354 19253808 23240283 Jan 2021 20598354 19269057 21927650 18565370 22631338 Feb 2021 18131529 16778436 19484622 16062152 20200906 Mar 2021 21853305 20478299 23228310 19750415 23956194 Apr 2021 21609031 20213763 23004299 19475153 23742909 May 2021 22497384 21083317 23911451 20334755 24660013 Jun 2021 24214356 22782798 25645914 22024977 26403735
Mengukur Kinerja Model Forecasting
Setiap model yang digunakan dapat diukur/dibandingkan dengan melihat Akaike Information Criterion (AIC) adalah metode umum untuk menentukan seberapa baik suatu model cocok dengan data dengan nilai AIC terkecil adalah model fitting terbaik. https://en.wikipedia.org/wiki/Akaike_information_criterion. Nah kalian bisa menggunakan plot berikut untuk membandingkan nilai AIC nya
barplot(c(ETS = model_ets$aic, ARIMA=model_arima$aic),col="light blue",ylab="AIC")
Kalian bisa melihat bahwa model ARIMA mempunyai nilai terkecil sehingga AIMA adalah model yang terbaik. Gimana menurut kalian? sangat mudah sekali menggunakan R sebagai alat untuk forecasting. Untuk artikel yang berkenaan dengan time series bisa kalian pelajari seperti deteksi anomali data