Peramalan menggunakan Autoregression

Latar Belakang

Pada era globalisasi, perkembangan bidang industri maju dengan pesat. Dengan seiringnya perkembangan perekonomian, kebutuhan furniture atau perabotan rumah tangga semakin meningkat. Furniture mempunyai daya saing global yang bernilai tinggi. Produk furniture berasal dari bahan baku yang masih melimpah seperti, rotan, bambu , kayu dan bahan yang lain seperti plastik dan logam (Amarta dan Ma’rifah 2021 dalam Susatyo et al. 2022).

Perusahaan yang bergerak dibidang pendistribusian produk atau bidang jasa penjualan pasti menginginkan keberhasilan dalam aktivitasnya di masa depan. Dalam hal ini, seorang pemimpin perusahaan harus mempunyai kemampuan untuk bisa menetapkan keputusan yang tepat untuk menghadapi masa depan yang penuh dengan ketidakpastian. Salah satu cara agar perusahaan bisa meraih tujuannya yaitu melakukan forecasting atau peramalan. Perusahaan harus bisa meramalkan besarnya permintaan atau penjualan akan barang atau jasa yang dihasilkan (Wardah dan Iskandar 2016 dalam Susatyo et al. 2022).

Berkaitan dengan penyusunan rencana penjualan, informasi yang didapatkan dari peramalan penjualan akan memberikan gambaran yang bermanfaat untuk prospek permintaan produk tersebut di pasar. Baik buruknya prospek penjualan suatu produk pada dasarnya tidak hanya bergantung pada kemampuan maupun penggunaan metode peramalan yang tepat (Susatyo et al. 2022).

Hasil dari sebuah peramalan dalam prakteknya tidak secara mutlak tepat karena keadaan di masa depan yang tidak menentu. Meskipun demikian, jika semua faktor penting yang mempengaruhi telah diperhitungkan dan model hubungan dari faktor tersebut bisa ditentukan dengan baik, maka hasil dari peramalan yang dilakukan akan mendekati kondisi yang sebenarnya (Wardah dan Iskandar 2016 dalam Susatyo et al. 2022). Hampir semua bagian di dalam perusahaan sangat membutuhkan hasil dari sebuah peramalan. Hasil peramalan di lingkungan bisnis umumnya memiliki implikasi pada peramalan penjualan. Oleh karena itu, peramalan penjualan dalam sebuah perusahaan sangat diperlukan untuk jangka pendek maupun jangka panjang (Susatyo et al. 2022).

Oleh karena itu, metode peramalan subjektif dengan menggunakan Autoregression akan dilakukan untuk memprediksi nilai penjualan furnitur dan perabot rumah tangga di masa depan dengan melihat ada atau tidaknya pengaruh dari nilai penjualan pada waktu-waktu sebelumnya.

Data

Load Package

library(tidyverse)
## ── Attaching packages ─────────────────────────────────────── tidyverse 1.3.2 ──
## ✔ ggplot2 3.3.6      ✔ purrr   0.3.4 
## ✔ tibble  3.1.8      ✔ dplyr   1.0.10
## ✔ tidyr   1.2.1      ✔ stringr 1.4.1 
## ✔ readr   2.1.2      ✔ forcats 0.5.2 
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ dplyr::filter() masks stats::filter()
## ✖ dplyr::lag()    masks stats::lag()
library(seasonal) 
## 
## Attaching package: 'seasonal'
## 
## The following object is masked from 'package:tibble':
## 
##     view
library(fpp2)
## Registered S3 method overwritten by 'quantmod':
##   method            from
##   as.zoo.data.frame zoo 
## ── Attaching packages ────────────────────────────────────────────── fpp2 2.4 ──
## ✔ forecast  8.17.0     ✔ expsmooth 2.3   
## ✔ fma       2.4

Import Data

Data yang akan digunakan adalah data ritel yaitu penjualan furnitur dan perabot rumah tangga yang terdiri atas 321 amatan.

