Supervised and Unsupervised Learning

Alfidhia Rahman NJ

2022-12-03

1. Supervised Statistical Learning

Library

library(broom) #untuk merapikan tampilan data
library(glmnet) #metode seleksi LASSO dan RIDGE
library(glmnetUtils) #package tambahan dari glmnet yang memungkinkan syntax glmnet bisa dinput menggunakan object data.frame
library(leaps) #menggunakan fungsi regsubset sebagai metode seleksi peubah dengan bestforward
library(varbvs) #Data
library(tidyverse)
library(plyr)
library(readr)
library(repr)
library(MASS) #Data
library(MuMIn) #Model Averaging

library(data.table) # used for reading and manipulation of data
library(dplyr)      # used for data manipulation and joining
library(ggplot2)    # used for ploting
library(caret)      # used for modeling
library(xgboost)    # used for building XGBoost model
library(e1071)      # used for skewness
library(cowplot)    # used for combining multiple plots

Data

Data yang digunakan adalah dataset Bigmart yang tersedia pada website kaggle. Data ini terdiri dari 1559 produk di 10 toko di berbagai kota dengan total sebanyak 8523 observasi. Peubah tertentu dari setiap produk dan toko telah ditentukan. Peubah-peubahnya yaitu:

  1. Item_Identifier: ID unik untuk setiap item yang berbeda

  2. Item_Weight: Berat produk

  3. Item_Fat_Content: Menjelaskan apakah produk rendah lemak atau tidak

  4. Item_Visibility: Persentase total area semua produk di toko yang dialokasikan untuk produk tertentu

  5. Item_Type: Kategori makanan yang dimiliki produk tersebut

  6. Item_MRP: Harga Eceran Maksimum produk

  7. Outlet_Identifier: ID unik untuk toko

  8. Outlet_Establishment_Year: Tahun berdirinya toko

  9. Outlet_Size: Luas tanah toko

  10. Outlet_Location_Type: Luas kota dimana toko tersebut berada

  11. Outlet_Type: Menjelaskan apakah outlet tersebut hanya toko kelontong atau semacam supermarket

  12. Item_Outlet_Sales: Penjualan produk di toko tertentu (Peubah respons)

dat <- read.csv("D:/Semester 5/5. Pengantar Sains Data/Bigmart Train.csv")
str(dat)
## 'data.frame':    8523 obs. of  12 variables:
##  $ Item_Identifier          : chr  "FDA15" "DRC01" "FDN15" "FDX07" ...
##  $ Item_Weight              : num  9.3 5.92 17.5 19.2 8.93 ...
##  $ Item_Fat_Content         : chr  "Low Fat" "Regular" "Low Fat" "Regular" ...
##  $ Item_Visibility          : num  0.016 0.0193 0.0168 0 0 ...
##  $ Item_Type                : chr  "Dairy" "Soft Drinks" "Meat" "Fruits and Vegetables" ...
##  $ Item_MRP                 : num  249.8 48.3 141.6 182.1 53.9 ...
##  $ Outlet_Identifier        : chr  "OUT049" "OUT018" "OUT049" "OUT010" ...
##  $ Outlet_Establishment_Year: int  1999 2009 1999 1998 1987 2009 1987 1985 2002 2007 ...
##  $ Outlet_Size              : chr  "Medium" "Medium" "Medium" "" ...
##  $ Outlet_Location_Type     : chr  "Tier 1" "Tier 3" "Tier 1" "Tier 3" ...
##  $ Outlet_Type              : chr  "Supermarket Type1" "Supermarket Type2" "Supermarket Type1" "Grocery Store" ...
##  $ Item_Outlet_Sales        : num  3735 443 2097 732 995 ...

Terdapat beberapa peubah yang masih bertipe “chr” atau karakter. Penggunaan supervised Statistical Learning dalam regresi Ridge dan Lasso mengharuskan data yang digunakan minimal bertipe rasio/numerik. Maka dari itu, akan dilakukan pre-processing data terlebih dahulu untuk meng-convert data di atas menjadi data yang dapat digunakan untuk analisis.

Pre-processing data

Syntax di bawah ini digunakan untuk membaca dua jenis dataset yang tersedia pada link di atas, yaitu data Bigmart Train dan Bigmart Test. Data ini kemudian digabung dan dimanfaatkan untuk mengatasi data yang hilang (missing value). Adapun penjelasan dari setiap tahapan dituliskan pada komentar syntax di bawah yang diawali dengan tanda #.

# Membaca dataset
train <- fread("D:/Semester 5/5. Pengantar Sains Data/Bigmart Train.csv")
test <- fread("D:/Semester 5/5. Pengantar Sains Data/Bigmart Test.csv")

# Setting dataset test 
# Menggabungkan dataset
# Menambah Item_Outlet_Sales ke data test
test[, Item_Outlet_Sales := NA]

combi = rbind(train, test)

# Mengatasi Missing Value
missing_index = which(is.na(combi$Item_Weight))
for(i in missing_index){
  item = combi$Item_Identifier[i]
  combi$Item_Weight[i] =
    mean(combi$Item_Weight[combi$Item_Identifier == item],
         na.rm = T)
}

# Mengganti nilai 0 di Item_Visibility dengan rataan
zero_index = which(combi$Item_Visibility == 0)
for(i in zero_index)
  {
  item = combi$Item_Identifier[i]
  combi$Item_Visibility[i] =
    mean(combi$Item_Visibility[combi$Item_Identifier == item],
         na.rm = T)
}

# Membuat kode label
# Guna mengganti kode label "chr" menjadi "num"
combi[, Outlet_Size_num := ifelse(Outlet_Size == "Small", 0,
                                  ifelse(Outlet_Size == "Medium",
                                         1, 2))]

combi[, Outlet_Location_Type_num :=
        ifelse(Outlet_Location_Type == "Tier 3", 0,
               ifelse(Outlet_Location_Type == "Tier 2", 1, 2))]

combi[, c("Outlet_Size", "Outlet_Location_Type") := NULL]

# One Hot Encoding
# Guna mengganti kode label "chr" menjadi "num"
ohe_1 = dummyVars("~.", data = combi[, -c("Item_Identifier",
                                          "Outlet_Establishment_Year",
                                          "Item_Type")], fullRank = T)
ohe_df = data.table(predict(ohe_1, combi[, -c("Item_Identifier",
                                              "Outlet_Establishment_Year",
                                              "Item_Type")]))

combi = cbind(combi[, "Item_Identifier"], ohe_df)

# log + 1 untuk menghindari pembagian dengan nilai 0
combi[, Item_Visibility := log(Item_Visibility + 1)]

# Scaling dan Centering data
num_vars = which(sapply(combi, is.numeric)) # index of numeric features
num_vars_names = names(num_vars)

combi_numeric = combi[, setdiff(num_vars_names,
                                "Item_Outlet_Sales"),
                      with = F]

prep_num = preProcess(combi_numeric,
                      method=c("center", "scale"))
combi_numeric_norm = predict(prep_num, combi_numeric)

# menghilangkan peubah tak bebas numerik
combi[, setdiff(num_vars_names,
                "Item_Outlet_Sales") := NULL]

# Menggabungkan kembali peubah-peubah
combi = cbind(combi, combi_numeric_norm)

# splitting data kembali ke train dan test
train = combi[1:nrow(train)]
test = combi[(nrow(train) + 1):nrow(combi)]

# Removing Item_Outlet_Sales
test[, Item_Outlet_Sales := NULL]

# Membuat variabel untuk data train baru
data <- train

Sehingga didapatkan data fixed sebagai berikut:

head(data)
str(data)
## Classes 'data.table' and 'data.frame':   8523 obs. of  23 variables:
##  $ Item_Identifier             : chr  "FDA15" "DRC01" "FDN15" "FDX07" ...
##  $ Item_Outlet_Sales           : num  3735 443 2097 732 995 ...
##  $ Item_Weight                 : num  -0.751 -1.478 1.012 1.377 -0.831 ...
##  $ Item_Fat_Contentlow fat     : num  -0.113 -0.113 -0.113 -0.113 -0.113 ...
##  $ Item_Fat_ContentLow Fat     : num  0.821 -1.218 0.821 -1.218 0.821 ...
##  $ Item_Fat_Contentreg         : num  -0.118 -0.118 -0.118 -0.118 -0.118 ...
##  $ Item_Fat_ContentRegular     : num  -0.717 1.394 -0.717 1.394 -0.717 ...
##  $ Item_Visibility             : num  -1.11 -1.04 -1.1 -1.08 -1.25 ...
##  $ Item_MRP                    : num  1.75245 -1.49364 0.00987 0.66181 -1.40357 ...
##  $ Outlet_IdentifierOUT013     : num  -0.35 -0.35 -0.35 -0.35 2.85 ...
##  $ Outlet_IdentifierOUT017     : num  -0.349 -0.349 -0.349 -0.349 -0.349 ...
##  $ Outlet_IdentifierOUT018     : num  -0.349 2.861 -0.349 -0.349 -0.349 ...
##  $ Outlet_IdentifierOUT019     : num  -0.257 -0.257 -0.257 -0.257 -0.257 ...
##  $ Outlet_IdentifierOUT027     : num  -0.351 -0.351 -0.351 -0.351 -0.351 ...
##  $ Outlet_IdentifierOUT035     : num  -0.35 -0.35 -0.35 -0.35 -0.35 ...
##  $ Outlet_IdentifierOUT045     : num  -0.35 -0.35 -0.35 -0.35 -0.35 ...
##  $ Outlet_IdentifierOUT046     : num  -0.35 -0.35 -0.35 -0.35 -0.35 ...
##  $ Outlet_IdentifierOUT049     : num  2.86 -0.35 2.86 -0.35 -0.35 ...
##  $ Outlet_TypeSupermarket Type1: num  0.727 -1.376 0.727 -1.376 0.727 ...
##  $ Outlet_TypeSupermarket Type2: num  -0.349 2.861 -0.349 -0.349 -0.349 ...
##  $ Outlet_TypeSupermarket Type3: num  -0.351 -0.351 -0.351 -0.351 -0.351 ...
##  $ Outlet_Size_num             : num  -0.138 -0.138 -0.138 1.093 1.093 ...
##  $ Outlet_Location_Type_num    : num  1.37 -1.09 1.37 -1.09 -1.09 ...
##  - attr(*, ".internal.selfref")=<externalptr>

Data di atas terdiri dari jumlah observasi yang sama, yaitu sebanyak 8523 dengan beberapa peubah “baru” yang diperoleh dari pengelompokkan data outlet yang sebelumnya berupa data ordinal/tingkatan -> memperlakukannya sebagai data numerik.

Partisi Data

Selanjutnya data perlu dibagi menjadi data training dan data testing. Data training akan digunakan untuk melatih algoritma dalam mencari model yang sesuai, sedangkan data testing akan dipakai untuk menguji dan mengetahui performa model yang didapatkan pada tahapan testing. Pada umumnya, proporsi data testing berada di antara \(60/%-80/%\). Pada tugas kali ini, akan ditetapkan proporsi data testing sebesar \(70/%\)

set.seed(100) 

index = sample(1:nrow(data), 0.7*nrow(data)) 

train = data[index,-1] # Create the training data 
test = data[-index,-1] # Create the test data

dim(train)
## [1] 5966   22
dim(test)
## [1] 2557   22

RIDGE Regression

Regresi Ridge adalah metode yang dapat digunakan untuk mencocokkan model regresi ketika terdapat multikolinearitas dalam data. Regresi ridge meminimalkan jumlah kuadrat residual prediktor dalam model. Regresi ridge cenderung menyusutkan estimasi koefisien menuju nol.

Cara 1

Pada cara pertama, akan dilakukan dengan menggunakan data asli (bukan data partisi).

Control Model

Syntax di bawah ini akan membuat variabel control model dengan metode cross-validation berulang, dengan banyaknya folds = 10 dan banyaknya ulangan = 5. Selain itu, pemilihan alpha = 0 pada syntax di bawah diperlukan untuk regresi ridge dan nilai lambda dari 0.001 hingga 0.1 dengan jarak antar lambda 0.0002.

# Model Building : Ridge Regression
set.seed(123)
control = trainControl(method ="repeatedcv", 
                       number = 10,
                       repeats = 5,
                       verboseIter = F) #print iterasi
Grid_ri_reg = expand.grid(alpha = 0, lambda = seq(0.001, 0.1,
                                                by = 0.0002))

Modelling

Kemudian, akan dijalankan model regresi ridge berdasarkan control model di atas:

#fitting Ridge Regression model
Ridge_model = train(x = data[, -c("Item_Identifier",
                                "Item_Outlet_Sales")],
                    y = data$Item_Outlet_Sales,
                    method = "glmnet",
                    trControl = control,
                    tuneGrid = Grid_ri_reg
                    )
