# clear-up the environment
rm(list = ls())
# chunk options
knitr::opts_chunk$set(
message = FALSE,
warning = FALSE,
fig.align = "center",
comment = "#>"
)
# scientific notation
options(scipen = 9999)
Tujuan dari machine learning adalah membuat mesin yang dapat belajar sendiri dalam memahami pola data hingga mengestimasi apa yang akan terjadi di masa depan.
Regresi adalah salah satu algoritma supervised learning dimana kita akan memprediksi nilai target variabel (y) yang memiliki tipe numerik berdasarkan variabel prediktor (x) yang dapat memiliki tipe numerik atau kategorikal.
Dalam memilih variabel target atau prediktor biasanya dikaitkan dengan masalah bisnis yang akan diselesaikan.
Formula model regresi:
\[ \hat{y}=\beta_0+\beta_1.x_1+...+\beta_n.x_n \]
Keterangan:
Berikut adalah runtutan workflow yang akan kita coba ikuti:
Untuk lebih memahami mengenai setiap bagian workflow linear regression, mari kita langsung membahas sebuah kasus.
Dalam perkenalan dengan Regression Models, kita akan menggunakan data
copiers.csv
. Dari data tersebut kita akan mencoba untuk
memprediksi profit yang kiranya berhasil didapatkan berdasarkan
data sales.
# Please run the code down below
library(dplyr)
library(lubridate)
# Please run the code down below
copiers <- read.csv("data_input/copiers.csv",
stringsAsFactors = T) # mengubah semua tipe data string menjadi factor
head(copiers)
Deskripsi kolom:
Row.ID
= Nomer barisOrder.ID
= Unique ID pemesananOrder.Date
= Tanggal pemesananShip.Date
= Tanggal pengiriman barangShip.Mode
= Jenis pengiriman yang dipilih customerCustomer.ID
= Unique ID customerSegment
= Segmentasi/kategori custoemrProduct.ID
= Unique ID barangCategory
= Kateogri barangSub.Category
= Sub Kategori barangProduct.Name
= Nama produk barangSales
= Total sales dari barang yang dibeli oleh
customerQuantity
= Total barang yang dibeli oleh customerDiscount
= Total diskon yang diberikan kepada
customerProfit
= Total keuntungan yang didapatkan oleh
perusahaan# Please type your code
glimpse(copiers)
#> Rows: 62
#> Columns: 15
#> $ Row.ID <int> 336, 393, 407, 516, 596, 754, 1151, 1234, 1550, 1645, 198…
#> $ Order.ID <fct> CA-2015-137946, US-2014-135972, CA-2017-117457, CA-2017-1…
#> $ Order.Date <fct> 9/1/15, 9/21/14, 12/8/17, 1/22/17, 8/8/14, 4/7/16, 4/4/15…
#> $ Ship.Date <fct> 9/4/15, 9/23/14, 12/12/17, 1/27/17, 8/15/14, 4/9/16, 4/4/…
#> $ Ship.Mode <fct> Second Class, Second Class, Standard Class, Standard Clas…
#> $ Customer.ID <fct> DB-13615, JG-15115, KH-16510, AD-10180, LR-16915, YC-2189…
#> $ Segment <fct> Consumer, Consumer, Consumer, Home Office, Consumer, Corp…
#> $ Product.ID <fct> TEC-CO-10001449, TEC-CO-10002313, TEC-CO-10004115, TEC-CO…
#> $ Category <fct> Technology, Technology, Technology, Technology, Technolog…
#> $ Sub.Category <fct> Copiers, Copiers, Copiers, Copiers, Copiers, Copiers, Cop…
#> $ Product.Name <fct> Hewlett Packard LaserJet 3310 Copier, Canon PC1080F Perso…
#> $ Sales <dbl> 959.984, 1799.970, 1199.976, 2999.950, 1199.976, 1199.976…
#> $ Quantity <int> 2, 3, 3, 5, 3, 3, 2, 2, 1, 7, 4, 2, 2, 4, 2, 5, 6, 1, 3, …
#> $ Discount <dbl> 0.2, 0.0, 0.2, 0.0, 0.2, 0.2, 0.0, 0.4, 0.2, 0.0, 0.4, 0.…
#> $ Profit <dbl> 335.9944, 701.9883, 434.9913, 1379.9770, 434.9913, 374.99…
Apakah terdapat kolom yang tipe datanya belum sesuai?
# Please type your code
copiers_clean <- copiers %>%
mutate_at(.vars = c("Order.Date", "Ship.Date"), .funs = mdy)
Dari pertanyaan bisnis yang diajukan, kita ingin melakukan prediksi profit berdasarkan data sales, mari kita coba tentukan kolom apa yang akan menjadi target dan prediktor?
Target:
Prediktor:
Analisa data 2: Mencari tahu hubungan antara target & prediktor
Untuk mencari tahu hubungan/korelasi antara dua variable numerik, kita bisa memanfaatkan bantuan visualisasi base/scatter plot.
# Please type your code
plot(x = copiers_clean$Sales,
y = copiers_clean$Profit)
Optional:
# nilai korelasi
cor(x = copiers$Sales, y = copiers$Profit)
#> [1] 0.9395785
Insight:
Additional Notes: Pada saat kita membuat Regresi Model, kita harus menggunakan prediktor yang memiliki korelasi kuat karena:
Ketika kita membuat Regresi Model, model tersebut akan membuat garis lurus yang bisa menangkap pola data kita (prediktor & target).
Semakin kuat korelasi antara target & prediktor maka garis regresi yang akan dibuat akan semakin akurat.
Apakah ada outlier?
Additonal Notes: Kita perlu mengetahui outlier karena jika terdapat outlier pada data kita, outlier tersebut sedikit banyak akan mempengaruhi model kita.
Sebelum kita membuat model dengan prediktor, mari kita lihat model apa yang terbentuk apabila kita tidak menggunakan prediktor.
Bentuk model regresi tanpa prediktor adalah sebagai berikut \[\hat{y}=\beta_0\]
Pertama, kita akan coba prediksi nilai Profit terhadap dirinya
sendiri. Untuk membuat model regresi, dimana kita hanya memprediksi
menggunakan satu variabel saja, kita bisa gunakan fungsi
lm()
. Berikut parameter yang akan digunakan:
formula
: dituliskan dengan y ~ x
data
: objek dataframeContoh syntax:
lm(formula = nama_kolom_target ~ 1, data = nama_df)
# Please type your code
model_wo_predictor <- lm(formula = Profit ~ 1, data = copiers)
Untuk melihat hasil dari model yang sudah dibuat, kita bisa
menggunakan fungsi summary()
.
# Please type your code
summary(model_wo_predictor)
#>
#> Call:
#> lm(formula = Profit ~ 1, data = copiers)
#>
#> Residuals:
#> Min 1Q Median 3Q Max
#> -388.8 -286.8 -135.3 162.4 1854.2
#>
#> Coefficients:
#> Estimate Std. Error t value Pr(>|t|)
#> (Intercept) 448.81 55.24 8.124 0.0000000000269 ***
#> ---
#> Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
#>
#> Residual standard error: 435 on 61 degrees of freedom
Hanya terdapat 1 coefficient pada model yaitu untuk intercept. Intercept adalah titik dimana garis regresi bersinggungan dengan sumbu y.
Bonus Question: Apakah ada yang tau, nilai intercept yang dimunculkan pada hasil summary berasal dari perhitungan apa? Berdasarkan nilai mean dari kolom profit.
Additional Notes: Ketika tidak memiliki prediktor, nilai mean yang akan digunakan karena nilai mean adalah nilai yang memiliki error yang paling kecil terhadarp nilai sekitarnya dan model regresi akan selalu mencari nilai error yang paling kecil.
# Please run the code down below
plot(copiers$Profit)
abline(model_wo_predictor, col = "red")
Pada bagian ini, kita akan membuat model regresi dengan satu buah variabel prediktor. Formula untuk simple linear regression adalah
\[ \hat{y} = \beta_0 + \beta_1*x_1\]
Contoh syntax:
lm(formula = nama_kolom_target ~ nama_kolom_prediktor, data = nama_df)
# Please type your code
model_with_predictor <- lm(formula = Profit ~ Sales, data = copiers)
summary(model_with_predictor)
#>
#> Call:
#> lm(formula = Profit ~ Sales, data = copiers)
#>
#> Residuals:
#> Min 1Q Median 3Q Max
#> -407.07 -70.08 22.95 76.56 345.05
#>
#> Coefficients:
#> Estimate Std. Error t value Pr(>|t|)
#> (Intercept) -114.06251 32.62743 -3.496 0.000895 ***
#> Sales 0.42286 0.01989 21.260 < 0.0000000000000002 ***
#> ---
#> Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
#>
#> Residual standard error: 150.1 on 60 degrees of freedom
#> Multiple R-squared: 0.8828, Adjusted R-squared: 0.8809
#> F-statistic: 452 on 1 and 60 DF, p-value: < 0.00000000000000022
Interpretasi Model
Dari model di atas diperoleh bahwa
intercept = -114.06251
dan koefisien
Sales = 0.42286
sehingga dapat diperoleh formula model
regresinya adalah
\[ Profit = -114.06251 + 0.42286*Sales\]
Nilai Intercept:
Nilai Prediktor/Slope:
# Plot persamaan garis beserta diagram pencar
plot(copiers_clean$Sales, copiers_clean$Profit)
abline(model_with_predictor, col = "red")
Bonus Question: Agar perusahaan kita tidak rugi, berapakan minimal nilai Sales yang harus diperoleh?…
# summary
summary(model_with_predictor)
#>
#> Call:
#> lm(formula = Profit ~ Sales, data = copiers)
#>
#> Residuals:
#> Min 1Q Median 3Q Max
#> -407.07 -70.08 22.95 76.56 345.05
#>
#> Coefficients:
#> Estimate Std. Error t value Pr(>|t|)
#> (Intercept) -114.06251 32.62743 -3.496 0.000895 ***
#> Sales 0.42286 0.01989 21.260 < 0.0000000000000002 ***
#> ---
#> Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
#>
#> Residual standard error: 150.1 on 60 degrees of freedom
#> Multiple R-squared: 0.8828, Adjusted R-squared: 0.8809
#> F-statistic: 452 on 1 and 60 DF, p-value: < 0.00000000000000022
Hipotesis: - \(H_0\) : Prediktor tidak memengaruhi Target - \(H_1\) : Prediktor memengaruhi Target
Bonus Question 1: Apakah variabel Sales secara signifikan mempengaruhi target Profit? …
Bonus Question 2: Kalau ada prediktor yang secara literatur/pertimbangan/pengalaman bisnis penting/harusnya berpengaruh pada target, namun ketika dibuatkan model, dia tidak berpengaruh signifikan. Apakah kita akan mempertahankan variable tersebut atau tidak kita buang?
kebaikan model
.Range dari R-Squared adalah 0-1 atau 0-100%, dimana:
Semakin mendekati 0, maka model yang diperoleh masih kurang terjelaskan menggunakan prediktor yang ada (poor fit)
Semakin mendekati 1, maka model yang diperoleh sudah dapat terjelaskan dengan baik menggunakan prediktor yang ada
Formula R-Squared
\[ R^2 = 1 - \frac{\sum(y_i - \hat y_i)^2}{\sum(y_i - \overline y)^2} \]
Interpretasi r-squared
model_with_predictor
: Nilai R-squared = 0.8828. Artinya model regresi kita mampu menjelaskan variansi dari variabel profit sebesar 88.28%. Sisa 11.72% dijelaskan oleh faktor lain diluar model.
note: apakah ada batasan baik/buruk dari r-squared? tidak ada. - untuk ranah yg butuh ketepatan tinggi r-squared dituntut untuk lebih tinggi (medikal/research) - untuk ranah sosial r-square bisa lebih rendah (cth: 0.75) - dikembalikan ke user
Sebenarnya kita bisa memprediksi manual lewat formula regresi.
Profit = -114.06 + 0.42286*Sales
Misal ada data baru, dengan Sales: 400
# prediksi manual
-114.06 + 0.42286*400
#> [1] 55.084
Untuk memprediksi nilai Profit jika diketahui nilai Sales, dapat
menggunakan fungsi predict()
dengan parameter:
object
: model regresi yang digunakannewdata
: data yang akan diprediksi (harus berupa data
frame dan tersedia nama kolom prediktor yang sama persis dengan
prediktor pada model)# contoh data
sales_new <- data.frame(Sales = c(300,290,320,450)) # 4 baris data baru
sales_new
# Please type your code
sales_new$profit_prediction <- predict(model_with_predictor, newdata = sales_new)
sales_new
Note: Tahapan evaluasi hasil prediksi dan pengecekan asumsi tidak akan kita lakukan sekarang.
Leverage adalah nilai yang jauh dari kerumunan datanya, sering disebut sebagai outlier. Nilai leverage dapat mempengaruhi model linier regresi atau pun tidak.
Nilai leverage bisa mempengaruhi model secara signifikan atau pun tidak.
Berikut tahapan dalam mengecek apakah outlier pada data kita memiliki high influence atau tidak:
model_with_predictor
# Please run the code down below
summary(model_with_predictor)
#>
#> Call:
#> lm(formula = Profit ~ Sales, data = copiers)
#>
#> Residuals:
#> Min 1Q Median 3Q Max
#> -407.07 -70.08 22.95 76.56 345.05
#>
#> Coefficients:
#> Estimate Std. Error t value Pr(>|t|)
#> (Intercept) -114.06251 32.62743 -3.496 0.000895 ***
#> Sales 0.42286 0.01989 21.260 < 0.0000000000000002 ***
#> ---
#> Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
#>
#> Residual standard error: 150.1 on 60 degrees of freedom
#> Multiple R-squared: 0.8828, Adjusted R-squared: 0.8809
#> F-statistic: 452 on 1 and 60 DF, p-value: < 0.00000000000000022
Nilai R-Squared: …
Untuk mengetahui nilai outlier kita dapat memanfaatkan visualisasi
boxplot()
# Please type your code
boxplot(copiers_clean$Sales)
(opsional) Mencari nilai Outlier
box_out <- boxplot(copiers$Sales)
box_out$out
#> [1] 4899.93
Setelah mengetahui nilai outliers kita bisa mengeluarkannya
# Please type your code
copiers_no_outlier <- copiers_clean %>%
filter(Sales < 4000)
range(copiers_no_outlier$Sales)
#> [1] 299.990 3359.952
Buatlah model linear regression dengan data
copiers_no_outlier
:
# Please type your code
model_no_outlier <- lm(Profit ~ Sales, data = copiers_no_outlier)
summary(model_no_outlier)
#>
#> Call:
#> lm(formula = Profit ~ Sales, data = copiers_no_outlier)
#>
#> Residuals:
#> Min 1Q Median 3Q Max
#> -386.43 -66.78 18.00 66.44 340.24
#>
#> Coefficients:
#> Estimate Std. Error t value Pr(>|t|)
#> (Intercept) -83.54810 32.82978 -2.545 0.0136 *
#> Sales 0.39444 0.02146 18.384 <0.0000000000000002 ***
#> ---
#> Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
#>
#> Residual standard error: 142.4 on 59 degrees of freedom
#> Multiple R-squared: 0.8514, Adjusted R-squared: 0.8489
#> F-statistic: 338 on 1 and 59 DF, p-value: < 0.00000000000000022
Step 4: Bandingkan hasil model
Step 4.1:Membandingkan dengan cara visualisasi:
# Please run the code down below
plot(copiers$Sales, copiers$Profit)
abline(model_with_predictor, col = "red")
abline(model_no_outlier, col = "green")
Insight: Titik data outlier tersebut high leverage dan (low) influence
Agar lebih objektif, mari bandingkan pula nilai goodness of fit (R-squared) nya:
# Please type your code
summary(model_with_predictor)$r.squared
#> [1] 0.8828077
summary(model_no_outlier)$r.squared
#> [1] 0.8513778
Insight: R-squared untuk model_sales
(lebih baik) daripada model_no_outlier
, sehingga akan lebih
baik kalau outlier tidak dibuang/tetap diikutsertakan.
Dengan menggunakan data copiers, buatlah model untuk memprediksi
Profit berdasarkan informasi Quantity, simpan model dalam objek
model_quantity
.
# buat model
model_quantity <- lm(Profit ~ Quantity, data = copiers)
# cek summary
summary(model_quantity)
#>
#> Call:
#> lm(formula = Profit ~ Quantity, data = copiers)
#>
#> Residuals:
#> Min 1Q Median 3Q Max
#> -665.76 -167.44 27.27 149.11 1228.33
#>
#> Coefficients:
#> Estimate Std. Error t value Pr(>|t|)
#> (Intercept) -111.43 86.76 -1.284 0.204
#> Quantity 169.44 23.20 7.303 0.00000000076 ***
#> ---
#> Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
#>
#> Residual standard error: 319.1 on 60 degrees of freedom
#> Multiple R-squared: 0.4706, Adjusted R-squared: 0.4618
#> F-statistic: 53.33 on 1 and 60 DF, p-value: 0.0000000007604
Kemudian analisis summary modelnya dengan menulis laporan terkait:
-111.43 + 169.44*Quantity
Signifikan, dilihat dari jumlah bintang pada prediktor tersebut adalah 3 buah
Nilai R-squared: 0.4706 -> masih kurang baik, hanya bisa menjelaskan 47,06% variansi target (bahkan kurang dari 50% variansi target yg bisa dijelaskan, dimana seharusnya yg paling baik bisa menjelaskan 100% variansi target)
-111.43 + 169.44*9
#> [1] 1413.53
Linear regression dengan lebih dari satu prediktor harapannya bisa meningkatkan performa model karena lebih banyak informasi yang dapat menjelaskan target.
Formula multiple linear regression:
\[\hat{y}=\beta_0 + \beta_1*x_1 + \beta_2*x_2 + ... \beta_n*x_n\]
Keterangan: \(\hat{y}\) : Prediksi target variabel \(\beta_0\) : Intercept/konstanta \(\beta_i\) : Slope/Gradien/Koefisien prediktor ke-i \(x_i\) : Prediktor ke-i
Selain menggunakan prediktor Sales
saja, kita akan
menambakan 2 prediktor lagi, yaitu prediktor Quantity
&
Segment.
Contoh syntax:
lm(formula = nama_kolom_target ~ nama_prediktor1 + nama_prediktor2 + dst, data = nama_df)
# Please type your code
model_sqs <- lm(formula = Profit ~ Sales + Quantity + Segment, data = copiers)
Setelah membuat model tersebut, mari kita coba lihat hasil summary.
# Please run the code down below
summary(model_sqs)
#>
#> Call:
#> lm(formula = Profit ~ Sales + Quantity + Segment, data = copiers)
#>
#> Residuals:
#> Min 1Q Median 3Q Max
#> -351.95 -60.95 13.48 68.94 374.59
#>
#> Coefficients:
#> Estimate Std. Error t value Pr(>|t|)
#> (Intercept) -69.71409 44.79957 -1.556 0.1252
#> Sales 0.47777 0.03389 14.097 <0.0000000000000002 ***
#> Quantity -39.66313 18.28978 -2.169 0.0343 *
#> SegmentCorporate 25.27540 43.80999 0.577 0.5663
#> SegmentHome Office 33.57559 52.99929 0.634 0.5289
#> ---
#> Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
#>
#> Residual standard error: 145.8 on 57 degrees of freedom
#> Multiple R-squared: 0.895, Adjusted R-squared: 0.8876
#> F-statistic: 121.5 on 4 and 57 DF, p-value: < 0.00000000000000022
Interpretasi multiple linear regression dengan simple linear regression kurang lebih sama, hanya berbeda di bagian r-squared:
Intuisi - Mengapa adjusted r-squared digunakan?
Secara umum, penambahan prediktor akan menambahkan informasi pada model yang menyebabkan peningkatan R-squared. Padahal belum tentu prediktor tersebut berpengaruh signifikan pada model, bisa saja hanya sebatas random data.
Maka dari itu pada rumus Adjusted R Squared, terdapat perbedaan dengan rumus R Squared biasa
\[ Adjusted\ R^2 = 1 - \frac{(1-R^2)(n-1)}{n-k-1} \] Keterangan:
n: Jumlah data
k: Jumlah variabel prediktor
\(R^2\): Nilai \(R^2\)
multiple r-squared: semakin meningkat prediktor, pasti semakin tinggi r-squared
adjusted r-squared: nilainya hanya meningkat ketika prediktor yang ditambahkan memang signifikan memberikan pengaruh pada target
Bandingkan nilai R-Squared dari model-model yang telah dibuat
# cek dari model dasar
summary(model_wo_predictor)$r.squared
#> [1] 0
summary(model_with_predictor)$r.squared
#> [1] 0.8828077
summary(model_sqs)$r.squared
#> [1] 0.8949936
Bandingkan nilai Adjusted R-Squared dari model-model yang telah dibuat
# cek adjusted r-squared
summary(model_wo_predictor)$adj.r.squared
#> [1] 0
summary(model_with_predictor)$adj.r.squared
#> [1] 0.8808545
summary(model_sqs)$adj.r.squared
#> [1] 0.8876247
Setiap nilai dari kolom kategorik akan dijadikan dummy variable
Sebuah variabel dengan kategori sebanyak k akan membutuhkan seperangkat k–1 variabel dummy untuk menjangkau semua informasi yang terkandung didalamnya.
Interpretasi untuk dummy variabel (hanya untuk variabel prediktor bertipe kategorik) :
Salah satu tujuan dari suatu pemodelan prediktif adalah melakukan prediksi untuk data yang belum dimiliki. Setelah melakukan prediksi dari data, kita harus mengetahui apakah model machine learning yang sudah dibuat cukup baik dengan melihat apakah hasil prediksi tersebut sudah menghasilkan error yang paling kecil. Untuk melakukan model evaluation pada regression model ada beberapa cara :
Beberapa nilai error yang ada :
Error/residual adalah selisih antara hasil prediksi dengan nilai aktual.
\[ Error/residual = prediction - actual = \hat y - y \]
pred <- predict(model_sqs, newdata = copiers) # prediksi ke data train
error <- copiers_clean$Profit - pred # selisih data aktual dengan hasil prediksi
head(error)
#> 1 2 3 4 5 6
#> 26.38264 30.71908 50.38156 181.14331 50.38156 -34.89264
Mean Absolute Error (MAE) menunjukkan rata-rata dari nilai absolut error. MAE bisa diinterpretasikan sebagai seberapa besar penyimpangan hasil prediksi terhadap nilai aktualnya.
\[ MAE = \frac{\sum |\hat y - y|}{n} \]
# Menghitung MAE menggunakan library MLmetrics
library(MLmetrics)
RMSE(y_pred = pred, y_true = copiers$Profit)
#> [1] 139.81
Notes: Untuk mengetahui apakah nilai MAE yang diperoleh cukup besar/tidak maka perlu dibandingkan dengan range dari target variabelnya.
range(copiers_clean$Profit)
#> [1] 59.998 2302.967
Jika nilai MAE relatif cukup kecil dibandingkan range data, maka model memiliki error yang cukup kecil. Sementara jika nilai MAE relatif cukup besar apabila dibandingkan dengan range data maka model memiliki error yang cukup besar.
MAPE menunjukkan seberapa besar penyimpangannya dalam bentuk persentase.
\[ MAPE = \frac{1}{n} \sum\frac{|\hat y - y|}{y} \]
# Menghitung MAPE dengan library MLmetrics
MAPE(y_pred = pred, y_true = copiers$Profit)*100
#> [1] 40.52512
MAPE memiliki range dalam bentuk persen, semakin kecil nilai MAPE, semakin bagus model yang kita miliki.
Nilai MAPE menunjukkan model kita secara rata-rata menyimpang sebesar (nilai MAPE) dari nilai aktualnya. MAE dan MAPE adalah metrik yang baik untuk interpretasi karena mudah dipahami.
MSE menghitung berapa selisih kuadrat dari hasil prediksi dan nilai aktual kemudian dirata-rata. MSE sensitif terhadap perubahan atau selisih hasil prediksi yang besar sehingga meskipun sulit diinterpretasikan tetapi menjadi lebih baik dalam mendeteksi selisih yang besar.
\[ MSE = \frac{1}{n} \sum (\hat y - y)^2 \]
MSE(y_pred = pred, y_true = copiers$Profit)
#> [1] 19546.82
MSE tidak dapat diinterpretasikan karena ukuran satuan datanya yang kuadrat.
RMSE adalah bentuk akar kuadrat dari MSE. Karena sudah diakarkan, maka interpretasinya kurang lebih sama dengan MAE. RMSE dapat digunakan jika kita lebih concern dengan error yang sangat besar.
\[ RMSE = \sqrt{\frac{1}{n} \sum (\hat y - y)^2} \]
# Menghitung RMSE dari library MLmetrics
RMSE(y_pred = pred, y_true = copiers$Profit)
#> [1] 139.81
Quick Summary Error