Machine learning

Machine learning merupakan ilmu yang mencakup bidang statistik, kecerdasan buatan, dan ilmu komputer. Machine learning dikenal juga sebagai analitik prediktif atau pembelajaran statistik (Muller and Guido 2017) - Supervised learning - unsupervised learning - semi-supervised learning - reinforement learning

Dalam kasus machine learning, kita akan sering mendengar kata prediktor dan target variabel. Prediktor dan target variabel merupakan kolom dalam sebuah data frame. Hal yang membedakan prediktor dan target variabel adalah : • Prediktor merupakan faktor-faktor yang tersedia untuk memprediksi sesuatu • Target variabel merupakan hal yang ini kita prediksi

Contoh: Misal kita memiliki data mengenai iris dataset, yakni sebuah data mengenai kriteria kelopak bunga dengan 3 spesies.

head(iris)
##   Sepal.Length Sepal.Width Petal.Length Petal.Width Species
## 1          5.1         3.5          1.4         0.2  setosa
## 2          4.9         3.0          1.4         0.2  setosa
## 3          4.7         3.2          1.3         0.2  setosa
## 4          4.6         3.1          1.5         0.2  setosa
## 5          5.0         3.6          1.4         0.2  setosa
## 6          5.4         3.9          1.7         0.4  setosa

Dengan data tersebut, misal kita ingin memprediksi spesies bunga apa dengan kriteria-kriteria tertentu (Sepal.Length, Sepal.Width, Petal.Length, dan Petal.Width). Dalam kasus ini, bisa kita dapatkan informasi bahwa: • Prediktor (X) = Sepal.Length, Sepal.Width, Petal.Length, dan Petal.Width • Target variabel (Y) = Species

Konsep linear regression

Regresi merupakan machine learning kategori supervised learning dengan target data berupa data numerik. linear regression atau least-square merupakan sebuah metode untuk memodelkan hubungan antar variabel terikat/target (Y) dengan satu atau lebih variabel bebas/prediktor (X). Linear regression digunakan untuk prediksi dan modelling berdasarkan data-data yang ada. Regresi linear sederhana merupakan pemodelan regresi berdasarkan 1 variabel prediktor.

Persamaan regresi linear sederhana \[\hat{y} = \beta_0+\beta_1*x_1\]

di mana: β_0=intersept β_1 = beta coefficient β_1 y = target variabel x = prediktor x_1

Contoh sederhana:

x <- c(3,4,5,6,7,8,9,10,11)
y <- c(5.6,8.1,10.5,10.9,15.7,16.2,18.4,20.1,23.5)
res <- lm(y~x)
res
## 
## Call:
## lm(formula = y ~ x)
## 
## Coefficients:
## (Intercept)            x  
##     -0.6817       2.1450

dapat dilihat bahwa nilai β_0 dan β_1 adalah -0.6817 dan 2.1450, sehingga fungsi hipotesisnya menjadi

Y= -0.6817 + 2.1450x

Kita akan menampilkan fungsi plot:

plot(x,y,pch=16,cex=1.3, col="blue", main="DATASET & regression", xlab="X(feature)", ylab = "Y(target)")
lm(y~x)
## 
## Call:
## lm(formula = y ~ x)
## 
## Coefficients:
## (Intercept)            x  
##     -0.6817       2.1450
abline(lm(y~x))

Studi kasus

Pada contoh kasus regresi linear kali ini, akan digunakan data mtcars dan metode OLS (Ordinary Least Square). Data mtcars merupakan salah satu data yang disediakan oleh R. Data ini diambil dari majalah Motor Trend US pada tahun 1974, dan terdiri dari konsumsi bahan bakar dan 10 aspek desain dan kinerja mobil untuk 32 jenis mobil (model 1973-1974).

head(mtcars)
##                    mpg cyl disp  hp drat    wt  qsec vs am gear carb
## Mazda RX4         21.0   6  160 110 3.90 2.620 16.46  0  1    4    4
## Mazda RX4 Wag     21.0   6  160 110 3.90 2.875 17.02  0  1    4    4
## Datsun 710        22.8   4  108  93 3.85 2.320 18.61  1  1    4    1
## Hornet 4 Drive    21.4   6  258 110 3.08 3.215 19.44  1  0    3    1
## Hornet Sportabout 18.7   8  360 175 3.15 3.440 17.02  0  0    3    2
## Valiant           18.1   6  225 105 2.76 3.460 20.22  1  0    3    1

Data mtcars terdiri dari 32 observasi/data dan 11 variabel/kolom yang bertipe numerik. Penjelasan data mtcars:

1 mpg: Numerik Banyaknya bahan bakar (dalam galon) yang dihabiskan setiap mil (Mil/galon (AS)) 2 cyl: Numerik Jumlah silinder 3 disp: Numerik Perpindahan disp (cu.in.) 4 hp: Numerik Tenaga kuda bruto 5 drat: Numerik drat Rasio gandar belakang 6 wt: Numerik Berat (1000 lbs) 7 qsec: Numerik 1/4 mil waktu 8 vs: Numerik Bentuk mesin (0 = berbentuk V, 1 = lurus) 9 am: Numerik Jenis transmisi (0 = otomatis, 1 = manual) 10 gear: Numerik Jumlah gigi maju 11 carb: Numerik Jumlah karburator

Memahami Cross Validation dalam Machine Learning

Sebelum kita menerapkan metode machine learning, penting untuk membagi dataset yang dimiliki menjadi minimal dua kelompok: 1. data pelatihan (train set) 60-75% dan 2. data uji (test set) 25-40%.

Pembagian data tersebut disebut sebagai cross validation. Data train/data latih merupakan data yang digunakan untuk melatih model/mesin agar algoritme bisa mempelajari pola yang ada untuk memprediksi data yang belum pernah ia lihat. Data test/data uji merupakan data yang digunakan untuk melihat bagaimana kinerja model pada data baru atau digunakan sebagai data yang akan diprediksi, di mana nantinya kita akan membandingkan hasil prediksi dengan nilai sesungguhnya pada data test Kali ini, kita akan mensample secara random index pada data mtcars. 75% data akan dijadikan sebagai data train, dan 25% data akan dijadikan sebagai data test. Cara melakukannya dijelaskan:

set.seed(123)
idx <- sample(nrow(mtcars), nrow(mtcars)*0.75)
train <- mtcars[idx,]
test <- mtcars[-idx,]

kita menuliskan kode set.seed(123) yang merupakan syntax yang digunakan untuk cross validation. Selanjutnya kita membuat index dengan variabel idx. Di sini kita menentukan data sampel yang digunakan adalah data mtcars dengan 0.75 dari data tersebut digunakan untuk data train. Pada baris ketiga dan keempat merupakan baris penentuan index mana yang menjadi data train dan menjadi data test.

contoh data train dan data test yang telah kita bagi

head(train,3)
##                     mpg cyl  disp  hp drat    wt  qsec vs am gear carb
## Maserati Bora      15.0   8 301.0 335 3.54 3.570 14.60  0  1    5    8
## Cadillac Fleetwood 10.4   8 472.0 205 2.93 5.250 17.98  0  0    3    4
## Honda Civic        30.4   4  75.7  52 4.93 1.615 18.52  1  1    4    2
head(test,3)
##                mpg cyl  disp  hp drat    wt  qsec vs am gear carb
## Mazda RX4 Wag 21.0   6 160.0 110 3.90 2.875 17.02  0  1    4    4
## Valiant       18.1   6 225.0 105 2.76 3.460 20.22  1  0    3    1
## Merc 450SE    16.4   8 275.8 180 3.07 4.070 17.40  0  0    3    3

Setelah data dibagi menjadi data train dan data test, hal selanjutnya yang dilakukan adalah membuat pemodelan machine learning. Untuk menambah pemahaman, kita akan membuat suatu studi kasus. Misalkan Anda seorang yang bekerja pada departemen pemasaran perusahaan otomatif. Anda ingin mempunyai sebuah model yang dapat memprediksi pemakaian bahan bakar jenis mobil. Hal ini akan mempermudah Anda untuk menawarkan jenis mobil tertentu kepada pelanggan. Anda juga dapat mengetahui jenis mobil mana yang paling irit dari segi pemakaian bahan bakar.

Dari studi kasus tersebut, Anda ingin mencari jenis mobil mana yang paling irit bensinnya, sehingga target variabelnya adalah mpg (Mile per Gallon), artinya semakin besar mpg, maka semakin irit mobil tersebut. Untuk memprediksi target variabel mpg tersebut, Anda menggunakan satu prediktor, yaitu variabel wt.

Untuk membuat model regresi linear sederhana pada R, dapat dilakukan dengan:

model_simple <- lm(formula = mpg~wt, data = train)

model regresi linear sederhana pada R dituliskan dengan syntax lm. Pada lm ditambahkan argumen (mpg~wt, train). Hal ini maksudnya adalah model lm digunakan untuk memprediksi mpg dengan prediktor wt. Sedangkan argumen train dimaksudkan bahwa model dilakukan pada data train.

Berikut visualisasi dari sebaran data dengan model regresi yang dibuat (garis berwarna merah). Untuk membuat visualisasi dalam bentuk grafik, dapat mengikuti:

plot(train$wt, train$mpg)
abline(model_simple, col = "red")

