1 Intro

Pada artikel ini, saya akan menganalisis pada bidang bisnis yaitu mengenai Marketing. Setiap perusahaan tentunya menginginkan agar nilai penjualan nya tinggi. Oleh karena itu dalam dunia marketing dikenal dengan yang namanya Advertising. Advertising bisa menjadi salah satu cara untuk meningkatkan nilai penjualan. Terdapat beberapa media/platform seperti TV, Radio, Sosial Media bahkan bisa juga melalui promosi dari seorang Artist/Influncer yang bisa digunakan sebagai sarana promosi, advertisement agar lebih banyak lagi masyarakat mengenal dan terarik pada produk perusahaan. Sehingga dalam artikel ini akan ditelusuri lebih lanjut mengenai :

  • seberapa besar pengaruh advertising tersebut pada penjualan
  • membangun model dan evaluasi model
  • memprediksi nilai sales dengan melakukan contoh data kasus

2. Pre-Processing Data

2.1 Import Dataset

Tahap pertama dalam melakukan pengolahan data adalah dengan melakukan import untuk membaca data set dalam bentuk csv kemudian assign ke dalam objek yang bernama ’advertising`.

advertising <- read.csv("Dummy Data HSS.csv")
head(advertising)
##   TV     Radio Social.Media Influencer     Sales
## 1 16  6.566231     2.907983       Mega  54.73276
## 2 13  9.237765     2.409567       Mega  46.67790
## 3 41 15.886446     2.913410       Mega 150.17783
## 4 83 30.020028     6.922304       Mega 298.24634
## 5 15  8.437408     1.405998      Micro  56.59418
## 6 29  9.614382     1.027163       Mega 105.88915

2.2 Data Wangling

2.2.1 Cek Struktur Data

Tahap ini digunakan untuk mengetahui informasi data dan mengecek tipe data untuk setiap variabel/kolom data.

# mengecek tipe data 
library(dplyr)
## 
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
## 
##     filter, lag
## The following objects are masked from 'package:base':
## 
##     intersect, setdiff, setequal, union
glimpse(advertising)
## Rows: 4,572
## Columns: 5
## $ TV           <int> 16, 13, 41, 83, 15, 29, 55, 31, 76, 13, 62, 42, 64, NA, 3…
## $ Radio        <dbl> 6.5662308, 9.2377646, 15.8864460, 30.0200283, 8.4374077, …
## $ Social.Media <dbl> 2.9079828, 2.4095672, 2.9134102, 6.9223040, 1.4059982, 1.…
## $ Influencer   <chr> "Mega", "Mega", "Mega", "Mega", "Micro", "Mega", "Micro",…
## $ Sales        <dbl> 54.73276, 46.67790, 150.17783, 298.24634, 56.59418, 105.8…

Keterangan: - Terapat sebanyak 4572 data - Terdapat sebanyak 5 variabel/kolom dinataranya adalah : + 1. TV : budget yang dikeluarkan perusahaan untuk melakukan advertisement/promosi melalui TV (dalam juta dolar) + 2. Radio : budget yang dikeluarkan perusahaan untuk melakukan advertisement/promosi melalui Radio (dalam juta dolar) + 3. Social.Media : budget yang dikeluarkan perusahaan untuk melakukan advertisement/promosi di Sosial Media (dalam juta dolar) + 4. Influencer : budget yang dikeluarkan perusahaan untuk melakukan advertisement/promosi dengan berkolaborasi dengan Influencer (Mega, Macro, Nano, Micro influencer) + 5. Sales : Penjualan yang didapatkan perusahaan (salam juta dolar)

2.2.2 Menyesuaikan Struktur Data

Setelah dilakukan pengecekan tipe data kemudian disesuaikan tipe data nya agar dapat diolah lebih lanjut dalam proses analisis regresi.

  • Pada kolom Influencer bertipe character diubah menjadi factor
advertising <- advertising %>% 
  mutate(Influencer = as.factor(Influencer))

2.2.3 Pemeriksaan Missing Value

Tahapan ini perlu dilakukan untuk mengetahui apakah terdapat missing value dari data yang kita miliki

# cek missing value
colSums(is.na(advertising))
##           TV        Radio Social.Media   Influencer        Sales 
##           10            4            6            0            6

Keterangan : - Dataset memiliki missing value di kolom TV, Radio, Social.Media, dan Sales. - banyaknya missinging value kurang dari 5% dari data sehingga treatment yang diambil adalah dengan menghapus pada objek pengamatan tersebut yang menganundg missing value.

2.2.4 Pemilihan Variabel Target dan Prediktor

Pemilihan variabel Target & Prediktor dari data yang kita miliki merupakan tahapan penting dimana kita menentukan kolom/variabel yang akan digunakan sebagai variabel target dan prediktor. Biasanya tahapan ini bergantung pada Business Question yang dimiliki.

Pada data Marketing Sales ini akan memprediksi nilai Sales suatu negara berdasarkan buget yang dikeluarkan untuk melakukan advertising di TV maka - Variabel Target : Sales - Variabel Prediktor : TV


2.3 Data Cleansing

Dikarenakan data advertising ini terdapat missing value sehingga data harus dibersihkan terlebih dahulu agar tidak terdapat informasi yang kosong dan tidak bias.

terlebih dahulu dilakukan pengecekan row data sebelum dihapus objek pengamatan yang terdapaat missing value

# Jumlah data sebelum menghandle Missing value
nrow(advertising)
## [1] 4572

Dikarenakan jumlah datayang missing alue kurang dari 5% maka objek-objek yang mengandung missing valiue akan dihapus dengan menggunakan fungsi na.omit

# Hapus objek Missing Value
advertising_clean <- advertising %>% 
  na.omit(TV, Radio, Social.Media, Sales)
# Melakukan pengecekan ulang data 
anyNA(advertising_clean)
## [1] FALSE
nrow(advertising_clean)
## [1] 4546

Keterangan :

  • Data sudah bersih, tidak ada missing value
  • Data berkurang sebanyak 26 objek, yaitu dari 4572 menjaadi 4546

2.4 Eksploratory Data Analysis (EDA)

Tahap selanjutnya setelah data sudah bersih dan sesuai maka perlu menggali data untuk mlebih mengenali data dan mengetahui mengenai informasi yang ada di dalam data untuk lebih mempermudah proses lebih lanjut.

2.4.1 Cek Persebaran Data

Mengecek persebaran data, mean, median, nilai minimal, nilai maksimal pada data numerik dan mengecek distribusi frekuensi pada setiap level di data kategorik

summary(advertising_clean)
##        TV             Radio           Social.Media       Influencer  
##  Min.   : 10.00   Min.   : 0.00068   Min.   : 0.000031   Macro:1112  
##  1st Qu.: 32.00   1st Qu.:10.55536   1st Qu.: 1.530822   Mega :1152  
##  Median : 53.00   Median :17.85951   Median : 3.055565   Micro:1148  
##  Mean   : 54.06   Mean   :18.15753   Mean   : 3.323473   Nano :1134  
##  3rd Qu.: 77.00   3rd Qu.:25.64060   3rd Qu.: 4.804919               
##  Max.   :100.00   Max.   :48.87116   Max.   :13.981662               
##      Sales      
##  Min.   : 31.2  
##  1st Qu.:112.4  
##  Median :189.0  
##  Mean   :192.4  
##  3rd Qu.:272.3  
##  Max.   :364.1
  • Pada kolom Influencer terdapat 4 kategori yang memiliki jumlah frekuensi yang hampir sama yaitu sekitar 1100
  • Kategori Influencer Mega adalah kategori yang paling banyak digunakan yaitu memiliki frekuensi kemunculan 1152 kali
  • Kategori yang jarang digunakan adalah kategori Macro yaitu emiliki frekuensi kemunculan 1112 kali

A. Data Numerik

# Persebaran Data Variabel Target
boxplot(advertising_clean$Sales)

Insight:

  • pada kolom Sales tidak terdapat outlier
  • data berrdistribusi normal
  • Persebaran nilai Sales terletak antara 31.2 hingga 364.1 juta dolar
  • Median Sales sebesar 189 juta dolar
  • Rata-rata sales sebesar 192.4 juta dolar
# cek persebaran data  Numerik
boxplot(advertising_clean$TV, advertising_clean$Radio, advertising_clean$Social.Media)

Insight: - Pada kolom TV : + perusahaan rata-rata menghabiskan budget sebesar 53 juta dolar + persebaran budget yang dikeluarkan untuk promosi di TV adalah 10 hingga 100 juta dolar + Budget terendah yang dikeluarkan perusahaan untuk promosi di TV adalah 10 juta dolar + Budget tertinggi yang dikeluarkan perusahaan untuk promosi di TV adalah 100 juta dolar + Tidak ada data outlier + Data sudah berdistribusi normal

  • Pada kolom Radio :
    • rata-rata perusahaan menghabiskan budget sebesar 18 juta dolar untuk melakukan advertising di Radio
    • persebaran budget yang dikeluarkan untuk promosi di Radio adalah 0.00068 hingga 48.87116 juta dolar
    • Budget terendah yang dikeluarkan perusahaan untuk promosi di TV adalah 0.00068 juta dolar
    • Budget tertinggi yang dikeluarkan perusahaan untuk promosi di TV adalah 48.87116 juta dolar
    • Terdapat satu outlier namun tidak terlalu jauh dari distribusi data yang ada, sehingga tidak terlalu berdampak maka akan dipertahankan saja
    • Data sudah berdistribusi normal
  • Pada kolom Social Media :
    • rata-rata perusahaan menghabiskan budget sebesar 3.323473 juta dolar untuk melakukan advertising di Social Media
    • persebaran budget yang dikeluarkan untuk promosi di Social Media adalah 0.000031 hingga 13.981662 juta dolar
    • Budget terendah yang dikeluarkan perusahaan untuk promosi di TV adalah 0.000031 juta dolar
    • Budget tertinggi yang dikeluarkan perusahaan untuk promosi di TV adalah 13.981662 juta dolar
    • Terdapat outlier namun tidak terlalu jauh dari distribusi data yang ada, sehingga tidak dibuang
    • Data sudah berdistribusi normal

B. Data Kategorik

plot(advertising$Influencer)

Insight :

  • Pada kolom Influencer terdapat 4 kategori yang memiliki jumlah frekuensi yang hampir sama yaitu sekitar 1100
  • Kategori Influencer Mega adalah kategori yang paling banyak digunakan yaitu memiliki frekuensi kemunculan 1152 kali
  • Kategori yang jarang digunakan adalah kategori Macro yaitu emiliki frekuensi kemunculan 1112 kali

2.4.2 Cek Korelasi antar Variabel

Tahapan ini dilakukan untuk mengetahui seberapa kuat hubungan antara variabel target dengan prediktor yang kita miliki. Variabel yang baik digunakan sebagai prediktor adalah variabel dengan nilai korelasi yang kuat terhadap variabel terikat.

# cek korelasi antara variabel Sales dengan TV 
cor(x = advertising_clean$TV,
    y= advertising_clean$Sales)
## [1] 0.9994974

Interpretasi :

  • Nilai korelasi sebesar 0.9994974 lebih dari 0.5 sehingga dapat dikatakan terdapat korelasi yang sangat kuat antara TV dengan sales.
  • Memiliki arah hubungan positif; semakin tinggi budget yang dikelaurkan untuk advertisingdi TV maka semakin tinggi juga nilai sales yang didapatkan perusahaan.

Kesimpulan: Sehingga dapat disimpulkan bahwa variabel TV merupakan variabel yang kuat untuk digunakan sebagai prediktor dalam anlaisis regresi terhadap nilai sales suatu perusahaan.


  1. Pembangunan Model

3.1 Tanpa Prediktor (none)

# membuat model
model_none <- lm(formula = Sales ~ 1 , 
                 data = advertising_clean)
# menampilkan summary model
summary(model_none)
## 
## Call:
## lm(formula = Sales ~ 1, data = advertising_clean)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -161.21  -79.98   -3.45   79.91  171.67 
## 
## Coefficients:
##             Estimate Std. Error t value Pr(>|t|)    
## (Intercept)   192.41       1.38   139.5   <2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 93.02 on 4545 degrees of freedom

3.2 Simple Linear Regression

Simple Linear regression adalah model regresi yang terbeentuk hanya dengan Satu Prediktor (one) saja. Karena di awal tadi GDP adalah salah satu variabel yang memiliki korelasi cukup tinggi sehingga memakai variabel TV untuk prediktor nya

# membuat model satu prediktor yaitu TV
model_tv <- lm(formula = Sales ~ TV,
                data = advertising_clean)

# menampilkan summary  model
summary(model_tv)
## 
## Call:
## lm(formula = Sales ~ TV, data = advertising_clean)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -11.6062  -2.0062  -0.0125   2.0249  11.2566 
## 
## Coefficients:
##              Estimate Std. Error  t value Pr(>|t|)    
## (Intercept) -0.132493   0.100605   -1.317    0.188    
## TV           3.561514   0.001676 2125.272   <2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 2.949 on 4544 degrees of freedom
## Multiple R-squared:  0.999,  Adjusted R-squared:  0.999 
## F-statistic: 4.517e+06 on 1 and 4544 DF,  p-value: < 2.2e-16

Visualisasi :

# plot garis linear regresi
plot(advertising_clean$TV, advertising_clean$Sales)
abline(model_tv, col = "red")

Interpretasi:

Terdapat korelasi hubungan yang sangat kuat dan nyaris sempurna antara budget yang dikeluarkan untuk advertising di TV dengan nilai sales perusahaan. artinya semakin tinggi perusahaan mengeluarkan uangnya untuk iklan di TV maka semakin tinggi juga nilai saless yang akan didaatkan oleh perusahaan.

3.3 Multiple Regression (all)

Linear regression dengan lebih dari satu prediktor dapat meningkatkan performa model karena lebih banyak informasi yang dapat menjelaskan target. dalam analaisis ini akan digunakan semua prediktor.

# membuat model semua prediktor 
model_all <- lm(formula = Sales ~ .,
                data = advertising_clean)

# menampilkan summary  model
summary(model_all)
## 
## Call:
## lm(formula = Sales ~ ., data = advertising_clean)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -11.5722  -2.0027  -0.0163   2.0301  11.2869 
## 
## Coefficients:
##                  Estimate Std. Error  t value Pr(>|t|)    
## (Intercept)     -0.103304   0.129691   -0.797    0.426    
## TV               3.562565   0.003391 1050.472   <2e-16 ***
## Radio           -0.003908   0.009785   -0.399    0.690    
## Social.Media     0.004464   0.024899    0.179    0.858    
## InfluencerMega   0.011603   0.124085    0.094    0.926    
## InfluencerMicro -0.056881   0.124199   -0.458    0.647    
## InfluencerNano  -0.073898   0.124548   -0.593    0.553    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 2.951 on 4539 degrees of freedom
## Multiple R-squared:  0.999,  Adjusted R-squared:  0.999 
## F-statistic: 7.521e+05 on 6 and 4539 DF,  p-value: < 2.2e-16

3.4 Feature Selection

Untuk memilih prediktor yang cocok agar menghasilkan model yang baik adalah dilakukan feture selection terdapat beberapa macam feature selection diantaranya:

3.4.1 Based on Correllation (cor)

library(GGally)
## Warning: package 'GGally' was built under R version 4.2.3
## Loading required package: ggplot2
## Registered S3 method overwritten by 'GGally':
##   method from   
##   +.gg   ggplot2
ggcorr(advertising_clean, label = T)
## Warning in ggcorr(advertising_clean, label = T): data in column(s) 'Influencer'
## are not numeric and were ignored

Insight : - Variabel TV dengan target memiliki korelasi sempurna karena bernilai 1 - Variabel Radio dengan target memiliki korelasi yang sangat kuat karena bernilai 0.9

Kesimpulan: Sehingga pada model korelasi ini akan menggunakan variabel TV dan Radio karena memiliki nilai korelasi > 0.5

# membuat model semua prediktor 
model_corr <- lm(formula = Sales ~ TV + Radio,
                data = advertising_clean)

# menampilkan summary  model
summary(model_corr)
## 
## Call:
## lm(formula = Sales ~ TV + Radio, data = advertising_clean)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -11.6178  -2.0018  -0.0075   2.0231  11.2751 
## 
## Coefficients:
##              Estimate Std. Error  t value Pr(>|t|)    
## (Intercept) -0.129985   0.100857   -1.289    0.198    
## TV           3.562571   0.003389 1051.231   <2e-16 ***
## Radio       -0.003284   0.009155   -0.359    0.720    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 2.95 on 4543 degrees of freedom
## Multiple R-squared:  0.999,  Adjusted R-squared:  0.999 
## F-statistic: 2.258e+06 on 2 and 4543 DF,  p-value: < 2.2e-16

3.4.2 Stepwise Regression

Step-wise regression membantu kita memilih prediktor yang baik, dengan cara mencari kombinasi prediktor yang menghasilkan model terbaik berdasarkan nilai AIC.

AIC (Akaike Information Criterion) = banyaknya informasi yang hilang pada model.

Model regresi yang baik adalah AIC yang paling kecil.

Terdapat 3 metode Stepwise:

A. Backward Elimination (back)

Model Backward akan dimulai dari keseluruhan variabel kemudian menghilangkan variabel yang menghasilkan AIC terkecil pengurangan berhenti apabila ketika pengurangan variabel malah AiC bertmah tinggi.

# Membuat model Backward
model_back <- step(object = model_all,
                   direction = "backward",
                   trace = T)
## Start:  AIC=9844.57
## Sales ~ TV + Radio + Social.Media + Influencer
## 
##                Df Sum of Sq     RSS   AIC
## - Influencer    3         6   39522  9839
## - Social.Media  1         0   39517  9843
## - Radio         1         1   39518  9843
## <none>                        39516  9845
## - TV            1   9606941 9646457 34835
## 
## Step:  AIC=9839.26
## Sales ~ TV + Radio + Social.Media
## 
##                Df Sum of Sq     RSS   AIC
## - Social.Media  1         0   39523  9837
## - Radio         1         1   39524  9837
## <none>                        39522  9839
## - TV            1   9613855 9653377 34832
## 
## Step:  AIC=9837.3
## Sales ~ TV + Radio
## 
##         Df Sum of Sq     RSS   AIC
## - Radio  1         1   39524  9835
## <none>                 39523  9837
## - TV     1   9613890 9653413 34830
## 
## Step:  AIC=9835.43
## Sales ~ TV
## 
##        Df Sum of Sq      RSS   AIC
## <none>                 39524  9835
## - TV    1  39286983 39326507 41213
summary(model_back)
## 
## Call:
## lm(formula = Sales ~ TV, data = advertising_clean)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -11.6062  -2.0062  -0.0125   2.0249  11.2566 
## 
## Coefficients:
##              Estimate Std. Error  t value Pr(>|t|)    
## (Intercept) -0.132493   0.100605   -1.317    0.188    
## TV           3.561514   0.001676 2125.272   <2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 2.949 on 4544 degrees of freedom
## Multiple R-squared:  0.999,  Adjusted R-squared:  0.999 
## F-statistic: 4.517e+06 on 1 and 4544 DF,  p-value: < 2.2e-16
# Summary Model Backward
summary(model_back)
## 
## Call:
## lm(formula = Sales ~ TV, data = advertising_clean)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -11.6062  -2.0062  -0.0125   2.0249  11.2566 
## 
## Coefficients:
##              Estimate Std. Error  t value Pr(>|t|)    
## (Intercept) -0.132493   0.100605   -1.317    0.188    
## TV           3.561514   0.001676 2125.272   <2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 2.949 on 4544 degrees of freedom
## Multiple R-squared:  0.999,  Adjusted R-squared:  0.999 
## F-statistic: 4.517e+06 on 1 and 4544 DF,  p-value: < 2.2e-16

B. Forward Selection (forw)

Perbedaan dengan backward adalah : Dimulai dari model tanpa prediktor kemudian diisi dengan prediktor yang menghasilkan nilai AIC terkecil Perulangan berhenti apbila ketika penambahan varibel malah menghasilkan AIC yang lebih tinggi

model_forw <- step(object = model_none,
                   direction = "forward",
                   scope = list(upper = model_all),
                   trace = T )
## Start:  AIC=41213.34
## Sales ~ 1
## 
##                Df Sum of Sq      RSS   AIC
## + TV            1  39286983    39524  9835
## + Radio         1  29673094  9653413 34830
## + Social.Media  1  10940623 28385884 39733
## <none>                      39326507 41213
## + Influencer    3     20811 39305696 41217
## 
## Step:  AIC=9835.43
## Sales ~ TV
## 
##                Df Sum of Sq   RSS    AIC
## <none>                      39524 9835.4
## + Radio         1    1.1197 39523 9837.3
## + Social.Media  1    0.0320 39524 9837.4
## + Influencer    3    6.0682 39518 9840.7
# Menampilkan summary dari model forward
summary(model_forw)
## 
## Call:
## lm(formula = Sales ~ TV, data = advertising_clean)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -11.6062  -2.0062  -0.0125   2.0249  11.2566 
## 
## Coefficients:
##              Estimate Std. Error  t value Pr(>|t|)    
## (Intercept) -0.132493   0.100605   -1.317    0.188    
## TV           3.561514   0.001676 2125.272   <2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 2.949 on 4544 degrees of freedom
## Multiple R-squared:  0.999,  Adjusted R-squared:  0.999 
## F-statistic: 4.517e+06 on 1 and 4544 DF,  p-value: < 2.2e-16

C. Both (both)

Merupakan gabungan dari bacward dan forward, sehingga memilkiki konse variabel akan ditambahkan jika menghasilkan AIC terksecil dan jika variabel tersebut dikurangi akan menghasilkan AIC yang besar maka variabel tetap dipertahankan.

# membuat model both
model_both <- step(object = model_none ,
                   direction = "both",
                   scope = list(upper = model_all),
                   trace = T)
## Start:  AIC=41213.34
## Sales ~ 1
## 
##                Df Sum of Sq      RSS   AIC
## + TV            1  39286983    39524  9835
## + Radio         1  29673094  9653413 34830
## + Social.Media  1  10940623 28385884 39733
## <none>                      39326507 41213
## + Influencer    3     20811 39305696 41217
## 
## Step:  AIC=9835.43
## Sales ~ TV
## 
##                Df Sum of Sq      RSS   AIC
## <none>                         39524  9835
## + Radio         1         1    39523  9837
## + Social.Media  1         0    39524  9837
## + Influencer    3         6    39518  9841
## - TV            1  39286983 39326507 41213
# menampilkan model summary both
summary(model_both)
## 
## Call:
## lm(formula = Sales ~ TV, data = advertising_clean)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -11.6062  -2.0062  -0.0125   2.0249  11.2566 
## 
## Coefficients:
##              Estimate Std. Error  t value Pr(>|t|)    
## (Intercept) -0.132493   0.100605   -1.317    0.188    
## TV           3.561514   0.001676 2125.272   <2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 2.949 on 4544 degrees of freedom
## Multiple R-squared:  0.999,  Adjusted R-squared:  0.999 
## F-statistic: 4.517e+06 on 1 and 4544 DF,  p-value: < 2.2e-16

4. Model Comparasion

Dari tahap di atas kita telah membangun banyak model di antaranya yaitu model all, model_corr, model_back, model_forw, model_both. Dari model-model tersebut dibandingkan model mana yang lebih baik dilihat dari :

4.1 Prediction

Setelah emmbuat model kemudian melakukan prediksi untuk mengetahui sejauh mana kebaikan model.

# menambahkan hasil prediksi dari 5 model ke dalam data

advertising_clean$pred_all <- predict(object = model_all , newdata= advertising_clean)
advertising_clean$pred_corr <- predict(object = model_corr, newdata= advertising_clean)
advertising_clean$pred_back <- predict(object = model_back, newdata= advertising_clean)
advertising_clean$pred_forw <- predict(object = model_forw, newdata= advertising_clean)
advertising_clean$pred_both <- predict(object = model_both, newdata= advertising_clean)
head(advertising_clean)
##   TV     Radio Social.Media Influencer     Sales  pred_all pred_corr pred_back
## 1 16  6.566231     2.907983       Mega  54.73276  56.89665  56.84958  56.85173
## 2 13  9.237765     2.409567       Mega  46.67790  46.19629  46.15310  46.16719
## 3 41 15.886446     2.913410       Mega 150.17783 145.92437 145.88324 145.88959
## 4 83 30.020028     6.922304       Mega 298.24634 295.51474 295.46479 295.47318
## 5 15  8.437408     1.405998      Micro  56.59418  53.25159  53.28087  53.29022
## 6 29  9.614382     1.027163       Mega 105.88915 103.18968 103.15299 103.15142
##   pred_forw pred_both
## 1  56.85173  56.85173
## 2  46.16719  46.16719
## 3 145.88959 145.88959
## 4 295.47318 295.47318
## 5  53.29022  53.29022
## 6 103.15142 103.15142

4.2 Goodness of Fit (r-square)

Dari ke - 5 model yang telah dibuat, dilihat seberapa baik prediktor dalam menjelaskan model yang telah dibentuk.

# Periksa nilai R-Square untuk setiap model
summary(model_all)$r.squared
## [1] 0.9989952
summary(model_corr)$r.squared
## [1] 0.998995
summary(model_back)$r.squared
## [1] 0.998995
summary(model_forw)$r.squared
## [1] 0.998995
summary(model_both)$r.squared
## [1] 0.998995

Interpretasi

Dari ke 5 model ternyata memiliki r-squre yang sama yaitu sebesar 0.998995. Artinya bahwa kebaikan prediktor dalam menjelaskan model sangat tinggi yaitu sebesar 99%.

4.3 Model Evaluation (error)

Adalah untuk mengevaluasi hasil dari model kita apakah sudah cukup baik antara data kenyataan dengan hasil prediksi. Cara ini dilakukan dengan melihat nilai error. semakin kecil nilai eror maka semakin bagus model nya.

terdapat 4 jenis metrik eror: MAE, MAPE, MSE, dan RMSE tetapi yang paling bagus dansnsitif terhadap outlier adalah RMSE

# RMSE ( Root Mean Squared Error)
library(MLmetrics)
## Warning: package 'MLmetrics' was built under R version 4.2.3
## 
## Attaching package: 'MLmetrics'
## The following object is masked from 'package:base':
## 
##     Recall
RMSE (y_pred = advertising_clean$pred_all,
      y_true = advertising_clean$Sales)
## [1] 2.948311
RMSE (y_pred = advertising_clean$pred_corr,
      y_true = advertising_clean$Sales)
## [1] 2.948548
RMSE (y_pred = advertising_clean$pred_back,
      y_true = advertising_clean$Sales)
## [1] 2.94859
RMSE (y_pred = advertising_clean$pred_forw,
      y_true = advertising_clean$Sales)
## [1] 2.94859
RMSE (y_pred = advertising_clean$pred_both,
      y_true = advertising_clean$Sales)
## [1] 2.94859

Keterangan:

Model yang menghasilkan eror yang paling kecil adalah model-all yaitu model dengan semua prediktor yang memiliki nilai error sebesar 2.948311.

5. Model Terbaik

Sehingga model terbaik di antara 5 model tersebut yang memilki r-squared terbesar dan nilai error yang paling kecil adalah model_all dengan semua prediktor.

5.1 Interpretasi Model:

Untuk lebih mengetahui informasi detail analisis regresi dang diperoleh dari model_all memanggil summary nya.

# menampilkan summary
summary(model_all)
## 
## Call:
## lm(formula = Sales ~ ., data = advertising_clean)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -11.5722  -2.0027  -0.0163   2.0301  11.2869 
## 
## Coefficients:
##                  Estimate Std. Error  t value Pr(>|t|)    
## (Intercept)     -0.103304   0.129691   -0.797    0.426    
## TV               3.562565   0.003391 1050.472   <2e-16 ***
## Radio           -0.003908   0.009785   -0.399    0.690    
## Social.Media     0.004464   0.024899    0.179    0.858    
## InfluencerMega   0.011603   0.124085    0.094    0.926    
## InfluencerMicro -0.056881   0.124199   -0.458    0.647    
## InfluencerNano  -0.073898   0.124548   -0.593    0.553    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 2.951 on 4539 degrees of freedom
## Multiple R-squared:  0.999,  Adjusted R-squared:  0.999 
## F-statistic: 7.521e+05 on 6 and 4539 DF,  p-value: < 2.2e-16
unique(advertising_clean$Influencer)
## [1] Mega  Micro Nano  Macro
## Levels: Macro Mega Micro Nano
  • Persamaan:

\[ \hat{Sales} = -0.103304 + 3.562565(TV) - 0.003908(Radio) + 0.004464(Social Media) + 0.011603(InfluencerMega) - 0.056881(InfluencerMicro) - 0.073898(InfluencerNano)\]

  • Konstanta/Intercept Variabel Numerik:

  • Nilai Sales akan sebesar -0.103304 juta dolar jika perusahaan menggunakan influencer dengan tipe Macro dan tidak melakukan promosi baik di TV, Radio, maupun Social Media. Artinya jika tidak ada promosoi melalui platform-platform tersebut dan menggunakan Influencer tipe Macro maka perusahaan akan mengalami kerugian.

  • Koefisien/Slope Variabel Numerik :

  • TV 3.562565 , artinya nilai sales akan meningkat sebesar 3.562565 juta dolar jika budget yang dihabiskan untuk advertising di TV bertambah 1 juta dolar dengan catatan variabel lainnya bernilai tetap.

  • Radio -0.003908, artinya nilai sales akan berkurang sebesar 0.003908 juta dolar jika budget yang dihabiskan untuk advertising di Radio bertambah 1 juta dolar dengan catatan variabel lainnya bernilai tetap.

  • Social Media 0.004464, artinya nilai sales akan meningkat sebesar 0.004464 juta dolar jika budget yang dihabiskan untuk advertising di Social Media bertambah 1 juta dolar dengan catatan variabel lainnya bernilai tetap.

  • Koefisien/Slope Variabel Kategorik:

  • InfluencerMega 0.011603, artinya nilai sales akan meningkat sebesar 0.011603 juta dolar jika perusahaan melakukan advertisingnya berkolaborasi dengan Influencer yang bertipe Mega dengan catatan variabel lainnya bernilai tetap.

  • InfluencerMicro -0.056881, artinya nilai sales akan berkurang sebesar 0.056881 juta dolar jika perusahaan melakukan advertisingnya berkolaborasi dengan Influencer yang bertipe Micro dengan catatan variabel lainnya bernilai tetap.

  • InfluencerNano -0.073898, artinya nilai sales akan berkurang sebesar 0.073898 juta dolar jika perusahaan melakukan advertisingnya berkolaborasi dengan Influencer yang bertipe Nano dengan catatan variabel lainnya bernilai tetap.

  • P-Value:

  • Terdapat hanya satu variabel yaitu budget TV yang berpengaruh secara signifikan terhadap nilai Sales. karena nilai p-value TV kurang dari 0.05.

  • R-Squared:

  • Nilai r-Squared sebesar 0.999 artinya Prediktor sudah sangat baik dalam menjelaskan kebaikan model yaitu sebesar 99%.

5.2 Prediksi Model

Menjelaskan seberapa akurat model dalam melakukan prediksi terhadap data asli, dapat dilihat dengan menghitung nilai errornya.

RMSE(y_pred = advertising_clean$pred_all,
     y_true = advertising_clean$Sales)
## [1] 2.948311
range(advertising_clean$Sales)
## [1]  31.19941 364.07975

Model dengan semua prediktor memiliki nilai eror yang kecil karena rentang nilai sales yaitu dari 31 hingga 364. sedangkan akumulasi kekeliruan model atau silisih prediksi dengan data aktual adalah sebesar 2. yng menunjukkan bahwa nilai error model ini sangatlah kecil. sehingga model sudah sangat baik dalam melakukan prediksi data baru di masa datang.


6. Asumsi Linear Regression

Beberapa asumsi yang harus dicek untuk memastikan apakah model yang kita buat dianggap sebagai Best Linear Unbiased Estimator (BLUE) model, yaitu model yang dapat memprediksi data baru secara konsisten.

6.1 Linearity

Linearity artinya target variabel dengan prediktornya memiliki hubungan yang linear atau hubungannya bersifat garis lurus. Sumbu x = fitted values atau nilai hasoil prediksi variabel target Sumbu Y = nilai residual/error yang dihasilkan oleh model.

plot(model_all, which = 1)

Interpretasi: Dikarenakan nilai residual tersebar di angka 0 maka model sudah memenuhi asumsi linearitas.

6.2 Normality of Residuals

Model linear regression diharapkan menghasilkan error yang berdistribusi normal.

hist(model_all$residuals)

Interpretasi: Nilai residual menyebar di angka 0 dan berdistribusi normal. sehingga asumsi normalitas resdiual sudah terpenuhi. Atau bisa juga dengan menggunakan msaphro test

shapiro.test(model_all$residuals)
## 
##  Shapiro-Wilk normality test
## 
## data:  model_all$residuals
## W = 0.99975, p-value = 0.8976

dikarenakan nilai p-value > 0.05 maka eror data berdistribusi normal. sehigga asumsi normalitas residual terpenuhi.

6.3 Homoscedasticity of Residuals

Diharapkan error yang dihasilkan oleh model menyebar secara acak atau dengan variasi konstan. Apabila divisualisasikan maka error tidak berpola. Kondisi ini disebut juga sebagai homoscedasticity

# scatter plot
plot(x = model_all$fitted.values, #hasil prediksi
     y = model_all$residuals) #nilai error
abline(h = 0, col = "red")

eror menyebar secara homogen dan tidak berpola, sehingga asumsi homoskedastisidas sudah terpenuhi.

library(lmtest)
## Warning: package 'lmtest' was built under R version 4.2.3
## Loading required package: zoo
## Warning: package 'zoo' was built under R version 4.2.3
## 
## Attaching package: 'zoo'
## The following objects are masked from 'package:base':
## 
##     as.Date, as.Date.numeric
bptest(model_all)
## 
##  studentized Breusch-Pagan test
## 
## data:  model_all
## BP = 2.9542, df = 6, p-value = 0.8146

Dikarenakan nilai p-value > 0.05 maka error tersebar secara acak sehingga asumsi homoskedastisitas residual terpenuhi

6.4 No Multicolinearity

Multicollinearity adalah kondisi adanya korelasi antar prediktor yang kuat. Hal ini tidak diinginkan karena menandakan prediktor redundan pada model, yang seharusnya dapat dipilih salah satu saja dari variable yang hubungannya amat kuat tersebut. Harapannya tidak terjadi multicollinearity

library(car)
## Loading required package: carData
## 
## Attaching package: 'car'
## The following object is masked from 'package:dplyr':
## 
##     recode
vif(model_all)
##                  GVIF Df GVIF^(1/(2*Df))
## TV           4.091850  1        2.022832
## Radio        4.667926  1        2.160538
## Social.Media 1.582523  1        1.257984
## Influencer   1.001646  3        1.000274

Nilai Vif < 10 sehingga dikatakan tidak terdapat korelasi yang kuat antar variabel pada model sehingga memenuhi asumsi tidak terjadi multikolinearitas

7. Kesimpulan dan Saran

7.1 Kesimpulan:

Dari penjelasan di atas dapat disimpulkan bahwa budget advertising TV memiliki pengaruh yang paling besar terhadap nilai sales perusahaan daripada melalui advertising di Radio, Sosial Media, maupun Influencer. Artinya semakin tinggi budget yang dikeluarkan untuk iklan di TV maka semakin tinggi juga nilai Sales nya. Sehingga dapat dijadikan rekomendasi untuk kedepannya bahwa jika ingin melakukan advertising opsi yang diprioritaskan adalah untuk melakukan advertising di TV karena dapat meningkatkan nilai penjualan.

7.2 Rekomendasi:

  • Untuk tetap meningkatkan nilai salesnya perusahaan disarankan untuk tetap melakukan advertising, dikarenakan jika tidak melakukan advertising nilai sales akan berkurang dan perusahaan akan mengalami kerugian.
  • Solusi untuk meningkatkan marketing dan melakukan advertising yang paling baik adalah dengan melakukan advertising di TV.
  • Dikarenakan pada variabel radio, InfluencerMicro, dan InfluencerNano memiliki koefisien yang negatif yang akan mengurangi nilai sales dari perusahaan. sehingga rekomendasinya adalah jika perusahaan ingin mempromosikan product nya untuk meningkatkan marketing sebaiknya memilih untuk tidak melakukan advertising di platform Radio, dan tidak berkolaborasis dengan Influencer kecuali Influencer Mega agar perusahaan dapat memperoleh profit lebih dan tidak mengalami kerugian.