Nah dipostingan ini saya akan bahas tentang Simple Linear Regression. Simple Linear Regression merupakan salah satu algoritma supervised, dengan kata lain algoritma ini belajar berdasarkan contoh pada data yang tersedia. Simple Linear Regression dapat memodelkan permasalahan hubungan linear antara sebuah input dan output.
Inti dari Simple Linear Regression adalah menyelesaikan permasalahan garis lurus. Dalam pendekatan ini nilai dan
akan didapatkan dari proses learning atau training.
Contoh Permasalahan Simple Linear Regression
Ok langsung saja kita mulai ke contoh kasus. Dalam kasus ini kita akan memodelkan permasalahan mengenai permasalahan asuransi mobil.
Deskripsi data:
- x = Jumlah tuntutan
- y = Total uang yang dibayarkan untuk seluruh tuntutan
Contoh:
- x = 108 tuntutan
- y = $392.5 untuk 108 tuntutan
Proses Training Simple Linear Regression
Untuk menyelesaikan permasalahan diatas, hal yang perlu kita lakukan adalah menghitung nilai a dan b, hal tersebut dapat diselesaikan dalam lima tahap dibawah ini:
- Hitung nilai rata – rata x dan y
- Hitung varince data
- Hitung covariance data
- Hitung nilai
- Hitung nilai
Implementasi Proses Training Menggunakan Python
Dalam implementasi ini saya menggunakan dua library pada Python pandas dan numpy. Pandas saya gunakan untuk mebaca file csv pada file Data/data.csv dan mengkonversinya menjadi DataFrame dan numpy saya gunakan untuk melakukan perhitungan statistik data. Oh ia, untuk membaca file csv pada pyhton banyak alternatif lainnya seperti menggunakan module csv pada phyton.
#import library pandas dan inisialisasikan menjadi pd import pandas as pd #import library numpy dan inisialisasikan menjadi np import numpy as np #baca data pada file data.csv dalam folder Data menggunakan pandas data = pd.read_csv('Data/data.csv') #assign nilai X (Jumlah Klaim) pada variable x x = data.X.values #assign nilai Y (Total Pembayaran) pada variable y y = data.Y.values #Bagi data menjadi 2 bagian untuk train dan untuk test #ambil nilai x dari urutan pertama hingga 10 terakhir (108 - 13) x_train = x[:-10] #ambil nilai y dari urutan pertama hingga 10 terakhir (392.5 - 31.9) y_train = y[:-10] #ambil 10 data terakhir dari x x_test = x[-10:] #ambil 10 data terakhir dari y y_test = y[-10:] #hitung nilai rata-rata x dan y x_mean = np.mean(x_train) y_mean = np.mean(y_train) #hitung variance x x_var = np.var(x_train, ddof=1) #hitung covariance data cov = np.cov(np.vstack((x_train, y_train)), ddof=1)[0][1] #hitung nilai b b = cov / x_var #hitung nilai a a = y_mean - (b * x_mean)
Proses Testing Simple Linear Regression
Jika pada proses training kita melakukan perhitungan untuk mencari nilai dan
pada model. Pada proses testing hal yang akan kita lakukan adalah melakukan prediksi dengan menghitung nilai y
Implementasi Proses Testing Menggunakan Pyhton
Dalam implementasi ini kita akan menggunkan nilai 10 terakhir dari nilai x yaitu x_test
#y = xb + a predict = x_test * b + a
Hasil prediksi
x_test | predict |
15 | 64.93399 |
8 | 41.55334 |
29 | 111.6953 |
30 | 115.0354 |
24 | 94.99484 |
9 | 44.89343 |
31 | 118.3755 |
14 | 61.5939 |
53 | 191.8576 |
26 | 101.675 |
Evaluasi Model
Setelah melakukan proses training dan testing, hal terakhir yang harus kita lakukan adalah mengevaluasi model. Apakah model kita sudah sesuai dengan data yang ada? Dalam proses evaluasi ini saya akan menggunakan formula Root Mean Square Error atau disingkat RMSE
Dimana adalah nilai prediksi model dan
adalah nilai yang seharusnya. Dengan menggunakan RMSE kita dapat mengetahui nilai rata-rata kesalahan pada model dalam meprediksi nilai total pembayaran untuk sejumlah klaim.
x_test | predict | y_test | (predict – y_test)^2 |
15 | 64.93399 | 32.1 | 1078.07107 |
8 | 41.55334 | 55.6 | 197.308783 |
29 | 111.6953 | 133.3 | 466.76277 |
30 | 115.0354 | 194.5 | 6314.622553 |
24 | 94.99484 | 137.9 | 1840.852976 |
9 | 44.89343 | 87.4 | 1806.808545 |
31 | 118.3755 | 209.8 | 8358.440208 |
14 | 61.5939 | 95.5 | 1149.623703 |
53 | 191.8576 | 244.6 | 2781.765019 |
26 | 101.675 | 187.5 | 7365.926308 |
RMSE = | 56.00016244 |
Implementasi RMSE pada Pyhton
#menghitung RMSE model RMSE = np.sqrt(np.mean(pow(predict - y_test, 2)))
Penjelasan:
- pow(a) =
- np.mean(a) = hitung nilai rata-rata dai vector a
- np.sqrt(a) =
Plot Model
Ok pada bagian ini, saya akan memplot data bersama dengan model menggunakan library matplotlib pada python.
#import library pyplot dari matplotlib dan inisialisasi sebagai plt from matplotlib import pyplot as plt #predict seluruh nilai y untuk seluruh nilai x predict_all = (x * b) + a #plot data y berdasarkan x dengan bentuk circle plt.plot(x, y, 'ro') #plot data predict_all berdasarkan x plt.plot(x, predict_all) #definiskan label untuk garis x plt.xlabel('Jumlah Tuntutan') #definisikan label untuk garis y plt.ylabel('Total Pembayaran') #tampilkan graph plt.show()
Output:
Implementasi Linear Regression Menggunakan Sklearn
Pada Simple Linear Regression pada phyton, kita dapat menggunakan Sklearn. Dengan menggunakan Sklearn kita tidak perlu melakukan coding dari awal, memang lebih praktis tapi perlu diingat bahwa kita perlu memahami tentang cara kerja dari algoritma. Sehingga saya anjurkan untuk melakukan coding dari 0 sebagai berikut:
import pandas as pd from matplotlib import pyplot as plt from sklearn import linear_model import numpy as np #baca data pada file data.csv dalam folder Data menggunakan pandas data = pd.read_csv('Data/data.csv') #reshape data x dan y dari bentuk (1 row 63 columns ke 63 rows 1 columns) x = data.X.values.reshape(63, 1) y = data.Y.values.reshape(63, 1) #ambil nilai x dari urutan pertama hingga 10 terakhir (108 - 13) x_train = x[:-10] #ambil nilai y dari urutan pertama hingga 10 terakhir (392.5 - 31.9) y_train = y[:-10] #ambil 10 data terakhir dari x x_test = x[-10:] #ambil 10 data terakhir dari y y_test = y[-10:] smpReg = linear_model.LinearRegression() #train model smpReg.fit(x_train, y_train) #test model predict = smpReg.predict(x_test) #menghitung RMSE model RMSE = np.sqrt(np.mean(pow(predict - y_test, 2))) #plot data dan model figure = plt.figure(1) plt.plot(x_train, y_train, 'ro') plt.plot(x, smpReg.predict(x)) plt.xlabel('Jumlah Tuntutan') plt.ylabel('Total Pembayaran') plt.show()
Untuk download code