10년 넘게 데이터 분석을 해오면서 가장 효율 좋은 알고리즘을 꼽으라면 XGBoost인데요. 통계적 학문에서 머신러닝이 주목받기 시작하면서 다양한 방법론이 나왔었죠.
그 중에서 XGBoost는 분석가에게 가장 인기있는 알고리즘입니다. 이 글에서는 데이터 과학 분야에서 인기를 끌고 있는 XGBoost의 특징과 사용법입니다.
XGBoost는 왜 주목받고 있을까?
뭐니뭐니해도 XGBoost는 성능이 좋기로 유명합니다. 그라디언트 부스팅 알고리즘 중 특히 대규모 데이터셋과 복잡한 문제를 해결하는데 탁월한 성능을 보이고 있죠.
그래서 Kaggle과 같은 데이터 분석대회에서 두각을 나타내고 있는 이유입니다. XGBoost를 선호하는 이유는 그 효율성과 확장성에 있습니다.
이는 기존의 많은 머신러닝 알고리즘이 요구하는 데이터 준비 과정을 간소화해 주는데요. 특히 누락된 값과 범주형 데이터 처리 측면에서 탁월한 차이를 냅니다.
XGBoost의 차별화된 데이터 처리 기능
우선 두 가지 측면에서 XGBoost는 차별화된 기능이 있는데요. 왜 그것이 차별화인지 하나하나 따져보시죠.
1. 누락된 값의 효율적 처리
XGBoost는 누락된 데이터를 자동으로 처리하는 기능을 제공합니다. 사실 대부분의 다른 알고리즘이 데이터 전처리 시 결측 값을 채우거나 제거해야 하는데요.
그와는 대조적으로 XGBoost는 데이터 전처리의 복잡성을 줄여줍니다. 그리고 전처리를 하지 않아 발생하는 모델의 불이익, 즉 예측 정확성이 낮아지는 것을 방지해 줍니다. XGBoost의 회귀 모델을 생성하는 클래스 아래와 같이 선언할 수 있습니다.
# xgboost 회귀 모델 생성 코드 예시
import xgboost as xgb
xgb_model = xgb.XGBRegressor(seed=42)
2. 범주형 데이터의 직접 처리
XGBoost는 Pandas의 category 타입으로 변환된 범주형 변수를 직접 처리할 수 있습니다. 이는 one-hot 인코딩과 같은 사전 처리 과정 없이도 범주형 데이터를 효과적으로 다룰 수 있어 모델링 과정을 더욱 간소화합니다.
쉽게 말해 알고리즘은 숫자형 데이터를 주입 받도록 설계되어 있기 때문에, 범주형 데이터를 적절히 변환해주는 과정이 필요합니다. 그런데 XGBoost는 자동으로 변환해서 처리한다는 말이죠.
사실 이 기능은 그냥 XGBoost 특징으로 알고 있지만, 실제 내가 처리하는 것보다 모델 내에서 더 좋은 방향으로 처리해 주기 때문에 좋은 성능을 보장했었죠.
아래 코드는 Ames 데이터셋에서 ‘Neighborhood’ 열에 있는 지역 정보를 숫자로 표현된 범주형 데이터로 인식하도록 설정하는 것입니다.
# Pandas로 데이터를 category 타입으로 변환
Ames['Neighborhood'] = Ames['Neighborhood'].astype('category')
XGBoost로 더 나은 모델 구현
RFECV는 Recursive Feature Elimination with Cross-Validation의 약자로, 순차적 특징 제거와 교차 검증을 결합하여 최적의 feature 집합을 찾는 방법입니다.
즉, 모델의 성능에 큰 영향을 미치지 않는 불필요한 feature들을 제거하여 모델의 일반화 성능을 향상시키고, 모델의 해석력을 높이는 데 도움을 줍니다.
RFECV기법을 사용하여 XGBoost 모델의 성능을 극대화할 수 있는데요. 이는 모델의 복잡성을 줄이고, 데이터의 핵심 feature를 활용하여 보다 해석 가능한 모델을 만들어 줍니다.
중요한 것은 범주형 데이터가 제대로 변환되어 잘 활용될 때라는 점입니다. 아래는 RFECV를 이용한 XGBoost 모델의 feature selection 코드입니다.
import xgboost as xgb from sklearn.feature_selection
import RFECV
# XGBoost 모델 생성
xgb_model = xgb.XGBRegressor()
# RFECV 객체 생성
rfecv = RFECV(estimator=xgb_model, step=1, cv=5, scoring='r2', min_features_to_select=1)
rfecv.fit(X, y)
# 최적의 특징 선택 결과 출력
print("Optimal number of features : %d" % rfecv.n_features_)
print("Selected features : %s" % rfecv.support_)
주요 파라미터 설명
파라미터명 | 설명 |
estimator | 필수 파라미터이며, 선택하고자 하는 특징을 사용하는 모델 객체를 입력합니다. 이 코드에서는 앞서 생성된 XGBoost 모델 객체인 xgb_model 을 입력하고 있습니다. |
step | 한 번에 제거할 특징의 수를 설정합니다. 기본값은 1이며, 1씩 제거하면서 최적의 특징 집합을 찾습니다. |
cv | 교차 검증 횟수를 설정합니다. 기본값은 5이며, 이는 데이터를 5개의 그룹으로 나누어 교차 검증을 수행한다는 의미입니다. |
scoring | 모델 평가 지표를 설정합니다. 이 코드에서는 ‘r2’ 를 사용하고 있으며, 결정 계수(R-squared)를 사용하여 모델 성능을 평가합니다. 다른 지표 (예: ‘neg_mean_squared_error’, ‘accuracy’) 도 사용 가능합니다. |
min_features_to_select | 최소 선택 특징 수를 설정합니다. 기본값은 None이며, 적어도 하나의 특징은 남도록 합니다. 이 코드에서는 min_features_to_select=1 로 설정하여 반드시 최소 1개의 특징을 선택하도록 강제하고 있습니다. |
이렇게 선택된 feature들을 활용할 때, 모델의 효율성과 해석 가능성이 높아집니다.
결론
XGBoost는 복잡한 데이터셋을 처리하면서도 모델의 예측 정확도를 향상시키기 위해 많이 선택됐었습니다. 특히, 누락된 값이나 범주형 데이터의 처리에서 그 위력을 발휘합니다.
RFECV와 같은 기법을 통해 최적화된 특징을 선별해내는데 기여하며, 높은 수준의 모델 성능을 구현하는 데 있어 반드시 고려해야 할 라이브러리입니다.
XGBoost의 강력함을 잘 활용하기 위해 데이터를 잘 이해하고, 그 특성에 맞는 최적의 기법을 선택하는 것이 중요합니다. XGBoost의 수식 및 원리는 링크를 참고하시기 바랍니다.