Cara Memperkirakan Durasi Pengiriman Berdasarkan Waktu, Lokasi, dan Faktor Eksternal dengan XGBoost
Durasi pengiriman adalah salah satu faktor utama yang memengaruhi kepuasan pelanggan dalam bisnis logistik dan pengiriman. Dengan kemajuan teknologi dan machine learning, kita dapat memanfaatkan algoritma seperti Gradient Boosting Machines (GBM), khususnya XGBoost, untuk memperkirakan durasi pengiriman secara akurat. Dalam artikel ini, kita akan membahas secara mendalam bagaimana XGBoost dapat digunakan untuk memperkirakan durasi pengiriman berdasarkan faktor-faktor seperti waktu, lokasi, jarak, dan kondisi eksternal lainnya.
XGBoost adalah salah satu algoritma machine learning yang paling populer dan kuat dalam tugas-tugas prediktif, seperti regresi dan klasifikasi. Keunggulan utama XGBoost terletak pada kemampuannya dalam menangani data yang besar, menghindari overfitting, dan memberikan hasil yang akurat dalam waktu yang relatif singkat. Mari kita selami bagaimana kita dapat menggunakannya untuk memprediksi durasi pengiriman.
1. Persiapan Data
Sebelum membangun model prediksi menggunakan XGBoost, kita harus mempersiapkan data dengan benar. Langkah pertama yang penting adalah mengumpulkan dan memproses data yang relevan.
1.1. Kumpulkan Data
Untuk memprediksi durasi pengiriman, kita memerlukan data historis yang mencakup informasi berikut:
- Waktu Pengiriman: Ini mencakup waktu mulai (start time) dan waktu selesai (end time) pengiriman.
- Lokasi Pengiriman: Ini dapat berupa koordinat GPS atau ID wilayah tempat pengiriman dilakukan.
- Jarak Tempuh: Jarak yang harus ditempuh oleh pengirim untuk menyelesaikan pengiriman.
- Faktor Eksternal: Cuaca, kondisi lalu lintas, atau hari libur yang mungkin mempengaruhi durasi pengiriman.
1.2. Preprocessing Data
Data yang kita kumpulkan sering kali perlu diproses sebelum digunakan dalam model machine learning. Proses ini termasuk beberapa langkah penting:
- Feature Engineering:
Kita perlu mengekstrak fitur-fitur yang relevan dari data yang tersedia. Beberapa fitur yang dapat diambil dari waktu pengiriman adalah:Untuk data lokasi, kita dapat melakukan encoding lokasi menggunakan teknik seperti one-hot encoding atau menggunakan cluster lokasi (misalnya, menggunakan algoritma seperti K-Means clustering).Jarak tempuh juga perlu dinormalisasi agar model bisa lebih efektif.- Hari dalam minggu (Apakah ini hari kerja atau akhir pekan?)
- Jam dalam sehari (Pagi, Siang, Sore, atau Malam?)
- Bulan atau musim (Apakah ini musim liburan atau bukan?)
- Mengatasi Missing Values:
Dalam dataset, seringkali kita menemukan nilai yang hilang. Ada beberapa cara untuk mengatasi masalah ini, seperti mengisi nilai yang hilang dengan rata-rata atau median dari kolom yang relevan. - Membagi Data:
Sebelum melatih model, kita perlu membagi data menjadi beberapa subset. Data dibagi menjadi training set, validation set, dan test set. Umumnya, proporsi yang sering digunakan adalah 70% untuk data latih, 20% untuk validasi, dan 10% untuk pengujian.
2. Pemilihan Fitur (Feature Selection)
Setelah data diproses, langkah berikutnya adalah memilih fitur yang relevan untuk model prediksi. Fitur yang relevan akan membantu model belajar dengan lebih efektif dan meningkatkan akurasi prediksi. Beberapa fitur yang bisa dipilih adalah:
- Waktu: Jam, hari, bulan.
- Lokasi: Koordinat GPS atau ID wilayah pengiriman.
- Jarak: Jarak tempuh dari titik A ke B.
- Kondisi Eksternal: Informasi tentang lalu lintas, cuaca, atau faktor lainnya yang memengaruhi pengiriman.
Fitur-fitur ini akan memberi model informasi yang cukup untuk memperkirakan durasi pengiriman secara akurat.
3. Membuat Model XGBoost
Setelah data siap dan fitur relevan telah dipilih, kita dapat mulai membangun model prediksi menggunakan XGBoost.
3.1. Instalasi XGBoost
Untuk mulai menggunakan XGBoost, kita harus menginstalnya terlebih dahulu. Instalasi dapat dilakukan menggunakan pip:
pip install xgboost
3.2. Inisialisasi dan Persiapan Model
Setelah XGBoost terinstal, langkah berikutnya adalah mengimpor pustaka yang diperlukan dan menyiapkan model. Berikut adalah kode dasar untuk mempersiapkan data dan model XGBoost:
import xgboost as xgb
from sklearn.model_selection import train_test_split
from sklearn.metrics import mean_absolute_error
# Pisahkan data menjadi set pelatihan dan set uji
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# Inisialisasi model XGBoost untuk regresi
model = xgb.XGBRegressor(
objective='reg:squarederror', # Untuk regresi
n_estimators=100, # Jumlah pohon
learning_rate=0.1, # Kecepatan belajar
max_depth=6, # Kedalaman pohon
subsample=0.8, # Proporsi sampel
colsample_bytree=0.8 # Proporsi fitur
)
# Latih model menggunakan data pelatihan
model.fit(X_train, y_train)
3.3. Evaluasi Model
Setelah model dilatih, kita perlu mengevaluasi kinerjanya menggunakan metrik evaluasi seperti Mean Absolute Error (MAE):
y_pred = model.predict(X_test)
mae = mean_absolute_error(y_test, y_pred)
print(f"Mean Absolute Error: {mae}")
4. Optimasi Model
Salah satu keuntungan utama XGBoost adalah kemampuannya untuk dioptimasi. Hyperparameter tuning dapat dilakukan untuk meningkatkan performa model.
4.1. Hyperparameter Penting
Beberapa hyperparameter yang perlu dioptimasi dalam XGBoost meliputi:
- max_depth: Mengontrol kedalaman pohon. Semakin besar nilai ini, semakin kompleks model.
- learning_rate: Kecepatan pembelajaran. Memastikan model belajar dengan langkah kecil agar tidak overfit.
- n_estimators: Jumlah iterasi boosting yang dilakukan.
- subsample dan colsample_bytree: Menentukan subset data atau fitur yang digunakan dalam setiap pohon.
Hyperparameter tuning dapat dilakukan menggunakan alat seperti GridSearchCV atau Optuna.
5. Prediksi Durasi Pengiriman
Setelah model terlatih, kita dapat menggunakannya untuk memprediksi durasi pengiriman berdasarkan data baru. Berikut adalah contoh prediksi durasi pengiriman baru:
new_data = [[10, 106.8272, -6.1751, 15.2]] # Contoh data: jam 10, lokasi, jarak 15.2 km
predicted_duration = model.predict(new_data)
print(f"Predicted Delivery Duration: {predicted_duration[0]} minutes")
6. Visualisasi dan Interpretasi
Untuk memahami bagaimana model mengambil keputusan, kita dapat melakukan visualisasi fitur dan analisis residual.
6.1. Visualisasi Fitur
XGBoost menyediakan fungsi untuk memvisualisasikan feature importance, yang menunjukkan fitur mana yang paling berpengaruh terhadap prediksi model:
xgb.plot_importance(model)
plt.show()
6.2. Residual Analysis
Melakukan analisis residual untuk memeriksa apakah model bias terhadap waktu atau lokasi tertentu dapat membantu dalam memperbaiki model.
7. Deployment Model (Opsional)
Setelah model terlatih dan dievaluasi, kita bisa menyimpannya untuk digunakan dalam aplikasi nyata. Berikut adalah cara untuk menyimpan dan memuat model menggunakan joblib:
import joblib
# Simpan model
joblib.dump(model, "xgboost_delivery_model.pkl")
# Muat model
loaded_model = joblib.load("xgboost_delivery_model.pkl")
Catatan Penting
- Ketersediaan Data: Pastikan data yang digunakan cukup representatif dan mencakup berbagai skenario yang mungkin terjadi, seperti cuaca ekstrem atau jam sibuk.
- Overfitting: Perhatikan risiko overfitting, terutama jika data terlalu spesifik atau model terlalu kompleks. Regularisasi dan teknik seperti early stopping dapat membantu mengurangi overfitting.
Kesimpulan
Dengan mengikuti langkah-langkah yang dijelaskan dalam artikel ini, kita dapat membangun model prediksi durasi pengiriman yang kuat menggunakan XGBoost. Penggunaan machine learning dalam prediksi durasi pengiriman memungkinkan bisnis untuk merencanakan pengiriman dengan lebih efisien, meningkatkan kepuasan pelanggan, dan mengurangi biaya logistik.