Perkenalkan “R”

“R” adalah seleb beauty-vlogger ternama Indonesia. Debut pertama sebagai vlogger dimulai pada tahun 2018, dengan memperkenalkan tutorial make-up dengan mempergunakan alat sederhana. Video ini sontak membawa “R” menuju ketenaran. Melebarkan sayapnya di dunia showbiz di Indonesia, pada pertengahan tahun, “R” membuat video klip yang bercerita tentang kisah cintanya dengan aktor muda Indonesia. Video klip ini semakin melejitkan nama “R”, khususnya di jagad maya Indonesia. Dengan subscriber hingga 1 juta user, hingga kini “R” secara kontinyu membuat konten vlog di kanal YouTube-nya.

Melalui kanal YouTube nya, setidaknya “R” membuat konten video dengan kategori sebagai berikut :

1. Video Musik
2. Personal Vlog : Vlog keseharian "R"
3. Video Endorse : Vlog niaga "R" (terkait kosmetik/alat kecantikan)
4. Video Endorse & Kuliner : Vlog niaga "R" yang berkonsep kuliner

Dengan membuat video tersebut, bagaimanakah konten-konten tersebut akan berdampak pada popularitas “R” diukur dari tren pada Google Trends?

Forecasting tren pencarian “R”

Berdasarkan data tren yang diunduh dari Google Trend dari tanggal 6 April 2020 sampai dengan 5 Juli 2020, pencarian netizen Indonesia terkait “R” dapat ditampilkan sebagai berikut :

library(gsheet)
## Warning: package 'gsheet' was built under R version 3.6.3
library(TSstudio)
## Warning: package 'TSstudio' was built under R version 3.6.3
URI<-"https://docs.google.com/spreadsheets/d/1AluMeQi7UTLt0pm3eztgW2FE9Kk2m1MhBG5DZuf7LZs/edit?usp=sharing"
a<-gsheet2text(URI,sheetid = "0")
## No encoding supplied: defaulting to UTF-8.
trend.data<-read.csv(text=a)

trend.data[[1]] <- as.Date(trend.data[[1]],format='%m/%d/%Y') 
trend.ts<-ts(trend.data,frequency = 365,start = c(2020,97))

x <- as.Date("2020-04-06")+0:92
y <- trend.ts[,2]
plot(x,y,type = "b",main = "Tren Pencarian 'R' pada Google Search selama 6 April 2020 sampai dengan 5 Juli 2020",xlab = "Tanggal (MMM dd)", ylab="Tren Pencarian")

Seperti dapat dilihat pada grafik diatas, terjadi peningkatan pencarian dengan kata kunci “R” dari 6 April 2020 sampai dengan 14 April 2020, kemudian konstan pada rerata tertentu sampai dengan 28 Mei 2020. Lonjakan pencarian terjadi pada 29 Mei 2020, hingga puncaknya terjadi pada tanggal 5 Juni 2020. Hal ini kemudian diikuti dengan penurunan tren secara berangsur-angsur sampai dengan 5 Juli 2020.

Adapun sebaran tanggal dimana “R” mengunggah video di kanal YouTube dapat dilihat pada gambar dbawah

x <- as.Date("2020-04-06")+0:92
y <- trend.ts[,2]
plot(x,y,type = "b",main = "Tanggal 'R' mengunggah video pada YouTube",xlab = "Tanggal (MMM dd)", ylab="Tren Pencarian")+
  abline(col="red",
    v=c(as.Date("2020-04-06"),as.Date("2020-04-10"),as.Date("2020-04-13"),
        as.Date("2020-04-14"),as.Date("2020-04-23"),as.Date("2020-04-25"),
        as.Date("2020-04-26"),as.Date("2020-04-28"),as.Date("2020-04-30"),
        as.Date("2020-05-07"),as.Date("2020-05-08"),as.Date("2020-05-10"),
        as.Date("2020-05-19"),as.Date("2020-05-24"),as.Date("2020-05-27"),
        as.Date("2020-05-29"),as.Date("2020-06-12"),as.Date("2020-06-18"),
        as.Date("2020-06-22"),as.Date("2020-06-25"),as.Date("2020-06-30")
        )
    )

## integer(0)

Untuk memprediksi tren “R” selama beberapa waktu kedepan, maka diperlukan analisa time-series, yakni ARIMAX (Autoregressive (AR) Integrated (I) Moving Average (MA) + exogenous input (X)).

Splitting data

Sebelum dilakukan pemodelan, data perlu dilakukan splitting yang kemudian digunakan untuk memodelkan data, dan sebagian digunakan untuk melakukan validasi data. Data yang digunakan untuk validasi menggunakan 18 data terakhir (20% dari data).

trend.ts.split<-ts_split(trend.ts,sample.out = 18)

Pemeriksaan autokorelasi tren “R”

par(mfrow=c(1,2))
forecast::Acf(trend.ts.split$train[,2],main = "Grafik ACF")
## Registered S3 method overwritten by 'quantmod':
##   method            from
##   as.zoo.data.frame zoo
## Registered S3 methods overwritten by 'forecast':
##   method             from    
##   fitted.fracdiff    fracdiff
##   residuals.fracdiff fracdiff
forecast::Pacf(trend.ts.split$train[,2],main = "Grafik PACF")

Dari grafik ACF dan PACF diatas, diketahui adanya autokorelasi pada data trend. Artinya, penggunaan ARIMA (atau ARIMAX secara spesifik) sebagai pemodelan dan metode peramalan merupakan hal yang valid.

Uji Stasioner Data

tseries::adf.test(trend.ts.split$train[,2])
## 
##  Augmented Dickey-Fuller Test
## 
## data:  trend.ts.split$train[, 2]
## Dickey-Fuller = -2.2393, Lag order = 4, p-value = 0.4778
## alternative hypothesis: stationary

Hasil uji stasioner menyatakan bahwa data tidak stasioner. Karena ARIMAX mempersyaratkan data harus stasioner, maka data harus dilakukan proses differencing terlebih dahulu.

Pemodelan ARIMA

Sebelum melakukan pemodelan dengan ARIMAX, perlu diujicoba apakah dengan model sederhana, dapat menghasilkan akurasi model yang optimal. Untuk itu dilakukan pemodelan ARIMA, dengan menggunakan package forecast dengan fungsi auto.arima(). Hasil pemodelan ARIMA adalah sebagai berikut :

arima.model<-forecast::auto.arima(trend.ts.split$train[,2])
arima.model
## Series: trend.ts.split$train[, 2] 
## ARIMA(0,1,1) 
## 
## Coefficients:
##          ma1
##       0.2812
## s.e.  0.1063
## 
## sigma^2 estimated as 56.42:  log likelihood=-253.76
## AIC=511.51   AICc=511.68   BIC=516.12

Akurasi model ARIMA yang dibentuk adalah sebagai berikut :

forecast.arima<-forecast::forecast(arima.model,h=18)
forecast::accuracy(forecast.arima, trend.ts.split$test[,2])
##                      ME     RMSE      MAE        MPE     MAPE MASE
## Training set  0.1946289 7.410783 4.361602  -2.612613 25.71585  NaN
## Test set     -8.2560022 9.034459 8.256002 -67.765180 67.76518  NaN
##                     ACF1 Theil's U
## Training set 0.006094756        NA
## Test set     0.473808250  2.512078

Nilai peramalan tren pencarian ‘R’ selama 12 hari kedepan adalah sebagai berikut :

plot(forecast.arima,main = "Prediksi tren 'R' selama 12 hari kedepan dengan ARIMA")

Pemodelan ARIMAX

Penentuan exogenous input

Video unggahan “R” memiliki kecenderungan dalam mempengaruhi tren pencarian “R”, baik mempengaruhi dalam konteks meningkatkan tren, maupun menurunkan tren. Hal ini perlu diakomodir dalam pemodelan, untuk menuju model fitness yang optimum. Setidaknya ada 4 (empat) exogenous input yang diasumsikan dalam model : 1. Model dipengaruhi oleh unggahan video musik. 2. Model dipengaruhi oleh unggahan Personal Vlog “R” 3. Model dipengaruhi oleh unggahan Video Endorse “R” (terkait kosmetik/alat kecantikan) 4. Model dipengaruhi oleh unggahan Video Endorse & Kuliner “R”

Berdasarkan hasil uji coba, exogenous input nomor (1) setidaknya mempengaruhi tren pencarian “R” selama 20 hari kedepan, setelah pengunggahan video. Exogenous input nomor (2) mempengaruhi pencarian selama 2 hari kedepan, sedangkan exogenous input nomor (3) dan (4) diasumsikan mempengaruhi pencarian selama 3 hari kedepan. Untuk setiap atribut exogenous input yang sesuai, akan diberikan nilai 1, sedangkan yang tidak akan diberi nilai 0. Struktur data kemudian disusun sebagai berikut :

head(trend.ts.split$train[,2:38])
## Time Series:
## Start = c(2020, 97) 
## End = c(2020, 102) 
## Frequency = 365 
##          Trend Music_Video Music_Video1 Music_Video2 Music_Video3
## 2020.263     4           0            0            0            0
## 2020.266     2           0            0            0            0
## 2020.268     3           0            0            0            0
## 2020.271     3           0            0            0            0
## 2020.274     4           0            0            0            0
## 2020.277     4           0            0            0            0
##          Music_Video4 Music_Video5 Music_Video6 Music_Video7 Music_Video8
## 2020.263            0            0            0            0            0
## 2020.266            0            0            0            0            0
## 2020.268            0            0            0            0            0
## 2020.271            0            0            0            0            0
## 2020.274            0            0            0            0            0
## 2020.277            0            0            0            0            0
##          Music_Video9 Music_Video10 Music_Video11 Music_Video12
## 2020.263            0             0             0             0
## 2020.266            0             0             0             0
## 2020.268            0             0             0             0
## 2020.271            0             0             0             0
## 2020.274            0             0             0             0
## 2020.277            0             0             0             0
##          Music_Video13 Music_Video14 Music_Video15 Music_Video16
## 2020.263             0             0             0             0
## 2020.266             0             0             0             0
## 2020.268             0             0             0             0
## 2020.271             0             0             0             0
## 2020.274             0             0             0             0
## 2020.277             0             0             0             0
##          Music_Video17 Music_Video18 Music_Video19 Music_Video20
## 2020.263             0             0             0             0
## 2020.266             0             0             0             0
## 2020.268             0             0             0             0
## 2020.271             0             0             0             0
## 2020.274             0             0             0             0
## 2020.277             0             0             0             0
##          Kuliner_Endorse Kuliner_Endorse_Day1 Kuliner_Endorse_Day2
## 2020.263               0                    0                    0
## 2020.266               0                    0                    0
## 2020.268               0                    0                    0
## 2020.271               0                    0                    0
## 2020.274               0                    0                    0
## 2020.277               0                    0                    0
##          Kuliner_Endorse_Day3 Kuliner Kuliner_Day1 Kuliner_Day2
## 2020.263                    0       0            0            0
## 2020.266                    0       0            0            0
## 2020.268                    0       0            0            0
## 2020.271                    0       0            0            0
## 2020.274                    0       0            0            0
## 2020.277                    0       0            0            0
##          Kuliner_Day3 Personal_Vlog Personal_Vlog_Day1 Personal_Vlog_Day2
## 2020.263            0             0                  0                  0
## 2020.266            0             0                  0                  0
## 2020.268            0             0                  0                  0
## 2020.271            0             0                  0                  0
## 2020.274            0             1                  0                  0
## 2020.277            0             0                  1                  0
##          Endorse Endorse_Day1 Endorse_Day2 Endorse_Day3
## 2020.263       0            0            0            0
## 2020.266       0            0            0            0
## 2020.268       0            0            0            0
## 2020.271       0            0            0            0
## 2020.274       0            0            0            0
## 2020.277       0            0            0            0

Pemodelan ARIMAX dengan auto.arima()

Dengan menggunakan ARIMAX, didapatkan hasil pemodelan sebagai berikut :

arimax.model<-forecast::auto.arima(trend.ts.split$train[,2],
                         xreg = trend.ts.split$train[,c(3:38)])
forecast.arimax<-forecast::forecast(arimax.model,
                                    xreg = trend.ts.split$test[,c(3:38)])
forecast::accuracy(forecast.arimax,trend.ts.split$test[,2])
##                      ME     RMSE      MAE        MPE     MAPE MASE
## Training set  0.1700949 1.727298 1.236618  -3.047332 13.54523  NaN
## Test set     -3.5453781 4.769098 4.126639 -30.294485 33.34955  NaN
##                    ACF1 Theil's U
## Training set -0.1467710        NA
## Test set      0.1887836   1.24099
plot(forecast.arimax,main = "nganu")

Nilai in-sample error berada pada nilai 13%, sedangkan out-sample error berada pada nilai 33.3%. Hal ini menyatakan bahwa ARIMAX dapat memodelkan data lebih baik dari ARIMA. Untuk itu, model ARIMAX (1,0,0) akan digunakan untuk melakukan forecasting.

Sensitivity Analysis Pengaruh Unggahan Video YouTube dengan Tren Pencarian “R”

Model yang sudah didapatkan, kemudian dilakukan prediksi untuk mengetahui pengaruh konten yang diunggah di kanal YouTube ‘R’ terhadap tren pencarian di Google Search. Pertama-tama dilakukan pembentukan model ARIMAX(1,0,0)

arimax.model.full<-forecast::Arima(trend.ts[,2],order = c(1,0,0),xreg = trend.ts[,3:38])
forecast::accuracy(arimax.model.full)
##                     ME     RMSE      MAE       MPE     MAPE MASE
## Training set 0.1130231 2.026266 1.432672 -4.515579 14.95736  NaN
##                     ACF1
## Training set -0.09161395

Apabila ‘R’ mengunggah video endorse bertema kuliner, maka tren pencarian ‘R’ selama 12 hari kedepan adalah sebagai berikut :

b<-gsheet2text(URI,sheetid = "1260070330")
## No encoding supplied: defaulting to UTF-8.
trend.data.forecast<-read.csv(text=b)

trend.data.forecast[[1]] <- as.Date(trend.data.forecast[[1]],format='%m/%d/%Y') 
trend.data.forecast.ts<-ts(trend.data.forecast,frequency = 365,start = c(2020,187))

forecast.arimax.data.forecast<-forecast::forecast(arimax.model.full,
                                    xreg = trend.data.forecast.ts[,c(2:37)])

plot(forecast.arimax.data.forecast,main="Tren Pencarian R pada Google Search\n karena Unggahan Video Kuliner Endorse R")

Apabila ‘R’ mengunggah music video, maka tren pencarian ‘R’ selama 12 hari kedepan adalah sebagai berikut :

c<-gsheet2text(URI,sheetid = "1320703374")
## No encoding supplied: defaulting to UTF-8.
trend.data.forecast<-read.csv(text=c)

trend.data.forecast[[1]] <- as.Date(trend.data.forecast[[1]],format='%m/%d/%Y') 
trend.data.forecast.ts<-ts(trend.data.forecast,frequency = 365,start = c(2020,187))

forecast.arimax.data.forecast<-forecast::forecast(arimax.model.full,
                                    xreg = trend.data.forecast.ts[,c(2:37)])

plot(forecast.arimax.data.forecast,main="Tren Pencarian R pada Google Search\n akibat Unggahan Video Musik R")

Kesimpulan

Forecasting dapat digunakan untuk melakukan peramalan tren pencarian sebuah objek pada Google Search. Dalam kasus ini, penggunaan model ARIMAX cenderung dapat memberikan performa forecasting lebih baik dari ARIMA. R sebaiknya mengunggah video musik untuk menjaga popularitas diri.

Untuk yang penasaran siapakah R, inilah dia :