CatBoost

CatBoost

CatBoost는 Yandex가 개발한 오픈소스 그래디언트 부스팅(gradient boosting) 라이브러리예요. 의사결정 트리(decision tree) 기반의 부스팅 알고리즘으로, 범주형(categorical) 피처를 별도의 전처리 없이 바로 지원하는 것이 가장 큰 특징이에요. MatrixNet 알고리즘의 후속작이라고 할 수 있고, 수많은 데이터셋에서 다른 GBDT 라이브러리들보다 우수한 성능을 보여줘요. 빨라진 예측 속도, GPU/멀티 GPU 훈련 지원, 내장 시각화 도구, Apache Spark와의 분산 훈련까지 지원해서 연구와 실무 양쪽에서 널리 쓰이고 있어요.

출처: 문서

본문

설치

CatBoost는 pip이나 conda를 통해 간단히 설치할 수 있어요.

pip install catboost

또는 conda-forge 채널로도 설치할 수 있어요.

conda install -c conda-forge catboost

R 패키지, 명령줄(CLI), Apache Spark용 패키지도 각각 별도 가이드로 제공돼요. 자세한 내용은 설치 문서에서 확인할 수 있어요.

핵심 개념

범주형 피처 (Categorical Features) CatBoost의 가장 큰 강점은 범주형 피처를 수치형으로 바꾸는 별도의 전처리(원-핫 인코딩 등) 없이 그대로 사용할 수 있다는 점이에요. 내부적으로 범주형 피처를 타깃 통계(target statistics) 방식으로 인코딩해서 처리해요. 수치형 피처와 범주형 피처를 모두 지원해요.

Ordered Boosting 일반적인 부스팅에서는 각 단계의 타깃 통계를 계산할 때 과적합(편향) 위험이 있어요. CatBoost는 순서 기반 부스팅(ordered boosting) 기법을 사용해서 이런 예측 이동(prediction shift)과 과적합 문제를 줄여요. 각 객체의 타깃 통계를 그 객체 이전의 데이터로만 계산하는 방식이라 기존 GBDT 대비 더 안정적인 성능을 내요.

손실함수 (Loss Functions) CatBoost는 분류, 회귀, 랭킹 등 다양한 태스크를 위한 여러 손실함수를 지원해요. 대표적으로 Logloss(이진/다중 분류), RMSE(회귀), MAE, CrossEntropy, Quantile 등이 있고요. 훈련 시 손실함수를 지정하면 그에 맞춰 모델을 최적화해요. 전체 목록은 loss functions 문서에서 확인할 수 있어요.

기본 사용 코드

파이썬에서 CatBoost 분류 모델을 훈련하는 기본 예시예요.

from catboost import CatBoostClassifier

# 데이터 준비
X = [[1, 2], [2, 3], [3, 4], [4, 5]]
y = [0, 0, 1, 1]

# 모델 생성 및 훈련
model = CatBoostClassifier(
    iterations=100,
    learning_rate=0.1,
    depth=6,
    loss_function='Logloss',
    verbose=True
)

model.fit(X, y)

# 예측
pred = model.predict(X)
print(pred)

회귀 문제라면 CatBoostRegressor를, 랭킹 문제라면 CatBoostRanker를 사용하면 되고, 범주형 피처가 있다면 fitcat_features 인자로 해당 컬럼 인덱스를 넘겨주면 돼요. 훈련 중에는 교차 검증, 파라미터 튜닝, 피처 중요도(feature importance) 계산, 예측 및 단계별(staged) 예측까지 모두 내장 도구로 지원해요.

CatBoost 모델을 실제 서비스에 배포하려면 모델 API 문서를 참고하면 돼요. 버그 신고는 GitHub Issues, 질문은 GitHub Discussions Q&A나 Stack Overflow의 catboost 태그로 남길 수 있어요.

더 알아보기 (Learn more)