Ridge_model
## glmnet 
## 
## 8523 samples
##   21 predictor
## 
## No pre-processing
## Resampling: Cross-Validated (10 fold, repeated 5 times) 
## Summary of sample sizes: 7671, 7670, 7670, 7670, 7671, 7671, ... 
## Resampling results across tuning parameters:
## 
##   lambda  RMSE      Rsquared   MAE     
##   0.0010  1133.289  0.5612142  838.5613
##   0.0012  1133.289  0.5612142  838.5613
##   0.0014  1133.289  0.5612142  838.5613
##   0.0016  1133.289  0.5612142  838.5613
##   0.0018  1133.289  0.5612142  838.5613
##   0.0020  1133.289  0.5612142  838.5613
##   0.0022  1133.289  0.5612142  838.5613
##   0.0024  1133.289  0.5612142  838.5613
##   0.0026  1133.289  0.5612142  838.5613
##   0.0028  1133.289  0.5612142  838.5613
##   0.0030  1133.289  0.5612142  838.5613
##   0.0032  1133.289  0.5612142  838.5613
##   0.0034  1133.289  0.5612142  838.5613
##   0.0036  1133.289  0.5612142  838.5613
##   0.0038  1133.289  0.5612142  838.5613
##   0.0040  1133.289  0.5612142  838.5613
##   0.0042  1133.289  0.5612142  838.5613
##   0.0044  1133.289  0.5612142  838.5613
##   0.0046  1133.289  0.5612142  838.5613
##   0.0048  1133.289  0.5612142  838.5613
##   0.0050  1133.289  0.5612142  838.5613
##   0.0052  1133.289  0.5612142  838.5613
##   0.0054  1133.289  0.5612142  838.5613
##   0.0056  1133.289  0.5612142  838.5613
##   0.0058  1133.289  0.5612142  838.5613
##   0.0060  1133.289  0.5612142  838.5613
##   0.0062  1133.289  0.5612142  838.5613
##   0.0064  1133.289  0.5612142  838.5613
##   0.0066  1133.289  0.5612142  838.5613
##   0.0068  1133.289  0.5612142  838.5613
##   0.0070  1133.289  0.5612142  838.5613
##   0.0072  1133.289  0.5612142  838.5613
##   0.0074  1133.289  0.5612142  838.5613
##   0.0076  1133.289  0.5612142  838.5613
##   0.0078  1133.289  0.5612142  838.5613
##   0.0080  1133.289  0.5612142  838.5613
##   0.0082  1133.289  0.5612142  838.5613
##   0.0084  1133.289  0.5612142  838.5613
##   0.0086  1133.289  0.5612142  838.5613
##   0.0088  1133.289  0.5612142  838.5613
##   0.0090  1133.289  0.5612142  838.5613
##   0.0092  1133.289  0.5612142  838.5613
##   0.0094  1133.289  0.5612142  838.5613
##   0.0096  1133.289  0.5612142  838.5613
##   0.0098  1133.289  0.5612142  838.5613
##   0.0100  1133.289  0.5612142  838.5613
##   0.0102  1133.289  0.5612142  838.5613
##   0.0104  1133.289  0.5612142  838.5613
##   0.0106  1133.289  0.5612142  838.5613
##   0.0108  1133.289  0.5612142  838.5613
##   0.0110  1133.289  0.5612142  838.5613
##   0.0112  1133.289  0.5612142  838.5613
##   0.0114  1133.289  0.5612142  838.5613
##   0.0116  1133.289  0.5612142  838.5613
##   0.0118  1133.289  0.5612142  838.5613
##   0.0120  1133.289  0.5612142  838.5613
##   0.0122  1133.289  0.5612142  838.5613
##   0.0124  1133.289  0.5612142  838.5613
##   0.0126  1133.289  0.5612142  838.5613
##   0.0128  1133.289  0.5612142  838.5613
##   0.0130  1133.289  0.5612142  838.5613
##   0.0132  1133.289  0.5612142  838.5613
##   0.0134  1133.289  0.5612142  838.5613
##   0.0136  1133.289  0.5612142  838.5613
##   0.0138  1133.289  0.5612142  838.5613
##   0.0140  1133.289  0.5612142  838.5613
##   0.0142  1133.289  0.5612142  838.5613
##   0.0144  1133.289  0.5612142  838.5613
##   0.0146  1133.289  0.5612142  838.5613
##   0.0148  1133.289  0.5612142  838.5613
##   0.0150  1133.289  0.5612142  838.5613
##   0.0152  1133.289  0.5612142  838.5613
##   0.0154  1133.289  0.5612142  838.5613
##   0.0156  1133.289  0.5612142  838.5613
##   0.0158  1133.289  0.5612142  838.5613
##   0.0160  1133.289  0.5612142  838.5613
##   0.0162  1133.289  0.5612142  838.5613
##   0.0164  1133.289  0.5612142  838.5613
##   0.0166  1133.289  0.5612142  838.5613
##   0.0168  1133.289  0.5612142  838.5613
##   0.0170  1133.289  0.5612142  838.5613
##   0.0172  1133.289  0.5612142  838.5613
##   0.0174  1133.289  0.5612142  838.5613
##   0.0176  1133.289  0.5612142  838.5613
##   0.0178  1133.289  0.5612142  838.5613
##   0.0180  1133.289  0.5612142  838.5613
##   0.0182  1133.289  0.5612142  838.5613
##   0.0184  1133.289  0.5612142  838.5613
##   0.0186  1133.289  0.5612142  838.5613
##   0.0188  1133.289  0.5612142  838.5613
##   0.0190  1133.289  0.5612142  838.5613
##   0.0192  1133.289  0.5612142  838.5613
##   0.0194  1133.289  0.5612142  838.5613
##   0.0196  1133.289  0.5612142  838.5613
##   0.0198  1133.289  0.5612142  838.5613
##   0.0200  1133.289  0.5612142  838.5613
##   0.0202  1133.289  0.5612142  838.5613
##   0.0204  1133.289  0.5612142  838.5613
##   0.0206  1133.289  0.5612142  838.5613
##   0.0208  1133.289  0.5612142  838.5613
##   0.0210  1133.289  0.5612142  838.5613
##   0.0212  1133.289  0.5612142  838.5613
##   0.0214  1133.289  0.5612142  838.5613
##   0.0216  1133.289  0.5612142  838.5613
##   0.0218  1133.289  0.5612142  838.5613
##   0.0220  1133.289  0.5612142  838.5613
##   0.0222  1133.289  0.5612142  838.5613
##   0.0224  1133.289  0.5612142  838.5613
##   0.0226  1133.289  0.5612142  838.5613
##   0.0228  1133.289  0.5612142  838.5613
##   0.0230  1133.289  0.5612142  838.5613
##   0.0232  1133.289  0.5612142  838.5613
##   0.0234  1133.289  0.5612142  838.5613
##   0.0236  1133.289  0.5612142  838.5613
##   0.0238  1133.289  0.5612142  838.5613
##   0.0240  1133.289  0.5612142  838.5613
##   0.0242  1133.289  0.5612142  838.5613
##   0.0244  1133.289  0.5612142  838.5613
##   0.0246  1133.289  0.5612142  838.5613
##   0.0248  1133.289  0.5612142  838.5613
##   0.0250  1133.289  0.5612142  838.5613
##   0.0252  1133.289  0.5612142  838.5613
##   0.0254  1133.289  0.5612142  838.5613
##   0.0256  1133.289  0.5612142  838.5613
##   0.0258  1133.289  0.5612142  838.5613
##   0.0260  1133.289  0.5612142  838.5613
##   0.0262  1133.289  0.5612142  838.5613
##   0.0264  1133.289  0.5612142  838.5613
##   0.0266  1133.289  0.5612142  838.5613
##   0.0268  1133.289  0.5612142  838.5613
##   0.0270  1133.289  0.5612142  838.5613
##   0.0272  1133.289  0.5612142  838.5613
##   0.0274  1133.289  0.5612142  838.5613
##   0.0276  1133.289  0.5612142  838.5613
##   0.0278  1133.289  0.5612142  838.5613
##   0.0280  1133.289  0.5612142  838.5613
##   0.0282  1133.289  0.5612142  838.5613
##   0.0284  1133.289  0.5612142  838.5613
##   0.0286  1133.289  0.5612142  838.5613
##   0.0288  1133.289  0.5612142  838.5613
##   0.0290  1133.289  0.5612142  838.5613
##   0.0292  1133.289  0.5612142  838.5613
##   0.0294  1133.289  0.5612142  838.5613
##   0.0296  1133.289  0.5612142  838.5613
##   0.0298  1133.289  0.5612142  838.5613
##   0.0300  1133.289  0.5612142  838.5613
##   0.0302  1133.289  0.5612142  838.5613
##   0.0304  1133.289  0.5612142  838.5613
##   0.0306  1133.289  0.5612142  838.5613
##   0.0308  1133.289  0.5612142  838.5613
##   0.0310  1133.289  0.5612142  838.5613
##   0.0312  1133.289  0.5612142  838.5613
##   0.0314  1133.289  0.5612142  838.5613
##   0.0316  1133.289  0.5612142  838.5613
##   0.0318  1133.289  0.5612142  838.5613
##   0.0320  1133.289  0.5612142  838.5613
##   0.0322  1133.289  0.5612142  838.5613
##   0.0324  1133.289  0.5612142  838.5613
##   0.0326  1133.289  0.5612142  838.5613
##   0.0328  1133.289  0.5612142  838.5613
##   0.0330  1133.289  0.5612142  838.5613
##   0.0332  1133.289  0.5612142  838.5613
##   0.0334  1133.289  0.5612142  838.5613
##   0.0336  1133.289  0.5612142  838.5613
##   0.0338  1133.289  0.5612142  838.5613
##   0.0340  1133.289  0.5612142  838.5613
##   0.0342  1133.289  0.5612142  838.5613
##   0.0344  1133.289  0.5612142  838.5613
##   0.0346  1133.289  0.5612142  838.5613
##   0.0348  1133.289  0.5612142  838.5613
##   0.0350  1133.289  0.5612142  838.5613
##   0.0352  1133.289  0.5612142  838.5613
##   0.0354  1133.289  0.5612142  838.5613
##   0.0356  1133.289  0.5612142  838.5613
##   0.0358  1133.289  0.5612142  838.5613
##   0.0360  1133.289  0.5612142  838.5613
##   0.0362  1133.289  0.5612142  838.5613
##   0.0364  1133.289  0.5612142  838.5613
##   0.0366  1133.289  0.5612142  838.5613
##   0.0368  1133.289  0.5612142  838.5613
##   0.0370  1133.289  0.5612142  838.5613
##   0.0372  1133.289  0.5612142  838.5613
##   0.0374  1133.289  0.5612142  838.5613
##   0.0376  1133.289  0.5612142  838.5613
##   0.0378  1133.289  0.5612142  838.5613
##   0.0380  1133.289  0.5612142  838.5613
##   0.0382  1133.289  0.5612142  838.5613
##   0.0384  1133.289  0.5612142  838.5613
##   0.0386  1133.289  0.5612142  838.5613
##   0.0388  1133.289  0.5612142  838.5613
##   0.0390  1133.289  0.5612142  838.5613
##   0.0392  1133.289  0.5612142  838.5613
##   0.0394  1133.289  0.5612142  838.5613
##   0.0396  1133.289  0.5612142  838.5613
##   0.0398  1133.289  0.5612142  838.5613
##   0.0400  1133.289  0.5612142  838.5613
##   0.0402  1133.289  0.5612142  838.5613
##   0.0404  1133.289  0.5612142  838.5613
##   0.0406  1133.289  0.5612142  838.5613
##   0.0408  1133.289  0.5612142  838.5613
##   0.0410  1133.289  0.5612142  838.5613
##   0.0412  1133.289  0.5612142  838.5613
##   0.0414  1133.289  0.5612142  838.5613
##   0.0416  1133.289  0.5612142  838.5613
##   0.0418  1133.289  0.5612142  838.5613
##   0.0420  1133.289  0.5612142  838.5613
##   0.0422  1133.289  0.5612142  838.5613
##   0.0424  1133.289  0.5612142  838.5613
##   0.0426  1133.289  0.5612142  838.5613
##   0.0428  1133.289  0.5612142  838.5613
##   0.0430  1133.289  0.5612142  838.5613
##   0.0432  1133.289  0.5612142  838.5613
##   0.0434  1133.289  0.5612142  838.5613
##   0.0436  1133.289  0.5612142  838.5613
##   0.0438  1133.289  0.5612142  838.5613
##   0.0440  1133.289  0.5612142  838.5613
##   0.0442  1133.289  0.5612142  838.5613
##   0.0444  1133.289  0.5612142  838.5613
##   0.0446  1133.289  0.5612142  838.5613
##   0.0448  1133.289  0.5612142  838.5613
##   0.0450  1133.289  0.5612142  838.5613
##   0.0452  1133.289  0.5612142  838.5613
##   0.0454  1133.289  0.5612142  838.5613
##   0.0456  1133.289  0.5612142  838.5613
##   0.0458  1133.289  0.5612142  838.5613
##   0.0460  1133.289  0.5612142  838.5613
##   0.0462  1133.289  0.5612142  838.5613
##   0.0464  1133.289  0.5612142  838.5613
##   0.0466  1133.289  0.5612142  838.5613
##   0.0468  1133.289  0.5612142  838.5613
##   0.0470  1133.289  0.5612142  838.5613
##   0.0472  1133.289  0.5612142  838.5613
##   0.0474  1133.289  0.5612142  838.5613
##   0.0476  1133.289  0.5612142  838.5613
##   0.0478  1133.289  0.5612142  838.5613
##   0.0480  1133.289  0.5612142  838.5613
##   0.0482  1133.289  0.5612142  838.5613
##   0.0484  1133.289  0.5612142  838.5613
##   0.0486  1133.289  0.5612142  838.5613
##   0.0488  1133.289  0.5612142  838.5613
##   0.0490  1133.289  0.5612142  838.5613
##   0.0492  1133.289  0.5612142  838.5613
##   0.0494  1133.289  0.5612142  838.5613
##   0.0496  1133.289  0.5612142  838.5613
##   0.0498  1133.289  0.5612142  838.5613
##   0.0500  1133.289  0.5612142  838.5613
##   0.0502  1133.289  0.5612142  838.5613
##   0.0504  1133.289  0.5612142  838.5613
##   0.0506  1133.289  0.5612142  838.5613
##   0.0508  1133.289  0.5612142  838.5613
##   0.0510  1133.289  0.5612142  838.5613
##   0.0512  1133.289  0.5612142  838.5613
##   0.0514  1133.289  0.5612142  838.5613
##   0.0516  1133.289  0.5612142  838.5613
##   0.0518  1133.289  0.5612142  838.5613
##   0.0520  1133.289  0.5612142  838.5613
##   0.0522  1133.289  0.5612142  838.5613
##   0.0524  1133.289  0.5612142  838.5613
##   0.0526  1133.289  0.5612142  838.5613
##   0.0528  1133.289  0.5612142  838.5613
##   0.0530  1133.289  0.5612142  838.5613
##   0.0532  1133.289  0.5612142  838.5613
##   0.0534  1133.289  0.5612142  838.5613
##   0.0536  1133.289  0.5612142  838.5613
##   0.0538  1133.289  0.5612142  838.5613
##   0.0540  1133.289  0.5612142  838.5613
##   0.0542  1133.289  0.5612142  838.5613
##   0.0544  1133.289  0.5612142  838.5613
##   0.0546  1133.289  0.5612142  838.5613
##   0.0548  1133.289  0.5612142  838.5613
##   0.0550  1133.289  0.5612142  838.5613
##   0.0552  1133.289  0.5612142  838.5613
##   0.0554  1133.289  0.5612142  838.5613
##   0.0556  1133.289  0.5612142  838.5613
##   0.0558  1133.289  0.5612142  838.5613
##   0.0560  1133.289  0.5612142  838.5613
##   0.0562  1133.289  0.5612142  838.5613
##   0.0564  1133.289  0.5612142  838.5613
##   0.0566  1133.289  0.5612142  838.5613
##   0.0568  1133.289  0.5612142  838.5613
##   0.0570  1133.289  0.5612142  838.5613
##   0.0572  1133.289  0.5612142  838.5613
##   0.0574  1133.289  0.5612142  838.5613
##   0.0576  1133.289  0.5612142  838.5613
##   0.0578  1133.289  0.5612142  838.5613
##   0.0580  1133.289  0.5612142  838.5613
##   0.0582  1133.289  0.5612142  838.5613
##   0.0584  1133.289  0.5612142  838.5613
##   0.0586  1133.289  0.5612142  838.5613
##   0.0588  1133.289  0.5612142  838.5613
##   0.0590  1133.289  0.5612142  838.5613
##   0.0592  1133.289  0.5612142  838.5613
##   0.0594  1133.289  0.5612142  838.5613
##   0.0596  1133.289  0.5612142  838.5613
##   0.0598  1133.289  0.5612142  838.5613
##   0.0600  1133.289  0.5612142  838.5613
##   0.0602  1133.289  0.5612142  838.5613
##   0.0604  1133.289  0.5612142  838.5613
##   0.0606  1133.289  0.5612142  838.5613
##   0.0608  1133.289  0.5612142  838.5613
##   0.0610  1133.289  0.5612142  838.5613
##   0.0612  1133.289  0.5612142  838.5613
##   0.0614  1133.289  0.5612142  838.5613
##   0.0616  1133.289  0.5612142  838.5613
##   0.0618  1133.289  0.5612142  838.5613
##   0.0620  1133.289  0.5612142  838.5613
##   0.0622  1133.289  0.5612142  838.5613
##   0.0624  1133.289  0.5612142  838.5613
##   0.0626  1133.289  0.5612142  838.5613
##   0.0628  1133.289  0.5612142  838.5613
##   0.0630  1133.289  0.5612142  838.5613
##   0.0632  1133.289  0.5612142  838.5613
##   0.0634  1133.289  0.5612142  838.5613
##   0.0636  1133.289  0.5612142  838.5613
##   0.0638  1133.289  0.5612142  838.5613
##   0.0640  1133.289  0.5612142  838.5613
##   0.0642  1133.289  0.5612142  838.5613
##   0.0644  1133.289  0.5612142  838.5613
##   0.0646  1133.289  0.5612142  838.5613
##   0.0648  1133.289  0.5612142  838.5613
##   0.0650  1133.289  0.5612142  838.5613
##   0.0652  1133.289  0.5612142  838.5613
##   0.0654  1133.289  0.5612142  838.5613
##   0.0656  1133.289  0.5612142  838.5613
##   0.0658  1133.289  0.5612142  838.5613
##   0.0660  1133.289  0.5612142  838.5613
##   0.0662  1133.289  0.5612142  838.5613
##   0.0664  1133.289  0.5612142  838.5613
##   0.0666  1133.289  0.5612142  838.5613
##   0.0668  1133.289  0.5612142  838.5613
##   0.0670  1133.289  0.5612142  838.5613
##   0.0672  1133.289  0.5612142  838.5613
##   0.0674  1133.289  0.5612142  838.5613
##   0.0676  1133.289  0.5612142  838.5613
##   0.0678  1133.289  0.5612142  838.5613
##   0.0680  1133.289  0.5612142  838.5613
##   0.0682  1133.289  0.5612142  838.5613
##   0.0684  1133.289  0.5612142  838.5613
##   0.0686  1133.289  0.5612142  838.5613
##   0.0688  1133.289  0.5612142  838.5613
##   0.0690  1133.289  0.5612142  838.5613
##   0.0692  1133.289  0.5612142  838.5613
##   0.0694  1133.289  0.5612142  838.5613
##   0.0696  1133.289  0.5612142  838.5613
##   0.0698  1133.289  0.5612142  838.5613
##   0.0700  1133.289  0.5612142  838.5613
##   0.0702  1133.289  0.5612142  838.5613
##   0.0704  1133.289  0.5612142  838.5613
##   0.0706  1133.289  0.5612142  838.5613
##   0.0708  1133.289  0.5612142  838.5613
##   0.0710  1133.289  0.5612142  838.5613
##   0.0712  1133.289  0.5612142  838.5613
##   0.0714  1133.289  0.5612142  838.5613
##   0.0716  1133.289  0.5612142  838.5613
##   0.0718  1133.289  0.5612142  838.5613
##   0.0720  1133.289  0.5612142  838.5613
##   0.0722  1133.289  0.5612142  838.5613
##   0.0724  1133.289  0.5612142  838.5613
##   0.0726  1133.289  0.5612142  838.5613
##   0.0728  1133.289  0.5612142  838.5613
##   0.0730  1133.289  0.5612142  838.5613
##   0.0732  1133.289  0.5612142  838.5613
##   0.0734  1133.289  0.5612142  838.5613
##   0.0736  1133.289  0.5612142  838.5613
##   0.0738  1133.289  0.5612142  838.5613
##   0.0740  1133.289  0.5612142  838.5613
##   0.0742  1133.289  0.5612142  838.5613
##   0.0744  1133.289  0.5612142  838.5613
##   0.0746  1133.289  0.5612142  838.5613
##   0.0748  1133.289  0.5612142  838.5613
##   0.0750  1133.289  0.5612142  838.5613
##   0.0752  1133.289  0.5612142  838.5613
##   0.0754  1133.289  0.5612142  838.5613
##   0.0756  1133.289  0.5612142  838.5613
##   0.0758  1133.289  0.5612142  838.5613
##   0.0760  1133.289  0.5612142  838.5613
##   0.0762  1133.289  0.5612142  838.5613
##   0.0764  1133.289  0.5612142  838.5613
##   0.0766  1133.289  0.5612142  838.5613
##   0.0768  1133.289  0.5612142  838.5613
##   0.0770  1133.289  0.5612142  838.5613
##   0.0772  1133.289  0.5612142  838.5613
##   0.0774  1133.289  0.5612142  838.5613
##   0.0776  1133.289  0.5612142  838.5613
##   0.0778  1133.289  0.5612142  838.5613
##   0.0780  1133.289  0.5612142  838.5613
##   0.0782  1133.289  0.5612142  838.5613
##   0.0784  1133.289  0.5612142  838.5613
##   0.0786  1133.289  0.5612142  838.5613
##   0.0788  1133.289  0.5612142  838.5613
##   0.0790  1133.289  0.5612142  838.5613
##   0.0792  1133.289  0.5612142  838.5613
##   0.0794  1133.289  0.5612142  838.5613
##   0.0796  1133.289  0.5612142  838.5613
##   0.0798  1133.289  0.5612142  838.5613
##   0.0800  1133.289  0.5612142  838.5613
##   0.0802  1133.289  0.5612142  838.5613
##   0.0804  1133.289  0.5612142  838.5613
##   0.0806  1133.289  0.5612142  838.5613
##   0.0808  1133.289  0.5612142  838.5613
##   0.0810  1133.289  0.5612142  838.5613
##   0.0812  1133.289  0.5612142  838.5613
##   0.0814  1133.289  0.5612142  838.5613
##   0.0816  1133.289  0.5612142  838.5613
##   0.0818  1133.289  0.5612142  838.5613
##   0.0820  1133.289  0.5612142  838.5613
##   0.0822  1133.289  0.5612142  838.5613
##   0.0824  1133.289  0.5612142  838.5613
##   0.0826  1133.289  0.5612142  838.5613
##   0.0828  1133.289  0.5612142  838.5613
##   0.0830  1133.289  0.5612142  838.5613
##   0.0832  1133.289  0.5612142  838.5613
##   0.0834  1133.289  0.5612142  838.5613
##   0.0836  1133.289  0.5612142  838.5613
##   0.0838  1133.289  0.5612142  838.5613
##   0.0840  1133.289  0.5612142  838.5613
##   0.0842  1133.289  0.5612142  838.5613
##   0.0844  1133.289  0.5612142  838.5613
##   0.0846  1133.289  0.5612142  838.5613
##   0.0848  1133.289  0.5612142  838.5613
##   0.0850  1133.289  0.5612142  838.5613
##   0.0852  1133.289  0.5612142  838.5613
##   0.0854  1133.289  0.5612142  838.5613
##   0.0856  1133.289  0.5612142  838.5613
##   0.0858  1133.289  0.5612142  838.5613
##   0.0860  1133.289  0.5612142  838.5613
##   0.0862  1133.289  0.5612142  838.5613
##   0.0864  1133.289  0.5612142  838.5613
##   0.0866  1133.289  0.5612142  838.5613
##   0.0868  1133.289  0.5612142  838.5613
##   0.0870  1133.289  0.5612142  838.5613
##   0.0872  1133.289  0.5612142  838.5613
##   0.0874  1133.289  0.5612142  838.5613
##   0.0876  1133.289  0.5612142  838.5613
##   0.0878  1133.289  0.5612142  838.5613
##   0.0880  1133.289  0.5612142  838.5613
##   0.0882  1133.289  0.5612142  838.5613
##   0.0884  1133.289  0.5612142  838.5613
##   0.0886  1133.289  0.5612142  838.5613
##   0.0888  1133.289  0.5612142  838.5613
##   0.0890  1133.289  0.5612142  838.5613
##   0.0892  1133.289  0.5612142  838.5613
##   0.0894  1133.289  0.5612142  838.5613
##   0.0896  1133.289  0.5612142  838.5613
##   0.0898  1133.289  0.5612142  838.5613
##   0.0900  1133.289  0.5612142  838.5613
##   0.0902  1133.289  0.5612142  838.5613
##   0.0904  1133.289  0.5612142  838.5613
##   0.0906  1133.289  0.5612142  838.5613
##   0.0908  1133.289  0.5612142  838.5613
##   0.0910  1133.289  0.5612142  838.5613
##   0.0912  1133.289  0.5612142  838.5613
##   0.0914  1133.289  0.5612142  838.5613
##   0.0916  1133.289  0.5612142  838.5613
##   0.0918  1133.289  0.5612142  838.5613
##   0.0920  1133.289  0.5612142  838.5613
##   0.0922  1133.289  0.5612142  838.5613
##   0.0924  1133.289  0.5612142  838.5613
##   0.0926  1133.289  0.5612142  838.5613
##   0.0928  1133.289  0.5612142  838.5613
##   0.0930  1133.289  0.5612142  838.5613
##   0.0932  1133.289  0.5612142  838.5613
##   0.0934  1133.289  0.5612142  838.5613
##   0.0936  1133.289  0.5612142  838.5613
##   0.0938  1133.289  0.5612142  838.5613
##   0.0940  1133.289  0.5612142  838.5613
##   0.0942  1133.289  0.5612142  838.5613
##   0.0944  1133.289  0.5612142  838.5613
##   0.0946  1133.289  0.5612142  838.5613
##   0.0948  1133.289  0.5612142  838.5613
##   0.0950  1133.289  0.5612142  838.5613
##   0.0952  1133.289  0.5612142  838.5613
##   0.0954  1133.289  0.5612142  838.5613
##   0.0956  1133.289  0.5612142  838.5613
##   0.0958  1133.289  0.5612142  838.5613
##   0.0960  1133.289  0.5612142  838.5613
##   0.0962  1133.289  0.5612142  838.5613
##   0.0964  1133.289  0.5612142  838.5613
##   0.0966  1133.289  0.5612142  838.5613
##   0.0968  1133.289  0.5612142  838.5613
##   0.0970  1133.289  0.5612142  838.5613
##   0.0972  1133.289  0.5612142  838.5613
##   0.0974  1133.289  0.5612142  838.5613
##   0.0976  1133.289  0.5612142  838.5613
##   0.0978  1133.289  0.5612142  838.5613
##   0.0980  1133.289  0.5612142  838.5613
##   0.0982  1133.289  0.5612142  838.5613
##   0.0984  1133.289  0.5612142  838.5613
##   0.0986  1133.289  0.5612142  838.5613
##   0.0988  1133.289  0.5612142  838.5613
##   0.0990  1133.289  0.5612142  838.5613
##   0.0992  1133.289  0.5612142  838.5613
##   0.0994  1133.289  0.5612142  838.5613
##   0.0996  1133.289  0.5612142  838.5613
##   0.0998  1133.289  0.5612142  838.5613
##   0.1000  1133.289  0.5612142  838.5613
## 
## Tuning parameter 'alpha' was held constant at a value of 0
## RMSE was used to select the optimal model using the smallest value.
## The final values used for the model were alpha = 0 and lambda = 0.1.

