2019년 3월 31일 일요일

XGBoost 와 Deep Learning Regressor 사용한 Regression 문제에서의 성능지표 정의와 앙상블(ensemble) 방법

Python 이나 R에서 앙상블(ensemble)하는 방법을 package에 의존하다가, Deep Learning Model 과의 앙상블을 하려고 하면, 의외로 그 방법을 모르고, 질문을 해오시는 분들이 많았다.

그래서, 앙상블 방법을 회귀문제를 예를 들어 설명해 보고자 한다. 또한 회귀문제에 대한 성능지표 재정의 부분도 살펴보도록 하겠다.

우선 앙상블은 기법이 많고, 다양한데, 금일 공유하는 방법은 가장 심플하면서도 보편적인 앙상블 방법이라고 할 수 있을 것이다.(Kaggle 등에서도 이 방법이 많이 사용된다.)

1. 우선 Regression 문제의 성능 측정 지표를 재 정의해 보겠다.

회귀(Regression) 문제를 위한 성능측정 지표의 Custom 정의라 할 수 있을 것이다. 성능측정 지표 정의는 실무에서 문제 정의 이후 하게 되는 매우 중요한 단계인데, 즉, 어떻게 성능을 측정하고, 어떻게 지표를 가져갈 것인지에 관한 문제이다.

보통 모델의 성능을 측정하고자 하는 모델러들은 회귀 문제의 경우 MSE(Mean Squre Error)값을 보는 것이 보통이다.

하지만, 실무에서는 현업분들과 Communication 하는 경우 MSE 값이 얼마에서 얼마로 개선되었어요 라고, 설명하는 경우, 그 모델의 정확도나 개선 정도를 가늠하기가 매우 힘들어, 원활한 소통이 되지 않는 경우가 많다.

이 경우 개인적으로 많이 사용하는 방법은 회귀문제를 Accuracy 문제로 재정의 하는 방법이다.
물론, Business 의 특성에 맞추어, 이정도면 맞추었다고 할 수 있다 라는 것을 현업분들의 의견을 구하여, 미리 허용 범위를 정해놓고 시작하는 것도 방법일 것이다.

배송소요시간 예측 문제를 예를 들어 보겠다. 현업과 이야기해 본 결과 0.5일 이내로 예측을 맞춘 경우, 그것은 맞게 예측한 것으로 본다 라고 이야기를 들었다고 가정해 보자. 예를 들어 배송소요 시간이 3.8일인데, 이를 3.1일 이라고 예측하여 반나절 이상 시간 차가 발생한 경우, 이는 잘못 예측했다 라고 판단 할 수 있을 것이다. 반면, 3.8일을 3.6일 이라고 예측하여, 오차범위가 반나절 이하의 시간차만 발생한 경우, 이는 잘 예측했다 라고 판단 가능하다고 가정해 보자.

이 경우 회귀문제에 해당하는 배송소요시간 예측 문제를 Classification 문제에서 사용하는 Accuracy 문제로 재 정의 가능하다.

아래는 이를 위한 코드 이다.

Boosting 방식으로 Kaggle 스타일 회귀문제에서 끝판왕 중의 하나인 XGBoost 모델의 정확도를 MSE가 아닌 Accuracy 문제로 재정의 한 코드 이다. 위 처럼 처리하는 경우 정확도를 수치로 뽑아 볼 수 있으며, 위 모델은 0.5일 이내로 예측에 성공할 정확도가 84.04% 라 할 수 있다.

2. 다음으로 두가지 알고리즘을 예를 들고 두 알고리즘을 앙상블 해 보겠다.

(1) 위에서도 언급했던 XGBoost 의 0.5일 이내 예측 성공율에 대한 정확도 산정 부분이다.

앞에서도 살펴본 것처럼 XGBoost 예측모델이 0.5일 이내의 오차범위에서 예측 성공한 정확도(성공비율)는 84.04% 였다.


(2) 다음으로 Deep Learning LSTM Regressor 를 이용한 동일한 Data 에 대한 0.5일 이내 예측 성공률에 대한 정확도 산정 부분이다.


Deep Learning LSTM Regressor 는 정확도가 86.94% 였다.

Deep Learning 이 XGBoost 보다도 정확도가 높게 나왔다. 이는 항상 이런 양상을 보이지는 않는다. 데이타의 성격에 따라 둘이 역전되기도 하며, 어느 알고리즘이 항상 이긴다고 장담할 수 없다.

(3) 마지막으로 위 두 알고리즘을 앙상블 해 보겠다.
앙상블을 하자 정확도가 94.11%로 크게 상승하였다.

위에서 처럼 단순하게 두 수치를 산술평균 해 주었다. 허무하게 들리겠지만. 이것도 역시 앙상블이다.

보통 모델이 3개 이상일 때는 산술평균보다 기하평균이나 조화평균을 많이 사용한다. 그리고 모델이 위에서 처럼 2개 일 때는 산술평균을 사용해도 무방하다. 모델이 3개 이상일 때 기하평균을 사용하는 이유는 너무 예외적인 소수 모델에 의해 값이 너무 틀어지는 것을 막고, 다수의 모델이 선정한 값이 더 평활하게 값이 유지되도록 하기 위함이다. 보통 그런 것이 더 현실세계의 문제에서 잘 먹히는 것이 사실이다.

물론 문제의 특성 상 Exact Matching Accuracy 보다 F1 Score 등이 더 의미가 있는 경우가 있을 수 있다. 이 경우는 만장일치일때 좀더 맞다고 선정하는 형태로 앙상블 로직을 재정의 할 수도 있다. 즉, 앙상블 방식 또한 문제에 따라 재정의 혹은 실험을 통한 선별이 가능하다가 정답이라 할 수 있다.

결론 : 앙상블은 보통 모델이 2개일때는 산술평균, 3개 이상일때 기하평균을 많이 쓰는데, 때에 따라 이를 재정의 하기도 하고, 때에 따라서는 조화 평균을 쓰기도, 때로는 중간값을 쓰기도 하고 때예 따라서는 True False 모델로 바꾸어, 만장일치 여부로 판단하기도 한다. 문제에 가장 최적의 앙상블 방법론을 실험 데이타 셑으로 찾아 가는 것이 정답이라 하겠다. 

댓글 없음:

댓글 쓰기