본문으로 건너뛰기

010 estimator_list - 탐색할 모델 지정하기

키워드: estimator_list, 모델 선택

개요

FLAML은 기본적으로 다양한 머신러닝 모델을 탐색합니다. 하지만 estimator_list 파라미터를 사용하면 탐색할 모델을 직접 지정할 수 있습니다.

이 글에서는 사용 가능한 추정기(estimator) 목록과 상황별 최적의 모델 조합을 알아보겠습니다.

실습 환경

  • Python 버전: 3.11 권장
  • 필요 패키지: flaml[automl], pandas, scikit-learn
pip install flaml[automl] pandas scikit-learn

estimator_list 기본 사용법

from flaml import AutoML

automl = AutoML()

# 010 기본: 모든 사용 가능한 모델 탐색
automl.fit(X_train, y_train, task="classification", time_budget=60)

# 010 특정 모델만 탐색
automl.fit(
X_train, y_train,
task="classification",
time_budget=60,
estimator_list=["lgbm", "xgboost", "rf"]
)

사용 가능한 추정기 목록

분류/회귀 공통

추정기설명특징
"lgbm"LightGBM빠르고 정확함, 대용량 데이터에 강함
"xgboost"XGBoost안정적인 성능, 널리 사용됨
"xgb_limitdepth"제한 깊이 XGBoost과적합 방지에 효과적
"rf"Random Forest안정적, 해석 용이
"extra_tree"Extra TreesRF보다 빠름, 랜덤성 높음
"catboost"CatBoost범주형 특성에 강함
"kneighbor"KNN단순하고 직관적

분류 전용

추정기설명특징
"lrl1"L1 로지스틱 회귀희소 해, 특성 선택
"lrl2"L2 로지스틱 회귀일반적인 정규화

회귀 전용

추정기설명특징
"sgd"SGD 회귀대규모 데이터에 효율적

시계열 전용

추정기설명
"prophet"Facebook Prophet
"arima"ARIMA
"sarimax"SARIMAX
"holt-winters"Holt-Winters

기본 탐색 순서

FLAML은 저비용 모델부터 탐색합니다:

# 010 분류의 기본 순서
default_classification = [
"lgbm", # 1순위: 빠르고 강력
"xgboost", # 2순위: 안정적
"xgb_limitdepth", # 3순위: 과적합 방지
"rf", # 4순위: 앙상블
"extra_tree", # 5순위: 빠른 앙상블
"lrl1", # 6순위: 선형 모델
"lrl2", # 7순위: 선형 모델
"kneighbor", # 8순위: 인스턴스 기반
"catboost" # 9순위: 범주형 특화
]

상황별 권장 설정

빠른 탐색

# 010 시간이 부족할 때: 빠른 모델만
automl.fit(
X_train, y_train,
task="classification",
time_budget=30,
estimator_list=["lgbm", "rf"]
)

정확도 최우선

# 010 최고 성능 추구: 주요 부스팅 모델
automl.fit(
X_train, y_train,
task="classification",
time_budget=300,
estimator_list=["lgbm", "xgboost", "catboost"]
)

해석 가능성 중요

# 010 해석 가능한 모델 중심
automl.fit(
X_train, y_train,
task="classification",
time_budget=60,
estimator_list=["rf", "lrl2", "lgbm"]
)

범주형 특성이 많을 때

# 010 CatBoost 포함 (범주형 자동 처리)
automl.fit(
X_train, y_train,
task="classification",
time_budget=120,
estimator_list=["catboost", "lgbm", "xgboost"]
)

대용량 데이터

# 010 메모리/속도 효율적인 모델
automl.fit(
X_train, y_train,
task="classification",
time_budget=300,
estimator_list=["lgbm", "xgb_limitdepth"]
)

실험: 모델 조합별 성능 비교

from flaml import AutoML
from sklearn.datasets import load_breast_cancer
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score
import time

