Modul 07 Simple Linear Regression
June 12, 2022
1 Simple Linear Regression
• Pada tutorial kali ini, kita akan menggunakan sebuah dataset yang memiliki 2 features, yaitu
horsepower dan price dari sebuah mobil
• Tujuan dari tutorial ini adalah memprediksi harga mobil jika mobil tersebut mempunyai
horsepower sebesar 100, 150, dan 200
• Hipotesis awal : mobil dengan horsepower lebih tinggi harganya lebih mahal jika dibandingkan
dengan yang horsepowernya lebih rendah.
1.0.1 Load library
[1]: import pandas as pd
import [Link] as plt
from sklearn.linear_model import LinearRegression
from sklearn.model_selection import train_test_split
1.0.2 Load datasets
[2]: #Nama dataframe kita adalah df yang berisi data dari [Link]
#Hanya menggunakan kolom horsepower dan price
df = pd.read_csv('[Link]', usecols=['horsepower', 'price'])
1.0.3 Sneak peak data
[3]: #Melihat 5 baris teratas dari data
#Independent variabel(x) adalah horsepower
#Dependent variabel(y) adalah price
[Link]()
[3]: horsepower price
0 111.0 13495.0
1 111.0 16500.0
2 154.0 16500.0
3 102.0 13950.0
4 115.0 17450.0
1
[4]: #Mengetahui jumlah kolom dan baris dari data
#Data kita mempunya 2 kolom dengan 200 baris
[Link]
[4]: (200, 2)
[6]: #Melihat informasi data kita mulai dari jumlah data, tipe data, memory yang␣
,→digunakan dll.
[Link]()
<class '[Link]'>
RangeIndex: 200 entries, 0 to 199
Data columns (total 2 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 horsepower 200 non-null float64
1 price 200 non-null float64
dtypes: float64(2)
memory usage: 3.2 KB
[7]: #Melihat statistical description dari data mulai dari mean, kuartil, standard␣
,→deviation dll
[Link]()
[7]: horsepower price
count 200.000000 200.000000
mean 103.320000 13230.375000
std 37.468615 7960.155239
min 48.000000 5118.000000
25% 70.000000 7775.000000
50% 95.000000 10320.000000
75% 116.000000 16500.750000
max 262.000000 45400.000000
1.0.4 Handling Missing Values
[31]: #Mencari dan menangani missing values
#Ternyata data kita tidak ada missing values
[Link]().sum()
[31]: horsepower 0
price 0
dtype: int64
2
1.0.5 Exploratory Data Analysis (EDA)
[8]: #Univariate analysis horsepower
#Melihat distribusi dari horsepower
f = [Link](figsize=(12,4))
f.add_subplot(1,2,1)
df['horsepower'].plot(kind='kde')
f.add_subplot(1,2,2)
[Link](df['horsepower'])
[Link]()
• Dapat dilihat bahwa density dari horsepower paling tinggi di nilai 100.
• Distribusinya hampir mirip dengan distribusi normal namun persebaran data kurang merata
(memiliki standard deviasi yang tinggi).
[69]: #Univariate analysis price
#Melihat distribusi dari price
f = [Link](figsize=(12,4))
f.add_subplot(1,2,1)
df['price'].plot(kind='kde', c='g')
f.add_subplot(1,2,2)
[Link](df['price'])
[Link]()
3
• Density dari price paling tinggi di nilai 10000.
• Distribusinya hampir mirip dengan distribusi normal namun persebaran data kurang merata
(memiliki standard deviasi yang tinggi).
[34]: #Bivariate analysis horsepower dan price
#Menggunakan scatter plot
[Link](df['horsepower'], df['price'])
[Link]('Horsepower')
[Link]('Price')
[Link]('Scatter Plot Horsepower vs Price')
[Link]()
4
• Dari scatter plot dapat dilihat bahwa data memiliki korelasi positif yang cukup signifikan.
• Hal ini berarti dengan bertambahnya nilai dari horsepower maka nilai price pun akan bertam-
bah
[35]: #Mengetahui nilai korelasi dari horsepower dan price
#Nilai korelasinya adalah 0.81 termasuk kategori sangat tinggi
[Link]()
[35]: horsepower price
horsepower 1.000000 0.811097
price 0.811097 1.000000
• Setelah kita tahu tentang karakteristik data kita, bisa dilanjutkan ke tahap modelling
1.0.6 Modelling
[36]: #Recall data kita
[Link]()
[36]: horsepower price
0 111.0 13495.0
1 111.0 16500.0
2 154.0 16500.0
3 102.0 13950.0
4 115.0 17450.0
[9]: #Pertama, buat variabel x dan y
x = df['horsepower'].[Link](-1,1)
y = df['price'].[Link](-1,1)
[10]: #Kedua, kita split data kita menjadi training and testing dengan porsi 80:20
x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.2)
[11]: #Ketiga, kita bikin object linear regresi
lin_reg = LinearRegression()
[13]: #Keempat, train the model menggunakan training data yang sudah displit
lin_reg.fit(x_train, y_train)
[13]: LinearRegression()
[14]: #Kelima, cari tau nilai slope/koefisien (m) dan intercept (b)
print(lin_reg.coef_)
print(lin_reg.intercept_)
[[171.93277579]]
[-4522.89780842]
5
• dari nilai m dan b diatas, kalau dimasukan ke dalam rumus menjadi: Y = 164.73x - 3903.39
[15]: #Keenam, kita cari tahu accuracy score dari model kita menggunakan testing data␣
,→yang sudah displit
lin_reg.score(x_test, y_test)
[15]: 0.769360504968589
• Model kita mendapatkan accuracy score sebesar 78.68%
[16]: #Ketujuh, visualisasi aktual vs prediksi menggunakan data testing
#Garis merah merupakan garis regresi dari persamaan yang kita dapat tadi
y_prediksi = lin_reg.predict(x_test)
[Link](x_test, y_test)
[Link](x_test, y_prediksi, c='r')
[Link]('Horsepower')
[Link]('Price')
[Link]('Plot Horsepower vs Price')
[16]: Text(0.5, 1.0, 'Plot Horsepower vs Price')
1.0.7 Prediction
• Yuk kita prediksi harga mobil ketika memiliki horsepower 100, 150, dan 200
6
[17]: #Prediksi harga mobil dengan horsepower 100
lin_reg.predict([[100]])
[17]: array([[12670.3797705]])
[18]: #Prediksi harga mobil dengan horsepower 150
lin_reg.predict([[150]])
[18]: array([[21267.01855996]])
[74]: #Prediksi harga mobil dengan horsepower 200
lin_reg.predict([[200]])
[74]: array([[29044.0245815]])
• dengan melihat prediksi harga diatas, didapatkan bahwa hipotesis awal kita memang benar
yaitu mobil dengan Horsepower 200 memiliki harga yang lebih mahal daripada yang lain!