Model regresi Ridge menggunakan nilai alpha sebesar 0 dan nilai lambda sebesar 0,1. RMSE digunakan untuk memilih model optimal dengan menggunakan nilai RMSE terkecil.

# mean validation score
mean(Ridge_model$resample$RMSE)
## [1] 1133.289

Rata-rata skor validasi model RMSE adalah 1133.019.

Plot

#plotting the model
plot(Ridge_model, main = "Ridge Regression")

Dari plot di atas, dapat terlihat bahwa meskipun parameter regularisasi meningkat, RMSE tetap konstan.

Variable importance

#plotting important variables
plot(varImp(Ridge_model,scale=T))

Dari plot di atas, dapat terlihat bahwa peubah item_MRP atau peubah harga eceran tertinggi merupakan peubah paling penting dalam menentukan penjualan suatu produk. Kemudian, peubah yang penting terhadap penjualan suatu produk selanjutnya adalah peubah Outlet_Type, yaitu pada supermarket tipe 1.

Cara 2

Modelling

Cara lain dapat dilakukan dengan fungsi glmnet. Lambda diiterasi dari \(10^2\) sampai pada nilai 0.01 dengan selisih antar lambda = 0.1. Akan dibandingkan hasil prediksi data training dan testing pada cara ini, sehingga data yang digunakan adalah data partisi.

#Ridge Regression with library(glmnet)
train <- as.matrix(train)
lambdas <- 10^seq(2,-3, by=-0.1)
ridge_reg = glmnet(train[,-1], train[,1], nlambda = 25, alpha = 0, family = 'gaussian', lambda = lambdas)
summary(ridge_reg)
##           Length Class     Mode   
## a0          51   -none-    numeric
## beta      1071   dgCMatrix S4     
## df          51   -none-    numeric
## dim          2   -none-    numeric
## lambda      51   -none-    numeric
## dev.ratio   51   -none-    numeric
## nulldev      1   -none-    numeric
## npasses      1   -none-    numeric
## jerr         1   -none-    numeric
## offset       1   -none-    logical
## call         7   -none-    call   
## nobs         1   -none-    numeric
ridge_reg
## 
## Call:  glmnet::glmnet(x = train[, -1], y = train[, 1], nlambda = 25,      alpha = 0, family = "gaussian", lambda = lambdas) 
## 
##    Df  %Dev  Lambda
## 1  21 55.99 100.000
## 2  21 56.10  79.430
## 3  21 56.18  63.100
## 4  21 56.23  50.120
## 5  21 56.26  39.810
## 6  21 56.29  31.620
## 7  21 56.30  25.120
## 8  21 56.31  19.950
## 9  21 56.32  15.850
## 10 21 56.32  12.590
## 11 21 56.32  10.000
## 12 21 56.32   7.943
## 13 21 56.33   6.310
## 14 21 56.33   5.012
## 15 21 56.33   3.981
## 16 21 56.33   3.162
## 17 21 56.33   2.512
## 18 21 56.33   1.995
## 19 21 56.33   1.585
## 20 21 56.33   1.259
## 21 21 56.33   1.000
## 22 21 56.33   0.794
## 23 21 56.33   0.631
## 24 21 56.33   0.501
## 25 21 56.33   0.398
## 26 21 56.33   0.316
## 27 21 56.33   0.251
## 28 21 56.33   0.200
## 29 21 56.33   0.158
## 30 21 56.33   0.126
## 31 21 56.33   0.100
## 32 21 56.33   0.079
## 33 21 56.33   0.063
## 34 21 56.33   0.050
## 35 21 56.33   0.040
## 36 21 56.33   0.032
## 37 21 56.33   0.025
## 38 21 56.33   0.020
## 39 21 56.33   0.016
## 40 21 56.33   0.013
## 41 21 56.33   0.010
## 42 21 56.33   0.008
## 43 21 56.33   0.006
## 44 21 56.33   0.005
## 45 21 56.33   0.004
## 46 21 56.33   0.003
## 47 21 56.33   0.003
## 48 21 56.33   0.002
## 49 21 56.33   0.002
## 50 21 56.33   0.001
## 51 21 56.33   0.001

Tuning hyperparameter

Selanjutnya akan dilakukan tunning parameter dengan cross validation.

set.seed(1)
#tunning parameter lambda dg cv
cv_ridge <- cv.glmnet(train[,-1], train[,1], alpha = 0, lambda = lambdas)
optimal_lambda <- cv_ridge$lambda.min
optimal_lambda
## [1] 3.162278

didapatkan lambda optimal sebesar 3.162278.

Koefisien Regresi

coef(cv_ridge, s="lambda.min")
## 22 x 1 sparse Matrix of class "dgCMatrix"
##                                        s1
## (Intercept)                  2190.7600700
## Item_Weight                     3.6699819
## Item_Fat_Contentlow fat         7.7696761
## Item_Fat_ContentLow Fat       -18.2191098
## Item_Fat_Contentreg            -0.3963248
## Item_Fat_ContentRegular        10.0907186
## Item_Visibility               -13.9355920
## Item_MRP                      971.7523433
## Outlet_IdentifierOUT013       259.0493696
## Outlet_IdentifierOUT017       227.0411481
## Outlet_IdentifierOUT018       198.1348335
## Outlet_IdentifierOUT019      -206.5180948
## Outlet_IdentifierOUT027       481.8333714
## Outlet_IdentifierOUT035        83.9596162
## Outlet_IdentifierOUT045       177.5334006
## Outlet_IdentifierOUT046        -8.8035524
## Outlet_IdentifierOUT049       120.0868649
## Outlet_TypeSupermarket Type1  518.6908330
## Outlet_TypeSupermarket Type2  203.9974049
## Outlet_TypeSupermarket Type3  479.7755872
## Outlet_Size_num              -218.0322841
## Outlet_Location_Type_num      112.6411869

