006 FLAML 기본 워크플로우 이해하기
키워드: 워크플로우, 기본
개요
FLAML을 효과적으로 사용하려면 전체 워크플로우를 이해하는 것이 중요합니다. 이 글에서는 데이터 준비부터 모델 학습, 평가, 저장까지 FLAML의 기본 워크플로우를 단계별로 살펴보겠습니다.
실습 환경
- Python 버전: 3.11 권장
- 필요 패키지:
flaml[automl], pandas, scikit-learn
pip install flaml[automl] pandas scikit-learn
FLAML 워크플로우 개요
┌─────────────────────────────────────────────────────────────┐
│ FLAML 워크플로우 │
├─────────────────────────────────────────────────────────────┤
│ 1. 데이터 준비 → pandas로 로드, 결측치 확인 │
│ 2. 데이터 분할 → train/test split │
│ 3. AutoML 설정 → task, time_budget, metric 설정 │
│ 4. 모델 학습 → automl.fit() 실행 │
│ 5. 결과 확인 → best_estimator, best_config 확인 │
│ 6. 모델 평가 → 테스트 세트로 성능 측정 │
│ 7. 모델 저장 → pickle 또는 joblib으로 저장 │
└─────────────────────────────────────────────────────────────┘
단계별 상세 설명
1단계: 데이터 준비
import pandas as pd
import numpy as np
# 006 데이터 로드
df = pd.read_csv('data.csv')
# 006 기본 정보 확인
print("데이터 크기:", df.shape)
print("\n데이터 타입:")
print(df.dtypes)
# 006 결측치 확인
print("\n결측치:")
print(df.isnull().sum())
# 006 기초 통계량
print("\n기초 통계량:")
print(df.describe())
2단계: 특성과 타겟 분리 및 데이터 분할
from sklearn.model_selection import train_test_split
# 006 특성(X)과 타겟(y) 분리
target_column = 'target'
X = df.drop(columns=[target_column])
y = df[target_column]
# 006 학습/테스트 데이터 분할
X_train, X_test, y_train, y_test = train_test_split(
X, y,
test_size=0.2, # 20%를 테스트로
random_state=42, # 재현성을 위한 시드
stratify=y # 분류 문제에서 클래스 비율 유지
)
print(f"학습 데이터: {X_train.shape}")
print(f"테스트 데이터: {X_test.shape}")
3단계: AutoML 객체 생성 및 설정
from flaml import AutoML
# 006 AutoML 객체 생성
automl = AutoML()
# 006 주요 설정 파라미터
settings = {
"task": "classification", # 태스크 유형
"time_budget": 60, # 시간 예산 (초)
"metric": "accuracy", # 최적화 지표
"estimator_list": ["lgbm", "xgboost", "rf"], # 탐색할 모델
"seed": 42, # 재현성
"verbose": 1 # 로그 출력 레벨
}
4단계: 모델 학습
# 006 AutoML 실행
automl.fit(
X_train, y_train,
**settings
)
실행 중 출력 예시
[flaml.automl.logger: INFO] Iteration 1, current learner lgbm
[flaml.automl.logger: INFO] Estimated time: 0.1s, sample size: 455
[flaml.automl.logger: INFO] Best accuracy: 0.9451
[flaml.automl.logger: INFO] Iteration 2, current learner lgbm
[flaml.automl.logger: INFO] Best accuracy: 0.9560
...
[flaml.automl.logger: INFO] retrain lgbm for 0.0s
[flaml.automl.logger: INFO] Best final model: lgbm
5단계: 결과 확인
# 006 최적 모델 확인
print(f"최적 모델: {automl.best_estimator}")
# 006 최적 하이퍼파라미터
print(f"\n최적 하이퍼파라미터:")
for key, value in automl.best_config.items():
print(f" {key}: {value}")
# 006 검증 점수
print(f"\n검증 점수: {1 - automl.best_loss:.4f}")
# 006 학습에 사용된 시간
print(f"총 학습 시간: {automl.best_config_train_time:.2f}초")
6단계: 모델 평가
from sklearn.metrics import (
accuracy_score,
classification_report,
confusion_matrix
)
# 006 예측
y_pred = automl.predict(X_test)
# 006 정확도
accuracy = accuracy_score(y_test, y_pred)
print(f"테스트 정확도: {accuracy:.4f}")
# 006 상세 리포트
print("\n분류 리포트:")
print(classification_report(y_test, y_pred))
# 006 혼동 행렬
print("혼동 행렬:")
print(confusion_matrix(y_test, y_pred))
7단계: 모델 저장 및 불러오기
import pickle
# 006 모델 저장
with open('flaml_model.pkl', 'wb') as f:
pickle.dump(automl, f)
print("모델이 저장되었습니다: flaml_model.pkl")
# 006 모델 불러오기
with open('flaml_model.pkl', 'rb') as f:
loaded_model = pickle.load(f)
# 006 불러온 모델로 예측
new_predictions = loaded_model.predict(X_test)
print(f"불러온 모델 정확도: {accuracy_score(y_test, new_predictions):.4f}")
전체 코드 (복사용)
"""
FLAML 기본 워크플로우 - 완전한 예제
"""
# 1. 라이브러리 임포트
import pandas as pd
import numpy as np
from flaml import AutoML
from sklearn.model_selection import train_test_split
from sklearn.datasets import load_breast_cancer
from sklearn.metrics import accuracy_score, classification_report
import pickle
# 2. 데이터 준비
data = load_breast_cancer()
df = pd.DataFrame(data.data, columns=data.feature_names)
df['target'] = data.target
print("="*60)
print("1. 데이터 준비")
print("="*60)
print(f"데이터 크기: {df.shape}")
print(f"타겟 분포:\n{df['target'].value_counts()}")
# 3. 데이터 분할
X = df.drop(columns=['target'])
y = df['target']
X_train, X_test, y_train, y_test = train_test_split(
X, y, test_size=0.2, random_state=42, stratify=y
)
print(f"\n학습 데이터: {X_train.shape}")
print(f"테스트 데이터: {X_test.shape}")
# 4. FLAML AutoML 실행
print("\n" + "="*60)
print("2. FLAML AutoML 실행")
print("="*60)
automl = AutoML()
automl.fit(
X_train, y_train,
task="classification",
time_budget=30,
metric="accuracy",
seed=42,
verbose=1
)
# 5. 결과 확인
print("\n" + "="*60)
print("3. 결과 확인")
print("="*60)
print(f"최적 모델: {automl.best_estimator}")
print(f"검증 정확도: {1 - automl.best_loss:.4f}")
# 6. 테스트 평가
print("\n" + "="*60)
print("4. 테스트 평가")
print("="*60)
y_pred = automl.predict(X_test)
print(f"테스트 정확도: {accuracy_score(y_test, y_pred):.4f}")
print("\n분류 리포트:")
print(classification_report(y_test, y_pred, target_names=['악성', '양성']))
# 7. 모델 저장
print("\n" + "="*60)
print("5. 모델 저장")
print("="*60)
with open('breast_cancer_model.pkl', 'wb') as f:
pickle.dump(automl, f)
print("모델 저장 완료: breast_cancer_model.pkl")
워크플로우 체크리스트
| 단계 | 체크 항목 |
|---|---|
| 데이터 준비 | ☐ 데이터 크기 확인 |
| ☐ 결측치 확인/처리 | |
| ☐ 데이터 타입 확인 | |
| 데이터 분할 | ☐ 적절한 test_size 설정 |
| ☐ stratify 적용 (분류) | |
| ☐ random_state 설정 | |
| AutoML 설정 | ☐ task 유형 지정 |
| ☐ time_budget 설정 | |
| ☐ metric 선택 | |
| 학습 | ☐ fit() 실행 |
| ☐ 로그 확인 | |
| 평가 | ☐ 테스트 세트로 평가 |
| ☐ 여러 지표 확인 | |
| 저장 | ☐ 모델 파일 저장 |
| ☐ 저장된 모델 검증 |
정리
- FLAML 워크플로우는 7단계로 구성됩니다.
- 데이터 준비 → 분할 → 설정 → 학습 → 확인 → 평가 → 저장
automl.fit()으로 한 번에 학습이 완료됩니다.best_estimator,best_config로 최적 결과를 확인합니다.- pickle로 모델을 저장하고 재사용할 수 있습니다.
다음 글 예고
다음 글에서는 AutoML.fit() 핵심 파라미터에 대해 알아보겠습니다. fit() 메서드의 다양한 파라미터와 그 역할을 상세히 다룹니다.
FLAML AutoML 마스터 시리즈 #006