#membuka file data
furniture <- read.csv("C:/Users/User/Documents/DIAH/SEMESTER 5/STA1341 METODE PERAMALAN DERET WAKTU/retail-sales-furniture-and-home-furnishings-stores.csv")
nrow(furniture)
## [1] 321
head(furniture)
##   realtime_start realtime_end       date value
## 1     2018-12-11   2018-12-11 1992-01-01  3846
## 2     2018-12-11   2018-12-11 1992-02-01  3908
## 3     2018-12-11   2018-12-11 1992-03-01  4157
## 4     2018-12-11   2018-12-11 1992-04-01  4141
## 5     2018-12-11   2018-12-11 1992-05-01  4275
## 6     2018-12-11   2018-12-11 1992-06-01  4357

Data tersebut merupakan data bulanan yang dimulai pada tahun 1992. Selanjutnya, kolom value akan diubah menjadi objek deret waktu dengan fungsi ts().

sales <- ts(furniture$value)
sales
## Time Series:
## Start = 1 
## End = 321 
## Frequency = 1 
##   [1]  3846  3908  4157  4141  4275  4357  4407  4446  4328  4497  4687  5287
##  [13]  4104  3908  4369  4372  4535  4568  4682  4733  4621  4775  5158  5631
##  [25]  4018  4140  4827  4700  4867  4958  4980  5356  5203  5328  5734  6305
##  [37]  4649  4410  5084  4818  5195  5196  5190  5506  5418  5505  6090  6409
##  [49]  4788  4833  5410  5310  5603  5479  5673  5893  5589  5970  6425  6734
##  [61]  5311  5116  5715  5670  6010  5805  6027  6263  6094  6369  6781  7554
##  [73]  5822  5581  6162  6038  6225  6310  6466  6502  6329  6693  7186  8098
##  [85]  5922  5996  6790  6481  6684  6853  6961  7240  7139  7339  8006  8883
##  [97]  6638  6989  7622  7134  7635  7487  7508  7974  7535  7667  8346  8635
## [109]  7050  6797  7572  6940  7551  7491  7456  7971  7078  7603  8548  9427
## [121]  7149  7091  7777  7370  7991  7502  7671  8205  7456  7859  8839  9528
## [133]  7190  6713  7618  7374  8078  7753  8074  8384  8017  8351  9018 10166
## [145]  7651  7613  8499  7991  8112  8443  8895  8883  8441  8718  9594 10917
## [157]  7908  7973  8787  8418  8649  8966  8957  9607  9216  9110 10232 11297
## [169]  8595  8457  9412  8556  9209  9447  9244  9940  9511  9178 10195 11051
## [181]  8802  8423  9415  8553  9266  9171  9194  9867  8885  9069 10012 10487
## [193]  8163  8104  8381  8029  8604  8117  8495  8456  7676  7712  8121  8862
## [205]  6796  6593  6907  6608  6974  6922  7194  7159  6967  6853  7375  8401
## [217]  6324  6468  7271  6729  6932  6902  7243  7330  7101  6793  7630  8482
## [229]  6244  6488  7530  6896  7086  7039  7241  7685  7450  6967  7931  9029
## [241]  6866  7169  7784  6872  7683  7378  7551  8064  7439  7260  8260  9216
## [253]  7297  7089  7875  7314  7834  7558  7977  8461  7848  8059  8842  9195
## [265]  7201  7227  8104  7791  8384  7881  8403  8734  8371  8441  8950 10231
## [277]  7964  7514  8616  8261  8893  8576  9110  9148  8967  9108  9488 10925
## [289]  8188  8395  9281  8629  9036  9157  9235  9639  9621  9160 10089 11038
## [301]  8480  8471  9945  8878  9755  9717  9588 10246  9879  9851 10915 11636
## [313]  9016  8816 10353  9527 10286 10103 10113 10615  9928

Karena data tersebut adalah data bulanan yang dimulai pada tahun 1992, maka akan diperbarui dengan syntax sebagai berikut.