X, y = load_breast_cancer(return_X_y=True)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# 010 다양한 조합 테스트
combinations = {
"all_default": None, # 기본값 (전체)
"boosting_only": ["lgbm", "xgboost", "catboost"],
"tree_only": ["rf", "extra_tree"],
"linear_only": ["lrl1", "lrl2"],
"fast_only": ["lgbm", "rf"],
"single_lgbm": ["lgbm"]
}

results = []

for name, estimators in combinations.items():
start = time.time()

automl = AutoML()

if estimators:
automl.fit(
X_train, y_train,
task="classification",
time_budget=30,
estimator_list=estimators,
verbose=0
)
else:
automl.fit(
X_train, y_train,
task="classification",
time_budget=30,
verbose=0
)

elapsed = time.time() - start
accuracy = accuracy_score(y_test, automl.predict(X_test))

print(f"{name:15s} | 정확도: {accuracy:.4f} | "
f"최적모델: {automl.best_estimator:10s} | "
f"시간: {elapsed:.1f}초")

실행 결과 예시

all_default     | 정확도: 0.9737 | 최적모델: lgbm       | 시간: 30.2초
boosting_only | 정확도: 0.9737 | 최적모델: lgbm | 시간: 30.1초
tree_only | 정확도: 0.9649 | 최적모델: rf | 시간: 30.0초
linear_only | 정확도: 0.9561 | 최적모델: lrl2 | 시간: 30.0초
fast_only | 정확도: 0.9737 | 최적모델: lgbm | 시간: 30.1초
single_lgbm | 정확도: 0.9737 | 최적모델: lgbm | 시간: 30.0초

인사이트

  • lgbm이 대부분의 경우 최적 모델로 선택됨
  • 모델 수를 줄이면 각 모델에 더 많은 시간 할당
  • 단일 모델만 사용하면 해당 모델의 하이퍼파라미터 튜닝에 집중

커스텀 추정기 추가

기존 sklearn 모델을 FLAML에 추가할 수 있습니다.

from flaml import AutoML
from sklearn.svm import SVC

# 010 커스텀 학습기 추가
automl = AutoML()
automl.add_learner(learner_name="svm", learner_class=SVC)

# 010 추가한 학습기 포함하여 탐색
automl.fit(
X_train, y_train,
task="classification",
time_budget=60,
estimator_list=["lgbm", "svm"] # svm 포함
)

모델별 특징 요약

LightGBM (lgbm)

# 010 장점: 빠름, 대용량 처리, 높은 정확도
# 010 단점: 작은 데이터에서 과적합 가능
estimator_list=["lgbm"]

XGBoost (xgboost)

# 010 장점: 안정적, 널리 검증됨
# 010 단점: lgbm보다 느림
estimator_list=["xgboost"]

Random Forest (rf)

# 010 장점: 해석 용이, 과적합에 강함
# 010 단점: 부스팅보다 정확도 낮을 수 있음
estimator_list=["rf"]

CatBoost (catboost)

# 010 장점: 범주형 자동 처리, GPU 지원
# 010 단점: 첫 학습 시 느림
estimator_list=["catboost"]

선택 가이드 플로우차트

데이터 특성 분석

├─ 범주형 특성 많음 ─→ ["catboost", "lgbm"]

├─ 대용량 데이터 ─→ ["lgbm", "xgb_limitdepth"]

├─ 해석 필요 ─→ ["rf", "lrl2", "lgbm"]

├─ 시간 부족 ─→ ["lgbm"]

└─ 최고 성능 ─→ ["lgbm", "xgboost", "catboost", "rf"]

정리

  • estimator_list탐색할 모델을 제한할 수 있습니다.
  • 모델을 제한하면 각 모델에 더 많은 시간 할당됩니다.
  • lgbm은 대부분의 경우 좋은 성능을 보입니다.
  • 상황에 맞는 모델 조합을 선택하세요.
  • 커스텀 추정기도 add_learner()로 추가할 수 있습니다.

다음 글 예고

다음 글에서는 첫 번째 분류 모델 만들기에 대해 알아보겠습니다. 실제 데이터세트를 사용해 처음부터 끝까지 분류 모델을 만드는 프로젝트를 진행합니다.


FLAML AutoML 마스터 시리즈 #010