본문으로 건너뛰기

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