TUGAS UTS
Oleh : Muhammad Isa Ansori
(Cak Isa)
NIM : 210605220002 MAGISTER INFORMATIKA UIN
MALIKI MALANG
Dosen Pengampu : Prof. Dr. Suhartono,
M.Kom
Bahwa dalam menentukan prediksi pendapatan/revenue perlu dilakukan
beberapa perhitungan baik secara kualitatif maupun kuantitatif. Target
Revenue KC Batu sebenarnya sudah dietapkan oleh Kantor Pusat, namun kali
ini akan disajikan dalam bentuk kuantitatif melalui prediksi revenue
beberapa bulan kedepan dengan beberapa metode atau model perhitungan.
Dari beberapa metode atau model tersebut nanti akan dipilih satu model yang mendekati prosentase terkecil atau tingkat error nya paling sedikit. Data sumber diambil dari Dashboard KURLOG (Kibana)
Dengan hasil ini nanti dapat dijadikan Manajemen untuk melakukan langkah-langkah preventif untuk mencapai raihan peningkatan pendapatan secara efektif.
Semoga melalui prediksi ini kita sudah melangkah lebih maju lagi dalam rangka pengolahan data yang dapat dijadikan machine learning melalui beberapa metode yang diterapkan serta tersedianya data yang akurat.
library(readxl)
library(caTools)
library(tidyverse)
library(skimr)
library(stats)
library(npreg)
library(jmv)
library(forecast)
library(timeDate)
library(tseries)
library(TSstudio)
library(MLmetrics)#baca data excel
datakurlog <- read_excel("datakurlogpos.xlsx")
datakurlog## # A tibble: 8 x 4
## KCP Monthly Trx Revenue
## <chr> <dttm> <dbl> <dbl>
## 1 KCP 2021-09-01 00:00:00 1123 5224552
## 2 KCP 2021-10-01 00:00:00 1031 6649534
## 3 KCP 2021-11-01 00:00:00 1216 7695792
## 4 KCP 2021-12-01 00:00:00 1240 8890164
## 5 KCP 2022-01-01 00:00:00 1204 8372554
## 6 KCP 2022-02-01 00:00:00 1024 6704649
## 7 KCP 2022-03-01 00:00:00 1668 8670665
## 8 KCP 2022-04-01 00:00:00 1685 14419163
Karena menggunakan data timeseries, tren dan seasonal harus di cek juga. Ubah data menjadi objek timeseries menggunakan fungsi ts() dengan frekuensi 4 untuk 4 bulan kedepan
datakurlog_ts <- ts(datakurlog$Revenue, frequency = 4)
datakurlog_ts## Qtr1 Qtr2 Qtr3 Qtr4
## 1 5224552 6649534 7695792 8890164
## 2 8372554 6704649 8670665 14419163
datakurlog_ts %>%
decompose() %>%
autoplot()Terlihat bahwa tren dan seasonal ada pada data yang digunakan. Tren yang didapat sudah smooth tanpa pola dan sudah dapat dikatakan baik. Seasonal juga sudah tertangkap dan dapat di uji lagi nanti saat menghitung error dari pemodelan.
Berdasarkan data yang memiliki Tren dan Seasonal, kita dapat menggunakan beberapa metode dalam melakukan forecast, Triple Exponential Smoothing / Holt Winters dan auto.arima
Cross Validation
Sebelum membuat model, data harrus dibagi menjadi 2 bagian, data untuk training model, validasi model dan testing model.
# Validation mengabil 4 data terakhir
datakurlog_val <- datakurlog_ts %>%
tail(4)
# Train mengambil semua data kecuali data Val
datakurlog_train <- head(datakurlog_ts, length(datakurlog_ts) - length(datakurlog_val))
datakurlog_test <- 4 # Test = 4 untuk melakukan forecast 4 bulan kedepanPada model ETS ini, akan digunakan Holt Winters / Triple Exponential Smoothing model dimana data memmiliki seasonal, trend dan error.
datakurlog_ets <- ets(y = datakurlog_train, model = "ZZZ")
datakurlog_ets## ETS(A,A,N)
##
## Call:
## ets(y = datakurlog_train, model = "ZZZ")
##
## Smoothing parameters:
## alpha = 0.7928
## beta = 0.271
##
## Initial states:
## l = 5224552
## b = 1424982
##
## sigma: 714389.8
datakurlog_ets_frcst <- forecast(datakurlog_ets, h = 4)plot_forecast(forecast_obj = datakurlog_ets_frcst)datakurlog_ts %>%
autoplot() +
autolayer(datakurlog_ets_frcst$fitted) +
autolayer(datakurlog_ets_frcst$mean)error_ets <- MAPE(y_pred = datakurlog_ets_frcst$mean, y_true = datakurlog_val)*100
error_ets## [1] 33.42786
datakurlog_val## Qtr1 Qtr2 Qtr3 Qtr4
## 2 8372554 6704649 8670665 14419163
datakurlog_ets_frcst$mean## Qtr1 Qtr2 Qtr3 Qtr4
## 2 9996287 11117692 12239098 13360503
Pada ARIMA model, akan digunakan dengan auto.arima()
Pada auto arima, model akan mencari (p,d,q)(P,D,Q)[m] yang optimal, jadi tidak perlu mmencari secara manual, akan tetapi masih bisa di tuning secara manual dengan mencari nilai - nilai tersebut.
datakurlog_autoarima <- auto.arima(datakurlog_train)
datakurlog_autoarima## Series: datakurlog_train
## ARIMA(1,0,1) with non-zero mean
##
## Coefficients:
## ar1 ma1 mean
## 0.6414 0.6083 7058851
## s.e. 0.5395 0.8862 1435267
##
## sigma^2 = 3.381e+12: log likelihood = -61.42
## AIC=130.84 AICc=90.84 BIC=128.38
datakurlog_autoarima_frcst <- forecast(datakurlog_autoarima, h = 4)plot_forecast(datakurlog_autoarima_frcst)datakurlog_ts %>%
autoplot() +
autolayer(datakurlog_autoarima_frcst$fitted) +
autolayer(datakurlog_autoarima_frcst$mean)error_autoarima <- MAPE(y_pred = datakurlog_autoarima_frcst$mean, y_true = datakurlog_val)*100
error_autoarima## [1] 21.8588
datakurlog_autoarima_frcst$mean## Qtr1 Qtr2 Qtr3 Qtr4
## 2 8947453 8270109 7835694 7557081
datakurlog_val## Qtr1 Qtr2 Qtr3 Qtr4
## 2 8372554 6704649 8670665 14419163
Untuk mempermudah membandingkan error dari hasil model diatas, error akan diperrlihatkan menggunakan tabel
error <- data.frame("Model" = c("ETS", "AutoArima"), "MAPE" = c(error_ets, error_autoarima))
error## Model MAPE
## 1 ETS 33.42786
## 2 AutoArima 21.85880
Dapat dilihat dari tabel, bahwa model ETS - Triple Exponential Smoothing yang memiliki MAPE terkecil, angka MAPE pun sudah terbilang kecil dengan menggunakan metode - metode diatas. Oleh karena itu untuk melakukan forecasting akan digunakan model ETS.
Setelah pembuatan model selesai, selanjutnya akan dilakukan forecast untuk tahun 2020 dengan menggunakan model ets karena MAPE yang didapatkan paling kecil, yaitu 7.7% data yang digunakan adalah data full, bukan data train
datakurlog_model <- ets(datakurlog_ts, model = "ZZZ")
datakurlog_model## ETS(M,N,N)
##
## Call:
## ets(y = datakurlog_ts, model = "ZZZ")
##
## Smoothing parameters:
## alpha = 0.9999
##
## Initial states:
## l = 8328380.474
##
## sigma: 0.3721
##
## AIC AICc BIC
## 257.7265 263.7265 257.9648
lalu di forecast dengan h = datakurlog_test untuk bulang 5,6,7,8 tahun 2022
datakurlog_forecast <- forecast(datakurlog_model, h = datakurlog_test)plot_forecast(datakurlog_forecast)datakurlog_ts %>%
autoplot() +
autolayer(datakurlog_forecast$fitted) +
autolayer(datakurlog_forecast$mean)datakurlog_forecast$mean## Qtr1 Qtr2 Qtr3 Qtr4
## 3 14418583 14418583 14418583 14418583
Hasil dari forecast menunjukan bahwa pada 4 bulan kedepan kenaikan Revenue sebesar Rp 14.418.583