Output di atas merupakan nilai koefisien dari setiap peubah bebas terhadap peubah respons (Sales). Dapat terlihat bahwa Peubah Item_MRP merupakan peubah dengan koefisien positif tertinggi yang berpengaruh terhadap model. Sehingga dapat disimpulkan bahwa peubah ini merupakan peubah yang paling berpengaruh terhadap peubah respons jika dibandingkan peubah bebas lainnya.

Nilai keakuratan prediksi dan Koefisien determinasi

# Compute R^2 from true and predicted values
eval_results <- function(true, predicted, df) {
  SSE <- sum((predicted - true)^2)
  SST <- sum((true - mean(true))^2)
  R_square <- 1 - SSE / SST
  RMSE = sqrt(SSE/nrow(df))
 
  # Model performance metrics
  data.frame(RMSE = RMSE,
             Rsquare = R_square)
}

# Prediction and evaluation on train data
predictions_train <- predict(ridge_reg, s = optimal_lambda, newx = train[,-1])
eval_results(train[,1], predictions_train, train)

Dari hasil di atas, didapat nilai koefisien determinasi sebesar 56.32%. Dapat terlihat pula bahwa cara 2 ini memiliki Rata-rata skor validasi model RMSE sebesar 1140.715. Nilai ini sedikit lebih tinggi dibandingkan model pada cara 1 yaitu 1133.019.

Keakuratan data testing

test <- as.matrix(test)
predictions_test <- predict(ridge_reg, s = optimal_lambda, newx = test[,-1])
eval_results(test[,1], predictions_test, test)

Dari hasil di atas, didapat nilai koefisien determinasi sebesar 56.21% dan RMSE 1097.26. Hasil ini tidak terlalu berbeda jauh dengan data training. Artinya, tidak terdapat overfitting/underfitting pada training model.

LASSO Regression

“LASSO” merupakan akronim dari Least Absolute Shrinkage and Selection Operator. Regresi Lasso adalah algoritma klasifikasi yang menggunakan shrinkage pada dalam model sederhana dan model sparse (model dengan parameter yang lebih sedikit). Dalam Shrinkage/penyusutan, nilai data menyusut menuju titik pusat seperti rata-rata. Regresi Lasso sangat mirip dengan regresi ridge, yaitu sama-sama baik digunakan ketika model memiliki multikolinearitas yang tinggi. Perbedaan yang mencolok antara kedua model ini adalah pada nilai alpha (0 pada ridge dan 1 pada lasso). Nilai alpha ini berdampak terhadap pemilihan peubah, dengan regresi lasso merupakan regresi yang dapat memilih peubah penting saja sedangkan regresi ridge memasukan semua peubah.

Cara 1

Control Model

Syntax di bawah ini akan membuat variabel control model dengan metode cross-validation berulang, dengan banyaknya folds = 10 dan banyaknya ulangan = 5. Selain itu, pemilihan alpha = 1 pada syntax di bawah diperlukan untuk regresi lasso dan nilai lambda dari 0.001 hingga 0.1 dengan jarak antar lambda 0.0002.

# Model Building : Lasso Regression
set.seed(123)
control = trainControl(method ="repeatedcv", 
                       number = 10,
                       repeats = 5,
                       verboseIter = F) #print iterasi
Grid_la_reg = expand.grid(alpha = 1,
              lambda = seq(0.001, 0.1, by = 0.0002))

Modelling

Kemudian, akan dijalankan model regresi lasso berdasarkan control model di atas:

#fitting Lasso Regression model
lasso_model = train(x = data[, -c("Item_Identifier",
                               "Item_Outlet_Sales")],
                    y = data$Item_Outlet_Sales,
                    method = "glmnet",
                    trControl = control,
                    tuneGrid = Grid_la_reg
                    )
