Belajar R – Metode Peramalan Deret Waktu – Forecasting Time Series

By | December 8, 2022
Print Friendly, PDF & Email
14,645 Views

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)

  1. pengendalian inventori / perencanaan produksi untuk memperkirakan permintaan suatu produk, mengontrol stok bahan baku dan barang jadi serta merencanakan jadwal produksi.
  2. kebijakan investasi – meramalkan informasi keuangan seperti suku bunga,nilai tukar, harga saham, harga emas.
  3. kebijakan ekonomi – perkiraan informasi ekonomi seperti pertumbuhan ekonomi, pengangguran, tingkat inflasi.

Belajar Statistik

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

  1. Jangka pendek dengan durasi waktu 3 -6 bulan yang bersifat operating
  2. Jangka menengah dengan durasi waktu 6 bulan – 2 tahun yang bersifat tactical
  3. 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

  1. 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.
  2. Pola siklis terjadi apabila datanya dipengaruhi oleh fluktuasi ekonomi jangka panjang, seperti yang berhubungan dengan siklus perekonomian, biasanya pola ini dipengaruhi oleh faktor eksternal.
  3. Pola trend merupakan kecenderungan arah data dalamj angka panjang, dapat berupa kenaikan maupun penurunan.
  4. 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

  1. 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
  2. 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
  3. 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/
See also  Uji Kesamaan Rata-Rata Dari Dua Populasi Tidak Berhubungan dan Asumsi Varians Populasi Berbeda

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

 

See also  Ukuran Kemiripan dan Ketidakmiripan Antar Data

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

See also  Function apply(), lapply(), sapply(), tapply()

Leave a Reply