sales <- ts(furniture$value, frequency = 12, start = 1992)
sales
##        Jan   Feb   Mar   Apr   May   Jun   Jul   Aug   Sep   Oct   Nov   Dec
## 1992  3846  3908  4157  4141  4275  4357  4407  4446  4328  4497  4687  5287
## 1993  4104  3908  4369  4372  4535  4568  4682  4733  4621  4775  5158  5631
## 1994  4018  4140  4827  4700  4867  4958  4980  5356  5203  5328  5734  6305
## 1995  4649  4410  5084  4818  5195  5196  5190  5506  5418  5505  6090  6409
## 1996  4788  4833  5410  5310  5603  5479  5673  5893  5589  5970  6425  6734
## 1997  5311  5116  5715  5670  6010  5805  6027  6263  6094  6369  6781  7554
## 1998  5822  5581  6162  6038  6225  6310  6466  6502  6329  6693  7186  8098
## 1999  5922  5996  6790  6481  6684  6853  6961  7240  7139  7339  8006  8883
## 2000  6638  6989  7622  7134  7635  7487  7508  7974  7535  7667  8346  8635
## 2001  7050  6797  7572  6940  7551  7491  7456  7971  7078  7603  8548  9427
## 2002  7149  7091  7777  7370  7991  7502  7671  8205  7456  7859  8839  9528
## 2003  7190  6713  7618  7374  8078  7753  8074  8384  8017  8351  9018 10166
## 2004  7651  7613  8499  7991  8112  8443  8895  8883  8441  8718  9594 10917
## 2005  7908  7973  8787  8418  8649  8966  8957  9607  9216  9110 10232 11297
## 2006  8595  8457  9412  8556  9209  9447  9244  9940  9511  9178 10195 11051
## 2007  8802  8423  9415  8553  9266  9171  9194  9867  8885  9069 10012 10487
## 2008  8163  8104  8381  8029  8604  8117  8495  8456  7676  7712  8121  8862
## 2009  6796  6593  6907  6608  6974  6922  7194  7159  6967  6853  7375  8401
## 2010  6324  6468  7271  6729  6932  6902  7243  7330  7101  6793  7630  8482
## 2011  6244  6488  7530  6896  7086  7039  7241  7685  7450  6967  7931  9029
## 2012  6866  7169  7784  6872  7683  7378  7551  8064  7439  7260  8260  9216
## 2013  7297  7089  7875  7314  7834  7558  7977  8461  7848  8059  8842  9195
## 2014  7201  7227  8104  7791  8384  7881  8403  8734  8371  8441  8950 10231
## 2015  7964  7514  8616  8261  8893  8576  9110  9148  8967  9108  9488 10925
## 2016  8188  8395  9281  8629  9036  9157  9235  9639  9621  9160 10089 11038
## 2017  8480  8471  9945  8878  9755  9717  9588 10246  9879  9851 10915 11636
## 2018  9016  8816 10353  9527 10286 10103 10113 10615  9928

Fungsi ts() mengasumsikan bahwa data tersebut merupakan data bulanan dengan angka 12 untuk frekuensi bulanan yang dimulai dari tahun 1992.

Time Series Plot

autoplot(sales, main = "Furniture and Home Furnishing Sales: 1992-2018")

Pada plot di atas terlihat beberapa hal yaitu terdapat trend naik secara umum, trend-nya tidak konstan dan bergerak turun selama resesi, serta terdapat perbedaan penjualan berdasarkan bulan.

Metode Peramalan: Autoregression

Autoregression adalah regresi, kecuali nilai x yang kita gunakan untuk memprediksi nilai y adalah nilai masa lalu dari y. Dengan kata lain, y memprediksi nilai masa depan y. Pertama, kita perlu mengetahui apakah nilai masa lalu merupakan prediktor yang baik untuk nilai masa depan. Kita dapat melihat korelasi antara suatu deret dengan nilai masa lalunya dengan membuat plot autokorelasi dengan fungsi ggAcf().

Catatan: Series sering kali tidak memiliki korelasi dengan nilai masa lalu, membuat model autoregresif tidak berguna.

ggAcf(sales)