lasso_model
## glmnet 
## 
## 8523 samples
##   21 predictor
## 
## No pre-processing
## Resampling: Cross-Validated (10 fold, repeated 5 times) 
## Summary of sample sizes: 7671, 7670, 7670, 7670, 7671, 7671, ... 
## Resampling results across tuning parameters:
## 
##   lambda  RMSE      Rsquared   MAE     
##   0.0010  1128.862  0.5626525  837.2839
##   0.0012  1128.862  0.5626525  837.2839
##   0.0014  1128.862  0.5626525  837.2839
##   0.0016  1128.862  0.5626525  837.2839
##   0.0018  1128.862  0.5626525  837.2839
##   0.0020  1128.862  0.5626525  837.2839
##   0.0022  1128.862  0.5626525  837.2839
##   0.0024  1128.862  0.5626525  837.2839
##   0.0026  1128.862  0.5626525  837.2839
##   0.0028  1128.862  0.5626525  837.2839
##   0.0030  1128.862  0.5626525  837.2839
##   0.0032  1128.862  0.5626525  837.2839
##   0.0034  1128.862  0.5626525  837.2839
##   0.0036  1128.862  0.5626525  837.2839
##   0.0038  1128.862  0.5626525  837.2839
##   0.0040  1128.862  0.5626525  837.2839
##   0.0042  1128.862  0.5626525  837.2839
##   0.0044  1128.862  0.5626525  837.2839
##   0.0046  1128.862  0.5626525  837.2839
##   0.0048  1128.862  0.5626525  837.2839
##   0.0050  1128.862  0.5626525  837.2839
##   0.0052  1128.862  0.5626525  837.2839
##   0.0054  1128.862  0.5626525  837.2839
##   0.0056  1128.862  0.5626525  837.2839
##   0.0058  1128.862  0.5626525  837.2839
##   0.0060  1128.862  0.5626525  837.2839
##   0.0062  1128.862  0.5626525  837.2839
##   0.0064  1128.862  0.5626525  837.2839
##   0.0066  1128.862  0.5626525  837.2839
##   0.0068  1128.862  0.5626525  837.2839
##   0.0070  1128.862  0.5626525  837.2839
##   0.0072  1128.862  0.5626525  837.2839
##   0.0074  1128.862  0.5626525  837.2839
##   0.0076  1128.862  0.5626525  837.2839
##   0.0078  1128.862  0.5626525  837.2839
##   0.0080  1128.862  0.5626525  837.2839
##   0.0082  1128.862  0.5626525  837.2839
##   0.0084  1128.862  0.5626525  837.2839
##   0.0086  1128.862  0.5626525  837.2839
##   0.0088  1128.862  0.5626525  837.2839
##   0.0090  1128.862  0.5626525  837.2839
##   0.0092  1128.862  0.5626525  837.2839
##   0.0094  1128.862  0.5626525  837.2839
##   0.0096  1128.862  0.5626525  837.2839
##   0.0098  1128.862  0.5626525  837.2839
##   0.0100  1128.862  0.5626525  837.2839
##   0.0102  1128.862  0.5626525  837.2839
##   0.0104  1128.862  0.5626525  837.2839
##   0.0106  1128.862  0.5626525  837.2839
##   0.0108  1128.862  0.5626525  837.2839
##   0.0110  1128.862  0.5626525  837.2839
##   0.0112  1128.862  0.5626525  837.2839
##   0.0114  1128.862  0.5626525  837.2839
##   0.0116  1128.862  0.5626525  837.2839
##   0.0118  1128.862  0.5626525  837.2839
##   0.0120  1128.862  0.5626525  837.2839
##   0.0122  1128.862  0.5626525  837.2839
##   0.0124  1128.862  0.5626525  837.2839
##   0.0126  1128.862  0.5626525  837.2839
##   0.0128  1128.862  0.5626525  837.2839
##   0.0130  1128.862  0.5626525  837.2839
##   0.0132  1128.862  0.5626525  837.2839
##   0.0134  1128.862  0.5626525  837.2839
##   0.0136  1128.862  0.5626525  837.2839
##   0.0138  1128.862  0.5626525  837.2839
##   0.0140  1128.862  0.5626525  837.2839
##   0.0142  1128.862  0.5626525  837.2839
##   0.0144  1128.862  0.5626525  837.2839
##   0.0146  1128.862  0.5626525  837.2839
##   0.0148  1128.862  0.5626525  837.2839
##   0.0150  1128.862  0.5626525  837.2839
##   0.0152  1128.862  0.5626525  837.2839
##   0.0154  1128.862  0.5626525  837.2839
##   0.0156  1128.862  0.5626525  837.2839
##   0.0158  1128.862  0.5626525  837.2839
##   0.0160  1128.862  0.5626525  837.2839
##   0.0162  1128.862  0.5626525  837.2839
##   0.0164  1128.862  0.5626525  837.2839
##   0.0166  1128.862  0.5626525  837.2839
##   0.0168  1128.862  0.5626525  837.2839
##   0.0170  1128.862  0.5626525  837.2839
##   0.0172  1128.862  0.5626525  837.2839
##   0.0174  1128.862  0.5626525  837.2839
##   0.0176  1128.862  0.5626525  837.2839
##   0.0178  1128.862  0.5626525  837.2839
##   0.0180  1128.862  0.5626525  837.2839
##   0.0182  1128.862  0.5626525  837.2839
##   0.0184  1128.862  0.5626525  837.2839
##   0.0186  1128.862  0.5626525  837.2839
##   0.0188  1128.862  0.5626525  837.2839
##   0.0190  1128.862  0.5626525  837.2839
##   0.0192  1128.862  0.5626525  837.2839
##   0.0194  1128.862  0.5626525  837.2839
##   0.0196  1128.862  0.5626525  837.2839
##   0.0198  1128.862  0.5626525  837.2839
##   0.0200  1128.862  0.5626525  837.2839
##   0.0202  1128.862  0.5626525  837.2839
##   0.0204  1128.862  0.5626525  837.2839
##   0.0206  1128.862  0.5626525  837.2839
##   0.0208  1128.862  0.5626525  837.2839
##   0.0210  1128.862  0.5626525  837.2839
##   0.0212  1128.862  0.5626525  837.2839
##   0.0214  1128.862  0.5626525  837.2839
##   0.0216  1128.862  0.5626525  837.2839
##   0.0218  1128.862  0.5626525  837.2839
##   0.0220  1128.862  0.5626525  837.2839
##   0.0222  1128.862  0.5626525  837.2839
##   0.0224  1128.862  0.5626525  837.2839
##   0.0226  1128.862  0.5626525  837.2839
##   0.0228  1128.862  0.5626525  837.2839
##   0.0230  1128.862  0.5626525  837.2839
##   0.0232  1128.862  0.5626525  837.2839
##   0.0234  1128.862  0.5626525  837.2839
##   0.0236  1128.862  0.5626525  837.2839
##   0.0238  1128.862  0.5626525  837.2839
##   0.0240  1128.862  0.5626525  837.2839
##   0.0242  1128.862  0.5626525  837.2839
##   0.0244  1128.862  0.5626525  837.2839
##   0.0246  1128.862  0.5626525  837.2839
##   0.0248  1128.862  0.5626525  837.2839
##   0.0250  1128.862  0.5626525  837.2839
##   0.0252  1128.862  0.5626525  837.2839
##   0.0254  1128.862  0.5626525  837.2839
##   0.0256  1128.862  0.5626525  837.2839
##   0.0258  1128.862  0.5626525  837.2839
##   0.0260  1128.862  0.5626525  837.2839
##   0.0262  1128.862  0.5626525  837.2839
##   0.0264  1128.862  0.5626525  837.2839
##   0.0266  1128.862  0.5626525  837.2839
##   0.0268  1128.862  0.5626525  837.2839
##   0.0270  1128.862  0.5626525  837.2839
##   0.0272  1128.862  0.5626525  837.2839
##   0.0274  1128.862  0.5626525  837.2839
##   0.0276  1128.862  0.5626525  837.2839
##   0.0278  1128.862  0.5626525  837.2839
##   0.0280  1128.862  0.5626525  837.2839
##   0.0282  1128.862  0.5626525  837.2839
##   0.0284  1128.862  0.5626525  837.2839
##   0.0286  1128.862  0.5626525  837.2839
##   0.0288  1128.862  0.5626525  837.2839
##   0.0290  1128.862  0.5626525  837.2839
##   0.0292  1128.862  0.5626525  837.2839
##   0.0294  1128.862  0.5626525  837.2839
##   0.0296  1128.862  0.5626525  837.2839
##   0.0298  1128.862  0.5626525  837.2839
##   0.0300  1128.862  0.5626525  837.2839
##   0.0302  1128.862  0.5626525  837.2839
##   0.0304  1128.862  0.5626525  837.2839
##   0.0306  1128.862  0.5626525  837.2839
##   0.0308  1128.862  0.5626525  837.2839
##   0.0310  1128.862  0.5626525  837.2839
##   0.0312  1128.862  0.5626525  837.2839
##   0.0314  1128.862  0.5626525  837.2839
##   0.0316  1128.862  0.5626525  837.2839
##   0.0318  1128.862  0.5626525  837.2839
##   0.0320  1128.862  0.5626525  837.2839
##   0.0322  1128.862  0.5626525  837.2839
##   0.0324  1128.862  0.5626525  837.2839
##   0.0326  1128.862  0.5626525  837.2839
##   0.0328  1128.862  0.5626525  837.2839
##   0.0330  1128.862  0.5626525  837.2839
##   0.0332  1128.862  0.5626525  837.2839
##   0.0334  1128.862  0.5626525  837.2839
##   0.0336  1128.862  0.5626525  837.2839
##   0.0338  1128.862  0.5626525  837.2839
##   0.0340  1128.862  0.5626525  837.2839
##   0.0342  1128.862  0.5626525  837.2839
##   0.0344  1128.862  0.5626525  837.2839
##   0.0346  1128.862  0.5626525  837.2839
##   0.0348  1128.862  0.5626525  837.2839
##   0.0350  1128.862  0.5626525  837.2839
##   0.0352  1128.862  0.5626525  837.2839
##   0.0354  1128.862  0.5626525  837.2839
##   0.0356  1128.862  0.5626525  837.2839
##   0.0358  1128.862  0.5626525  837.2839
##   0.0360  1128.862  0.5626525  837.2839
##   0.0362  1128.862  0.5626525  837.2839
##   0.0364  1128.862  0.5626525  837.2839
##   0.0366  1128.862  0.5626525  837.2839
##   0.0368  1128.862  0.5626525  837.2839
##   0.0370  1128.862  0.5626525  837.2839
##   0.0372  1128.862  0.5626525  837.2839
##   0.0374  1128.862  0.5626525  837.2839
##   0.0376  1128.862  0.5626525  837.2839
##   0.0378  1128.862  0.5626525  837.2839
##   0.0380  1128.862  0.5626525  837.2839
##   0.0382  1128.862  0.5626525  837.2839
##   0.0384  1128.862  0.5626525  837.2839
##   0.0386  1128.862  0.5626525  837.2839
##   0.0388  1128.862  0.5626525  837.2839
##   0.0390  1128.862  0.5626525  837.2839
##   0.0392  1128.862  0.5626525  837.2839
##   0.0394  1128.862  0.5626525  837.2839
##   0.0396  1128.862  0.5626525  837.2839
##   0.0398  1128.862  0.5626525  837.2839
##   0.0400  1128.862  0.5626525  837.2839
##   0.0402  1128.862  0.5626525  837.2839
##   0.0404  1128.862  0.5626525  837.2839
##   0.0406  1128.862  0.5626525  837.2839
##   0.0408  1128.862  0.5626525  837.2839
##   0.0410  1128.862  0.5626525  837.2839
##   0.0412  1128.862  0.5626525  837.2839
##   0.0414  1128.862  0.5626525  837.2839
##   0.0416  1128.862  0.5626525  837.2839
##   0.0418  1128.862  0.5626525  837.2839
##   0.0420  1128.862  0.5626525  837.2839
##   0.0422  1128.862  0.5626525  837.2839
##   0.0424  1128.862  0.5626525  837.2839
##   0.0426  1128.862  0.5626525  837.2839
##   0.0428  1128.862  0.5626525  837.2839
##   0.0430  1128.862  0.5626525  837.2839
##   0.0432  1128.862  0.5626525  837.2839
##   0.0434  1128.862  0.5626525  837.2839
##   0.0436  1128.862  0.5626525  837.2839
##   0.0438  1128.862  0.5626525  837.2839
##   0.0440  1128.862  0.5626525  837.2839
##   0.0442  1128.862  0.5626525  837.2839
##   0.0444  1128.862  0.5626525  837.2839
##   0.0446  1128.862  0.5626525  837.2839
##   0.0448  1128.862  0.5626525  837.2839
##   0.0450  1128.862  0.5626525  837.2839
##   0.0452  1128.862  0.5626525  837.2839
##   0.0454  1128.862  0.5626525  837.2839
##   0.0456  1128.862  0.5626525  837.2839
##   0.0458  1128.862  0.5626525  837.2839
##   0.0460  1128.862  0.5626525  837.2839
##   0.0462  1128.862  0.5626525  837.2839
##   0.0464  1128.862  0.5626525  837.2839
##   0.0466  1128.862  0.5626525  837.2839
##   0.0468  1128.862  0.5626525  837.2839
##   0.0470  1128.862  0.5626525  837.2839
##   0.0472  1128.862  0.5626525  837.2839
##   0.0474  1128.862  0.5626525  837.2839
##   0.0476  1128.862  0.5626525  837.2839
##   0.0478  1128.862  0.5626525  837.2839
##   0.0480  1128.862  0.5626525  837.2839
##   0.0482  1128.862  0.5626525  837.2839
##   0.0484  1128.862  0.5626525  837.2839
##   0.0486  1128.862  0.5626525  837.2839
##   0.0488  1128.862  0.5626525  837.2839
##   0.0490  1128.862  0.5626525  837.2839
##   0.0492  1128.862  0.5626525  837.2839
##   0.0494  1128.862  0.5626525  837.2839
##   0.0496  1128.862  0.5626525  837.2839
##   0.0498  1128.862  0.5626525  837.2839
##   0.0500  1128.862  0.5626525  837.2839
##   0.0502  1128.862  0.5626525  837.2839
##   0.0504  1128.862  0.5626525  837.2839
##   0.0506  1128.862  0.5626525  837.2839
##   0.0508  1128.862  0.5626525  837.2839
##   0.0510  1128.862  0.5626525  837.2839
##   0.0512  1128.862  0.5626525  837.2839
##   0.0514  1128.862  0.5626525  837.2839
##   0.0516  1128.862  0.5626525  837.2839
##   0.0518  1128.862  0.5626525  837.2839
##   0.0520  1128.862  0.5626525  837.2839
##   0.0522  1128.862  0.5626525  837.2839
##   0.0524  1128.862  0.5626525  837.2839
##   0.0526  1128.862  0.5626525  837.2839
##   0.0528  1128.862  0.5626525  837.2839
##   0.0530  1128.862  0.5626525  837.2839
##   0.0532  1128.862  0.5626525  837.2839
##   0.0534  1128.862  0.5626525  837.2839
##   0.0536  1128.862  0.5626525  837.2839
##   0.0538  1128.862  0.5626525  837.2839
##   0.0540  1128.862  0.5626525  837.2839
##   0.0542  1128.862  0.5626525  837.2839
##   0.0544  1128.862  0.5626525  837.2839
##   0.0546  1128.862  0.5626525  837.2839
##   0.0548  1128.862  0.5626525  837.2839
##   0.0550  1128.862  0.5626525  837.2839
##   0.0552  1128.862  0.5626525  837.2839
##   0.0554  1128.862  0.5626525  837.2839
##   0.0556  1128.862  0.5626525  837.2839
##   0.0558  1128.862  0.5626525  837.2839
##   0.0560  1128.862  0.5626525  837.2839
##   0.0562  1128.862  0.5626525  837.2839
##   0.0564  1128.862  0.5626525  837.2839
##   0.0566  1128.862  0.5626525  837.2839
##   0.0568  1128.862  0.5626525  837.2839
##   0.0570  1128.862  0.5626525  837.2839
##   0.0572  1128.862  0.5626525  837.2839
##   0.0574  1128.862  0.5626525  837.2839
##   0.0576  1128.862  0.5626525  837.2839
##   0.0578  1128.862  0.5626525  837.2839
##   0.0580  1128.862  0.5626525  837.2839
##   0.0582  1128.862  0.5626525  837.2839
##   0.0584  1128.862  0.5626525  837.2839
##   0.0586  1128.862  0.5626525  837.2839
##   0.0588  1128.862  0.5626525  837.2839
##   0.0590  1128.862  0.5626525  837.2839
##   0.0592  1128.862  0.5626525  837.2839
##   0.0594  1128.862  0.5626525  837.2839
##   0.0596  1128.862  0.5626525  837.2839
##   0.0598  1128.862  0.5626525  837.2839
##   0.0600  1128.862  0.5626525  837.2839
##   0.0602  1128.862  0.5626525  837.2839
##   0.0604  1128.862  0.5626525  837.2839
##   0.0606  1128.862  0.5626525  837.2839
##   0.0608  1128.862  0.5626525  837.2839
##   0.0610  1128.862  0.5626525  837.2839
##   0.0612  1128.862  0.5626525  837.2839
##   0.0614  1128.862  0.5626525  837.2839
##   0.0616  1128.862  0.5626525  837.2839
##   0.0618  1128.862  0.5626525  837.2839
##   0.0620  1128.862  0.5626525  837.2839
##   0.0622  1128.862  0.5626525  837.2839
##   0.0624  1128.862  0.5626525  837.2839
##   0.0626  1128.862  0.5626525  837.2839
##   0.0628  1128.862  0.5626525  837.2839
##   0.0630  1128.862  0.5626525  837.2839
##   0.0632  1128.862  0.5626525  837.2839
##   0.0634  1128.862  0.5626525  837.2839
##   0.0636  1128.862  0.5626525  837.2839
##   0.0638  1128.862  0.5626525  837.2839
##   0.0640  1128.862  0.5626525  837.2839
##   0.0642  1128.862  0.5626525  837.2839
##   0.0644  1128.862  0.5626525  837.2839
##   0.0646  1128.862  0.5626525  837.2839
##   0.0648  1128.862  0.5626525  837.2839
##   0.0650  1128.862  0.5626525  837.2839
##   0.0652  1128.862  0.5626525  837.2839
##   0.0654  1128.862  0.5626525  837.2839
##   0.0656  1128.862  0.5626525  837.2839
##   0.0658  1128.862  0.5626525  837.2839
##   0.0660  1128.862  0.5626525  837.2839
##   0.0662  1128.862  0.5626525  837.2839
##   0.0664  1128.862  0.5626525  837.2839
##   0.0666  1128.862  0.5626525  837.2839
##   0.0668  1128.862  0.5626525  837.2839
##   0.0670  1128.862  0.5626525  837.2839
##   0.0672  1128.862  0.5626525  837.2839
##   0.0674  1128.862  0.5626525  837.2839
##   0.0676  1128.862  0.5626525  837.2839
##   0.0678  1128.862  0.5626525  837.2839
##   0.0680  1128.862  0.5626525  837.2839
##   0.0682  1128.862  0.5626525  837.2839
##   0.0684  1128.862  0.5626525  837.2839
##   0.0686  1128.862  0.5626525  837.2839
##   0.0688  1128.862  0.5626525  837.2839
##   0.0690  1128.862  0.5626525  837.2839
##   0.0692  1128.862  0.5626525  837.2839
##   0.0694  1128.862  0.5626525  837.2839
##   0.0696  1128.862  0.5626525  837.2839
##   0.0698  1128.862  0.5626525  837.2839
##   0.0700  1128.862  0.5626525  837.2839
##   0.0702  1128.862  0.5626525  837.2839
##   0.0704  1128.862  0.5626525  837.2839
##   0.0706  1128.862  0.5626525  837.2839
##   0.0708  1128.862  0.5626525  837.2839
##   0.0710  1128.862  0.5626525  837.2839
##   0.0712  1128.862  0.5626525  837.2839
##   0.0714  1128.862  0.5626525  837.2839
##   0.0716  1128.862  0.5626525  837.2839
##   0.0718  1128.862  0.5626525  837.2839
##   0.0720  1128.862  0.5626525  837.2839
##   0.0722  1128.862  0.5626525  837.2839
##   0.0724  1128.862  0.5626525  837.2839
##   0.0726  1128.862  0.5626525  837.2839
##   0.0728  1128.862  0.5626525  837.2839
##   0.0730  1128.862  0.5626525  837.2839
##   0.0732  1128.862  0.5626525  837.2839
##   0.0734  1128.862  0.5626525  837.2839
##   0.0736  1128.862  0.5626525  837.2839
##   0.0738  1128.862  0.5626525  837.2839
##   0.0740  1128.862  0.5626525  837.2839
##   0.0742  1128.862  0.5626525  837.2839
##   0.0744  1128.862  0.5626525  837.2839
##   0.0746  1128.862  0.5626525  837.2839
##   0.0748  1128.862  0.5626525  837.2839
##   0.0750  1128.862  0.5626525  837.2839
##   0.0752  1128.862  0.5626525  837.2839
##   0.0754  1128.862  0.5626525  837.2839
##   0.0756  1128.862  0.5626525  837.2839
##   0.0758  1128.862  0.5626525  837.2839
##   0.0760  1128.862  0.5626525  837.2839
##   0.0762  1128.862  0.5626525  837.2839
##   0.0764  1128.862  0.5626525  837.2839
##   0.0766  1128.862  0.5626525  837.2839
##   0.0768  1128.862  0.5626525  837.2839
##   0.0770  1128.862  0.5626525  837.2839
##   0.0772  1128.862  0.5626525  837.2839
##   0.0774  1128.862  0.5626525  837.2839
##   0.0776  1128.862  0.5626525  837.2839
##   0.0778  1128.862  0.5626525  837.2839
##   0.0780  1128.862  0.5626525  837.2839
##   0.0782  1128.862  0.5626525  837.2839
##   0.0784  1128.862  0.5626525  837.2839
##   0.0786  1128.862  0.5626525  837.2839
##   0.0788  1128.862  0.5626525  837.2839
##   0.0790  1128.862  0.5626525  837.2839
##   0.0792  1128.862  0.5626525  837.2839
##   0.0794  1128.862  0.5626525  837.2839
##   0.0796  1128.862  0.5626525  837.2839
##   0.0798  1128.862  0.5626525  837.2839
##   0.0800  1128.862  0.5626525  837.2839
##   0.0802  1128.862  0.5626525  837.2839
##   0.0804  1128.862  0.5626525  837.2839
##   0.0806  1128.862  0.5626525  837.2839
##   0.0808  1128.862  0.5626525  837.2839
##   0.0810  1128.862  0.5626525  837.2839
##   0.0812  1128.862  0.5626525  837.2839
##   0.0814  1128.862  0.5626525  837.2839
##   0.0816  1128.862  0.5626525  837.2839
##   0.0818  1128.862  0.5626525  837.2839
##   0.0820  1128.862  0.5626525  837.2839
##   0.0822  1128.862  0.5626525  837.2839
##   0.0824  1128.862  0.5626525  837.2839
##   0.0826  1128.862  0.5626525  837.2839
##   0.0828  1128.862  0.5626525  837.2839
##   0.0830  1128.862  0.5626525  837.2839
##   0.0832  1128.862  0.5626525  837.2839
##   0.0834  1128.862  0.5626525  837.2839
##   0.0836  1128.862  0.5626525  837.2839
##   0.0838  1128.862  0.5626525  837.2839
##   0.0840  1128.862  0.5626525  837.2839
##   0.0842  1128.862  0.5626525  837.2839
##   0.0844  1128.862  0.5626525  837.2839
##   0.0846  1128.862  0.5626525  837.2839
##   0.0848  1128.862  0.5626525  837.2839
##   0.0850  1128.862  0.5626525  837.2839
##   0.0852  1128.862  0.5626525  837.2839
##   0.0854  1128.862  0.5626525  837.2839
##   0.0856  1128.862  0.5626525  837.2839
##   0.0858  1128.862  0.5626525  837.2839
##   0.0860  1128.862  0.5626525  837.2839
##   0.0862  1128.862  0.5626525  837.2839
##   0.0864  1128.862  0.5626525  837.2839
##   0.0866  1128.862  0.5626525  837.2839
##   0.0868  1128.862  0.5626525  837.2839
##   0.0870  1128.862  0.5626525  837.2839
##   0.0872  1128.862  0.5626525  837.2839
##   0.0874  1128.862  0.5626525  837.2839
##   0.0876  1128.862  0.5626525  837.2839
##   0.0878  1128.862  0.5626525  837.2839
##   0.0880  1128.862  0.5626525  837.2839
##   0.0882  1128.862  0.5626525  837.2839
##   0.0884  1128.862  0.5626525  837.2839
##   0.0886  1128.862  0.5626525  837.2839
##   0.0888  1128.862  0.5626525  837.2839
##   0.0890  1128.862  0.5626525  837.2839
##   0.0892  1128.862  0.5626525  837.2839
##   0.0894  1128.862  0.5626525  837.2839
##   0.0896  1128.862  0.5626525  837.2839
##   0.0898  1128.862  0.5626525  837.2839
##   0.0900  1128.862  0.5626525  837.2839
##   0.0902  1128.862  0.5626525  837.2839
##   0.0904  1128.862  0.5626525  837.2839
##   0.0906  1128.862  0.5626525  837.2839
##   0.0908  1128.862  0.5626525  837.2839
##   0.0910  1128.862  0.5626525  837.2839
##   0.0912  1128.862  0.5626525  837.2839
##   0.0914  1128.862  0.5626525  837.2839
##   0.0916  1128.862  0.5626525  837.2839
##   0.0918  1128.862  0.5626525  837.2839
##   0.0920  1128.862  0.5626525  837.2839
##   0.0922  1128.862  0.5626525  837.2839
##   0.0924  1128.862  0.5626525  837.2839
##   0.0926  1128.862  0.5626525  837.2839
##   0.0928  1128.862  0.5626525  837.2839
##   0.0930  1128.862  0.5626525  837.2839
##   0.0932  1128.862  0.5626525  837.2839
##   0.0934  1128.862  0.5626525  837.2839
##   0.0936  1128.862  0.5626525  837.2839
##   0.0938  1128.862  0.5626525  837.2839
##   0.0940  1128.862  0.5626525  837.2839
##   0.0942  1128.862  0.5626525  837.2839
##   0.0944  1128.862  0.5626525  837.2839
##   0.0946  1128.862  0.5626525  837.2839
##   0.0948  1128.862  0.5626525  837.2839
##   0.0950  1128.862  0.5626525  837.2839
##   0.0952  1128.862  0.5626525  837.2839
##   0.0954  1128.862  0.5626525  837.2839
##   0.0956  1128.862  0.5626525  837.2839
##   0.0958  1128.862  0.5626525  837.2839
##   0.0960  1128.862  0.5626525  837.2839
##   0.0962  1128.862  0.5626525  837.2839
##   0.0964  1128.862  0.5626525  837.2839
##   0.0966  1128.862  0.5626525  837.2839
##   0.0968  1128.862  0.5626525  837.2839
##   0.0970  1128.862  0.5626525  837.2839
##   0.0972  1128.862  0.5626525  837.2839
##   0.0974  1128.862  0.5626525  837.2839
##   0.0976  1128.862  0.5626525  837.2839
##   0.0978  1128.862  0.5626525  837.2839
##   0.0980  1128.862  0.5626525  837.2839
##   0.0982  1128.862  0.5626525  837.2839
##   0.0984  1128.862  0.5626525  837.2839
##   0.0986  1128.862  0.5626525  837.2839
##   0.0988  1128.862  0.5626525  837.2839
##   0.0990  1128.862  0.5626525  837.2839
##   0.0992  1128.862  0.5626525  837.2839
##   0.0994  1128.862  0.5626525  837.2839
##   0.0996  1128.862  0.5626525  837.2839
##   0.0998  1128.862  0.5626525  837.2839
##   0.1000  1128.862  0.5626525  837.2839
## 
## Tuning parameter 'alpha' was held constant at a value of 1
## RMSE was used to select the optimal model using the smallest value.
## The final values used for the model were alpha = 1 and lambda = 0.1.

