Machine Learning: Prediksi Harga Sewa Rumah menggunakan Model XGBoost di Python

Hilmy Abdul Aziz
6 min readJul 27, 2023

--

Machine Learning, sebagai salah satu cabang kecerdasan buatan (AI) yang menarik perhatian banyak penggemar teknologi. Pada dasarnya, machine learning adalah algoritma atau model yang secara otomatis meningkatkan kemampuannya melalui “pembelajaran”, sehingga semakin terampil dalam menyelesaikan tugas-tugasnya. Penerapan machine learning telah menyebar luas dan menjadi bagian penting dalam berbagai industri seperti kedokteran, e-commerce, perbankan, dan lainnya. Hari ini, kita akan menguraikan proses machine learning dan memahami langkah-langkahnya mulai dari konsep dasar hingga penerapan praktisnya.

7 Langkah Machine learning di Python menggunakan XGBoost

Pengumpulan dan Pemahaman Data

Langkah pertama, mulailah dengan mengumpulkan data yang relevan untuk masalah yang ingin kita selesaikan. Pahami struktur data, tipe variabel, serta hubungan antar variabel dalam dataset tersebut. Dataset yang saya gunakan adalah “brazilian_houses_to_rent” yang telah diunduh melalui kaggle.

Sebelum memasukan data kedalam python, pastikan anda sudah memasukan Libraries yang akan anda gunakan. Berikut Python Libraries yang saya gunakan:

import pandas as pd
import numpy as np
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_squared_error, r2_score
from xgboost import XGBRegressor

Setelah memasukan Python Libraries, kita dapat mulai memasukan dataset yang kita gunakan.

# memasukan dataset
df = pd.read_csv("sewarumah.csv",sep=';', error_bad_lines=False)
df.head()
Hasil Memasukan Dataset kedalam Python

Keterangan untuk dataset:

city : Kota tempat properti berada / Kota tempat properti berada.

area : Area properti.

rooms : Jumlah kamar.

bathroom : Jumlah kamar mandi.

parking spaces : Jumlah tempat parkir.

floor : Jumlah lantai/tingkat bangunan.

animal : Boleh membawa peliharaan.

furniture : Furniture.

hoa : Pajak asosiasi pemilik rumah.

rent amount : Harga sewa.

property tax : Pajak properti.

fire insurance : Asuransi Kebakaran.

total : Total.

Preprocessing Data

Langkah kedua, lakukan pembersihan dan preprocessing data, termasuk mengatasi data yang hilang (missing values), mengubah data kategorikal menjadi numerik, normalisasi, dan standardisasi data jika diperlukan.

Pada dataset ini, saya melakukan beberapa preprocessing seperti mengubah data kategorikal menjadi numerik, Mengganti nilai ‘-’ dengan 0, Mengubah tipe data menjadi float, dan memilih variabel yang akan digunakan.

# Preprocessing data

# Kolom 'animal' dan 'furniture' merupakan data kategorikal yang perlu diubah menjadi numerik
df['animal'] = df['animal'].map({'acept': 1, 'not acept': 0})
df['furniture'] = df['furniture'].map({'furnished': 1, 'not furnished': 0})

# Mengganti nilai '-' pada kolom 'hoa', 'propertytax', 'fireinsurance', dan 'floor' dengan 0
df[['hoa', 'propertytax', 'fireinsurance', 'floor']] = df[['hoa', 'propertytax', 'fireinsurance', 'floor']].replace('-', 0)

# Mengubah tipe data kolom 'hoa', 'propertytax', 'fireinsurance', dan 'floor' menjadi float
df[['hoa', 'propertytax', 'fireinsurance', 'floor']] = df[['hoa', 'propertytax', 'fireinsurance', 'floor']].astype(float)


# Pilih fitur yang akan digunakan untuk memprediksi harga sewa (rentamount)
x = df[['area', 'rooms', 'bathroom', 'parkingspaces', 'floor', 'animal', 'furniture', 'propertytax', 'fireinsurance']].values
y = df['rentamount'].values

Pembagian Data

Langkah ketiga, pisahkan dataset menjadi dua bagian: data latih (training data) dan data uji (test data). Data latih digunakan untuk melatih model, sedangkan data uji digunakan untuk menguji performa model.

Saya membagi dataset ini menjadi dua bagian, yaitu data latih dan data uji dengan 20% dari data akan digunakan sebagai data uji, sementara 80% sisanya akan menjadi data latihan.

# Pisahkan data menjadi data latihan dan data uji
X_train, X_test, y_train, y_test = train_test_split(x, y, test_size=0.2, random_state=100)

Pemilihan dan Pelatihan Model

Langkah keempat, pilih model machine learning yang paling sesuai dengan tipe masalah yang kita hadapi dan latih model kita dengan menggunakan data latih yang sudah dipersiapkan sebelumnya. Sesuai dengan judul, machine learning yang akan digunakan adalah XGBoost.

# Inisialisasi dan latih model XGBoost
modelxg = XGBRegressor(n_estimators=100, max_depth=3, learning_rate=0.1, random_state=100)
modelxg.fit(X_train, y_train)

Evaluasi Model

