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 Trees | RF보다 빠름, 랜덤성 높음 |
"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