Time Series Forecasting merupakan salah satu model dari Supervised Machine Learning, yang memiliki kemampuan untuk memprediksi sebuah nilai pada masa depan berdasarkan data historis khususnya data-data yang berhubungan dengan waktu.
Pada bahasa pemrograman R sendiri, sudah banyak sekali framework ataupun packages yang dapat kita manfaatkan untuk membuat sebuah model time series forecasting. Dari sekian banyak framework dan packages, pada artikel ini kita akan fokus untuk melakukan eksplorasi terhadap sebuah framework yang masih menjadi keluarga dari Tidymodels yaitu framework modeltime dan sebuah package tambahan yaitu modeltime.resample.
Kenapa Menggunakan modeltime?
Salah satu alasan utama kenapa fokus dari artikel ini membahas modeltime karena modeltime adalah sebuah framework yang berisikan beberapa model machine learning time series, dari yang cukup klasik seperti ARIMA dan Exponential Smooting, sampai dengan yang cukup baru seperti Facebook’s Prophet dan parnship.
Selain itu, modeltime menyediakan sebuah workflow yang dapat kita manfaatkan sebagai panduan. Berikut adalah urutan workflow yang dapat kita ikuti:
modeltime.resample yang masih menjadi keluarga dari modeltime.modeltime memiliki berbagai macam model yang dapat kita gunakan, tentu saja kita dapat membuat beberapa model sekaligus.Tentu saja sebagai seorang Data Scientist kita akan sangat terbantu karena kita sudah memiliki sebuah framework yang memungkinkan kita untuk bekerja lebih cepat dan rapi.
# Data Preparation
library(tidyverse)
library(lubridate)
library(timetk)
# Data Visualization
library(plotly)
library(glue)
# Machine Learning
library(tidymodels)
library(modeltime)
library(modeltime.resample)
Seperti yang sudah disampaikan di atas, pada tahapan pertama ini akan dimulai dengan proses pengumpulan data, pembersihan data dan eksplorasi data.
Data yang akan digunakan di sini adalah data yang berasal dari kaggle.
crude_oil <- read.csv("data_input/U.S._crude_oil_production.csv")
crude_oil
Dari total 36 kolom yang terdapat pada dataframe di atas, kita hanya akan menggunakan 2 kolom saja yaitu kolom Month dan U.S..Crude.Oil. Kolom Month berisikan informasi tanggal setiap awal bulan dari Juni 2008 sampai Juni 2018 dan pada kolom U.S..Crude.Oil berisikan informasi jumlah hasil tambang minyak bumi dari setiap daerah di Amerika Serikat dalam satuan 1000 barel, jumlah hasil tambang minyak bumi pada kolom U.S..Crude.Oil berdasarkan penjumlahan dari 34 kolom lainnya.
Dari kedua kolom tersebut nantinya akan coba kita manfaatkan untuk memprediksi berapa banyak minyak bumi yang dapat ditambang oleh Amerika Serikat selama satu tahun kedepan. Informasi hasil prediksi tersebut akan bermanfaat untuk negara karena minyak bumi merupakan salah satu bahan mentah yang digunakan untuk berbagai macam kebutuhan di berbagai sektor industri. Maka dari itu, hasil prediksi akan menjadi bahan pertimbangan Amerika Serikat dalam menentukan langkah kedepannya.
Sebagai contoh, misalkan hasil prediksi menyatakan adanya penurunan hasil minyak bumi selama 1 tahun kedepan dan prediksi penurunannya sampai di titik di mana hasil tambang minyak bumi tidak dapat memenuhi kebutuhan selama 1 tahun kedepan, maka negara Amerika Serikat bisa mengambil keputusan lebih cepat untuk mengimpor minyak bumi dari negara lain agar tidak mengalami kekurangan.
Tahapan selanjutnya yang perlu kita lakukan adalah mempersiapkan data kita agar dapat diproses lebih lanjut. Proses pembersihan yang akan dilakukan terlebih dahulu adalah menghilangkan kolom yang tidak diperlukan, mengubah tipe data menjadi format yang lebih sesuai dan memastikan bahwa tanggalnya sudah berurutan.
crude_oil_clean <- crude_oil %>%
select(Month, U.S..Crude.Oil) %>%
mutate(Month = ymd(Month)) %>%
arrange(Month)
glimpse(crude_oil_clean)
## Rows: 121
## Columns: 2
## $ Month <date> 2008-06-01, 2008-07-01, 2008-08-01, 2008-09-01, 2008-1~
## $ U.S..Crude.Oil <int> 5138, 5177, 5003, 3974, 4738, 5078, 5103, 5138, 5236, 5~
Selain melakukan dua proses di atas, kita juga harus memastikan bahwa tidak ada missing value karena jika adanya missing value akan sangat mempengaruhi hasil prediksi.
crude_oil_clean %>%
is.na() %>%
colSums()
## Month U.S..Crude.Oil
## 0 0
Dari hasil observasi di atas, kita mengetahi bahwa pada data kita tidak ada missing value.
Untuk mempermudah tahapan eksplorasi data untuk kasus deret waktu, kita akan membuat sebuah visualisasi garis dengan menggunakan fungsi plot_time_series dari library(timetk).
Hasil dari visualisasi tersebut nantinya akan sangat membantu kita untuk mengetahui apakah hasil tambang minyak bumi di Amerika Serikat memiliki sebuah pola arah atau pola musiman. Jika nantinya dari hasil visualisasi menunjukan bahwa data deret waktu tidak memiliki pola arah dan tidak pola musiman, maka dapat dikategorikan sebagai data stasioner. Jika memiliki salah satu di antara pola arah atau pola musiman, maka dapat dikategorikan sebagai data tidak stasioner.
Identifikasi mengenai kategori data pada kasus deret waktu merupakan hal yang penting karena akan menentukan pendekatan yang akan digunakan nantinya.
crude_oil_clean %>%
plot_time_series(.date_var = Month,
.value = U.S..Crude.Oil,
.line_size = 1,
.smooth_size = 0.5,
.smooth_alpha = 0.4,
.interactive = TRUE,
.x_lab = "Tanggal",
.y_lab = "Jumlah Minyak Bumi (1000 Barel)",
.title = "Hasil Tambang Minyak Bumi Amerika Serikat (Juni 2008 - September 2018)")
Dari hasil visualisasi di atas, kita bisa menarik kesimpulan bahwa data hasil tambang minyak bumi di Amerika Serikat tidak memiliki pola musiman tapi memiliki pola arah yang cenderung meningkat dari waktu ke waktu, maka dari itu data tersebut dapat dikategorikan sebagai data tidak stasioner.
Langkah selanjutnya kita akan melakukan cross validation agar kita dapat mengevaluasi stabilitas model time series forecasting yang dibuat. Pada tahapan cross validation kali ini, kita tidak hanya membagi data pembelajaran dan data validasinya berdasarkan 1 kurun waktu saja melainkan akan dibagi ke 4 kurun waktu yang berbeda. Dengan dibaginya data pembelajaran dan data validasinya ke beberapa rentan waktu yang berbeda, kita bisa lebih yakin terhadap stabilitas model yang dibuat karena model tersebut tidak divalidasi sekali saja melainkan beberapa kali dengan kurun waktu yang berbeda-beda.
Untuk membagi data kita ke 4 kurun waktu yang berbeda, kita akan dibantu dengan sebuah fungsi time_series_cv() dari library(modeltime.resample). Pada fungsi tersebut nantinya akan ada 5 parameter yang bisa diisi, yaitu:
data: Data frame yang ingin digunakan.assess: Rentan waktu untuk data validasi.initial: Rentan waktu untuk data pembelajaran.skip: Jarak waktu antara setiap pembagian data pembelajaran dan data validasi.slice_limit: Berapa banyak pembagian data akan dilakukan.resamples_tscv <- time_series_cv(
data = crude_oil_clean,
assess = "1 year",
initial = "5 years",
skip = "1 year",
slice_limit = 4
)
Agar mendapatkan gambaran yang lebih jelas lagi bagaimana fungsi time_series_cv() bekerja, kita dapat melihat bagaimana hasil pembagian data ke 4 kurun waktu yang berbeda untuk setiap data pembelajaran dan data validasinya dari visualisasi di bawah ini.
resamples_tscv %>%
tk_time_series_cv_plan() %>%
plot_time_series_cv_plan(.date_var = Month,
.value = U.S..Crude.Oil,
.interactive = TRUE)
Dengan menggunakan framework modeltime, kita diberikan kebebasan untuk menggunakan berbagai macam model time series forecasting yang dapat disesuaikan dengan kebutuhan. Selain itu framework modeltime akan terus melakukan pengembangan ecosystem jadinya akan selalu ada model baru yang dapat kita manfaatkan kedepannya.
Pada kesempatan kali ini kita akan mencoba untuk membuat tiga model terlebih dahulu, yaitu ARIMA, Exponential Smooting dan Prophet.
Auto Regressive Integrated Moving Average atau ARIMA, merupakan sebuah model time series forecasting yang cukup klasik untuk digunakan untuk menghadapi data deret waktu yang tidak memiliki pola musiman.
Akan tetapi salah satu kelemahan dari model ARIMA adalah model tersebut tidak bisa digunakan jika data yang kita gunakan belum stasioner dan berdasarkan eksplorasi data yang sudah dilakukan, data yang kita gunakan masih belum stasioner. Bentuk data yang masih stasioner dapat ditanggulangi dengan melakukan differencing. Dengan membuat model ARIMA berdasarkan framework dari modeltime, kita tidak perlu melakukan differencing secara terpisah karena pada fungsi yang akan kita gunakan akan melakukan differencing jika data yang digunakan masih belum stasioner.
Fungsi yang akan kita gunakan dalam membuat model ARIMA, yaitu
arima_reg(): Fungsi ini digunakan untuk membuat model ARIMA dari framework modeltime.set_engine(): Fungsi ini kita gunakan untuk mengatur bagaiama model prophet tersebut akan dibuat, jika kita ingin mesin yang mencari hasil hyperparameter untuk model prophet kita bisa mengisinya dengan auto_arima.fit(): Fungsi ini kita gunakan untuk memberitahu objek data dan kolom apa yang akan digunakan sebagai prediktor dan sebagai target variabel.model_fit_arima <- arima_reg() %>%
set_engine(engine = "auto_arima") %>%
fit(formula = U.S..Crude.Oil ~ Month,
data = crude_oil_clean)
model_fit_arima
## parsnip model object
##
## Series: outcome
## ARIMA(0,1,0) with drift
##
## Coefficients:
## drift
## 46.1333
## s.e. 15.8094
##
## sigma^2 estimated as 30245: log likelihood=-788.79
## AIC=1581.59 AICc=1581.69 BIC=1587.16
Model kedua yang akan kita buat adalah Exponential Smoothing. Exponential Smoothing merupakan sebuah model yang cukup serbaguna karena pada model ini bisa digunakan untuk memprediksi data yang memiliki pola arah ataupun pola musiman ataupun tidak memiliki pola sama sekali. Dikarenakan kemampuan model ini yang dapat memprediksi untuk berbagai macam kasus deret waktu, model Exponential Smoothing merupakan salah satu model yang cukup populer untuk digunakan.
Sama seperti model ARIMA, pada model Exponential Smoothing yang sudah dikembangkan oleh framework dari modeltime, kita tidak perlu repot-repot dalam menentukan apakah data kita memiliki pola atau tidak karena pada fungsi yang akan kita gunakan nanti sudah terdapat sebuah fungsi yang akan membantu kita dalam menentukan hal tersebut.
Fungsi yang akan kita gunakan dalam membuat model Exponential Smoothing, yaitu
exp_smoothing(): Fungsi ini digunakan untuk membuat model Exponential Smoothing dari framework modeltime.set_engine(): Fungsi ini kita gunakan untuk mengatur bagaiama model prophet tersebut akan dibuat, jika kita ingin mesin yang mencari hasil hyperparameter untuk model prophet kita bisa mengisinya dengan ets.fit(): Fungsi ini kita gunakan untuk memberitahu objek data dan kolom apa yang akan digunakan sebagai prediktor dan sebagai target variabel.model_fit_ets <- exp_smoothing() %>%
set_engine(engine = "ets") %>%
fit(formula = U.S..Crude.Oil ~ Month,
data = crude_oil_clean)
model_fit_ets
## parsnip model object
##
## ETS(A,A,N)
##
## Call:
## forecast::ets(y = outcome, model = model_ets, damped = damping_ets,
##
## Call:
## alpha = alpha, beta = beta, gamma = gamma)
##
## Smoothing parameters:
## alpha = 0.9029
## beta = 1e-04
##
## Initial states:
## l = 4850.2473
## b = 47.2314
##
## sigma: 176.1177
##
## AIC AICc BIC
## 1837.642 1838.164 1851.621
Terakhir, model ini merupakan model time series forecasting yang dikembangkan oleh Facebook. Salah satu kelebihan dari model prophet adalah untuk menghadapi data deret waktu yang memiliki pola musiman yang kuat. Walaupun kelebihan dari model prophet adalah kemampuannya untuk menangkap pola musiman, bukan berarti model tersebut tidak dapat digunakan untuk data deret waktu yang memiliki pola arah.
Fungsi yang akan kita gunakan dalam membuat model prhophet, yaitu
prophet_reg(): Fungsi ini digunakan untuk membuat model prhophet dari framework modeltime.set_engine(): Fungsi ini kita gunakan untuk mengatur bagaiama model prophet tersebut akan dibuat, jika kita ingin mesin yang mencari hasil hyperparameter untuk model prophet kita bisa mengisinya dengan prophet.fit(): Fungsi ini kita gunakan untuk memberitahu objek data dan kolom apa yang akan digunakan sebagai prediktor dan sebagai target variabel.model_fit_prophet <- prophet_reg() %>%
set_engine(engine = "prophet") %>%
fit(formula = U.S..Crude.Oil ~ Month,
data = crude_oil_clean)
model_fit_prophet
## parsnip model object
##
## PROPHET Model
## - growth: 'linear'
## - n.changepoints: 25
## - changepoint.range: 0.8
## - yearly.seasonality: 'auto'
## - weekly.seasonality: 'auto'
## - daily.seasonality: 'auto'
## - seasonality.mode: 'additive'
## - changepoint.prior.scale: 0.05
## - seasonality.prior.scale: 10
## - holidays.prior.scale: 10
## - logistic_cap: NULL
## - logistic_floor: NULL
## - extra_regressors: 0
Disclaimer, ketika kita menyerahkan kepada mesin untuk mencari hyperparameter untuk setiap model yang kita gunakan, tidak berarti model tersebut akan menghasilkan performa yang paling baik. Jika dirasa performa yang dihasilkan nantinya kurang memuaskan, kita bisa kembali ke tahapan ini untuk mengatur hyperparameter secara manual.
Tahap selanjutnya yang bisa kita lakukan adalah menggabungkan ketiga model yang sudah dibuat menjadi satu kesatuan. Tujuan penggabungan dari ketiga model tersebut adalah untuk mempermudah beberapa proses selanjutnya yaitu proses pelatihan model, evaluasi model dan prediksi masa depan karena dengan menggabungkan semua model menjadi satu kesatuan, kita hanya perlu melakukan pelatihan model, evaluasi model dan prediksi sebanyak satu kali saja.
Untuk menggabungkan beberapa model menjadi satu kesatuan, kita dapat memanfaatkan sebuah fungsi yang bernama modeltime_table().
models_tbl <- modeltime_table(model_fit_arima,
model_fit_prophet,
model_fit_ets)
models_tbl
Untuk melakukan pelatihan model yang sudah dibuat dengan data yang sudah kita persiapkan pada tahapan cross validation, kita dapat memanfaatkan sebuah fungsi modeltime_fit_resamples(). Selain untuk melatih model, fungsi tersebut juga akan melakukan perhitungan error yang terjadi pada data validasi yang sudah dipersiapkan.
Nantinya fungsi modeltime_fit_resamples() bisa langsung melatih setiap model yang dibuat berdasarkan pembagian data yang sudah dibagi pada tahapan cross validation dengan menambahkan sebuah parameter yaitu resamples, parameter tersebut nantinya bisa kita isi dengan nama objek data hasil cross validation
resamples_fitted <- models_tbl %>%
modeltime_fit_resamples(resamples = resamples_tscv)
resamples_fitted
Seperti yang sempat disampaikan sebelumnya, fungsi modeltime_fit_resamples() juga akan melakukan perhitungan error yang dapat kita manfaatkan untuk evaluasi ketiga model yang sudah kita buat. Untuk dapat melihat hasil perhitungan error, kita akan memanfaatkan fungsi modeltime_resample_accuracy() dan table_modeltime_accuracy(). Nantinya kedua fungsi tersebut akan membuat sebuah tabel evaluasi yang berisikan 6 perhitungan evaluasi error. Akan tetapi hasil dari tabel evaluasi yang akan kita buat tidak langsung menampilkan perhitungan evaluasi error untuk setiap pembagian data, melainkan hanya untuk pembagian data yang paling akhir saja atau untuk kurun waktu dari Agustus 2009 sampai Mei 2015.
resamples_fitted %>%
modeltime_resample_accuracy() %>%
table_modeltime_accuracy(.title = "Tabel Evaluasi",
.interactive = FALSE)
| Tabel Evaluasi | |||||||||
|---|---|---|---|---|---|---|---|---|---|
| .model_id | .model_desc | .type | n | mae | mape | mase | smape | rmse | rsq |
| 1 | ARIMA(0,1,0) WITH DRIFT | Resamples | 4 | 594.72 | 6.32 | 5.17 | 6.47 | 716.25 | 0.84 |
| 2 | PROPHET | Resamples | 4 | 640.50 | 6.85 | 6.04 | 6.77 | 729.13 | 0.77 |
| 3 | ETS(A,A,N) | Resamples | 4 | 604.91 | 6.42 | 5.28 | 6.57 | 730.32 | 0.85 |
Opsi lain untuk melihat evaluasi model adalah dengan menggunakan fungsi plot_modeltime_resamples(). Fungsi tersebut nantinya akan menghasilkan 6 plot interaktif, di mana setiap plot tersebut akan mewakili sebuah perhitungan error untuk setiap pembagian data validasinya, jadinya kita dapat langsung melihat secara menyeluruh bagaimana performa model yang dibuat pada 4 data yang berbeda.
resamples_fitted %>%
plot_modeltime_resamples(.interactive = TRUE)
Dari plot evaluasi error di atas kita dapat menarik kesimpulan bahwa, model ARIMA dan Exponential Smoothing memiliki error yang relatif stabil untuk setiap 4 rentang waktu yang ada, sedangkan untuk nilai error yang dihasilkan oleh model prophet dapat disimpulkan kurang stabil. Selain itu, kita juga dapat menyimpulkan bahwa model ARIMA adalah model yang memiliki rata-rata error yang paling kecil hampir di setiap matriks evaluasi error yang digunakan.
Selain melihat dari evaluasi nilai error yang dihasilkan, kita juga dapat melakukan uji asumsi. Uji asumsi pada kasus deret waktu dilakukan untuk mengukur apakah residual yang peroleh dari setiap model time series forecasting sudah cukup baik untuk menggambarkan dan menangkap informasi pada data.
Untuk melakukan uji asumsi, kita dapat memanfaatkan 2 fungsi yang sudah disediakan oleh modeltime, yaitu
modeltime_residuals: Fungsi ini digunakan untuk mengeluarkan nilai residual dari setiap model yang dibuat. Pada fungsi ini, kita juga harus mengisi parameter new_data, parameter tersebut akan kita isi dengan keseluruhan data.modeltime_residuals_test: Fungsi ini digunakan untuk melakukan uji asumsi berdasarkan nilai residual dari setiap model yang dibuat. Ada 4 uji asumsi yang akan dilakukan fungsi ini, yaitu: Shapiro-Wilk, Box-Pierce, Ljung-Box dan Durbin-Watson.Berikut adalah syarat dari setiap uji asumsi yang akan diujikan,
Shapiro-Wilk
Shapiro-Wilk menguji normalitas residual. Di mana,
Yang diharapkan dari hasil uji asumsi ini adalah residual berdistribusi normal. Untuk mengetahui hal tersebut, kita akan melihat nilai p-value. Jika nilai p-value > 0,05, hal tersebut menunjukkan bahwa sebaran data tidak berbeda nyata dengan sebaran normal. Dengan kata lain, kita dapat mengasumsikan residual berdistribusi normal.
Box-Pierce & Ljung-Box
Ljung-Box dan Box-Pierce adalah metode yang menguji autokorelasi pada residual. Di mana,
Yang diharapkan dari hasil uji asumsi ini adalah residual tidak ber-autokorelasi. Untuk mengetahui hal tersebut, kita akan melihat nilai p-value. Jika nilai p-value > 0,05, hal tersebut menunjukkan bahwa residual dari data adalah independen. Dengan kata lain, kita dapat mengasumsikan residual tidak ber-autokorelasi.
Durbin-Watson
Durbin-Watson adalah metode lain yang menguji autokrelasi pada residual. Uji asumsi Durbin Watson melaporkan statistik uji, dengan nilai dari 0 hingga 4, di mana:
Yang diharapkan dari hasil Durbin-Watson adalah nilai 2, yang berarti residual tidak ber-autokorelasi.
Setelah mengetahui syarat-syarat yang harus dipenuhi dari 4 uji asumsi yang akan digunakan, sekarang kita akan mencoba melihat nilai residual untuk setiap model dari objek models_tbl.
models_tbl %>%
modeltime_residuals(new_data = crude_oil_clean) %>%
modeltime_residuals_test()
Dari hasil uji asumsi yang sudah dilakukan di atas, kita dapat menarik kesimpulan bahwa dari ketiga model yang kita buat hanya model prophet yang lulus uji asumsi Shapiro Wilk, akan tetapi model prophet tidak berhasil lulus untuk uji asumsi lainnya. Untuk model ARIMA dan Exponential Smoothing, kedua model tersebut memang tidak lulus untuk uji asumsi yang melihat persebaran data, akan tetapi model Exponential Smoothing lulus untuk uji asumsi Box Pierce & Ljung Box dan model ARIMA lulus uji asumsi Box Pierce, Ljung Box & Durbin Watson.
Walaupun dari ketiga model yang dibuat tidak ada yang berhasil lulus dari keseluruhan uji asumsi yang dilakukan, kita akan tetap menggunakan ketiga model tersebut untuk melakukan prediksi masa depan.
Disclaimer, Idealnya ketika kita akan melakukan prediksi masa denpan dengan model time series forecasting, model tersebut harus lulus dari setiap uji asumsi yang dilakukan tanpa adanya pengecualian. Jika kita tetap memaksakan untuk menggunakan model yang tidak lulus uji asumsi, hasil dari model tersebut tidak bisa dipercayai walaupun sudah ada nilai toleransi dari evaluasi error.
Pada tahapan terakhir ini, kita akan melakukan prediksi selama satu tahun kedepan untuk melihat berapa banyak minyak bumi yang dapat ditambang oleh Amerika Serikat setiap bulannya.
Untuk melakukan prediksi, pertama-tama kita harus melatih ulang model yang sudah dilatih sebelumnya pada objek resamples_fitted ke keseluruhan data karena ketiga model yang kita sudah latih sebelumnya masih menggunakan data latih dengan deret waktu yang tidak utuh, sedangkan untuk mendapatkan hasil prediksi masa depan yang lebih akurat kita akan melatih ulang model kita dengan keseluruhan data deret waktu yang ada. Fungsi yang dapat kita gunakan pada proses ini adalah fungsi modeltime_refit().
refit_tbl <- resamples_fitted %>%
modeltime_refit(data = crude_oil_clean)
Setelah melatih ulang model, kita akan melakukan prediksi masa depan dengan menggunakan fungsi modeltime_forecast() . Pada fungsi tersebut nantinya akan ada 2 parameter yang bisa diisi, yaitu:
h: Seberapa jauh prediksi yang akan dilakukan.actual_data: Objek data yang ingin diprediksi.forecast <- refit_tbl %>%
modeltime_forecast(h = "1 years",
actual_data = crude_oil_clean)
forecast
Hasil prediksi dari fungsi modeltime_forecast() akan menghasilkan sebuah dataframe dan untuk melihat hasil prediksinya kita dapat melihat dari kolom .value. Opsi lain yang dapat kita lakukan untuk melihat hasil prediksi dari ketiga model yang kita buat adalah dengan membuat sebuah visualisasi dengan memanfaatkan fungsi plot_modeltime_forecast().
forecast %>%
plot_modeltime_forecast(.interactive = TRUE)
Dari visualisasi yang dihasilkan, kita dapat melihat bahwa model ARIMA dan Exponential Smoothing menghasilkan prediksi yang memiliki kenaikan konstan dari bulan ke bulannya tanpa adanya penurunan sama sekali. Prediksi yang membuat garis lurus pada model ARIMA dan Exponential Smoothing dapat terjadi dikarenakan kedua model tersebut menggunakan parameter auto yang menghasilkan hyperparameter yang tidak memperhitungkan pola musiman dan hasil tersebut cukup sering terjadi pada model time sereis forecasting yang menggunakan parameter auto.
Sedangkan untuk model prophet, model prophet menghasilkan prediksi yang tidak memiliki kenaikan konstan di setiap bulannya. Akan tetapi pada awal prediksi, model prophet langung memprediksi hasil tambang minyak bumi di Amerika Serikat pada bulan Juli 2018 sebesar 767 ribu barel.
Hasil prediksi yang dihasilkan tentu saja tidak 100% akurat, untuk mengetahui seberapa besar error yang mungkin terjadi, kita dapat memanfaatkan rata-rata nilai error pada tahapan evaluasi model sebelumnya.
Disclaimer: Pada tahapan prediksi model tidak harus menggunakan keseluruhan model yang dibuat, kita hanya perlu menggunakan satu model saja yang dirasa memiliki performa paling baik.
Dari keseluruhan proses yang sudah dilakukan, kita dapat menarik kesimpulan bahwa model ARIMA adalah model yang paling baik untuk digunakan dalam memprediksi hasil tambang minyak bumi di Amerika Serikat karena jika dilihat dari rata-rata nilai error yang dihasilkan berdasarkan 4 rentan waktu yang berbeda, model ARIMA lah yang memiliki rata-rata error paling kecil. Akan tetapi, dari ketiga model yang dibuat, tidak ada model yang berhasil lulus dari 4 uji asumsi yang dilakukan. Maka dari itu, tidak ada model yang dapat kita percayai untuk melakukan prediksi masa depan hasil tambang minyak bumi di Amerika Serikat.
Memiliki sebuah model yang mempunyai rata-rata nilai error paling kecil dan berhasil lulus dari seluruh uji asumsi sangatlah krusial dalam kasus ini karena dari hasil prediksi tersebut bisa dimanfaatkan oleh pemerintah Amerika Serikat dalam menentukan apakah hasil tambang minyak bumi selama satu tahun kedepan masih mencukupi untuk setiap sektor industri yang membutuhkan. Jika dirasa dari hasil prediksi hasil tambang minyak bumi tidak mencukupi, maka pemerintah Amerika Serikat bisa mengambil keputusan lebih cepat untuk mengimpor minyak bumi dari negara lain agar tidak mengalami kekurangan. Selain itu, jika dirasa dari hasil prediksi hasil tambang minyak bumi berlimpah, pemerintah dapat mengambil dua keputusan yaitu menurunkan harga jual minyak bumi ataupun melakukan ekspor ke negara lain yang membutuhkan.
Berdasarkan keputusan yang bisa diambil oleh pemerintah Amerika Serikat dari hasil prediksi, kita tidak bisa sembarangan menggunakan model untuk memprediksi, model yang digunakan haruslah model yang memiliki error paling kecil dan lulus uji asumsi. Untuk mendapatkan model yang ideal seperti itu, kita bisa mencoba untuk melakukan penyetelan manual terhadap hyperparameter setiap model yang kita gunakan atau kita bisa mencoba beberapa model lainnya seperti ARIMA Boost, prophet Boost atau Random Forest.
Setelah mengimplementasikan framework modeltime untuk memprediksi hasil minyak bumi di Amerika Serika. Kita dapat menarik kesimpulan bahwa framework modeltime sangat membantu dalam pengerjaan kasus deret waktu karena hanya dengan satu framework saja kita sudah disediakan berbagai macam fitur yang dapat kita manfaatkan untuk setiap tahapannya, di mana setiap tahapan yang perlu dilakukan juga sudah disediakan, sehingga proses pengerjaan yang kita lakukan menjadi lebih terstruktur.
Pada artikel ini, kita juga menambahkan satu buah package tambahan yang masih menjadi keluarga modeltime yaitu modeltime.resample, di mana package tersebut akan membantu pada tahapan cross validation karena dengan bantuan package tersebut kita dapat membagi data latih dan data validasi menjadi ke beberapa kurun waktu yang berbeda. Dengan memiliki beberapa data latih dan data validasi kita dapat melakukan evaluasi terhadap model yang digunakan dengan lebih baik lagi.
Dari beberapa implementasi dari framework modeltime yang sudah kita gunakan pada artikel ini, sebenarnya masih ada banyak lagi implementasi yang dapat kita manfaatkan untuk kebutuhan kasus deret waktu lainnya. Eksplorasi lanjutan mengenai apa saja yang dapat dilakukan dengan menggunakan modeltime dapat mengunjungi beberapa link referensi di bawah ini.
Referensi: