top of page
Gambar penulisCornellius Yudha Wijaya

Memanfaatkan XGBoost untuk Time-Series Forecasting

Memanfaatkan XGBoost untuk Time-Series Forecasting

XGBoost (eXtreme Gradient Boosting) adalah algoritma open-source yang mengimplementasikan gradient-boosting trees dengan peningkatan tambahan untuk performa dan kecepatan yang lebih baik. Kemampuan algoritma ini untuk membuat prediksi akurat dengan cepat menjadikan model ini sebagai pilihan utama dalam banyak kompetisi, seperti kompetisi Kaggle.


XGBoost biasanya digunakan untuk prediksi klasifikasi, seperti deteksi penipuan, atau prediksi regresi, seperti prediksi harga rumah. Namun, pengembangan algoritma XGBoost untuk memperkirakan data time-series juga dimungkinkan. Bagaimana cara kerjanya? Mari kita bahas lebih lanjut.



Time-Series Forecasting

Forecasting dalam data science dan machine learning adalah teknik yang digunakan untuk memprediksi nilai numerik di masa depan berdasarkan data historis yang dikumpulkan dari waktu ke waktu, baik dalam interval reguler atau tidak reguler.


Berbeda dengan data training pada machine learning umumnya di mana setiap observasi independen satu sama lain, data untuk time-series forecasts harus berurutan dan terkait dengan setiap titik data. Contoh data time-series dapat berupa harga saham bulanan, cuaca mingguan, penjualan harian, dan lain sebagainya.


Mari kita lihat contoh data time-series Daily Climate data dari Kaggle.

import pandas as pd

train = pd.read_csv('DailyDelhiClimateTrain.csv')
test = pd.read_csv('DailyDelhiClimateTest.csv')

train.head()
Memanfaatkan XGBoost untuk Time-Series Forecasting

Jika kita lihat dataframe di atas, setiap fitur dicatat harian. Kolom date menunjukkan kapan data diamati, dan setiap pengamatan saling terkait.


Time-Series forecast sering menggabungkan tren, musiman, dan pola lain dari data untuk membuat forecasting (peramalan). Salah satu cara mudah untuk melihat pola tersebut adalah dengan memvisualisasikannya. Misalnya, saya akan memvisualisasikan data suhu rata-rata (meantemp) dari dataset contoh kita.

train["date"] = pd.to_datetime(train["date"])
test["date"] = pd.to_datetime(test["date"])

train = train.set_index("date")
test = test.set_index("date")

train["meantemp"].plot(style="k", figsize=(10, 5), label="train")
test["meantemp"].plot(style="b", figsize=(10, 5), label="test")
plt.title("Mean Temperature Dehli Data")
plt.legend()
Memanfaatkan XGBoost untuk Time-Series Forecasting

Melihat grafik di atas, kita dapat dengan mudah mengamati pola musiman yang sama terjadi setiap tahun. Dengan memahami informasi ini, kita bisa memahami cara kerja data kita dan memutuskan model mana yang mungkin cocok untuk model forecast kita.


Model forecast umum termasuk ARIMA, Vector AutoRegression (VAR), Exponential Smoothing, dan Prophet. Namun, kita juga dapat menggunakan XGBoost untuk menghasilkan forecasting.


XGBoost Forecasting

Sebelum melakukan forecast menggunakan XGBoost, kita harus menginstal paketnya terlebih dahulu.

pip install xgboost

Setelah instalasi, kita akan menyiapkan data untuk training model kita. Secara teori, XGBoost Forecasting akan mengimplementasikan model Regresi berdasarkan fitur tunggal atau ganda untuk memprediksi nilai numerik di masa depan. Itulah sebabnya data training juga harus dalam bentuk nilai numerik. Selain itu, untuk memasukkan unsur waktu ke dalam model XGBoost, kita perlu mengubah data waktu menjadi beberapa fitur numerik.


Mari kita mulai dengan membuat fungsi untuk membuat fitur numerik dari tanggal.

def create_time_feature(df):
    df['dayofmonth'] = df['date'].dt.day
    df['dayofweek'] = df['date'].dt.dayofweek
    df['quarter'] = df['date'].dt.quarter
    df['month'] = df['date'].dt.month
    df['year'] = df['date'].dt.year
    df['dayofyear'] = df['date'].dt.dayofyear
    df['weekofyear'] = df['date'].dt.weekofyear
    return df

Selanjutnya, kita akan menerapkan fungsi ini ke data training dan testing.

train = create_time_feature(train)
test = create_time_feature(test)

train.head()
Memanfaatkan XGBoost untuk Time-Series Forecasting

Sekarang semua informasi yang diperlukan telah tersedia. Selanjutnya, kita akan menentukan apa yang ingin kita prediksi. Dalam contoh ini, kita akan memperkirakan suhu rata-rata dan membuat data training berdasarkan data di atas.

X_train = train.drop('meantemp', axis =1)
y_train = train['meantemp']

X_test = test.drop('meantemp', axis =1)
y_test = test['meantemp']

Saya tetap akan menggunakan informasi lain, seperti humidity (kelembapan), untuk menunjukkan bahwa XGBoost juga dapat memperkirakan nilai menggunakan pendekatan multivariat. Namun, dalam praktiknya, kita hanya memasukkan data yang kita tahu tersedia saat kita mencoba memperkirakan.


Mari kita mulai proses training dengan memasukkan data ke dalam model. Untuk contoh saat ini, kita tidak akan melakukan banyak optimasi hyperparameter selain jumlah pohon.

import xgboost as xgb
reg = xgb.XGBRegressor(n_estimators=1000)
reg.fit(X_train, y_train, verbose = False)

Setelah proses training, mari kita lihat feature importance model.

xgb.plot_importance(reg)
Memanfaatkan XGBoost untuk Time-Series Forecasting

Tiga fitur awal seperti yang diduga membantu forecasting, tetapi fitur waktu juga berkontribusi pada prediksi. Mari kita coba untuk memprediksi data testing dan memvisualisasikannya.

test['meantemp_Prediction'] = reg.predict(X_test)

train['meantemp'].plot(style='k', figsize=(10,5), label = 'train')
test['meantemp'].plot(style='b', figsize=(10,5), label = 'test')
test['meantemp_Prediction'].plot(style='r', figsize=(10,5), label = 'prediction')
plt.title('Mean Temperature Dehli Data')
plt.legend()
Memanfaatkan XGBoost untuk Time-Series Forecasting

Seperti yang dapat kita lihat dari grafik di atas, prediksi mungkin tampak sedikit melenceng tetapi masih mengikuti tren secara keseluruhan. Mari kita coba mengevaluasi model berdasarkan metrik kesalahannya.

from sklearn.metrics import mean_squared_error, mean_absolute_error, mean_absolute_percentage_error

print('RMSE: ', round(mean_squared_error(y_true=test['meantemp'],y_pred=test['meantemp_Prediction']),3))
print('MAE: ', round(mean_absolute_error(y_true=test['meantemp'],y_pred=test['meantemp_Prediction']),3))
print('MAPE: ', round(mean_absolute_percentage_error(y_true=test['meantemp'],y_pred=test['meantemp_Prediction']),3))
RMSE: 11.514
MAE: 2.655
MAPE: 0.133

Hasil menunjukkan bahwa prediksi kita mungkin memiliki kesalahan sekitar 13%, dan RMSE juga menunjukkan sedikit kesalahan dalam forecast. Model ini dapat ditingkatkan menggunakan optimasi hyperparameter, tetapi kita telah mempelajari bagaimana XGBoost dapat digunakan untuk forecast.


Kesimpulan

XGBoost adalah algoritma open-source yang sering digunakan untuk banyak kasus data science dan dalam kompetisi Kaggle. Seringkali kasus penggunaannya adalah kasus klasifikasi umum seperti deteksi penipuan atau kasus regresi seperti prediksi harga rumah, tetapi XGBoost juga dapat diperluas ke time-series forecasting. Dengan menggunakan XGBoost Regressor, kita dapat membuat model yang dapat memprediksi nilai numerik di masa depan.




31 tampilan0 komentar

Postingan Terkait

Lihat Semua

Comments


bottom of page