baris pertama, kita membuat sebuah plot dengan sumbu x adalah variabel wt dari data train, sedangkan sumbu y adalah variabel mpg dari data train. Pada baris kedua, kita membaut sebuah line dengan warna merah dari model_simple yang telah dibuat sebelumnya

Kemudian, untuk melihat performa model, kita bisa cek dengan fungsi summary().

summary(model_simple)
## 
## Call:
## lm(formula = mpg ~ wt, data = train)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -4.6037 -2.6129 -0.1983  1.3715  6.5714 
## 
## Coefficients:
##             Estimate Std. Error t value Pr(>|t|)    
## (Intercept)  38.2943     2.2919   16.71 5.50e-14 ***
## wt           -5.6437     0.7171   -7.87 7.73e-08 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 3.336 on 22 degrees of freedom
## Multiple R-squared:  0.7379, Adjusted R-squared:  0.726 
## F-statistic: 61.94 on 1 and 22 DF,  p-value: 7.733e-08

Pada summary dari model yang sudah kita buat, kita akan fokus pada suatu model evaluasi pada regresi, yakni Multiple R-Squared. Pada summary di atas, kita dapatkan nilai multiple r-squared 0.7379, artinya berat mobil (variabel wt) mampu berpengaruh 73% terhadap iritnya bensin (variabel mpg).

Pada bagian koefisien, nilai estimasi untuk intercept adalah 38.2943. Nilai ini adalah nilai β_0 pada formulasi. Hal ini berarti jika nilai wt=0 maka nilai mpg adalah 38.2943. Selanjutnya masih pada bagian koefisien, untuk variabel wt nilai estimasi adalah -5.6437. Nilai ini merupakan nilai β_1. Artinya, untuk setiap kenaikan nilai wt sebanyak 1 maka nilai mpg akan menurun sebanyak 5.6437. Sehingga model regresi linear yang dilakukan ini memiliki formulasi:

Formulasi model:

\[\hat{y} = 38.2943-5.6437x_1 \] di mana: y = nilai mpg x_1 = nilai wt

Dari model hasil training, kita bisa mencobakannya pada data test. Hal ini bisa dilakukan dengan menuliskan: Dalam hal ini, kita akan prediksi pemodelan machine learning kita ke data test yang merupakan partisi 25% dari data awal. Untuk melakukan prediksi, bisa digunakan fungsi predict(). Model_simple adalah model regresi linear sederhana yang kita ciptakan sedangan test adalah data test yang digunakan untuk mencobakan model

pred <- predict(model_simple, test)

Setelah dilakukan prediksi, kita bisa membandingkan data aktual dengan hasil prediksi dari model yang telah kita buat sebelumnya

library(dplyr)
## Warning: package 'dplyr' was built under R version 4.0.5
## 
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
## 
##     filter, lag
## The following objects are masked from 'package:base':
## 
##     intersect, setdiff, setequal, union
cbind(test, pred) %>% 
  select(wt, mpg, pred)
##                        wt  mpg      pred
## Mazda RX4 Wag       2.875 21.0 22.068598
## Valiant             3.460 18.1 18.767014
## Merc 450SE          4.070 16.4 15.324337
## Merc 450SL          3.730 17.3 17.243206
## Lincoln Continental 5.424 10.4  7.682721
## Toyota Corona       2.465 21.5 24.382529
## Camaro Z28          3.840 13.3 16.622395
## Pontiac Firebird    3.845 19.2 16.594177

Evaluasi model

Setelah kita membandingkan data prediksi dan aktualnya, selanjutnya kita bisa mengevaluasi model kita dengan melihat errornya. Ada beberapa jenis error yang bisa digunakan dalam analisis regresi. Pada kesempatan kali ini, kita akan menggunakan RMSE (Root Mean Squared Error). Di sini kami menggunakan RMSE karena RMSE mudah dalam interpretasinya.

Adapun untuk menghasilkan nilai RMSE, kita bisa menggunakan library MLmetrics dengan fungsi RMSE().

# install.packages("MLmetrics")
library(MLmetrics)
## Warning: package 'MLmetrics' was built under R version 4.0.5
## 
## Attaching package: 'MLmetrics'
## The following object is masked from 'package:base':
## 
##     Recall
RMSE(pred, test$mpg)
## [1] 2.12921

Berdasarkan output di atas, nilai RMSE yang dihasilkan sebesar 2.12921, artinya rata-rata nilai prediksi melenceng sebesar 2.12921 dari nilai aktualnya.

Regresi linear ganda

Regresi linear ganda merupakan pemodelan regresi menggunakan lebih dari satu variabel prediktor.

\[\hat{y} = \beta_0+\beta_1x_1+\beta_2x_2+...+\beta_nx_n\]

Studi kasus:

Misal kita ingin mencari jenis mobil mana yang paling irit bensinnya, sehingga target variabelnya adalah mpg (Mile per Gallon), artinya semakin besar mpg, maka semakin irit mobil tersebut. Variabel mpg akan diprediksi berdasarkan 10 prediktor lainnya (cyl, disp, …, carb)

model <- lm(formula = mpg~., data = train)
summary(model)
## 
## Call:
## lm(formula = mpg ~ ., data = train)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -3.8716 -1.4396 -0.2198  0.9323  4.5936 
## 
## Coefficients:
##             Estimate Std. Error t value Pr(>|t|)  
## (Intercept) 20.98196   24.74765   0.848   0.4119  
## cyl         -0.99604    1.51179  -0.659   0.5215  
## disp         0.02254    0.02715   0.830   0.4214  
## hp          -0.02000    0.03365  -0.595   0.5624  
## drat         0.17566    2.20339   0.080   0.9377  
## wt          -4.61242    2.47272  -1.865   0.0849 .
## qsec         0.85700    0.91506   0.937   0.3661  
## vs           0.78745    2.58224   0.305   0.7652  
## am           2.44769    2.92110   0.838   0.4172  
## gear        -0.09011    2.11439  -0.043   0.9667  
## carb         0.30068    1.06592   0.282   0.7823  
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 2.957 on 13 degrees of freedom
## Multiple R-squared:  0.8783, Adjusted R-squared:  0.7847 
## F-statistic: 9.383 on 10 and 13 DF,  p-value: 0.0001925

kita menggunakan argumen formula = mpg~. Hal ini maksudnya adalah kita menggunakan semua variabel sebagai prediktor untuk sebuah target mpg. Data yang digunakan untuk membuat model adalah data train.

Berikut interpretasi berdasarkan hasil summary di atas: • Call: formula yang digunakan untuk membuat model • Residuals: Sebaran error dari hasil prediksi • Coefficients: a. Estimate: – Intercept: Ketika semua prediktor bernilai 0, maka mpg = 35.70861 – cyl: Ketika cyl naik 1 akan berkontribusi negatif sebesar -1.41561 terhadap mpg – disp: Ketika disp naik 1 akan berkontribusi positif sebesar 0.03338 terhadap mpg – dst

  1. Pr(>|t|): merupakan p-value yang menunjukkan apakah variabel tertentu berpengaruh signifikan secara statistik terhadap variabel target atau tidak

• Signif. codes: Merupakan acuan dari lambang di sebelah Pr(>|t|). Misal kita menentukan alpha = 5%, artinya variabel prediktor yang signifikan akan dilambangkan dengan ‘.’ dan • Multiple R-squared: Merupakan model evaluasi untuk simple linear regression (model yang dibangun menggunakan 1 prediktor), dalam kasus ini digunakan lebih dari satu prediktor, sehingga multiple r-squared tidak dijadikan acuan. • Ajusted R-squared: Merupakan model evaluasi untuk multiple linear regression, 0.9016 artinya, mpg dapat dijelaskan sebesar 90% oleh prediktor-prediktor yang dimasukkan dalam model. Sisanya dijelaskan oleh prediktor lain.

Dari hasil model yang sudah dibangun, dari Gambar 32 kita bisa menyimpulkan formulasi persamaan multi-linear regresi yang dibangun adalah sebagai berikut. \[\hat{y} = 20.98196-0.99604x_1+0.02254x_2-0.02000x_3+0.17566x_4-4.61242x_5+0.85700x_6 + 0.78745x_7+2.44769x_8-0.09011x_9+0.30068x_10 \]

di mana:

y ̂ = mpg x_1= cyl x_2= disp x_3= hp x_4= drat x_5= wt x_6= gsec x_7= vs x_8= am x_9= gear x_10= carb

Memprediksi hasil regresi linear ganda

Setelah membuat pemodelan, kita dapat memprediksi model kita untuk data test yang sudah kita persiapkan sebelumnya. Hal ini dilakukan dengan syntax

library(dplyr)
pred <- predict(model, test)
cbind(test, pred) %>% 
  select(mpg, pred)
##                      mpg     pred
## Mazda RX4 Wag       21.0 21.71246
## Valiant             18.1 20.64933
## Merc 450SE          16.4 12.94019
## Merc 450SL          17.3 14.67981
## Lincoln Continental 10.4 10.79525
## Toyota Corona       21.5 25.01139
## Camaro Z28          13.3 13.08460
## Pontiac Firebird    19.2 16.27870

Mengecek RMSE model multi-linear regresi

Tahap selanjutnya adalah mengecek RMSE model

library(MLmetrics)
RMSE(pred, test$mpg)
## [1] 2.421486

Nilai RMSE sebesar “4.371095”, artinya rata-rata nilai prediksi melenceng sebesar “4.371095” dari nilai aktualnya.