[파이썬] lightgbm 임계값 조정 및 해석

LightGBM은 강력한 그래디언트 부스팅 프레임워크로, 이진 분류 또는 다중 클래스 분류 문제를 해결하는 데 널리 사용됩니다. 하지만 모델의 출력값을 이진 분류 문제의 임계값(threshold)에 따라 조정할 필요가 있는 경우가 종종 있습니다. 또한 모델의 결과를 해석하는 데에도 임계값의 역할은 중요합니다.

이 블로그 포스트에서는 LightGBM에서 임계값을 조정하고 해당 결과를 해석하는 방법을 다루겠습니다.

1. LightGBM 모델 학습

먼저, LightGBM 모델을 학습해야 합니다. 이를 위해 적절한 데이터셋을 불러오고, 특성과 레이블을 설정한 후, LightGBM 모델을 초기화하고 학습시킵니다. 예시 코드는 다음과 같습니다:

import lightgbm as lgb
from sklearn.datasets import load_breast_cancer
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score

# 데이터셋 로드
data = load_breast_cancer()

# 특성과 레이블 설정
X = data.data
y = data.target

# 학습 및 검증 데이터 분할
X_train, X_val, y_train, y_val = train_test_split(X, y, test_size=0.2, random_state=42)

# LightGBM 모델 초기화 및 학습
lgb_model = lgb.LGBMClassifier()
lgb_model.fit(X_train, y_train)

# 검증 데이터로 모델 평가
y_pred = lgb_model.predict(X_val)
accuracy = accuracy_score(y_val, y_pred)
print(f"모델 정확도: {accuracy}")

2. 임계값 조정

LightGBM 모델의 출력값은 0과 1 사이의 확률입니다. 이 결과를 이진 분류 문제에서는 0 또는 1로 변환해야 합니다. 이를 위해 임계값을 조정해야 합니다.

# 임계값 조정
threshold = 0.5
y_pred_threshold = (lgb_model.predict_proba(X_val)[:, 1] >= threshold).astype(int)
accuracy_threshold = accuracy_score(y_val, y_pred_threshold)
print(f"조정된 임계값의 모델 정확도: {accuracy_threshold}")

위의 코드에서 threshold 값을 조정하여 원하는 임계값을 설정할 수 있습니다. predict_proba 메소드를 통해 모델의 확률을 얻고, threshold와 비교하여 True/False 값을 얻습니다. 이렇게 얻은 값이 임계값을 넘으면 1로, 넘지 못하면 0으로 변환됩니다.

3. 임계값에 따른 모델 결과 해석

임계값을 조정함으로써 모델의 결과가 변화됩니다. 일반적으로 임계값을 높일수록 정밀도는 증가하지만 재현율은 감소합니다. 이를 통해 모델의 결과를 해석할 수 있습니다.

from sklearn.metrics import classification_report

# 경고 메세지 출력 방지
import warnings
warnings.filterwarnings("ignore")

# 모델 평가 보고서 출력
classification_report(y_val, y_pred_threshold)

위의 코드는 classification_report 함수를 사용하여 모델의 정밀도, 재현율, F1 점수 등을 출력합니다. 이를 통해 임계값에 따른 모델의 결과를 해석할 수 있습니다.

결론

LightGBM 모델에서 임계값을 조정하여 모델의 출력값을 이진 분류 문제에 대한 확률로 변환할 수 있습니다. 이를 통해 모델의 결과를 해석하고, 원하는 성능을 얻을 수 있습니다.