Industri otomotif memiliki peran penting dalam ekonomi global 1. Salah satu tantangan terbesar yang dihadapi oleh industri ini adalah penentuan harga jual kendaraan. Dengan banyaknya faktor yang mempengaruhi harga kendaraan, seperti usia kendaraan, merek, jumlah kilometer yang telah ditempuh, jenis bahan bakar, dan banyak lagi, penting bagi penjual dan pembeli untuk memiliki alat yang dapat memprediksi harga jual dengan akurasi tinggi dan memperhatikan hasil evaluasi model 2. Penentuan harga yang tidak akurat dapat merugikan baik penjual maupun pembeli.
Memprediksi harga jual kendaraan dengan akurat memungkinkan pelaku industri otomotif untuk membuat keputusan yang lebih baik dan mengurangi kerugian finansial. Dengan menggunakan metode machine learning, kita dapat membangun model prediktif yang mampu memperkirakan harga jual berdasarkan fitur-fitur kendaraan yang relevan 3 4.
Dataset yang digunakan dalam proyek ini adalah Vehicle Dataset from Cardekho, yang terdiri dari 8128 entri dengan 13 kolom. Dataset ini berisi informasi tentang berbagai fitur kendaraan, termasuk tahun produksi, harga jual, jarak tempuh, jenis bahan bakar, dan lainnya.
Dataset dapat diunduh dari Kaggle - Vehicle Dataset from Cardekho.
Distribusi data kategorikal.
Pada grafik menunjukkan lima merek kendaraan dengan jumlah terbanyak, dengan merek teratas memiliki sekitar 2000 kendaraan.
Kendaraan lebih didominasi berbahan bakar diesel dan petrol.
Jenis transmisi manual jauh lebih dominan dibandingkan otomatis, mencapai hampir 10.000 kendaraan.
Distribusi data numerical
Distribusi harga jual mobil menunjukkan skewness positif, dengan sebagian besar mobil dijual dengan harga lebih rendah dan beberapa dengan harga sangat tinggi. Kapasitas mesin mobil cenderung simetris atau sedikit skewness negatif, menunjukkan distribusi yang merata. Pada BAP juga menunjukkan skewness positif, dengan sebagian besar mobil memiliki tenaga kuda yang lebih rendah. Efisiensi bahan bakar memiliki skewness negatif, menunjukkan sebagian besar mobil memiliki efisiensi yang baik. Usia mobil menunjukkan skewness positif, dengan sebagian besar mobil berusia lebih muda.
Outlier Detection:
Sebagian besar variabel menunjukkan adanya outliers, yang berarti ada kendaraan-kendaraan tertentu yang sangat berbeda dari mayoritas lainnya dalam hal harga jual, jarak tempuh, efisiensi bahan bakar, kapasitas mesin, tenaga mesin, dan umur.
Mayoritas data cenderung terkonsentrasi pada rentang yang lebih rendah, dengan distribusi yang memanjang di arah yang lebih tinggi, terutama untuk variabel seperti harga jual, jarak tempuh, dan kapasitas mesin.
Heatmap Korelasi
Tidak terlihat adanya korelasi yang cukup besar pada data. Sehingga tidak diperlukan penghapusan atau pengurangan fitur.
Hubungan dua variabel secara bersamaan dan pola distribusi antara beberapa variabel.
Menghapus data yang terdapat missing value dan data duplikat.
dropna()
dan data duplikat dihapus menggunakan drop_duplicates()
.Menghapus kolom data torque dari dataset
drop(['torque'], axis=1, inplace=True)
.Menambahkan dua fitur baru, yaitu brand yang diambil dari name dan age yang dihitung dari perbedaan antara tahun sekarang dengan year:
pop()
dan insert()
.Menghapus unit (satuan) pada data mileage, engine, dan max_power:
remove_unit_and_convert
dengan parameter df, col_name, to_type=float yang digunakan untuk menghapus unit dengan memisahkan string berdasarkan spasi dan mengambil bagian pertama dari hasil pemisahan. Contoh penggunaan fungsi yang dibuat:
df = remove_unit_and_convert(df, 'mileage', float)
Melakukan penghapusan (filter) agar outlier tidak masuk ke dalam pemodelan:
Melakukan Transformasi Logaritma
df_clean['selling_price'] = np.log(df_clean['selling_price'])
df_clean['max_power'] = np.log(df_clean['max_power'])
df_clean['age'] = np.log(df_clean['age'])
Data dibagi menjadi 80% untuk pelatihan (training) dan 20% untuk pengujian (testing):
train_test_split
dari sklearn.model_selection
. Kode yang dijalankan:
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
Mengonversi variabel kategorikal fuel, seller_type, transmission, dan owner ke dalam format numerik menggunakan OrdinalEncoder
:
Linear Regression: Algoritma dasar untuk regresi yang sederhana dan cepat.
Linear Regression bekerja membangun model dengan mencoba menemukan hubungan linier antara fitur mobil (seperti usia, merek, model, dll.) dan harga mobil. Model ini mencari garis (atau hyperplane dalam dimensi lebih tinggi) yang paling baik menggambarkan hubungan antara fitur dan harga.
Untuk model regresi linier, tidak ada parameter yang perlu di-tune karena model ini tidak memiliki hyperparameter yang dapat diubah untuk mengubah kompleksitas atau performanya. Model ini menggunakan parameter default yang sudah diatur dalam algoritma regresi linier, sehingga tidak memerlukan pencarian hyperparameter tambahan.
Random Forest Regressor: Algoritma ensemble yang menggunakan banyak decision tree.
Random Forest Regressor bekerja dengan membuat beberapa pohon keputusan menggunakan subset acak dari data pelatihan dan fitur. Setiap pohon memberikan prediksi harga mobil, dan hasil akhirnya adalah rata-rata dari semua prediksi pohon, yang membantu mengurangi overfitting dan meningkatkan akurasi.
Parameter Gridsearch:
regressor__n_estimators
menentukan jumlah pohon dalam hutan acak, dengan nilai yang diuji adalah [50, 100, 200]. Parameter ini mempengaruhi kekuatan model, di mana lebih banyak pohon dapat meningkatkan akurasi tetapi juga memerlukan lebih banyak waktu komputasi.regressor__max_depth
menentukan kedalaman maksimum dari setiap pohon, dengan nilai yang diuji meliputi [None, 10, 20, 30]. Kedalaman yang lebih besar memungkinkan model menangkap lebih banyak informasi, tetapi dapat meningkatkan risiko overfitting.regressor__min_samples_split
mengatur jumlah minimum sampel yang diperlukan untuk membagi node internal, dengan nilai yang diuji adalah [2, 5, 10]. Nilai ini mempengaruhi bagaimana pohon dibagi dan seberapa mendetail struktur pohon yang dibangun.Gradient Boosting: Algoritma ensemble yang membangun model secara bertahap.
Gradient Boosting bekerja dengan membangun model prediksi harga mobil dengan secara bertahap menambahkan pohon keputusan kecil. Setiap pohon baru dibangun untuk mengatasi kesalahan yang dibuat oleh pohon sebelumnya, dan proses ini diulang untuk meningkatkan akurasi model.
Parameter Gridsearch:
regressor__n_estimators
menentukan jumlah estimator (pohon keputusan) dalam model boosting, dengan nilai yang diuji adalah [50, 100, 200]. Jumlah estimator mempengaruhi kekuatan model dan kemampuannya dalam menangkap pola data.regressor__learning_rate
mengatur kecepatan belajar model boosting, dengan nilai yang diuji meliputi [0.01, 0.1, 0.2]. Kecepatan belajar yang lebih rendah dapat meningkatkan akurasi model tetapi membutuhkan lebih banyak estimator.regressor__max_depth
menentukan kedalaman maksimum dari setiap pohon dalam model boosting, dengan nilai yang diuji adalah [3, 5, 7]. Kedalaman yang lebih besar dapat menangkap lebih banyak detail tetapi juga dapat menyebabkan overfitting.Dari ketiga model, model dengan nilai MSE terendah dan R^2 tertinggi akan dipilih sebagai model terbaik yang akan disimpulkan pada tahap kesimpulan.
Prediksi
Untuk setiap model dalam dictionary models, pipeline dibuat menggunakan fungsi create_pipeline
, kemudian model dilatih dengan data training (X_train, y_train). Setelah itu, model digunakan untuk memprediksi data testing (X_test), dan hasil prediksi disimpan dalam dictionary dengan nama model sebagai kunci.
Visualisasi:
Plot 1 - Actual vs Predicted
Pada subplot yang ditampilkan ini, ditampilkan scatter plot yang membandingkan nilai aktual (y_test) dengan nilai prediksi (y_pred) untuk setiap model. Garis putus-putus (k–) menunjukkan garis diagonal yang ideal, di mana nilai prediksi sama dengan nilai aktual. Tujuannya membantu untuk melihat seberapa dekat prediksi model dengan nilai sebenarnya.
Berdasarkan grafik di atas, model Gradient Boosting (hijau) menunjukkan prediksi yang paling konsisten dengan garis referensi ideal (hitam putus-putus), diikuti oleh Random Forest (oranye). Linear Regression (biru) memiliki penyebaran yang lebih besar, menunjukkan lebih banyak kesalahan prediksi.
Plot 2 - Residuals Distribution
Pada subplot kedua, distribusi residuals (selisih antara nilai aktual dan nilai prediksi) diplot menggunakan histogram dan kurva KDE (Kernel Density Estimation) untuk setiap model. Sehingga dapat memberikan gambaran tentang bagaimana residuals terdistribusi, apakah ada pola tertentu, atau apakah residuals terdistribusi secara acak di sekitar nol.
Sehingga dari grafik tersebut bahwa distribusi residual dari ketiga model hampir normal, tetapi Gradient Boosting (hijau) memiliki distribusi residual yang paling terpusat, menunjukkan bias yang lebih rendah dan prediksi yang lebih akurat.
Formula:
di mana:
Interpretasi: Semakin rendah nilai MSE, semakin baik modelnya.
Formula:
di mana:
Interpretasi: R² berkisar antara 0 hingga 1. Nilai mendekati 1 menunjukkan model yang baik.
Tanpa Grid Search
Model | MSE | R² |
---|---|---|
Linear Regression | 0.10 | 0.81 (81%) |
Random Forest Regressor | 0.05 | 0.91 (91%) |
Gradient Boosting Regressor | 0.05 | 0.91 (91%) |
Grid Search
Model + Gridsearch | MSE | R² |
---|---|---|
Linear Regression | 0.10 | 0.81 (81%) |
Random Forest Regressor | 0.05 | 0.91 (91%) |
Gradient Boosting Regressor | 0.04 | 0.92 (92%) |
Feature Importance
Library Automotive of Congress. “Global Automobile Industry”. Retrieved from https://guides.loc.gov/automotive-industry/global at August 18th, 2024. ↩
Prabaljeet Singh Saini & Lekha Rani. “Performance Evaluation of Popular Machine Learning Models for Used Car Price Prediction”. 2023. ICDAI. Link Available ↩
Ahmad. Muhammad, et al. “Car Price Prediction using Machine Learning”. 2024. IEEE. DOI: 10.1109/I2CT61223.2024.10544124. Link Available ↩
Jin. C. “Price Prediction of Used Cars Using Machine Learning”. 2021. IEEE DOI: 10.1109/ICESIT53460.2021.9696839. Link Available ↩