Analisa Regresi Linear
ditulis oleh Tinara Nathania Wiryonoputro dan Michelle Alexandra Dinata
Regresi Linear merupakan metode statistik yang berfungsi untuk menguji sejauh mana hubungan sebab akibat antara variabel faktor penyebab (x) terhadap variabel akibatnya (y). Pada kasus ini, terdapat satu variabel independen dan satu variabel dependen. Namun, ada banyak kasus dimana terdapat lebih dari satu variabel independen yang mempengaruhi variabel dependen tersebut, inilah saatnya untuk menggunakan Multiple Linear Regression (MLR).
Perbedaan klasifikasi dengan regresi:
Regresi dan klasifikasi adalah teknik yang berguna untuk memetakan proses yang mengarah ke hasil yang dipelajari, baik dalam klasifikasi atau nilai numerik tunggal. Perbedaan antara klasifikasi dan regresi adalah variabel terikatnya. klasifikasi memiliki variabel dependen yang kategoris dan tidak berurutan. regresi memiliki variabel dependen yang merupakan nilai kontinu atau nilai keseluruhan yang diurutkan.
Pro:
- Kinerjanya sangat baik
- Mudah untuk diimplementasikan
Cons:
- Cukup sensitif terhadap outlier
- Asumsi linearitas antara variabel dependen dan independen
Ada satu artikel yang cukup menarik yang ditulis oleh Mohammad Waseem berjudul Data Science with Python. Artikel ini membahas lebih detail mengenai regresi untuk machine learning.
Belajar Menggunakan Dataset Medical Cost
Kita akan menggunakan Google Colab untuk mengerjakan analisa regresi linear ini.
Untuk mengenal lebih dalam lagi, mari kita gunakan satu contoh kasus yang simple. Dalam situasi ini, kita ingin memprediksi biaya asuransi kesehatan. Beberapa variabel yang mempengaruhi biaya tersebut adalah:
- Umur (age)
- Jenis Kelamin (sex) — F/M
- Body Mass Index (bmi)
- Jumlah anak (children)
- Perokok (smoker) — Yes/No
- Wilayah (region) — Southwest/Northwest
Kita akan melihat seberapa besar pengaruh setiap variabel terhadap variabel dependen (biaya asuransi).
Yang harus kita lakukan adalah:
Step 1 — Download dataset dan masukkan ke github
1.1 Buat repository baru untuk memasukkan dataset yang ada. Disini saya membuat sebuah repository baru bernama dataset. Upload file csv ke repository github yang telah dibuat. Lalu klik file bernama “insurance.csv” untuk step berikutnya.
Repository bernama “dataset”
1.2 Setelah masuk ke halaman datase/insurance.csv, klik tombol raw yang ada di sebelah kanan untuk mendapatkan link. Setelah di-redirect ke page baru, copy link raw.githubusercontent.com
Raw File insurance.csv
Step 2 — Lakukan import library
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
from sklearn.linear_model import LinearRegression
from sklearn.preprocessing import LabelEncoder
Di sini, kita menggunakan library Python Numpy dan pandas untuk mempermudah kita pada saat mengerjakan. Kegunaan library pyplot dan Seaborn hanyalah untuk membuat visual plot yang interaktif. Dengan begitu, kita bisa mudah mengerti dataset medical cost. Terakhir, sklearn sangat berguna untuk menyediakan berbagai algoritma pembelajaran yang diawasi (supervised) dan yang tidak diawasi (unsupervised).
Step 3 — Import Dataset
3.1. Copy paste link raw.githubusercontent.com dan masukkan ke sebagai variabel path.
path = “https://raw.githubusercontent.com/tinaranw/dataset/main/insurance.csv"
dataset = pd.read_csv(path)
dataset.head()
Hasil dataset.head()
3.2. Tipe data untuk setiap kolom tidak boleh berupa string, sehingga kita harus mengganti semuanya menjadi angka. Semisal, kolom sex memiliki dua nilai, yaitu female atau male. Label Encoder akan mengubah nilai tersebut menjadi 0 dan 1 sehingga data dapat diproses.
le = LabelEncoder()
dataset.sex = le.fit_transform(dataset.sex)
dataset.smoker = le.fit_transform(dataset.smoker)
dataset.region = le.fit_transform(dataset.region)
Step 4 — Membuat Diagram
Apabila Univariate, gunakan boxplot untuk membuat diagram. Apabila Multivariate, gunakan pairplot.
4.1 Univariate
4.1.1 Load tabel dataset
dataset.describe()
Hasil dari dataset.describe()
4.1.2 Buatlah plot untuk kolom data indenpen yang bersifat continuous. Dalam kasus ini, kita tidak perlu memasukkan “sex”, “smoker”, dan “region” karena datanya discreet.
sns.boxplot(data=dataset[["age","bmi","children"]])
Plot data independen ‘age’, ‘bmi’, ‘children’
4.1.3 Buatlah plot untuk kolom data dependen yaitu “charges”.
sns.boxplot(data=dataset[["charges"]])
Plot data dependen ‘charges’
4.1.4 Buatlah pie chart untuk kolom data yang bersifat discreet seperti “sex’” “smoker”, “region”.
#Pie chart kolom sexsex_grp, sex_grp_count = np.unique(dataset["sex"],return_counts=True)
plt.pie(sex_grp_count , labels = sex_grp, autopct="%1.2f%%")
plt.axis("equal")
plt.title("Sex Group Composition", pad=20)
plt.show()#Pie chart kolom smokersmoker_grp, smoker_grp_count = np.unique(dataset["smoker"],return_counts=True)
plt.pie(smoker_grp_count , labels = smoker_grp, autopct="%1.2f%%")
plt.axis("equal")
plt.title("Smoker Group Composition", pad=20)
plt.show()#Pie chart kolom regionregion_grp, region_grp_count =
np.unique(dataset["region"],return_counts=True)
plt.pie(region_grp_count , labels = region_grp, autopct="%1.2f%%")
plt.axis("equal")
plt.title("Region Group Composition", pad=20)
plt.show()
4.2 Multivariate
4.2.1 Buatlah pairplot untuk kolom data yang bersifat continuous.
sns.pairplot(dataset[["age","bmi","children"]])
plt.show()
Hasil pairplot
4.2.1 Buatlah heatmap untuk kolom data yang bersifat continuous.
df = dataset[[“age”, “bmi”, “children”]]
sns.heatmap(df.corr(), vmin=-1, vmax=1, cmap="coolwarm", annot=True)
plt.show()
Hasil heatmap
Step 5 — Menentukan Variabel X (mempengaruhi) dan Y (dipengaruhi)
X = dataset[[“age”, “sex”, “bmi”, “children”, “smoker”, “region”]]
y = dataset[“charges”]
Step 6 — Tentukan coefficient dari setiap variabel independen dan y-intercept
result = LinearRegression()
result.fit(X, y)
print(“Intercept: {:0.4f}”.format(result.intercept_))
print(“Coefficient b1: {:0.4f}”.format(result.coef_[0]))
print(“Coefficient b2: {:0.4f}”.format(result.coef_[1]))
print(“Coefficient b3: {:0.4f}”.format(result.coef_[2]))
print(“Coefficient b4: {:0.4f}”.format(result.coef_[3]))
print(“Coefficient b5: {:0.4f}”.format(result.coef_[4]))
print(“Coefficient b6: {:0.4f}”.format(result.coef_[5]))
Output di python
Step 7 — Prediksi biaya asuransi dengan data test.
7.1 Kita pisah dataset terlebih dahulu menjadi data training dan data test
# Split dataset menjadi data training dan data testfrom sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.25, random_state = 0)
7.2 Lalu, kita melakukan kalkulasi y_pred.
y_pred = result.predict(X_test)
evaluate = pd.DataFrame({“y_test”:y_test, “y_pred”:y_pred})
evaluate.head()
7.3 Selanjutnya, kita akan melakukan prediksi dengan dummy data.
result.predict([[42, 1, 30, 2, 0, 0]])
result.predict([[23, 1, 18, 2, 1, 1]])
result.predict([[13, 1, 18, 0, 1, 1]])
Hasil prediksi
Step 8 — Kalkulasi RMSE
Kalian dapat menggunakan bantuan dari data y_testing dan y_prediction.
from sklearn.metrics import mean_squared_error
print(“Root Mean Squared Error (RMSE): “, np.sqrt(mean_squared_error(y_test, y_pred)))
Jika kita bandingkan hasil dari RMSE dengan range data yang ada di dataset, maka RMSE ini masih normal. Tanda jika RMSE bersifat tidak normal yaitu angka yang dihasilkan berada di luar jangkauan yang ada dalam dataset.
Step 9 — Kalkulasi MAPE
y_test, y_pred = np.array(y_test), np.array(y_pred)
print(“Mean Absolute Percentage Error (MAPE): “, np.mean(np.abs((y_test — y_pred)/y_test))*100)
Nilai MAPE yang telah kita dapatkan sebesar 40% dimana angka ini termasuk kedalam angka yang masih masuk akal, arti masuk akal ini menandakan bahwa model yang kita gunakan bisa diandalkan, walaupun peluang errornya cukup besar.
Step 10 — Mendapatkan Model Summary
import statsmodels.api as smX = sm.add_constant(X)
model = sm.OLS(y, X).fit()
print(model.summary())
Model Summary
Mengapa menggunakan metode ini?
- Karena kami ingin memprediksi jumlah biaya yang dikeluarkan
- Ingin mengetahui variabel mana yang memiliki pengaruh yang paling kecil dalam jumlah biaya
Jawaban: jika p-value lebih dari 0.05, maka variabel tersebut tidak terlalu berpengaruh terhadap charges (biaya yang kita cari)
- Ingin mengetahui variabel mana yang memiliki pengaruh yang paling besar dalam jumlah biaya
Jawaban: sangat berpengaruh terhadap charges ada 5, yaitu:
- age
- bmi
- smoker
- children
- region
Kenapa bisa? Hal dikarenakan nilai p-value yang dimiliki oleh variabel berada di bawah 0.05.
Quick Summary:
Setelah melakukan prediksi menggunakan analisis regresi, kita dapat mengetahui jumlah biaya yang akan dikeluarkan seseorang jika ia ingin mendaftar ke dalam sebuah asuransi. Kita juga mampu mengetahui variabel yang memiliki pengaruh yang sangat signifikan terhadap jumlah biaya yang dikeluarkan.
Ref: