본문 바로가기

ML | DL

XGBoost regressor

이번 포스트에서는 최근에 진행했던 프로젝트를 마무리하며 그 프로젝트해서 구현했던 모델을 리뷰해보는 시간을 갖겠습니다.

 

이번 프로젝트에서는 제주도의 교통약자를 위한 교통환경을 개선하고자 저상버스의 노선을 최적화하는 방안을 제안하는 것이었습니다. 저희가 버스 노선을 최적화하기 위해 정류장별 교통약자 수요를 파악하여 예측하는 모델을 구현했는데요. 독립변수가 많은 만큼 그에 적합한 모델 2가지를 선정해서 정확도가 높은 모델을 최종적으로 채택했습니다. 

 

저희가 선정한 모델은 OLS(Ordinary least squares)와 XGBoost regressor인데 XGBoost regressor의 성능이 뛰어났기 때문에, 이번 포스트의 제목이 XGBoost regressor겠지요?? ㅎㅎㅎ 그럼 XGBoost regressor를 살펴보기 전에 먼저 XGBoost가 무엇인지부터 살펴보겠습니다.

 

XGBoost

XGBoost란, eXtreme Gradient Boosting란 뜻인데요. 이것은 boosted tree algorithms의 계산적인 한계를 뛰어넘고자 고안되었다고 합니다. tree algorithm은 뛰어난 성능을 보이지만 속도나 메모리 문제가 있죠. 이 문제를 크게 줄여주기 때문에 많은 사람들이 사용한다고 합니다.

 

XGBoost는 원래 classifier로 많이 사용되었지만, 그 성능이 좋아 regressor도 나왔는데요. 오늘은 제가 프로젝트에서 사용한 XGBoost regressor를 소개하고자 합니다.!

 

corr_matrix = df.corr()
corr_matrix["y"].sort_values(ascending=False) 

먼저 독립변수들과 예측값 y의 상관관계를 확인한 후에, 양의 상관관계를 보이는 독립변수들을 모델에 훈련시키기 위해 분리했습니다. 

 

X = df[['x1','x2','x3','x4','x5','x6']]
y = df['y']

분리된 독립변수들을 X변수에 할당하고 예측하고자하는 y를 y변수에 넣어주었습니다.

 

from sklearn.preprocessing import MinMaxScaler
scaler = MinMaxScaler(feature_range = (0,1))
train_X = scaler.fit_transform(X)

그리고 MinMax scaling을 진행했습니다.

 

train_X, test_X, train_y, test_y= train_test_split(train_X,y,test_size=0.15, random_state=0)

모델의 성능을 평가하기위해 train과 test로 나누어 주었습니다. 파라미터 random_state는 train과 test를 분리할 때 계속 random으로 분리되는 것을 방지해줍니다.!

 

 

from xgboost import XGBRegressor

my_model = XGBRegressor(n_estimators = 500, max_depth = 9,min_child_weight= 1.2,colsample_bytree = 1.0)
# Add silent=True to avoid printing out updates with each cycle
my_model.fit(train_X, train_y, verbose=False)

오늘 저희가 사용할 모델인데요. 모델을 훈련하기에 앞서 최적의 파라미터를 구해보겠습니다. 

 

reg_cv = GridSearchCV(my_model, {"colsample_bytree":[1.0],"min_child_weight":[1.0,1.2]
                            ,'max_depth': [3,4,6,7,8,9,10], 'n_estimators': [500,1000,1500,2000,2500]}, verbose=1)
reg_cv.fit(train_X,train_y)

reg_cv.best_params_

 

최적의 파라미터를 구하기 위해 GridSearchCV를 사용했습니다.(GridSearchCV가 제시해준 파라미터를 바탕으로 모델을 구현했습니다.)

 

from sklearn.metrics import mean_absolute_error

prediction = my_model.predict(test_X)
print("Mean Absolute Error : " + str(mean_absolute_error(prediction, test_y)))

다음은 test set으로 y값을 예측하고, MAE로 모델의 성능을 평가해보았습니다. 

 

 

위의 그래프는 실제 값과 모델이 예측한 값을 그래프로 표현해보았습니다. 94%의 정확도를 보이는 만큼 그럴듯하게 예측하지 않았나요?!

 

이번 프로젝트에서 사용된 데이터의 볼륨이 그렇게 크지 않아 XGBoost의 속도를 제대로 느껴보지는 못했지만, 그 성능과 모델을 구현하는 데에 있어 편리함을 느껴보았습니다. 다음에 기회가 된다면 classifier도 사용해보고 싶네요.!

 

 

이상으로 포스팅을 마치겠습니다. 

읽어주셔서 감사합니다.!

 

Reference :https://machinelearningmastery.com/gentle-introduction-xgboost-applied-machine-learning/

'ML | DL' 카테고리의 다른 글

Cluster analysis of Unsupervised Learning  (0) 2020.08.23
ARIMA model for time series forecasting(시계열 분석)  (3) 2020.08.12
Linear Regression  (0) 2020.06.17
Supervised Learning  (0) 2020.06.12