Model regresi Lasso menggunakan nilai alpha sebesar 1 dan nilai lambda sebesar 0,1. RMSE digunakan untuk memilih model optimal dengan menggunakan nilai RMSE terkecil.

# mean validation score
mean(lasso_model$resample$RMSE)
## [1] 1128.862

Rata-rata skor validasi model adalah 1128.862.

Plot

#plotting the model
plot(lasso_model, main = "Lasso Regression")

Dari plot di atas, dapat terlihat bahwa meskipun parameter regularisasi meningkat, RMSE tetap konstan.

Variable importance

#plotting important variables
plot(varImp(lasso_model,scale=T))

Dari plot di atas, dapat terlihat bahwa peubah item_MRP atau peubah harga eceran tertinggi merupakan peubah paling penting dalam menentukan penjualan suatu produk. Kemudian, peubah yang penting terhadap penjualan suatu produk selanjutnya adalah peubah Outlet_Type, yaitu pada supermarket tipe 1.

Cara 2

Modelling

Cara lain dapat dilakukan dengan fungsi glmnet. Lambda diiterasi dari \(10^2\) sampai pada nilai 0.01 dengan selisih antar lambda = 0.1. Akan dibandingkan hasil prediksi data training dan testing pada cara ini, sehingga data yang digunakan adalah data partisi.

#Ridge Regression with library(glmnet)
lambdas <- 10^seq(2,-3, by=-0.1)
lasso_reg = glmnet(as.matrix(train[,-1]), train[,1], alpha = 1, 
                      lambda = lambdas, standardize = TRUE)
summary(lasso_reg)
##           Length Class     Mode   
## a0          51   -none-    numeric
## beta      1071   dgCMatrix S4     
## df          51   -none-    numeric
## dim          2   -none-    numeric
## lambda      51   -none-    numeric
## dev.ratio   51   -none-    numeric
## nulldev      1   -none-    numeric
## npasses      1   -none-    numeric
## jerr         1   -none-    numeric
## offset       1   -none-    logical
## call         6   -none-    call   
## nobs         1   -none-    numeric
lasso_reg
## 
## Call:  glmnet::glmnet(x = as.matrix(train[, -1]), y = train[, 1], alpha = 1,      lambda = lambdas, standardize = TRUE) 
## 
##    Df  %Dev  Lambda
## 1   5 51.10 100.000
## 2   8 52.95  79.430
## 3   9 54.13  63.100
## 4   9 54.88  50.120
## 5  10 55.36  39.810
## 6  12 55.69  31.620
## 7  13 55.92  25.120
## 8  12 56.06  19.950
## 9  13 56.16  15.850
## 10 13 56.22  12.590
## 11 14 56.26  10.000
## 12 14 56.28   7.943
## 13 16 56.30   6.310
## 14 16 56.31   5.012
## 15 16 56.32   3.981
## 16 17 56.32   3.162
## 17 17 56.32   2.512
## 18 17 56.32   1.995
## 19 17 56.33   1.585
## 20 18 56.33   1.259
## 21 18 56.33   1.000
## 22 18 56.33   0.794
## 23 18 56.33   0.631
## 24 19 56.33   0.501
## 25 19 56.33   0.398
## 26 19 56.33   0.316
## 27 19 56.33   0.251
## 28 19 56.33   0.200
## 29 19 56.33   0.158
## 30 20 56.33   0.126
## 31 20 56.33   0.100
## 32 20 56.33   0.079
## 33 20 56.33   0.063
## 34 20 56.33   0.050
## 35 20 56.33   0.040
## 36 20 56.33   0.032
## 37 20 56.33   0.025
## 38 20 56.33   0.020
## 39 20 56.33   0.016
## 40 20 56.33   0.013
## 41 20 56.33   0.010
## 42 20 56.33   0.008
## 43 20 56.33   0.006
## 44 20 56.33   0.005
## 45 20 56.33   0.004
## 46 20 56.33   0.003
## 47 20 56.33   0.003
## 48 20 56.33   0.002
## 49 20 56.33   0.002
## 50 20 56.33   0.001
## 51 20 56.33   0.001

Tuning hyperparameter

Selanjutnya akan dilakukan tunning parameter dengan cross validation.

set.seed(1)
#tunning parameter lambda dg cv
cv_lasso <- cv.glmnet(train[,-1], train[,1], alpha = 1, lambda = lambdas, standarize=T)
lambda_best <- cv_lasso$lambda.min
lambda_best
## [1] 3.981072

didapatkan lambda optimal sebesar 3.981072

Koefisien Regresi

coef(cv_lasso, s="lambda.min")
## 22 x 1 sparse Matrix of class "dgCMatrix"
##                                       s1
## (Intercept)                  2190.772189
## Item_Weight                     .       
## Item_Fat_Contentlow fat         3.176408
## Item_Fat_ContentLow Fat       -20.047204
## Item_Fat_Contentreg             .       
## Item_Fat_ContentRegular         4.001664
## Item_Visibility               -12.424707
## Item_MRP                      969.818298
## Outlet_IdentifierOUT013         .       
## Outlet_IdentifierOUT017        10.467808
## Outlet_IdentifierOUT018       455.210425
## Outlet_IdentifierOUT019       -16.689346
## Outlet_IdentifierOUT027       597.157719
## Outlet_IdentifierOUT035        33.988801
## Outlet_IdentifierOUT045       -32.303546
## Outlet_IdentifierOUT046        -8.533902
## Outlet_IdentifierOUT049        29.780375
## Outlet_TypeSupermarket Type1  892.157136
## Outlet_TypeSupermarket Type2   14.938496
## Outlet_TypeSupermarket Type3  433.372237
## Outlet_Size_num                 .       
## Outlet_Location_Type_num        .

Hal yang membedakan output di atas dengan model ridge adalah hilangnya koefisien pada peubah yang tidak berpengaruh signifikan terhadap model.

Output di atas merupakan nilai koefisien dari setiap peubah bebas terhadap peubah respons (Sales). Dapat terlihat bahwa Peubah Item_MRP merupakan peubah dengan koefisien positif tertinggi yang berpengaruh terhadap model. Sehingga dapat disimpulkan bahwa peubah ini merupakan peubah yang paling berpengaruh terhadap peubah respons jika dibandingkan peubah bebas lainnya.

Nilai keakuratan prediksi dan Koefisien determinasi

# Prediction and evaluation on train data
predictions_train <- predict(lasso_reg, s = lambda_best, newx = train[,-1])
eval_results(train[,1], predictions_train, train)

Dari hasil di atas, didapat nilai koefisien determinasi sebesar 56.31%. Dapat terlihat pula bahwa cara 2 ini memiliki Rata-rata skor validasi model RMSE sebesar 1140.872. Nilai ini sedikit lebih tinggi dibandingkan model pada cara 1 yaitu 1128.862.

Keakuratan data testing

predictions_test <- predict(lasso_reg, s = lambda_best, newx = test[,-1])
eval_results(test[,1], predictions_test, test)

Dari hasil di atas, didapat nilai koefisien determinasi sebesar 56.21% dan RMSE 1097.24. Hasil ini tidak terlalu berbeda jauh dengan data training. Artinya, tidak terdapat overfitting/underfitting pada training model.

Model Averaging

mod1 <- lm(Item_Outlet_Sales~., data = data[,-1], na.action = na.fail)
#mod2 <- dredge(mod1, m.lim=c(21,22))
# Model 2 di atas tidak dapat dijalankan karena error

Setelah berkali-kali try and error, dan mencari cara ke google. Error global.model di atas akan terus muncul berapapun kali dicoba. Adapun kemungkinan kenapa ini dapat terjadi adalah karena data yang digunakan tidak cocok untuk syntax yang tersedia. Untuk itu, solusi yang dapat dilakukan adalah dengan mengganti data untuk analisis. Data di bawah ini mengikuti data contoh di kuliah dengan beberapa pergantian nilai mean dan sd.

set.seed(123)
x <- cbind(1,matrix(rnorm(100*20,5,3), 100, 20))
e <- matrix(rnorm(100),100,1)
b <- c(1,rep(0:4,each=4))
y <- x%*%b+e

dt.all <- data.frame(y,x[, -1])

Sehingga didapat:

mod1 <- lm(y~.,data=dt.all, na.action = na.fail)
mod2 <- dredge(global.model=mod1, m.lim=c(18,20))
## Fixed term is "(Intercept)"
mod3 <- model.avg(mod2, delta<4)
mod3
## 
## Call:
## model.avg(object = mod2, subset = delta < 4)
## 
## Component models: 
## '2+3+4+5+6+7+8+9+10+11+12+13+14+16+17+18+19+20'    
## '1+2+3+4+5+6+7+8+9+10+11+13+14+16+17+18+19+20'     
## '2+3+4+5+6+7+8+9+10+11+13+14+15+16+17+18+19+20'    
## '1+2+3+4+5+6+7+8+9+10+11+12+13+14+16+17+18+19+20'  
## '1+2+3+4+5+6+7+8+9+10+11+12+13+16+17+18+19+20'     
## '2+3+4+5+6+7+8+9+10+11+12+13+14+15+16+17+18+19+20' 
## '1+2+3+4+5+6+7+8+9+10+11+13+14+15+16+17+18+19+20'  
## '1+2+3+4+5+6+7+8+9+10+11+13+15+16+17+18+19+20'     
## '2+3+4+5+6+7+8+9+10+11+12+13+15+16+17+18+19+20'   
## 
## Coefficients: 
##        (Intercept)      X10      X11      X12      X13      X14      X15
## full      1.071163 2.008017 2.050216 2.006872 2.956322 3.009049 3.011422
## subset    1.071163 2.008017 2.050216 2.006872 2.956322 3.009049 3.011422
##            X16      X17      X18      X19          X2      X20         X3
## full   2.98823 3.988329 3.981979 4.010674 -0.01071991 3.951602 0.05160856
## subset 2.98823 3.988329 3.981979 4.010674 -0.02305327 3.951602 0.06016359
##             X5        X6       X7        X8       X9          X1            X4
## full   1.00839 0.9979606 1.005464 0.9593162 1.996802 -0.01124941 -0.0002600121
## subset 1.00839 0.9979606 1.005464 0.9593162 1.996802 -0.02418151 -0.0006876929
summary(mod3)
## 
## Call:
## model.avg(object = mod2, subset = delta < 4)
## 
## Component model call: 
## lm(formula = y ~ <9 unique rhs>, data = dt.all, na.action = na.fail)
## 
## Component models: 
##                                                  df  logLik   AICc delta weight
## 2+3+4+5+6+7+8+9+10+11+12+13+14+16+17+18+19+20    20 -121.78 294.19  0.00   0.25
## 1+2+3+4+5+6+7+8+9+10+11+13+14+16+17+18+19+20     20 -121.79 294.21  0.03   0.25
## 2+3+4+5+6+7+8+9+10+11+13+14+15+16+17+18+19+20    20 -122.03 294.69  0.50   0.19
## 1+2+3+4+5+6+7+8+9+10+11+12+13+14+16+17+18+19+20  21 -121.50 296.85  2.67   0.07
## 1+2+3+4+5+6+7+8+9+10+11+12+13+16+17+18+19+20     20 -123.22 297.08  2.90   0.06
## 2+3+4+5+6+7+8+9+10+11+12+13+14+15+16+17+18+19+20 21 -121.78 297.40  3.21   0.05
## 1+2+3+4+5+6+7+8+9+10+11+13+14+15+16+17+18+19+20  21 -121.78 297.41  3.23   0.05
## 1+2+3+4+5+6+7+8+9+10+11+13+15+16+17+18+19+20     20 -123.52 297.68  3.49   0.04
## 2+3+4+5+6+7+8+9+10+11+12+13+15+16+17+18+19+20    20 -123.62 297.87  3.68   0.04
## 
## Term codes: 
##  X1 X10 X11 X12 X13 X14 X15 X16 X17 X18 X19  X2 X20  X3  X4  X5  X6  X7  X8  X9 
##   1   2   3   4   5   6   7   8   9  10  11  12  13  14  15  16  17  18  19  20 
## 
## Model-averaged coefficients:  
## (full average) 
##             Estimate Std. Error Adjusted SE z value Pr(>|z|)    
## (Intercept)  1.07116    0.72759     0.73779   1.452    0.147    
## X10          2.00802    0.03333     0.03384  59.343   <2e-16 ***
## X11          2.05022    0.03563     0.03617  56.683   <2e-16 ***
## X12          2.00687    0.03408     0.03460  58.003   <2e-16 ***
## X13          2.95632    0.03693     0.03749  78.865   <2e-16 ***
## X14          3.00905    0.03408     0.03460  86.979   <2e-16 ***
## X15          3.01142    0.03348     0.03399  88.608   <2e-16 ***
## X16          2.98823    0.03905     0.03964  75.393   <2e-16 ***
## X17          3.98833    0.03294     0.03343 119.315   <2e-16 ***
## X18          3.98198    0.03250     0.03300 120.680   <2e-16 ***
## X19          4.01067    0.03172     0.03220 124.560   <2e-16 ***
## X2          -0.01072    0.02665     0.02698   0.397    0.691    
## X20          3.95160    0.03052     0.03099 127.527   <2e-16 ***
## X3           0.05161    0.03861     0.03902   1.323    0.186    
## X5           1.00839    0.03356     0.03407  29.596   <2e-16 ***
## X6           0.99796    0.03628     0.03683  27.097   <2e-16 ***
## X7           1.00546    0.03163     0.03211  31.314   <2e-16 ***
## X8           0.95932    0.03310     0.03360  28.547   <2e-16 ***
## X9           1.99680    0.03060     0.03106  64.289   <2e-16 ***
## X1          -0.01125    0.02764     0.02798   0.402    0.688    
## X4          -0.00026    0.02081     0.02112   0.012    0.990    
##  
## (conditional average) 
##               Estimate Std. Error Adjusted SE z value Pr(>|z|)    
## (Intercept)  1.0711630  0.7275932   0.7377926   1.452   0.1465    
## X10          2.0080173  0.0333318   0.0338374  59.343   <2e-16 ***
## X11          2.0502157  0.0356305   0.0361701  56.683   <2e-16 ***
## X12          2.0068720  0.0340830   0.0345997  58.003   <2e-16 ***
## X13          2.9563223  0.0369275   0.0374859  78.865   <2e-16 ***
## X14          3.0090492  0.0340803   0.0345952  86.979   <2e-16 ***
## X15          3.0114222  0.0334828   0.0339858  88.608   <2e-16 ***
## X16          2.9882304  0.0390479   0.0396356  75.393   <2e-16 ***
## X17          3.9883287  0.0329359   0.0334270 119.315   <2e-16 ***
## X18          3.9819790  0.0325032   0.0329962 120.680   <2e-16 ***
## X19          4.0106737  0.0317181   0.0321987 124.560   <2e-16 ***
## X2          -0.0230533  0.0352635   0.0357996   0.644   0.5196    
## X20          3.9516020  0.0305250   0.0309865 127.527   <2e-16 ***
## X3           0.0601636  0.0349715   0.0355028   1.695   0.0901 .  
## X5           1.0083895  0.0335650   0.0340716  29.596   <2e-16 ***
## X6           0.9979606  0.0362814   0.0368294  27.097   <2e-16 ***
## X7           1.0054642  0.0316295   0.0321091  31.314   <2e-16 ***
## X8           0.9593162  0.0331045   0.0336045  28.547   <2e-16 ***
## X9           1.9968019  0.0305963   0.0310596  64.289   <2e-16 ***
## X1          -0.0241815  0.0364652   0.0370171   0.653   0.5136    
## X4          -0.0006877  0.0338357   0.0343489   0.020   0.9840    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Hasil di atas menunjukkan bahwa model terbaik yang dapat menggambarkan peubah y adalah model dengan peubah X5 hingga X10 pada taraf nyata 5%.