Langkah kelima, evaluasi kinerja model menggunakan data uji yang telah dipisahkan sebelumnya. Gunakan metrik evaluasi yang sesuai untuk mengukur seberapa baik model yang kita dapatkan untuk melakukan prediksi.

# Prediksi harga sewa untuk data uji
pred = modelxg.predict(X_test)

# Evaluasi kinerja model
msexg = mean_squared_error(y_test, pred)
rmsexg = np.sqrt(msexg)
r_squaredxg = r2_score(y_test, pred)

print("R-squared:", r_squaredxg)
print("RMSE:", rmsexg)
Hasil Evaluasi Model

Diperoleh nilai R-squared sebesar 0.9923805882127978 menunjukkan bahwa sekitar 99.24% variabilitas dalam data target dapat dijelaskan oleh model. Dan diperoleh RMSE sebesar 303.23634690477786 menunjukkan bahwa rata-rata selisih antara nilai prediksi model dan nilai sebenarnya sekitar 303, yang merupakan ukuran tingkat akurasi model tersebut. Semakin rendah nilai RMSE, semakin akurat model.

Penyetelan Model (Model Tuning)

Langkah keenam, lakukan penyetelan parameter (hyperparameter tuning) jika diperlukan. Gunanya untuk meningkatkan kinerja model. kita dapat menggunakan teknik seperti validasi silang (cross-validation) untuk mengoptimalkan parameter-model.

Kita telah mencapai hasil yang sangat baik dengan R-squared sekitar 0.992 dan RMSE sekitar 303, maka kemungkinan besar model kita sudah cukup baik dan sudah cocok dengan data yang digunakan. Jadi, tidak ada keharusan untuk melakukan penyetelan model (model tuning) lebih lanjut.

Penyetelan model (model tuning) biasanya diperlukan ketika performa model belum optimal dan perlu ditingkatkan. Tujuan dari penyetelan model adalah untuk mencari kombinasi parameter atau konfigurasi model yang paling baik untuk dataset tertentu. Hal ini dilakukan untuk meningkatkan kinerja model, mengurangi overfitting atau underfitting, dan membuat prediksi yang lebih akurat.

Prediksi

Langkah ketujuh, setelah model dilatih dan disetel dengan baik, gunakan model tersebut untuk melakukan prediksi pada data baru atau data yang belum pernah dilihat sebelumnya. Kita menggunakan data uji (test data) yang telah dipisahkan sebelumnya saat proses preprocessing. Kemudian kita dapat menyimpan hasil prediksi kedalam format CSV.

# Prediksi harga sewa untuk data uji
pred = modelxg.predict(X_test)

# Buat DataFrame untuk hasil prediksi
hasil_prediksi = pd.DataFrame({'Actual Rent': y_test, 'Predicted Rent': pred})

# Cetak hasil prediksi ke dalam file CSV
hasil_prediksi.to_csv('hasil_prediksi.csv', index=False)
Beberapa Hasil Prediksi

Kesimpulan

Kesimpulan dari hasil di atas adalah bahwa model XGBoost yang telah kita latih memberikan hasil yang sangat baik dalam memprediksi harga sewa rumah berdasarkan fitur-fitur yang telah kita pilih dari dataset. Model XGBoost mampu menjelaskan sekitar 99.24% variasi data target (harga sewa) yang dapat dijelaskan oleh fitur-fitur yang digunakan. Nilai RMSE yang rendah (sekitar 303.24) menunjukkan bahwa model XGBoost memiliki tingkat kesalahan prediksi yang relatif kecil.

Hasil tersebut menunjukkan bahwa model XGBoost adalah pilihan yang sangat baik untuk tugas prediksi harga sewa rumah dalam dataset yang digunakan. Model XGBoost adalah salah satu model yang kuat dan sering digunakan karena kemampuannya untuk memberikan performa yang sangat baik dalam berbagai tugas machine learning.

Namun, perlu diingat bahwa hasil evaluasi kinerja model sangat tergantung pada pemilihan fitur yang tepat, tuning parameter yang optimal, serta kualitas dan representativitas dataset. Selain itu, penting juga untuk menghindari overfitting, yaitu kondisi ketika model terlalu cocok dengan data latihan dan tidak dapat melakukan generalisasi dengan baik pada data yang belum pernah dilihat sebelumnya.

Dengan demikian, kesimpulan dari hasil tersebut adalah model XGBoost telah berhasil dengan sangat baik dalam memprediksi harga sewa rumah dan dapat menjadi pilihan yang baik untuk aplikasi dunia nyata dalam prediksi harga sewa rumah berdasarkan fitur-fitur yang ada pada dataset tersebut.

Referensi

Martinez, J. C. (2020, Juni 2). 7 Steps of Machine Learning. Retrieved from Live Code Stream: https://livecodestream.dev/post/7-steps-of-machine-learning/

Tuychiev, B. (2023, Februari). Using XGBoost in Python Tutorial. Retrieved from Live Data Camp: Learn XGBoost in Python: A Step-by-Step Tutorial | DataCamp

Retrieved from Live GitHub: Get Started with XGBoost — xgboost 1.7.6 documentation

--

--