[파이썬] xgboost에서의 임계값 조정

소개

이번 포스트에서는 xgboost 라이브러리에서의 임계값 조정에 대해 알아보겠습니다. xgboost는 강력한 머신러닝 알고리즘인 그래디언트 부스팅 트리를 기반으로 하고 있으며, 다양한 분류 및 회귀문제에 적용할 수 있습니다.

분류 작업에서 일반적으로 예측값은 확률 형태로 출력됩니다. 이 확률을 이진 분류 문제에서의 클래스에 대한 예측값으로 변환하기 위해서는 임계값(threshold)을 지정해야 합니다. 이번 포스트에서는 임계값의 조정을 통해 모델의 성능을 향상시키는 방법에 대해 알아보겠습니다.

임계값 조정의 필요성

기본적으로 xgboost는 0.5의 임계값을 사용하여 확률 값을 이진 분류 문제에서의 예측값으로 변환합니다. 이는 클래스 1에 대한 확률이 0.5보다 크면 해당 샘플을 클래스 1로 예측하는 것을 의미합니다.

하지만 경우에 따라서, 정확도와 민감도(재현율) 간에 트레이드오프(Trade-off)가 발생할 수 있습니다. 임계값을 낮추면 모델은 더 많은 샘플을 클래스 1로 예측하게 되고, 높인다면 클래스 0로 예측하게 됩니다. 따라서, 임계값을 조정함으로써 원하는 성능을 달성할 수 있습니다.

임계값 조정을 위한 코드 예제

다음은 xgboost를 사용하여 이진 분류 문제를 해결하고, 임계값 조정을 통해 성능을 향상시키는 코드 예제입니다.

import xgboost as xgb
from sklearn.datasets import load_breast_cancer
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score, recall_score

# 데이터 불러오기
data = load_breast_cancer()
X = data.data
y = data.target

# 데이터 분할
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# xgboost 모델 훈련
model = xgb.XGBClassifier()
model.fit(X_train, y_train)

# 확률 예측
y_pred_prob = model.predict_proba(X_test)[:, 1]

# 임계값 조정
threshold = 0.3
y_pred = [1 if prob > threshold else 0 for prob in y_pred_prob]

# 모델 성능 평가
accuracy = accuracy_score(y_test, y_pred)
recall = recall_score(y_test, y_pred)

print(f"Accuracy: {accuracy}")
print(f"Recall: {recall}")

위의 코드 예제에서는 xgboost를 사용하여 유방암 데이터셋을 분류하는 문제를 다루고 있습니다. 먼저 데이터를 불러온 후 훈련 및 테스트 데이터로 분할하고, xgboost 모델을 훈련합니다.

이후, 모델로부터 확률 값을 예측한 뒤, 임계값을 조정하여 예측 클래스를 결정합니다. 임계값은 0.3으로 지정되어 있습니다. 이렇게 조정된 예측값을 기반으로 모델의 성능인 정확도와 민감도(재현율)을 평가합니다.

결론

xgboost에서의 임계값 조정은 모델의 성능을 향상시키기 위한 중요한 전략 중 하나입니다. 임계값을 적절히 조정하여 원하는 성능을 달성할 수 있습니다. 이를 통해 더 나은 분류 모델을 개발할 수 있습니다.