Berdasarkan gambar di atas, pada sumbu x kita memiliki periode waktu sebelumnya. Pada sumbu y kita melihat nilai ACF dari periode waktu pada sumbu x.

Di sini kita melihat korelasi yang kuat antara nilai sekarang dan nilai sebelumnya, seperti yang ditunjukkan oleh batang vertikal. Ini masuk akal karena nilai terbaru memberikan indikator trend. Terlihat juga korelasi yang cukup baik dengan nilainya setahun yang lalu. Ini masuk akal karena nilainya memuncak pada waktu yang sama setiap tahun.

Karena nilai-nilai ini terkait erat (yaitu korelasi tinggi). Kita dapat membuat model autoregressive yang efektif dengan fungsi ar(). Akan dibuat regresi linier dengan menemukan koefisien antara nilai masa lalu dan saat ini.

autoregression_sales <- ar(sales)
autoregression_sales
## 
## Call:
## ar(x = sales)
## 
## Coefficients:
##       1        2        3        4        5        6        7        8  
##  0.8187   0.0140   0.1290  -0.1174   0.1522  -0.0093  -0.0843   0.0369  
##       9       10       11       12       13       14       15       16  
##  0.1900  -0.2756  -0.0021   0.6540  -0.4697  -0.0564  -0.0605   0.0750  
##      17       18       19       20       21       22       23       24  
## -0.0769  -0.0386   0.1307  -0.0457  -0.1665   0.1873   0.0311   0.1907  
##      25  
## -0.2359  
## 
## Order selected 25  sigma^2 estimated as  166701

ar() merekomendasikan agar kita menggunakan urutan 25. Artinya kita menggunakan 25 nilai sebelumnya untuk memprediksi yang berikutnya. Koefisien juga ditampilkan pada output di atas.

autoplot(forecast(autoregression_sales, level = 0, h = 12))

# level = 0 prevents a confidence interval from being generated

Dapat diperhatikan bahwa model ini secara visual tidak seperti yang diharapkan karena plot ramalannya cenderung akan menurun. Lalu kita akan mengurangi musim data, mencoba memprediksinya, dan kemudian menyesuaikannya kembali.

decomposed_sales <- seas(sales) # time series decomposition
decomposed_sales <- data.frame(decomposed_sales$data) # makes a data frame out of the output of seas() which is not a data frame
time_series_sales_trend <- ts(decomposed_sales$trend, frequency = 12, start = 1992) # turn the trend into a time series
ar_forecast <- forecast(ar(time_series_sales_trend), h = 12) # forecast the trend
autoplot(sales) + autolayer(ar_forecast$mean * tail(decomposed_sales$seasonal, 12), color="blue") 

# ar_forecast$mean memberikan hasil ramalan
# Mengalikan dengan 12 faktor musiman terakhir untuk menyesuaikan kembali
#tail() untuk memilih nilai terakhir dari sesuatu, lalu angka 12 untuk memberi faktor musiman terbaru. tail() bekerja seperti head()
#autolayer() menambahkan series lain ke plot

Plot di atas sudah lebih baik dari plot sebelumnya karena bentuk plot ramalannya cenderung memiliki trend naik seperti waktu-waktu sebelum terjadi penurunan penjualan.

Kesimpulan

Data di atas cocok dibuat peramalan menggunakan autoregression karena terdapat korelasi yang kuat antara nilai sekarang dan nilai sebelumnya. Namun apabila hasil plotnya kurang sesuai, dapat dilakukan penyesuaian agar plot peramalan menjadi lebih baik. Apabila series tidak memiliki korelasi dengan nilai masa lalu, maka membuat model autoregresif tidak berguna sehingga perlu menggunakan metode peramalan yang lain.

Daftar Pustaka

Susatyo AA, Jufriyanto M, Rizqi AW. Analisis Peramalan Penjualan Produk Furniture di PT. Katwara. Jurnal Teknovasi. 9(1):69-82.

Kaggle.com. Diakses pada 14 September 2022 dari https://www.kaggle.com/code/brwalk/an-introduction-to-time-series-forecasting-in-r/notebook

  • Syadiah (G1401201042)