TUGAS UTS
Oleh : Muhammad Isa Ansori (Cak Isa)
NIM : 210605220002 MAGISTER INFORMATIKA UIN MALIKI MALANG
Dosen Pengampu : Prof. Dr. Suhartono, M.Kom

Latar Belakang

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.

Persiapan Data

Data Set

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

Frekuensi Data

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.

Pemilihan Model

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 kedepan

ETS

Pada 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

ARIMA

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

Error

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.

Forecasting

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

Kesimpulan

Hasil dari forecast menunjukan bahwa pada 4 bulan kedepan kenaikan Revenue sebesar Rp 14.418.583