본문으로 건너뛰기

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