Gaya hidup masyarakat urban tak lepas dari kemajuan teknologi dan perkembangan pola pikir. Taraf hidup masyarakat dituntut untuk lebih maju dan kebutuhan untuk memenuhi kebutuhan hidup yang semakin hari semakin besar menjadi hal yang tak terhindarkan. Dewasa ini muncul berbagai pusat perbelanjaan yang menjadi bagian dari gerak perkembangan kota metropolitan. Salah satunya brand internasional, BigMart yang telah muncul di berbagai negara. BigMart adalah sebuah perusahaan yang bergerak di bidang retail business franchise dalam bentuk supermarket atau grocery store. Seperti toko-toko pada umumnya, BigMart juga menjual produk-produk untuk memenuhi kebutuhan masyarakat di sekitarnya. Kebutuhan produk pada lingkungan yang satu bisa jadi berbeda di lingkungan lainnya, dimana karakteristik masyarakat juga berbeda. Sebagai contoh, toko yang berada di tipe Kota 1 (Tier 1) akan mempunyai pendapatan penjualan yang lebih tinggi dibandingkan toko di lokasi lainnya karena pendapatan masyarakat di Kota 1 juga lebih tinggi, atau contoh yang lain toko yang mempunyai kapasitas penyimpanan yang lebih besar akan memiliki pendapatan penjualan yang lebih tinggi karena masyarakat lebih memilih toko dengan kapasitas gudang yang besar agar mampu membeli segala jenis barang yang dibutuhkan dalam satu tempat.Sehingga dalam analisis ini akan mendapatkan model guna mengetahu penjualan produk di suato toko tertentu (berdasarkan karakteristik toko tersebut). Sehingga diharapkan dapat meningkatkan penjualan untuk setiap toko.
Data yang digunakan merupakan data yang di peroleh dari analyticsvidhya.com Data terdiri data traning dan data testing yang memiliki missing value
# Load packages
library(readxl)
library(dplyr)
library(reshape2)
library(lubridate)
library(tidyr)
library(stringr)
library(ggplot2)
library(corrplot)
library(dummies)
library(shinyjqui)
library(gridExtra)
Sebelum melakukan analisis lebih lanjut, maka perlu adanya imputasi data. DIkarenakan pada analsiis kali ini ingin memprediksi seberapa cocok model yang akan digunakan, maka dari itu perlu melibatkan kedua data (traning & testing)
# The data consist of Train & Test Data Set
train<-read_excel("train.xlsx")
test<-read_excel("test.xlsx")
Langkah-langkah analisis yang akan di lakukan : -1. Statistika Deskriptif -2. Preprocessing Data (Missing value & Transformasi) -3. Melakukan Analsiis Regresi (karena data yang digunakan terdiri dari variabel prediktor kategorik dan numerik dan respon yang numerik ) -4. Mengetahui pemodelan terbaik dalam memprediksi keuntungan yang akan di peroleh()
Sebelum melakukan analisis data lebih lanjut. Maka perlu mengetahui karakteristik data yang akan diamati. Oleh karena itu statistika deskrif perlu untuk dilakukan.
summary(train)
Item_Identifier Item_Weight Item_Fat_Content Item_Visibility Item_Type
Length:8523 Min. : 4.555 Length:8523 Min. :0.00000 Length:8523
Class :character 1st Qu.: 8.774 Class :character 1st Qu.:0.02699 Class :character
Mode :character Median :12.600 Mode :character Median :0.05393 Mode :character
Mean :12.858 Mean :0.06613
3rd Qu.:16.850 3rd Qu.:0.09459
Max. :21.350 Max. :0.32839
NA's :1463
Item_MRP Outlet_Identifier Outlet_Establishment_Year Outlet_Size
Min. : 31.3 Length:8523 Min. :1985 Length:8523
1st Qu.: 452731.0 Class :character 1st Qu.:1987 Class :character
Median :1147176.0 Mode :character Median :1999 Mode :character
Mean :1154899.1 Mean :1998
3rd Qu.:1750225.0 3rd Qu.:2004
Max. :2668884.0 Max. :2009
Outlet_Location_Type Outlet_Type Item_Outlet_Sales
Length:8523 Length:8523 Min. : 33.29
Class :character Class :character 1st Qu.: 834.25
Mode :character Mode :character Median : 1794.33
Mean : 2181.29
3rd Qu.: 3101.30
Max. :13086.97
summary(test)
Item_Identifier Item_Weight Item_Fat_Content Item_Visibility Item_Type
Length:5681 Min. : 4.555 Length:5681 Min. :0.00000 Length:5681
Class :character 1st Qu.: 8.645 Class :character 1st Qu.:0.02705 Class :character
Mode :character Median :12.500 Mode :character Median :0.05415 Mode :character
Mean :12.696 Mean :0.06568
3rd Qu.:16.700 3rd Qu.:0.09346
Max. :21.350 Max. :0.32364
NA's :976
Item_MRP Outlet_Identifier Outlet_Establishment_Year Outlet_Size
Min. : 31.99 Length:5681 Min. :1985 Length:5681
1st Qu.: 94.41 Class :character 1st Qu.:1987 Class :character
Median :141.42 Mode :character Median :1999 Mode :character
Mean :141.02 Mean :1998
3rd Qu.:186.03 3rd Qu.:2004
Max. :266.59 Max. :2009
Outlet_Location_Type Outlet_Type
Length:5681 Length:5681
Class :character Class :character
Mode :character Mode :character
Dapat diketahui variabel respon tidak normal dan butuh di transformasi. Dan terdapat dua variabel yang terdapat missing value.
Dikarenakan data yang digunakan beragam, maka dari itu untuk visualisai dilakukan berdasarkan tipe datanya.
aa
aa
Sebelum melakukan analisis lebih lanjut. Maka perlu adanya proses preprocessing guna data yang akan digunakan dapat memberikan interpretasi yang baik
library(VIM)
aggr(train,
col=c('navyblue','tomato'),
numbers=TRUE,
sortVars=TRUE,
labels=names(train),
cex.axis=.7,
gap=3,
ylab=c("Histogram of missing data","Pattern"))
Variables sorted by number of missings:
Variable Count
Outlet_Size 0.2827643
Item_Weight 0.1716532
Item_Identifier 0.0000000
Item_Fat_Content 0.0000000
Item_Visibility 0.0000000
Item_Type 0.0000000
Item_MRP 0.0000000
Outlet_Identifier 0.0000000
Outlet_Establishment_Year 0.0000000
Outlet_Location_Type 0.0000000
Outlet_Type 0.0000000
Item_Outlet_Sales 0.0000000
library(mice)
md.pattern(train)
Item_Identifier Item_Fat_Content Item_Visibility Item_Type Item_MRP Outlet_Identifier
4650 1 1 1 1 1 1
2410 1 1 1 1 1 1
1463 1 1 1 1 1 1
0 0 0 0 0 0
Outlet_Establishment_Year Outlet_Location_Type Outlet_Type Item_Outlet_Sales
4650 1 1 1 1
2410 1 1 1 1
1463 1 1 1 1
0 0 0 0
Item_Weight Outlet_Size
4650 1 1 0
2410 1 0 1
1463 0 1 1
1463 2410 3873
Terdapat missing value pada variabel numerik dan kategorik. Pada analisis kali ini, pengimputan yang dilakukan yaitu menggunakan imputasi median untuk variabel numerik yang missing. Dan Modus untuk variabel kategorik yang missing.Berikut cara menginputkannya.
# Imputasi untuk Variabel Numerik
combi$Item_Weight[is.na(combi$Item_Weight)] <- median(combi$Item_Weight, na.rm = TRUE)
table(is.na(combi$Item_Weight))
FALSE
14204
combi$Item_Visibility <- ifelse(combi$Item_Visibility == 0,
median(combi$Item_Visibility), combi$Item_Visibility)
# Imputasi untuk Variabel Kategorik
table(combi$Outlet_Size)
High Medium Small
1553 4655 3980
miss<-unique(combi$Outlet_Size[!is.na(combi$Outlet_Size)])
mode<-miss[which.max(tabulate(match(combi$Outlet_Size,miss)))]
miss_imp<-combi$Outlet_Size
combi$Outlet_Size[is.na(miss_imp)]<-mode
melakukan identifikasi terhadap variable Item Identifier. Hal ini dikarenakan, pada variabel tersebut berupa kode (DR, FD dan NC). Maka variabel dapat di kelompokkan menjadi variabel dengan 3 kelomok.
combi <-
combi %>%
mutate(Item_Identifier_Str3 = substr(Item_Identifier,1,3), #First three letter of Item_Identifier.
Item_Identifier_Str2 = substr(Item_Identifier,1,2), #First second letter of Item_Identifier.
Item_Identifier_Num=as.numeric(substr(Item_Identifier,4,6)), # Number part of Item_Identifier column.
Outlet_Age=2013-Outlet_Establishment_Year, #Outlet Age
PK=row_number())
#table(combi$Item_Identifier_Str3)
table(combi$Item_Identifier_Str2)
DR FD NC
1317 10201 2686
Melakukan Identifikasi terhadap Data (Kembali)
new_train <- combi %>%
filter(Item_Outlet_Sales != -999)
new_test <- combi %>%
filter(Item_Outlet_Sales == -999)
new_combi <- rbind(new_train, new_test)
#glimpse(new_combi)
new_combi1<-dummy1
new_combi1<-select(new_combi1, -c(Item_Identifier, Outlet_Identifier, Item_Fat_Content,Outlet_Establishment_Year, Item_Type, Item_Identifier_Str3, PK))
new_combi2<-new_combi1
new_combi2<-within(new_combi2, Outlet_Size <- factor(Outlet_Size, labels = c(1:3)))
#str(new_combi1)
pred_train <- new_combi2 %>%
filter(Item_Outlet_Sales != -999)
pred_test <- new_combi2 %>%
filter(Item_Outlet_Sales == -999)
#dim(pred_train)
#dim(pred_test)
Hal ini dilakukan untuk memperoleh nilai akurasi data train terhadap testing.
new_train <- select(new_train, -c(Item_Identifier, Item_Identifier_Str3, Outlet_Establishment_Year, PK))
set.seed(1)
n <- nrow(new_train)
shuffled <- new_train[sample(n),]
glimpse(new_train)
Observations: 8,523
Variables: 13
$ Item_Weight <dbl> 9.300, 5.920, 17.500, 19.200, 8.930, 10.395, 13.650, 12.600...
$ Item_Fat_Content <chr> "Low Fat", "Regular", "Low Fat", "Regular", "Low Fat", "Reg...
$ Item_Visibility <dbl> 0.016047301, 0.019278216, 0.016760075, 0.054020536, 0.05402...
$ Item_Type <chr> "Dairy", "Soft Drinks", "Meat", "Fruits and Vegetables", "H...
$ Item_MRP <dbl> 2498092, 482692, 141618, 182095, 538614, 514008, 576588, 10...
$ Outlet_Identifier <chr> "OUT049", "OUT018", "OUT049", "OUT010", "OUT013", "OUT018",...
$ Outlet_Size <chr> "Medium", "Medium", "Medium", "Medium", "High", "Medium", "...
$ Outlet_Location_Type <chr> "Tier 1", "Tier 3", "Tier 1", "Tier 3", "Tier 3", "Tier 3",...
$ Outlet_Type <chr> "Supermarket Type1", "Supermarket Type2", "Supermarket Type...
$ Item_Outlet_Sales <dbl> 3735.1380, 443.4228, 2097.2700, 732.3800, 994.7052, 556.608...
$ Item_Identifier_Str2 <chr> "FD", "DR", "FD", "FD", "NC", "FD", "FD", "FD", "FD", "FD",...
$ Item_Identifier_Num <dbl> 15, 1, 15, 7, 19, 36, 10, 10, 17, 28, 7, 3, 32, 46, 32, 49,...
$ Outlet_Age <dbl> 14, 4, 14, 15, 26, 4, 26, 28, 11, 6, 14, 16, 14, 16, 26, 16...
#split train data again:
train_indices <- 1:round(0.7*n)
test_indices <- (round(0.7*n)+1):n
splitted_train_simple <- shuffled[train_indices,]
splitted_test_simple <- shuffled[test_indices,]
linear_model_simple <- lm(Item_Outlet_Sales ~ ., data = splitted_train_simple)
summary(linear_model_simple)
Call:
lm(formula = Item_Outlet_Sales ~ ., data = splitted_train_simple)
Residuals:
Min 1Q Median 3Q Max
-3472.1 -891.7 -252.7 649.2 8288.7
Coefficients: (9 not defined because of singularities)
Estimate Std. Error t value Pr(>|t|)
(Intercept) -9.838e+02 1.954e+02 -5.035 4.92e-07 ***
Item_Weight -4.121e+00 4.086e+00 -1.009 0.31325
Item_Fat_ContentRegular -5.726e+00 4.026e+01 -0.142 0.88690
Item_Visibility -6.477e+02 3.744e+02 -1.730 0.08366 .
Item_TypeBreads 2.448e+01 1.196e+02 0.205 0.83783
Item_TypeBreakfast 3.227e+02 1.583e+02 2.039 0.04149 *
Item_TypeCanned 1.832e+02 9.058e+01 2.022 0.04317 *
Item_TypeDairy 1.721e+02 9.365e+01 1.837 0.06623 .
Item_TypeFrozen Foods 8.363e+01 8.461e+01 0.988 0.32298
Item_TypeFruits and Vegetables 1.819e+02 7.887e+01 2.306 0.02113 *
Item_TypeHard Drinks 3.478e+02 2.016e+02 1.725 0.08460 .
Item_TypeHealth and Hygiene 3.021e+02 1.840e+02 1.642 0.10070
Item_TypeHousehold 4.438e+02 1.782e+02 2.490 0.01278 *
Item_TypeMeat 1.743e+02 1.035e+02 1.683 0.09233 .
Item_TypeOthers 5.501e+02 2.095e+02 2.625 0.00868 **
Item_TypeSeafood 3.240e+02 2.041e+02 1.587 0.11257
Item_TypeSnack Foods 1.751e+02 7.878e+01 2.223 0.02627 *
Item_TypeSoft Drinks 2.639e+02 1.864e+02 1.416 0.15689
Item_TypeStarchy Foods 1.457e+02 1.502e+02 0.970 0.33196
Item_MRP 8.722e-04 2.297e-05 37.976 < 2e-16 ***
Outlet_IdentifierOUT013 1.900e+03 8.753e+01 21.705 < 2e-16 ***
Outlet_IdentifierOUT017 1.940e+03 8.723e+01 22.238 < 2e-16 ***
Outlet_IdentifierOUT018 1.605e+03 8.768e+01 18.302 < 2e-16 ***
Outlet_IdentifierOUT019 3.574e+00 9.832e+01 0.036 0.97100
Outlet_IdentifierOUT027 3.275e+03 8.750e+01 37.429 < 2e-16 ***
Outlet_IdentifierOUT035 2.038e+03 8.773e+01 23.230 < 2e-16 ***
Outlet_IdentifierOUT045 1.842e+03 8.725e+01 21.105 < 2e-16 ***
Outlet_IdentifierOUT046 1.896e+03 8.714e+01 21.763 < 2e-16 ***
Outlet_IdentifierOUT049 1.932e+03 8.692e+01 22.222 < 2e-16 ***
Outlet_SizeMedium NA NA NA NA
Outlet_SizeSmall NA NA NA NA
Outlet_Location_TypeTier 2 NA NA NA NA
Outlet_Location_TypeTier 3 NA NA NA NA
Outlet_TypeSupermarket Type1 NA NA NA NA
Outlet_TypeSupermarket Type2 NA NA NA NA
Outlet_TypeSupermarket Type3 NA NA NA NA
Item_Identifier_Str2FD 2.649e+02 1.590e+02 1.666 0.09585 .
Item_Identifier_Str2NC NA NA NA NA
Item_Identifier_Num 1.720e+00 1.012e+00 1.699 0.08932 .
Outlet_Age NA NA NA NA
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 1328 on 5935 degrees of freedom
Multiple R-squared: 0.391, Adjusted R-squared: 0.3879
F-statistic: 127 on 30 and 5935 DF, p-value: < 2.2e-16
linear_model_log1<- lm(log10(Item_Outlet_Sales) ~ ., data = splitted_train_simple)
summary(linear_model_log1)
Call:
lm(formula = log10(Item_Outlet_Sales) ~ ., data = splitted_train_simple)
Residuals:
Min 1Q Median 3Q Max
-1.17970 -0.16692 0.01604 0.18176 0.92175
Coefficients: (9 not defined because of singularities)
Estimate Std. Error t value Pr(>|t|)
(Intercept) 2.101e+00 4.184e-02 50.205 < 2e-16 ***
Item_Weight -6.646e-04 8.750e-04 -0.760 0.44754
Item_Fat_ContentRegular -1.775e-03 8.621e-03 -0.206 0.83686
Item_Visibility -1.154e-01 8.017e-02 -1.439 0.15016
Item_TypeBreads 3.295e-02 2.561e-02 1.286 0.19843
Item_TypeBreakfast 3.542e-02 3.389e-02 1.045 0.29602
Item_TypeCanned 3.657e-02 1.940e-02 1.885 0.05943 .
Item_TypeDairy 1.637e-02 2.006e-02 0.816 0.41453
Item_TypeFrozen Foods -2.218e-03 1.812e-02 -0.122 0.90257
Item_TypeFruits and Vegetables 3.029e-02 1.689e-02 1.793 0.07295 .
Item_TypeHard Drinks 5.434e-02 4.317e-02 1.259 0.20821
Item_TypeHealth and Hygiene 6.366e-02 3.941e-02 1.615 0.10628
Item_TypeHousehold 8.807e-02 3.816e-02 2.308 0.02105 *
Item_TypeMeat 4.011e-02 2.217e-02 1.809 0.07048 .
Item_TypeOthers 1.263e-01 4.487e-02 2.816 0.00488 **
Item_TypeSeafood 5.207e-02 4.372e-02 1.191 0.23366
Item_TypeSnack Foods 4.492e-02 1.687e-02 2.663 0.00778 **
Item_TypeSoft Drinks 3.897e-02 3.992e-02 0.976 0.32899
Item_TypeStarchy Foods 1.480e-02 3.217e-02 0.460 0.64551
Item_MRP 2.021e-07 4.918e-09 41.090 < 2e-16 ***
Outlet_IdentifierOUT013 8.485e-01 1.874e-02 45.264 < 2e-16 ***
Outlet_IdentifierOUT017 8.696e-01 1.868e-02 46.552 < 2e-16 ***
Outlet_IdentifierOUT018 7.808e-01 1.878e-02 41.584 < 2e-16 ***
Outlet_IdentifierOUT019 3.133e-02 2.105e-02 1.488 0.13682
Outlet_IdentifierOUT027 1.078e+00 1.874e-02 57.524 < 2e-16 ***
Outlet_IdentifierOUT035 8.886e-01 1.879e-02 47.297 < 2e-16 ***
Outlet_IdentifierOUT045 8.439e-01 1.869e-02 45.166 < 2e-16 ***
Outlet_IdentifierOUT046 8.565e-01 1.866e-02 45.897 < 2e-16 ***
Outlet_IdentifierOUT049 8.651e-01 1.861e-02 46.477 < 2e-16 ***
Outlet_SizeMedium NA NA NA NA
Outlet_SizeSmall NA NA NA NA
Outlet_Location_TypeTier 2 NA NA NA NA
Outlet_Location_TypeTier 3 NA NA NA NA
Outlet_TypeSupermarket Type1 NA NA NA NA
Outlet_TypeSupermarket Type2 NA NA NA NA
Outlet_TypeSupermarket Type3 NA NA NA NA
Item_Identifier_Str2FD 5.155e-02 3.406e-02 1.514 0.13019
Item_Identifier_Str2NC NA NA NA NA
Item_Identifier_Num 1.592e-04 2.167e-04 0.735 0.46265
Outlet_Age NA NA NA NA
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 0.2843 on 5935 degrees of freedom
Multiple R-squared: 0.5821, Adjusted R-squared: 0.5799
F-statistic: 275.5 on 30 and 5935 DF, p-value: < 2.2e-16
linear_model_sqrt <- lm(sqrt(Item_Outlet_Sales) ~ ., data = splitted_train_simple)
summary(linear_model_sqrt)
Call:
lm(formula = sqrt(Item_Outlet_Sales) ~ ., data = splitted_train_simple)
Residuals:
Min 1Q Median 3Q Max
-37.720 -8.810 -1.221 7.934 56.025
Coefficients: (9 not defined because of singularities)
Estimate Std. Error t value Pr(>|t|)
(Intercept) 2.999e+00 1.930e+00 1.554 0.12018
Item_Weight -3.424e-02 4.035e-02 -0.848 0.39619
Item_Fat_ContentRegular 6.258e-03 3.976e-01 0.016 0.98744
Item_Visibility -6.140e+00 3.697e+00 -1.661 0.09685 .
Item_TypeBreads 8.429e-01 1.181e+00 0.714 0.47556
Item_TypeBreakfast 2.648e+00 1.563e+00 1.694 0.09025 .
Item_TypeCanned 1.899e+00 8.946e-01 2.123 0.03382 *
Item_TypeDairy 1.381e+00 9.249e-01 1.493 0.13540
Item_TypeFrozen Foods 5.087e-01 8.357e-01 0.609 0.54271
Item_TypeFruits and Vegetables 1.714e+00 7.790e-01 2.200 0.02785 *
Item_TypeHard Drinks 3.463e+00 1.991e+00 1.739 0.08208 .
Item_TypeHealth and Hygiene 3.215e+00 1.817e+00 1.769 0.07699 .
Item_TypeHousehold 4.608e+00 1.760e+00 2.618 0.00886 **
Item_TypeMeat 1.867e+00 1.022e+00 1.826 0.06791 .
Item_TypeOthers 6.126e+00 2.070e+00 2.960 0.00309 **
Item_TypeSeafood 3.114e+00 2.016e+00 1.544 0.12252
Item_TypeSnack Foods 2.022e+00 7.780e-01 2.599 0.00936 **
Item_TypeSoft Drinks 2.412e+00 1.841e+00 1.310 0.19024
Item_TypeStarchy Foods 1.158e+00 1.484e+00 0.780 0.43526
Item_MRP 9.298e-06 2.268e-07 40.991 < 2e-16 ***
Outlet_IdentifierOUT013 2.766e+01 8.645e-01 31.993 < 2e-16 ***
Outlet_IdentifierOUT017 2.830e+01 8.615e-01 32.849 < 2e-16 ***
Outlet_IdentifierOUT018 2.446e+01 8.660e-01 28.243 < 2e-16 ***
Outlet_IdentifierOUT019 4.152e-01 9.710e-01 0.428 0.66896
Outlet_IdentifierOUT027 4.033e+01 8.642e-01 46.672 < 2e-16 ***
Outlet_IdentifierOUT035 2.930e+01 8.665e-01 33.814 < 2e-16 ***
Outlet_IdentifierOUT045 2.714e+01 8.618e-01 31.495 < 2e-16 ***
Outlet_IdentifierOUT046 2.776e+01 8.606e-01 32.254 < 2e-16 ***
Outlet_IdentifierOUT049 2.816e+01 8.585e-01 32.803 < 2e-16 ***
Outlet_SizeMedium NA NA NA NA
Outlet_SizeSmall NA NA NA NA
Outlet_Location_TypeTier 2 NA NA NA NA
Outlet_Location_TypeTier 3 NA NA NA NA
Outlet_TypeSupermarket Type1 NA NA NA NA
Outlet_TypeSupermarket Type2 NA NA NA NA
Outlet_TypeSupermarket Type3 NA NA NA NA
Item_Identifier_Str2FD 2.697e+00 1.571e+00 1.717 0.08605 .
Item_Identifier_Str2NC NA NA NA NA
Item_Identifier_Num 1.477e-02 9.996e-03 1.478 0.13944
Outlet_Age NA NA NA NA
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 13.11 on 5935 degrees of freedom
Multiple R-squared: 0.4859, Adjusted R-squared: 0.4833
F-statistic: 187 on 30 and 5935 DF, p-value: < 2.2e-16
a
Untuk melihat akurasi dari setiap model maka perlu dilakukan perhitunagn terhadap MAE dan RMSE. Jika dari kedua nilai tersebut cukup kecil dibandingkan dengan model lainnya, maka dapat dikatakan pemodelan tersebutlah yang paling baik. Untuk perhitungannya sebagai berikut.
MAE <- function(actual, predicted){mean(abs(actual - predicted))}
RMSE <- function(actual, predicted) {sqrt(mean((actual - predicted)^2))}
# MAE of Simple for test
model1_mae_simple <- MAE(splitted_test_simple$Item_Outlet_Sales, pred_simple_test)
# RMSE of Simple for test dataset
model1_rmse_simple_test <-(RMSE(splitted_test_simple$Item_Outlet_Sales, pred_simple_test))
# RMSE of Simple for train dataset
model1_rmse_simple_train <-(RMSE(splitted_train_simple$Item_Outlet_Sales, pred_simple_train))
# RMSE of Simple for train/test
model1_rmse_ratio <- (RMSE(splitted_train_simple$Item_Outlet_Sales, pred_simple_train))/(RMSE(splitted_test_simple$Item_Outlet_Sales, pred_simple_test))
model1_simple <- data.frame(model1_mae_simple,model1_rmse_simple_test,model1_rmse_simple_train,model1_rmse_ratio)
model1_simple
model1_mae_simple model1_rmse_simple_test model1_rmse_simple_train model1_rmse_ratio
1 1008.209 1341.607 1324.209 0.9870322
# MAE of Log for test
model1_mae_log <- (MAE(splitted_test_simple$Item_Outlet_Sales, pred_log_test))
# RMSE of Log for test dataset
model1_rmse_log_test <- (RMSE(splitted_test_simple$Item_Outlet_Sales, pred_log_test))
# RMSE of Log for train dataset
model1_rmse_log_train <- (RMSE(splitted_train_simple$Item_Outlet_Sales, pred_log_train))
# RMSE of Log for train/test
model1_rmse_log_ratio <- (RMSE(splitted_train_simple$Item_Outlet_Sales, pred_log_train))/(RMSE(splitted_test_simple$Item_Outlet_Sales, pred_log_test))
model1_log <- data.frame(model1_mae_log,model1_rmse_log_test,model1_rmse_log_train,model1_rmse_log_ratio)
model1_log
model1_mae_log model1_rmse_log_test model1_rmse_log_train model1_rmse_log_ratio
1 934.803 1356.827 1323.683 0.9755725
# MAE of Sqrt for test
model1_mae_sqrt <- (MAE(splitted_test_simple$Item_Outlet_Sales, pred_sqrt_test))
# RMSE of Sqrt for test dataset
model1_rmse_sqrt_test <- (RMSE(splitted_test_simple$Item_Outlet_Sales, pred_sqrt_test))
# RMSE of Sqrt for train dataset
model1_rmse_sqrt_train <- (RMSE(splitted_train_simple$Item_Outlet_Sales, pred_sqrt_train))
# RMSE of Sqrt for train/test
model1_rmse_sqrt_ratio <-(RMSE(splitted_train_simple$Item_Outlet_Sales, pred_sqrt_train))/(RMSE(splitted_test_simple$Item_Outlet_Sales, pred_log_test))
model1_sqrt <- data.frame(model1_mae_sqrt,model1_rmse_sqrt_test,model1_rmse_sqrt_train,model1_rmse_sqrt_ratio)
model1_sqrt
model1_mae_sqrt model1_rmse_sqrt_test model1_rmse_sqrt_train model1_rmse_sqrt_ratio
1 946.3798 1331.887 1307.238 0.9634521
Dapat dilihat, walaupun ke-tiga model memiliki R-squre yang mirip. Namun dari akurasinya, model dengan menggunakan transformasi Rsq dapat dikatakan lebih baik. Hal ini dikarenakan mayoritas nilai MAE dan RMSE nya lebih kecil jika dibandingkan dengan dua model lainnya.
model1_simple
model1_mae_simple model1_rmse_simple_test model1_rmse_simple_train model1_rmse_ratio
1 1008.209 1341.607 1324.209 0.9870322
model1_log
model1_mae_log model1_rmse_log_test model1_rmse_log_train model1_rmse_log_ratio
1 934.803 1356.827 1323.683 0.9755725
model1_sqrt
model1_mae_sqrt model1_rmse_sqrt_test model1_rmse_sqrt_train model1_rmse_sqrt_ratio
1 946.3798 1331.887 1307.238 0.9634521
Model dapat dikatakan telah memenuhi asumsi jika sudah memenuhi ke-empat kriteria berikut (IIDN)
par(mfrow=c(2,2))
plot(linear_model_simple)
Logq
par(mfrow=c(2,2))
plot(linear_model_log1)
Sqrt Sqrt
par(mfrow=c(2,2))
plot(linear_model_sqrt)