Regresi Linear Multivariabel (Supervised Learning) dengan dataset ‘Boston Housing’ — Part 2

Lutfi
4 min readApr 17, 2022

--

Bagaimana meningkatkan performa model untuk prediksi harga rumah di Boston dengan regresi linear multivariabel

Baseline Model menggunakan Regresi Linear Sederhana

Di tulisan sebelumnya, kita mencoba melakukan prediksi nilai medv menggunakan rm dengan menggunakan regresi linear sederhana. Namun hasil dari model tersebut tidak baik dan hanya bisa menjelaskan 37% variansi pada medv menggunakan data test. Di tulisan kali ini kita akan mencoba meningkatkan performa model regresi linear dengan menggunakan lebih banyak variabel dan melihat performa dari segi RSME dan R2.

Preprocess Data

Sebelum melakukan permodelan mari lihat apakah ada yang dapat diproses dari data input. Di sini kita melakukan mapping untuk distribusi nilai dari setiap kolom variabel dependen-nya.

Dari plot tersebut, ada beberapa kolom yang datanya terlihat skewed, yaitu: crim , zn , dis , dan lstat . Maka, kita akan melakukan transformasi log terhadap kolom tersebut.

#transformasi logaritma

Selain melakukan transformasi logaritma, kita juga akan melakukan normalisasi data agar semua range menjadi antara 0 dan 1.

#normalisasi data dengan sklearn

Setelah preprocessing data selesai, kita siap memasuki tahapan training model regresi linear multivariabel kita.

Modelling

Tahap 1: Memecah data training dan testing

Tahap 2: Handling Kolinearitas dengan bantuan nilai VIF

Dari nilai VIF, ada 4 variabel yang memiliki nilai VIF yang esktrim yaitu rad, tax, crim, dan dis . Kita perlu menghapus salah satunya. Evaluasi mana yang perlu dihapus akan dilakukan dengan menggunakan correlation heatmap.

# heatmap correlationdf_train = pd.concat([feature_housing_train, target_housing_train], axis=1)corr = df_train.corr()mask = np.triu(np.ones_like(corr, dtype=bool))plt.figure(figsize=(10,7))sns.heatmap(corr, annot=True, fmt='.2f', mask = mask, square=True)plt.show()

Dari correlation heatmap, kita menggunakan kondisi menghapus variabel jika korelasinya di atas +/- 0.8, maka dipilih lah rad, dis, dan crim untuk dihapus.

# drop redundant featuresfeature_housing_train = feature_housing_train.drop(columns=['rad','dis','crim'])feature_housing_test = feature_housing_test.drop(columns=['rad','dis','crim'])

Setelah melakukan handling collinearity, nilai VIF menjadi lebih baik.

Tahap 3: Training Model

from sklearn.linear_model import LinearRegression# define the modelmulti_reg = LinearRegression()# train the modelX_housing_train = feature_housing_train.to_numpy()y_housing_train = target_housing_train.to_numpy()multi_reg.fit(X_housing_train, y_housing_train)

Koefisien Model

# retrieve the coefficients# show as a nice dataframedata = feature_housing_trainmodel = multi_regcoef_df = pd.DataFrame({'feature':['intercept'] + data.columns.tolist(),'coefficient':[model.intercept_[0]] + list(model.coef_[0])})coef_df

Diagnostic Model

Variansi distribusi kurang lebih acak.

QQ Plot

Hasil QQ plot bisa dianggap normal.

Evaluasi Model

# Training Set

The evaluation for training set 
--------------------------------------
RMSE is 0.101
R2 score is 0.764

Interpretasi dari data ini (R2) adalah 76.4% variability dari medv dapat dijelaskan oleh semua fitur dalam model ini. Hasil ini jauh lebih baik dari baseline model kita sebelumnya yang hanya memiliki nilai 50.5% untuk evaluasi training sets.

# Testing Set

The evaluation for test set 
--------------------------------------
RMSE is 0.104
R2 score is 0.701

Interpretasi dari data ini (R2) adalah 70.1% variability dari medv pada data testing dapat dijelaskan oleh semua fitur dalam model ini. Artinya model ini cukup dapat mengeneralisasi ke data set yang belum pernah dilihat.

About Me

Saat ini saya bekerja sebagai researcher di bidang Edtech. Lulusan Institut Teknologi Bandung jurusan Manajemen Rekayasa Industri tahun 2012. Saya juga merupakan alumni pertukaran pelajar AFS-YES tahun 2011 selama 1 tahun ke Amerika Serikat di tahun 2011. Hubungi saya lewat LinkedIn dan kunjungi Github saya.

--

--

Lutfi
0 Followers

Researcher di bidang edtech dengan pengalaman 3 tahun di industri. Tertarik di dunia data dan data science. Lulusan Institut Teknologi Bandung angkatan 2012.