2. Variable Selection

Library

library(tidyverse)
library(mlr3verse)
library(mlr3fselect)
library(DataExplorer)
library(skimr)
library(corrplot)
library(leaps)

library(factoextra)
library(FactoMineR)
library(tidyverse)
library(googlesheets4)

Data

Data yang digunakan pada section ini adalah data sekunder yang diperoleh dari hasil publikasi Kementerian Pendidikan dan Kebudayaan, Badan Pusat Statistik Jawa Barat dan Dinas Kesehatan Provinsi Jawa Barat. Data terdiri dari sepuluh peubah penjelas dan satu peubah respons dari masing-masing kabupaten/kota di Jawa Barat pada tahun 2020. Peubah yang digunakan adalah sebagai berikut:

Data di atas terdiri atas 27 Kabupaten/Kota di Jawa Barat dan bisa dilihat pada link berikut ini: IPM dan faktor-faktornya

gs4_deauth()
ipm <- read_sheet("https://docs.google.com/spreadsheets/d/1vWCtJ2brrMoVPj6u8tTuZJ_PddK2O9thYY90tlyScmc/edit#gid=310882767", skip=1)
## ✔ Reading from "IPM dan faktor-faktornya".
## ✔ Range '2:5000000'.
ipm <- ipm[-c(1:5)]
glimpse(ipm)
## Rows: 27
## Columns: 11
## $ Y   <dbl> 70.40, 66.88, 65.36, 72.39, 66.12, 65.67, 70.49, 69.38, 68.75, 67.…
## $ X1  <dbl> 2246, 596, 590, 2167, 858, 688, 849, 979, 2244, 1005, 760, 852, 85…
## $ X2  <dbl> 71.17, 70.97, 70.13, 73.53, 71.41, 69.47, 71.83, 73.59, 71.99, 70.…
## $ X3  <dbl> 38.78738, 27.28164, 20.98790, 32.11512, 22.01403, 21.32821, 26.607…
## $ X4  <dbl> 8.30, 7.07, 7.18, 8.96, 7.52, 7.35, 7.70, 7.57, 6.92, 7.27, 8.51, …
## $ X5  <dbl> 9295.0122, 9182.9703, 6289.8000, 10555.1102, 10140.9115, 13102.313…
## $ X6  <dbl> 7.648689, 7.088440, 10.354949, 6.879803, 9.966484, 10.338837, 7.60…
## $ X7  <dbl> 29, 9, 5, 10, 7, 2, 6, 12, 12, 5, 3, 11, 9, 11, 25, 50, 9, 1, 23, …
## $ X8  <dbl> 36, 31, 32, 33, 27, 28, 27, 29, 28, 31, 30, 27, 28, 33, 33, 28, 33…
## $ X9  <dbl> 1603.54, 1269.10, 1091.56, 1466.04, 971.39, 1609.53, 1316.56, 899.…
## $ X10 <dbl> 62.65, 61.56, 69.26, 62.20, 61.11, 69.54, 71.41, 61.98, 63.79, 69.…

Exploratory Data Analysis (EDA)

1. Memeriksa Gambaran Umum Data

plot_intro(data = ipm,
           geom_label_args = list(size=2.5))

Dari plot di atas, dapat terlihat bahwa tidak ada peubah diskret (semua peubah merupakan peubah kontinu). Selain itu, dapat terlihat juga bahwa tidak terdapat missing value pada data di atas. Sehingga, tidak perlu penanganan missing value. Catatan:

  • plot_intro merupakan fungsi yang berasal dari package DataExplorer dan argumen utamanya adalah object berbentuk data.frame.
  • argumen geom_label_args bisa diisi dengan opsi-opsi yang ada pada fungsi geom_label pada package ggplot2.

2. Memeriksa Sebaran Data

plot_histogram(data = ipm, nrow=3, ncol = 4,
               geom_histogram_args = list(fill="steelblue")
               )
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.

Dari gambar di atas, dapat terlihat bahwa tidak semua peubah menyebar secara simetris. Seperti peubah X1, X3, dan X7 yang sebaran datanya cenderung menjulur ke kanan.

3. Melihat hubungan linear (korelasi) antar peubah

plot_scatterplot(data = ipm,
                 by="Y", geom_point_args = list(color="steelblue"),
                 nrow=3, ncol = 4)

Dari plot di atas, dapat terlihat bahwa tidak semua peubah X memiliki hubungan linear terhadap Y. Secara eksploratif, dapat dikatakan bahwa peubah X8 dan X9 memiliki hubungan yang sangat lemah terhadap Y.

corrplot(cor(ipm), method = "circle", type = "upper")

Dari plot matriks korelasi di atas, dapat terlihat bahwa tidak semua peubah X memiliki korelasi yang kuat terhadap Y. Peubah yang memiliki korelasi relatif lemah terhadap Y adalah X3, X8, X9, dan X10.

cor_mat <- cor(ipm, method = "spearman")
cor_mat[upper.tri(cor_mat,diag = TRUE)] <- NA 
cor_df <- cor_mat   %>%
    as.data.frame() %>% 
    rownames_to_column(var = "Var1") %>%
  pivot_longer(names_to = "Var2",
               values_to = "corr",
               -Var1) %>% na.omit

cor_df %>% filter(abs(corr)>0.6) %>% arrange(desc(abs(corr)))

Dari tabel di atas, dapat terlihat bahwa peubah X4 dan X1 memiliki korelasi tertinggi terhadap Y. Namun, kedua peubah ini memiliki korelasi tinggi satu sama lain pula, yang dapat berakibat pada timbulnya multikolinearitas.

Seleksi Peubah

Dari eksplorasi yang telah dilakukan, dapat dikatakan bahwa masih banyak peubah yang tidak memenuhi kriteria untuk dijadikan peubah bebas untuk peubah respons Y. Untuk itu, perlu dilakukan seleksi peubah hingga didapat model yang baik yang dapat menggambarkan peubah Y secara efektif dan efisien.

1. Regresi Linear

Akan dibuat model regresi linear terhadap Y sebagai berikut:

regresi1 <- lm(formula = Y~.,data = ipm)
summary(regresi1)
## 
## Call:
## lm(formula = Y ~ ., data = ipm)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -1.8054 -0.3369  0.2418  0.6226  1.1238 
## 
## Coefficients:
##               Estimate Std. Error t value Pr(>|t|)   
## (Intercept)  2.497e+00  2.255e+01   0.111  0.91321   
## X1           1.012e-04  1.216e-04   0.832  0.41778   
## X2           7.365e-01  2.904e-01   2.537  0.02199 * 
## X3           9.801e-03  1.260e-02   0.778  0.44799   
## X4           1.708e+00  4.404e-01   3.878  0.00133 **
## X5          -5.908e-05  1.063e-04  -0.556  0.58589   
## X6          -1.696e-01  1.316e-01  -1.289  0.21578   
## X7           3.782e-02  3.153e-02   1.199  0.24780   
## X8          -5.249e-02  1.060e-01  -0.495  0.62725   
## X9          -7.296e-04  5.906e-04  -1.235  0.23454   
## X10          6.279e-02  6.199e-02   1.013  0.32616   
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 1.151 on 16 degrees of freedom
## Multiple R-squared:  0.9634, Adjusted R-squared:  0.9406 
## F-statistic: 42.16 on 10 and 16 DF,  p-value: 1.385e-09

Berdasarkan uji-t Dari tabel di atas, dapat terlihat bahwa hanya peubah X2 dan X4 yang memiliki pengaruh signifikan terhadap Y.

2. Forward Selection

best_forward <- regsubsets(Y~., data = ipm, method = "forward", nvmax = 100)
summ_forward <- summary(best_forward)
summ_forward$outmat
##           X1  X2  X3  X4  X5  X6  X7  X8  X9  X10
## 1  ( 1 )  " " " " " " "*" " " " " " " " " " " " "
## 2  ( 1 )  " " "*" " " "*" " " " " " " " " " " " "
## 3  ( 1 )  " " "*" "*" "*" " " " " " " " " " " " "
## 4  ( 1 )  "*" "*" "*" "*" " " " " " " " " " " " "
## 5  ( 1 )  "*" "*" "*" "*" " " " " " " " " " " "*"
## 6  ( 1 )  "*" "*" "*" "*" " " "*" " " " " " " "*"
## 7  ( 1 )  "*" "*" "*" "*" "*" "*" " " " " " " "*"
## 8  ( 1 )  "*" "*" "*" "*" "*" "*" "*" " " " " "*"
## 9  ( 1 )  "*" "*" "*" "*" "*" "*" "*" " " "*" "*"
## 10  ( 1 ) "*" "*" "*" "*" "*" "*" "*" "*" "*" "*"

Tabel di atas menunjukkan peubah-peubah yang terpilih untuk setiap kombinasi k peubah yang mungkin (dengan k=1,2,…,10). Misalnya, untuk model dengan 5 peubah: X1, X2, X3, X4, dan X10 merupakan kombinasi peubah terbaik daripada kombinasi 5 peubah lainnya.

result_gof <- data.frame(
  Adj.R2 = c(which.max(summ_forward$adjr2),max(summ_forward$adjr2)),
  CP = c(which.min(summ_forward$cp),min(summ_forward$cp)),
  BIC = c(which.min(summ_forward$bic),min(summ_forward$bic))
)
rownames(result_gof) <- c("Model ke-", "nilai")
result_gof

Dari tabel di atas, terdapat 3 kesimpulan, yaitu:

  1. Berdasarkan adj \(R^2\), model terbaiknya adalah model dengan 7 peubah.
  2. Berdasarkan nilai \(CP\), model terbaiknya adalah model dengan 5 peubah.
  3. Berdasarkan nilai \(BIC\), model terbaiknya adalah model dengan 3 peubah.

Pada umumnya, semakin mudah model untuk diinterpretasikan, maka semakin baik pula model tersebut untuk dipilih. Oleh karena itu, model dengan 3 peubah akan dipilih untuk menjadi model terbaik guna kemudahan interpretasi

coef_forward <- coef(best_forward,result_gof$BIC[1])
enframe(coef_forward) %>% mutate(across(where(is.numeric),                                ~ format(round(.x,3),big.mark=",",scientific=F)))

Hasil di atas merupakan model terbaik yang terpilih berdasarkan forward selection. Sehingga, model yang terbentuk adalah: \[ \hat{Y}=\beta_0+\beta_1X_2+\beta_2X_3+\beta_3X_4\\ \text{atau}\\ \hat{Y}=-13.061+0.885X_2+0.024X_3+2.318X_4 \] Plot di bawah ini dapat menggambarkan lebih jelas bagaimana model di atas terbentuk.

plot_forward <- data.frame(subset=seq_along(summ_forward$bic),
                           BIC = summ_forward$bic)
ggplot(plot_forward,aes(subset,BIC))+
  geom_line(size=1)+
  geom_point(color="darkgreen",size=2)+
  geom_vline(aes(xintercept=result_gof$BIC[1]),
             color="orange",size=1.2)+
  theme_bw()

3. Backward Selection

best_backward <- regsubsets(Y~.,data = ipm,method = "backward",nvmax = 100)
summ_backward <- summary(best_backward)
summ_backward$outmat
##           X1  X2  X3  X4  X5  X6  X7  X8  X9  X10
## 1  ( 1 )  " " " " " " "*" " " " " " " " " " " " "
## 2  ( 1 )  " " "*" " " "*" " " " " " " " " " " " "
## 3  ( 1 )  " " "*" " " "*" " " " " "*" " " " " " "
## 4  ( 1 )  " " "*" " " "*" " " " " "*" " " "*" " "
## 5  ( 1 )  "*" "*" " " "*" " " " " "*" " " "*" " "
## 6  ( 1 )  "*" "*" " " "*" " " " " "*" " " "*" "*"
## 7  ( 1 )  "*" "*" " " "*" " " "*" "*" " " "*" "*"
## 8  ( 1 )  "*" "*" "*" "*" " " "*" "*" " " "*" "*"
## 9  ( 1 )  "*" "*" "*" "*" "*" "*" "*" " " "*" "*"
## 10  ( 1 ) "*" "*" "*" "*" "*" "*" "*" "*" "*" "*"

Tabel di atas menunjukkan peubah-peubah yang terpilih untuk setiap kombinasi k peubah yang mungkin (dengan k=1,2,…,10). Misalnya, untuk model dengan 2 peubah: X2 dan X4 merupakan kombinasi peubah terbaik daripada kombinasi 2 peubah lainnya.

result_gof2 <- data.frame(
  Adj.R2 = c(which.max(summ_backward$adjr2),max(summ_backward$adjr2)),
  CP = c(which.min(summ_backward$cp),min(summ_backward$cp)),
  BIC = c(which.min(summ_backward$bic),min(summ_backward$bic))
)
rownames(result_gof2) <- c("Model ke-", "nilai")
result_gof2

Dari tabel di atas, terdapat 2 kesimpulan, yaitu:

  1. Berdasarkan adj \(R^2\), model terbaiknya adalah model dengan 7 peubah.
  2. Berdasarkan nilai \(CP\) dan \(BIC\), model terbaiknya adalah model dengan 4 peubah.

Pada umumnya, semakin mudah model untuk diinterpretasikan, maka semakin baik pula model tersebut untuk dipilih. Oleh karena itu, model dengan 4 peubah akan dipilih untuk menjadi model terbaik guna kemudahan interpretasi

coef_backward <-  coef(best_backward,result_gof2$BIC[1])
enframe(coef_backward) %>% mutate(across(where(is.numeric),                                ~ format(round(.x,3),big.mark=",",scientific=F)))

Hasil di atas merupakan model terbaik yang terpilih berdasarkan forward selection. Sehingga, model yang terbentuk adalah: \[ \hat{Y}=\beta_0+\beta_1X_2+\beta_2X_4+\beta_3X_7+\beta_4X_9\\ \text{atau}\\ \hat{Y}=0.820+0.720X_2+2.215X_4+.215X_7-0.001X_9 \] Plot di bawah ini dapat menggambarkan lebih jelas bagaimana model di atas terbentuk.

plot_backward <- data.frame(subset=seq_along(summ_backward$bic),
                           BIC = summ_backward$bic)
ggplot(plot_backward,aes(subset,BIC))+
  geom_line(size=1)+
  geom_point(color="darkgreen",size=2)+
  geom_vline(aes(xintercept=result_gof2$BIC[1]),
             color="orange",size=1.2)+
  theme_bw()

3. Unsupervised Learning (Cluster Analysis)

Library

library(ggplot2)
library(factoextra)
library(ggpubr)
## 
## Attaching package: 'ggpubr'
## The following object is masked from 'package:cowplot':
## 
##     get_legend
## The following object is masked from 'package:plyr':
## 
##     mutate
library(wesanderson)

Data

Data yang digunakan pada analisis ini adalah data customer suatu mall yang terdiri atas Customer ID, Gender, Age, Annual Income, dan Spending Score pada setiap customer. Tujuan tugas ini adalah untuk memilih metode segmentasi terbaik untuk mengetahui target pasar yang paling efektif untuk dipilih pihak mall dalam memasarkan produknya. Segmentasi pelanggan merupakan kegiatan mengelompokkan pelanggan menjadi beberapa kelompok berbeda berdasarkan karakteristik umum seperti usia, gender, penghasilan tahunan, tempat tinggal, frekuensi pembelian, dan lainnya. Hasil dari analisis segmentasi pasar ini akan sangat berguna bagi pelaku bisnis dalam menentukan kebijakan berdasarkan karakter tiap-tiap segmen pelanggan.

data <- read.csv("D:/Semester 5/5. Pengantar Sains Data/Data Mall_Customer.csv", sep=";")
tidyr::tibble(data)

Peubah yang terdapat pada data di atas adalah sebagai berikut :

  1. Customer ID: merupakan angka khusus yang digunakan sebagai representasi dari tiap-tiap customer (pelanggan) sehingga tiap customer memiliki ID nya sendiri-sendiri dan berbeda satu sama lain. Dari tabel di atas dapat diketahui bahwa terdapat 200 pelanggan dalam dataset pelanggan mall ini.

  2. Gender (Jenis kelamin): Male (laki-laki) atau Female (perempuan).

  3. Age: umur (dalam tahun)

  4. Annual Income (Pendapatan tahunan) dalam satuan ribu dolar.

  5. Spending score: merupakan skor dalam skala 1 hingga 100 yang ditentukan oleh pihak mall berdasarkan sifat dan kebiasaan belanja dari tiap-tiap pelanggan. Makin tinggi nilainya berarti makin bagus nilai yang diberikan pihak mall terhadap pelanggan tersebut.

Dalam analisis ini, kita hanya tertarik untuk mengelompokkan customer berdasarkan umur, pendapatan tahunan, dan skor pengeluaran.

data.ok = data[,-c(1:2)]
head(data.ok)

Rentang dari masing-masing peubah data di atas berbeda-beda. Karenanya, perlu dilakukan standarisasi data.

scaled_data = scale(data.ok)
head(scaled_data)
##             Age Annual.Income Spending.Score
## [1,] -1.4210029     -1.734646     -0.4337131
## [2,] -1.2778288     -1.734646      1.1927111
## [3,] -1.3494159     -1.696572     -1.7116178
## [4,] -1.1346547     -1.696572      1.0378135
## [5,] -0.5619583     -1.658498     -0.3949887
## [6,] -1.2062418     -1.658498      0.9990891

Secara default, R akan melakukan scaling mengikuti sebaran normal baku.

Penggerombolan HIRARKI

Hierarchical Clustering adalah metode pengelompokan data yang dimulai dengan setiap satu pengamatan sebagai clusternya sendiri kemudian terus mengelompokkan pengamatan ke dalam kelompok yang semakin besar. Tahapan pertama yang dilakukan dalam penggerombolan hirarki yaitu menghitung jarak antara setiap satu pasang amatan dalam kumpulan data. Metode yang digunakan untuk menentukan jarak antar dua amatan bisa bermacam-macam. Dalam analisis kali ini, yang akan digunakan adalah Jarak Euclidean karena data yang digunakan telah distandarisasi menjadi rentang nilai yang sama. Setelah jarak dihitung, langkah selanjutnya adalah menggabungkan pengamatan ke dalam kelompok berdasarkan jarak yang terdekat. Tahap kedua ini diulang sampai semua pengamatan menjadi anggota dari satu kelompok besar. Untuk menentukan seberapa dekat jarak antara dua gerombol, ada beberapa metode yang dapat digunakan, yaitu:

  1. Complete linkage: Berdasarkan jarak maksimum antara titik-titik dari dua gerombol yang berbeda.

  2. Single linkage: Berdasarkan jarak minimum antara titik-titik dari dua gerombol yang berbeda.

  3. Average linkage: Berdasarkan rata-rata jarak antara titik-titik dari dua gerombol yang berbeda.

  4. Centroid linkage: Berdasarkan jarak antara rata-rata dua gerombol yang berbeda.

Akan dibandingkan hasil keempat metode di atas dengan melihat dendogram masing-masing metode penggerombolan.

Pemilihan metode hirarki yang digunakan

Untuk memilih metode terbaik pada penggerombolan hirarki, kita perlu melihat perbandingan dendogram antar metodenya. Ketika suatu metode menghasilkan penggerombolan yang sangat tidak seimbang pada dendogramnya, maka dapat dikatakan bahwa penggerombolannya gagal. Syntax dan output yang dihasilkan adalah sebagai berikut:

#Menampilkan Dendogram
cmp <- fviz_dend(hclust(dist(scaled_data, method = "euclidean"), method = "complete")) + ggtitle("Complete Linkage")
avg <- fviz_dend(hclust(dist(scaled_data, method = "euclidean"), method = "average"))+ ggtitle("Average Linkage")
cen <- fviz_dend(hclust(dist(scaled_data, method = "euclidean"), method = "centroid")) + ggtitle("Centroid Linkage")
sin <- fviz_dend(hclust(dist(scaled_data, method = "euclidean"), method = "single")) + ggtitle("Single Linkage")
ggarrange(cmp, avg, cen, sin,
          ncol = 2, nrow = 2)

Dari output di atas, metode yang menghasilkan clustering yang paling terdistribusi secara sama (evenly distributed) adalah metode average linkage. Untuk itu, akan dilakukan pemilihan banyak cluster berdasarkan metode clustering average linkage.

Pemilihan banyaknya cluster

Ada beberapa metode yang popular digunakan untuk memilih banyak cluster, salah satunya adalah metode silhouette. Koefisien silhouette menduga nilai rata-rata jarak antar cluster. Semakin besar jarak antar cluster, maka semakin baik clustering tersebut. Artinya, semakin besar nilai koefisien silhouette, maka semakin baik clusteringnya. Plot di bawah menunjukkan rata-rata lebar silhouette dari banyak cluster 1 hingga 10.

#Average Linkage
fviz_nbclust(scaled_data, FUNcluster = hcut, method = "silhouette", hc_method = "average", hc_metric="euclidean")

Berdasarkan plot di atas, terlihat bahwa banyaknya cluster yang optimal untuk hclustering metode average linkage sebesar lima cluster.

Clustering

Syntax di bawah ini akan menghasilkan pengelompokkan/penggerombolan data customer menggunakan metode penggerombolan average linkage dengan banyak gerombol yaitu lima.

#Interpretasi, utk melihat anggota dari setiap gerombol
hc.data <- eclust(scaled_data, FUNcluster = "hclust", k=5, hc_method = "average", hc_metric = "euclidean", graph = F)

Cluster vs Order

plot(1:200, hc.data$cluster, xlab="Order", ylab="Cluster", main="Cluster vs Order")

Output di atas memperlihatkan plot cluster terhadap urutan data. Dapat terlihat bahwa data dengan urutan akhir (120-200) cenderung masuk ke cluster ke-4 dan 5, sedangkan data urutan awal masuk ke cluster 1 hingga 3.

Barplot Frekuensi Cluster

tab_h <- as.data.frame(table(hc.data$cluster))
tab_h <- tab_h[order(tab_h$Freq),]
barplot(tab_h$Freq, main="Barplot Frekuensi Cluster", ylab="Frekuensi", xlab="Cluster", col=wes_palette(n=5, name="BottleRocket1"), names.arg = tab_h$Var1)

Dari barplot di atas, dapat terlihat bahwa banyaknya frekuensi untuk setiap cluster tidak terlalu jomplang. Artinya, segmentasi data sudah cukup baik

Cluster Plot

fviz_cluster(hc.data)

Dari cluster plot di atas, dapat terlihat bahwa:

  1. Dim1 dapat menjelaskan 44.3% keragaman dan Dim2 dapat menjelaskan 33.3% keragaman. Artinya, informasi yang diberikan oleh cluster plot di atas sebesar 77.6% dari keseluruhan informasi yang terkandung dalam data.

  2. Data masing-masing cluster tidak terlalu menumpuk satu sama lain. artinya, metode clustering telah baik untuk mengelompokkan setiap data.

Sum Square Within (Error)

Nilai sum square within (Error) akan berguna untuk mendapatkan perbandingan metode clustering terbaik.

X.ss1 <- aggregate(scaled_data, by=list(hc.data$cluster), function(x) sum(scale(x, scale=FALSE)^2))
SS_cluster <- rowSums(X.ss1[-1])
ssw_h <- sum(SS_cluster) 
ssw_h
## [1] 176.1383

Nilai di atas merupakan total nilai SSW/Error untuk masing-masing cluster pada penggerombolan berhirarki.

Penggerombolan NON-HIRARKI (K-Means)

Metode penggerombolan non-hirarki digunakan untuk pengelompokan objek dimana banyaknya cluster yang akan dibentuk dapat ditentukan terlebih dahulu sebagai bagian dari prosedur penggerombolan. K-Means merupakan salah satu metode data clustering non-hirarki yang berusaha mempartisi data yang ada ke dalam bentuk satu atau lebih cluster/kelompok. Metode clustering ini berbasis jarak yang membagi data ke dalam sejumlah cluster yang hanya bekerja pada data numerik.

Pemilihan banyaknya cluster

Seperti yang telah dijelaskan sebelumnya, metode Silhouette akan digunakan untuk memilih banyaknya cluster. Dalam hal ini, digunakan pada metode non hirarki kmeans.

#Penentuan k dengan within sum square
fviz_nbclust(scaled_data, FUNcluster = kmeans, method = "silhouette")

Berdasarkan plot di atas, terlihat bahwa banyaknya cluster yang optimal untuk hclustering metode kmeans sebesar delapan cluster.

Clustering

Syntax di bawah ini akan menghasilkan pengelompokkan/penggerombolan data customer menggunakan metode penggerombolan kmeans dengan banyak gerombol yaitu delapan.

#Ditetapkan k=8
kmeans.data <- eclust(scaled_data, FUNcluster = "kmeans", k=8, graph = F)

Cluster vs Order

plot(1:200, kmeans.data$cluster, xlab="Order", ylab="Cluster", main="Cluster vs Order")

Output di atas memperlihatkan plot cluster terhadap urutan data. Dapat terlihat bahwa data dengan urutan akhir (120-200) cenderung masuk ke cluster ke-1, 2, 4, dan 5, sedangkan data urutan awal masuk ke cluster ke-3, 6, 7, dan 3.

Barplot Frekuensi Cluster

tab_k <- as.data.frame(table(kmeans.data$cluster))
tab_kO <- tab_k[order(tab_k$Freq),]
barplot(tab_kO$Freq, main="Barplot Frekuensi Cluster", ylab="Frekuensi", xlab="Cluster", col=wes_palette(n=5, name="BottleRocket1"), names.arg = tab_kO$Var1)

Dari barplot di atas, dapat terlihat bahwa terdapat cluster yang frekuensinya sangat jomplang dengan cluster lain, yaitu cluster ke-4 dan 7. Namun, ini terjadi karena semakin banyaknya cluster yang digunakan. Selain itu, jika cluster diurutkan berdasarkan frekuensi, maka frekuensi satu cluster dengan satu cluster setelahnya tidak terlalu beda jauh. Artinya, segmentasi data masih dapat diterima.

Cluster Plot

fviz_cluster(kmeans.data)

Dari cluster plot di atas, dapat terlihat bahwa:

  1. Dim1 dapat menjelaskan 44.3% keragaman dan Dim2 dapat menjelaskan 33.3% keragaman. Artinya, informasi yang diberikan oleh cluster plot di atas sebesar 77.6% dari keseluruhan informasi yang terkandung dalam data.

  2. Data masing-masing cluster tidak terlalu menumpuk satu sama lain. artinya, metode clustering telah baik untuk mengelompokkan setiap data.

Sum Square Within (Error)

Nilai sum square within (Error) akan berguna untuk mendapatkan perbandingan metode clustering terbaik.

ssw_k <- kmeans.data$tot.withinss
ssw_k
## [1] 110.2985

Nilai di atas merupakan nilai SSW/Error untuk masing-masing cluster pada penggerombolan berhirarki.

Metode Clustering Terbaik

Pemilihan metode clustering terbaik

Jika dibandingkan berdasarkan plot, metode clustering hirarki dan non-hirarki sama-sama menghasilkan output yang cukup baik. Untuk itu, kita perlu membandingkan nilai Sum Square Withins masing-masing metode. Namun, seiring bertambahnya jumlah cluster, cenderung semakin kecil pula SSW yang didapat. Oleh karena itu, perlu dilakukan standarisasi dengan syntax di bawah:

sst <- sum(scaled_data^2)
ssb_h <- sst-ssw_h
ssb_k <- sst-ssw_k
Fh <- (ssb_h/5)/(ssw_h/194)
Fk <- (ssb_k/8)/(ssw_k/191)
best_method <- data.frame("Hierarchical"=Fh, "KMeans"=Fk)
rownames(best_method)="Nilai Kebaikan Model"
best_method

Dari nilai di atas, dapat terlihat bahwa nilai kebaikan model K-means setelah distandarisasi lebih besar daripada nilai kebaikan model Hirarki. Artinya, metode Kmeans dipilih untuk penggerombolan data.

Interpretasi Hasil Clustering

df_kmeans <- aggregate(data.ok, by=list(cluster=kmeans.data$cluster), FUN = mean)
cbind(df_kmeans,"Frekuensi"=tab_k$Freq)
  • Cluster 1 merupakan segmentasi orang-orang muda dengan penghasilan di atas rata-rata tetapi dengan nilai spending score yang sangat rendah (paling rendah dibanding yang lain). Artinya, segmentasi ini berisi orang muda yang hanya membeli produk-produk yang mereka butuhkan saja.

  • Cluster 2 merupakan segmentasi orang-orang tua dengan penghasilan yang cukup tinggi tetapi nilai spending score yang rendah. Artinya, segmentasi ini berisi orang tua yang hanya membeli produk-produk yang mereka butuhkan saja.

  • Cluster 3 merupakan segmentasi orang-orang muda dengan penghasilan yang sangat rendah (paling rendah dibanding yang lain) tetapi memiliki nilai spending score yang sangat tinggi (kedua tertinggi dibanding yang lain). Artinya, segmentasi ini berisi orang muda yang hanya sangat boros.

  • Cluster 4 merupakan segmentasi orang-orang 30 tahunan dengan penghasilan yang sangat tinggi (paling tinggi dibanding yang lain) tetapi memiliki nilai spending score yang cukup rendah. Artinya, segmentasi ini berisi orang-orang yang hanya membeli produk-produk yang mereka butuhkan saja.

  • Cluster 5 merupakan segmentasi orang-orang 30 tahunan dengan penghasilan yang sangat tinggi (kedua tertinggi dibanding yang lain) dan memiliki nilai spending score yang sangat tinggi pula (paling tinggi dibanding yang lain). Artinya, segmentasi ini berisi orang yang suka berbelanja.

  • Cluster 6 merupakan segmentasi orang-orang muda dengan penghasilan yang standar dan memiliki nilai spending score yang standar pula. Segmentasi ini berisi orang muda pada umumnya, terlihat dari frekuensinya yang besar.

  • Cluster 7 merupakan cluster dengan frekuensi paling banyak dibanding yang lain. Cluster ini berisi orang-orang tua dengan penghasilan yang standar dan memiliki nilai spending score yang standar pula. Segmentasi ini berisi orang tua pada umumnya.

  • Cluster 8 merupakan segmentasi orang-orang tua dengan penghasilan yang sangat rendah yang memiliki nilai spending score yang rendah pula. Artinya, segmentasi ini berisi orang tua yang kurang mampu pada umumnya.