Skip to main content

AutoML이란?

AutoML(Automated Machine Learning) 은 데이터를 입력하면 자동으로 전처리, 모델 선택, 하이퍼파라미터 튜닝, 평가 까지 수행하여 최적의 모델을 찾아주는 기능입니다. ML 전문 지식이 없어도 빠르게 좋은 성능의 모델을 얻을 수 있습니다.
💡 AutoML은 블랙박스가 아닙니다. Databricks AutoML의 핵심 차별점은 각 시행(trial)의 전체 코드가 담긴 노트북을 자동 생성 한다는 것입니다. 결과를 검토하고, 필요한 부분을 수정하여 직접 커스터마이즈할 수 있습니다.

지원하는 문제 유형

문제 유형API 함수평가 지표설명
분류 (Classification)automl.classify()F1, Accuracy, ROC-AUC, Log Loss이진/다중 클래스 분류
회귀 (Regression)automl.regress()RMSE, MAE, R², MSE연속 값 예측
시계열 예측 (Forecasting)automl.forecast()SMAPE, RMSE, MSE, MAE시계열 데이터 예측

UI에서 AutoML 사용하기

실행 순서

  1. 좌측 메뉴에서 Experiments 클릭
  2. Create AutoML Experiment 선택
  3. 설정 입력:
    • Dataset: Delta 테이블 또는 DataFrame 선택
    • Prediction target: 예측할 컬럼 선택
    • Problem type: 분류 / 회귀 / 시계열 예측 선택
  4. 고급 설정(선택):
    • Timeout (최대 실행 시간)
    • Evaluation metric (평가 지표)
    • Training frameworks (사용할 알고리즘)
  5. Start 클릭

UI에서 결과 확인

실행이 완료되면 다음을 확인할 수 있습니다:
확인 항목설명
리더보드모든 시행의 성능 지표를 비교합니다
최적 모델가장 좋은 성능의 모델이 하이라이트됩니다
생성된 노트북각 시행의 전체 코드를 담은 노트북 링크입니다
피처 중요도SHAP 기반 피처 중요도 그래프입니다

API에서 AutoML 사용하기

분류 (Classification)

from databricks import automl

# 분류 모델 학습
result = automl.classify(
    dataset="catalog.schema.customer_churn",  # Delta 테이블 경로
    target_col="churned",                      # 예측 대상 컬럼
    primary_metric="f1",                       # 최적화할 지표
    timeout_minutes=30,                        # 최대 실행 시간
    max_trials=50,                             # 최대 시행 수
    exclude_cols=["customer_id"],              # 제외할 컬럼
    experiment_dir="/Workspace/Users/user@company.com/automl"  # 실험 저장 경로
)

# 결과 확인
print(f"Best model: {result.best_trial.model_description}")
print(f"F1 Score: {result.best_trial.metrics['val_f1_score']:.4f}")
print(f"Accuracy: {result.best_trial.metrics['val_accuracy_score']:.4f}")
print(f"Model URI: {result.best_trial.model_uri}")

# 최적 모델의 노트북 확인
print(f"Best trial notebook: {result.best_trial.notebook_url}")

회귀 (Regression)

result = automl.regress(
    dataset="catalog.schema.house_prices",
    target_col="price",
    primary_metric="rmse",
    timeout_minutes=60,
    max_trials=100,
    exclude_cols=["id", "address"]
)

print(f"Best model: {result.best_trial.model_description}")
print(f"RMSE: {result.best_trial.metrics['val_rmse']:.2f}")
print(f"R²: {result.best_trial.metrics['val_r2_score']:.4f}")

시계열 예측 (Forecasting)

result = automl.forecast(
    dataset="catalog.schema.daily_sales",
    target_col="revenue",
    time_col="date",                    # 시간 컬럼
    identity_col=["store_id"],          # 시계열 식별 컬럼 (멀티 시계열)
    horizon=30,                         # 예측 기간 (30일)
    frequency="D",                      # 데이터 빈도 (일간)
    primary_metric="smape",
    timeout_minutes=60
)

print(f"Best model: {result.best_trial.model_description}")
print(f"SMAPE: {result.best_trial.metrics['val_smape']:.4f}")

AutoML 주요 파라미터

파라미터설명기본값
dataset학습 데이터 (테이블 경로 또는 DataFrame)입니다(필수)
target_col예측 대상 컬럼입니다(필수)
primary_metric최적화할 평가 지표입니다문제 유형에 따라 자동
timeout_minutes최대 실행 시간(분)입니다120
max_trials최대 시행(모델 학습) 수입니다None (시간 제한 내 최대)
exclude_cols학습에서 제외할 컬럼 목록입니다[]
exclude_frameworks제외할 알고리즘 프레임워크입니다[]
experiment_dirMLflow 실험 저장 경로입니다기본 디렉토리

생성된 노트북 활용

AutoML이 생성하는 노트북에는 다음 내용이 포함되어 있습니다:
섹션내용
데이터 전처리결측값 처리, 인코딩, 스케일링 코드
피처 엔지니어링날짜 분해, 상호작용 피처 등
모델 학습알고리즘 설정, 하이퍼파라미터
평가교차 검증, 지표 계산, 혼동 행렬
SHAP 분석피처 중요도 시각화

노트북 커스터마이징 워크플로

단계작업설명
1AutoML 실행자동으로 여러 모델을 학습합니다
2노트북 다운로드AutoML이 생성한 노트북을 다운로드합니다
3코드 검토 및 수정생성된 코드를 검토하고 필요에 따라 수정합니다
4추가 피처 엔지니어링도메인 지식을 반영하여 피처를 추가합니다
5하이퍼파라미터 세밀 조정모델 성능을 최적화합니다
6최종 모델 MLflow 등록최종 모델을 MLflow에 등록합니다
# AutoML 생성 노트북에서 가져온 코드를 기반으로 커스터마이징
# (실제 AutoML이 생성하는 코드의 구조 예시)

import mlflow
from sklearn.pipeline import Pipeline
from sklearn.preprocessing import StandardScaler, OneHotEncoder
from sklearn.compose import ColumnTransformer
from xgboost import XGBClassifier

# AutoML이 생성한 전처리 파이프라인 (수정 가능)
preprocessor = ColumnTransformer(
    transformers=[
        ("num", StandardScaler(), numerical_cols),
        ("cat", OneHotEncoder(handle_unknown="ignore"), categorical_cols),
    ]
)

# AutoML이 찾은 최적 하이퍼파라미터 (세밀 조정 가능)
model = Pipeline([
    ("preprocessor", preprocessor),
    ("classifier", XGBClassifier(
        n_estimators=200,       # AutoML 결과 기반
        max_depth=6,            # 직접 조정 가능
        learning_rate=0.1,
        min_child_weight=3,
        subsample=0.8
    ))
])

# MLflow 자동 로깅
with mlflow.start_run(run_name="customized-automl-model"):
    model.fit(X_train, y_train)
    mlflow.sklearn.log_model(model, "model",
        registered_model_name="catalog.schema.churn_model")

MLflow 자동 연동

AutoML의 모든 시행(trial)은 MLflow에 자동으로 로깅 됩니다.
자동 기록 항목설명
파라미터알고리즘, 하이퍼파라미터
지표학습/검증 성능 지표
모델 아티팩트학습된 모델 파일
피처 중요도SHAP 기반 중요도 그래프
노트북해당 시행의 전체 코드 노트북
# MLflow에서 AutoML 실험 결과 조회
import mlflow

experiment = mlflow.get_experiment_by_name("/Workspace/Users/user@company.com/automl")
runs = mlflow.search_runs(
    experiment_ids=[experiment.experiment_id],
    order_by=["metrics.val_f1_score DESC"],
    max_results=10
)

# 상위 10개 모델 비교
print(runs[["run_id", "params.model_type", "metrics.val_f1_score", "metrics.val_accuracy_score"]])

AutoML 시행에서 사용되는 알고리즘

알고리즘문제 유형특징
XGBoost분류, 회귀정형 데이터에서 최고 성능, Gradient Boosting
LightGBM분류, 회귀대용량 데이터에서 빠른 학습
sklearn (RF, LR)분류, 회귀Random Forest, Logistic/Linear Regression
Prophet시계열 예측Meta의 시계열 예측 라이브러리
ARIMA시계열 예측전통적 시계열 분석

현업 사례: AutoML 결과를 그대로 프로덕션에 올리면 안 되는 이유

🔥 AutoML의 가장 큰 오해: “자동이니까 바로 배포해도 되겠지”
AutoML은 놀라울 정도로 좋은 성능을 보여주지만, 그 결과를 검증 없이 프로덕션에 배포하는 것은 위험 합니다. 현업에서 자주 보는 실수 패턴을 살펴보겠습니다.

AutoML 결과를 바로 배포했을 때 벌어지는 일

1주차: AutoML 실행, F1 = 0.95 달성! 🎉
  - "와, 이 정도면 바로 프로덕션에 올리자"
  - 모델 서빙 엔드포인트 생성, API 연동

2주차: 비즈니스팀에서 이상한 보고
  - "예측 결과가 너무 편향돼요. VIP 고객을 전부 이탈 예측으로 분류해요"
  - 원인: AutoML이 customer_tier 컬럼을 피처로 사용했는데,
    학습 데이터에서 VIP 이탈 비율이 높았음 (표본 편향)

3주차: 더 심각한 문제 발견
  - "주말 데이터가 들어오면 예측이 완전히 틀려요"
  - 원인: 학습 데이터가 평일 데이터 위주였음
  - AutoML은 데이터의 편향을 알려주지 않음

4주차: 성능 급락
  - F1이 0.95 → 0.68로 하락
  - 원인: Data Drift (실제 서비스 데이터의 분포가 학습 데이터와 달라짐)
  - AutoML은 학습 데이터 내에서만 최적화했을 뿐,
    프로덕션 환경의 데이터 변화는 고려하지 않음

AutoML이 해주지 않는 것들

단계AutoML이 해주는 것사람이 해야 하는 것
데이터 이해기본 통계비즈니스 맥락 이해, 편향 확인
피처 선택자동 선택도메인 지식 기반 피처 검증 (data leakage 확인)
모델 학습최적 알고리즘/하이퍼파라미터 탐색결과 해석, 비즈니스 로직 확인
평가수치 메트릭 (F1, RMSE)슬라이스별 성능 확인 (성별, 연령대별 편향)
배포MLflow 등록A/B 테스트, 모니터링, 롤백 계획
운영-Data Drift 감지, 주기적 재학습

AutoML이 정말 유용한 경우: 베이스라인(Baseline) 설정

💡 AutoML의 진짜 가치는 “프로덕션 모델”이 아니라 “베이스라인”입니다.
현업에서 AutoML은 다음 상황에서 가장 빛납니다.

유용한 시나리오 1: “이 데이터로 예측이 가능한가?” 타당성 검증

# 프로젝트 시작 1일차에 실행
# "고객 이탈을 예측할 수 있을까?"에 대한 빠른 답변

result = automl.classify(
    dataset="catalog.schema.customer_data",
    target_col="churned",
    timeout_minutes=30,  # 30분이면 충분
    max_trials=20
)

# 결과 해석:
# F1 > 0.7 → "예측 가능성 있음, 프로젝트 진행하자"
# F1 < 0.5 → "현재 피처로는 어려움, 데이터를 더 모으거나 피처를 추가해야"
print(f"Best F1: {result.best_trial.metrics['val_f1_score']:.4f}")

# SHAP 분석으로 어떤 피처가 중요한지 즉시 파악
# → 도메인 전문가와 "이 피처가 말이 되나요?" 논의의 시작점

유용한 시나리오 2: 수동 모델 개선의 기준선

AutoML 결과: F1 = 0.85 (30분 소요)

이제 데이터 사이언티스트가 수동으로 개선:
- 피처 엔지니어링 추가 → F1 = 0.88 (2일 소요)
- 앙상블 기법 적용 → F1 = 0.91 (3일 소요)
- 도메인 지식 기반 피처 → F1 = 0.93 (1주 소요)

AutoML이 없었다면:
- "기준이 뭔지 몰라서 개선이 된 건지 확인 어려움"
- "경영진에게 '3%p 개선했습니다'라고 수치로 보고하기 어려움"

유용한 시나리오 3: 비전문가가 빠르게 결과를 내야 할 때

# 데이터 분석가가 "다음 주까지 매출 예측 해주세요"라는 요청을 받았을 때
# ML 전문가가 아니어도 시작할 수 있음

result = automl.forecast(
    dataset="catalog.schema.daily_sales",
    target_col="revenue",
    time_col="date",
    identity_col=["store_id"],
    horizon=30,
    timeout_minutes=60
)

# AutoML이 생성한 노트북을 ML 전문가에게 전달
# "여기서부터 개선해주세요"
print(f"Best trial notebook: {result.best_trial.notebook_url}")

생성된 노트북을 커스터마이징하는 실전 패턴

AutoML이 생성하는 노트북은 수정 가능한 출발점 입니다. 현업에서 가장 많이 커스터마이징하는 부분을 소개합니다.

커스터마이징 포인트 1: 피처 엔지니어링 추가

# AutoML 노트북에서 가져온 코드 + 도메인 지식 피처 추가

# AutoML이 생성한 기본 전처리 (그대로 유지)
from sklearn.pipeline import Pipeline
from sklearn.preprocessing import StandardScaler, OneHotEncoder

# === 여기서부터 커스터마이징 ===
# 도메인 지식 기반 피처 추가
def add_domain_features(df):
    # 고객 활동 관련 파생 피처
    df['days_since_last_order'] = (
        pd.Timestamp.now() - df['last_order_date']).dt.days
    df['avg_order_value'] = df['total_spent'] / df['order_count'].clip(lower=1)
    df['order_frequency'] = df['order_count'] / df['tenure_months'].clip(lower=1)

    # 이상치 제거 (AutoML은 이것을 안 해줌)
    df = df[df['avg_order_value'] < df['avg_order_value'].quantile(0.99)]

    return df

# AutoML 결과에서 데이터 로드 부분을 수정
train_df = add_domain_features(train_df)

커스터마이징 포인트 2: 데이터 분할 전략 변경

# AutoML 기본: 랜덤 분할 (train/validation/test)
# 현업에서는 시간 기반 분할이 더 현실적

# ❌ AutoML 기본 (랜덤 분할)
from sklearn.model_selection import train_test_split
X_train, X_test = train_test_split(X, test_size=0.2, random_state=42)

# ✅ 시간 기반 분할로 변경 (더 현실적인 평가)
train_mask = df['order_date'] < '2025-01-01'
test_mask = df['order_date'] >= '2025-01-01'
X_train, y_train = df[train_mask][features], df[train_mask][target]
X_test, y_test = df[test_mask][features], df[test_mask][target]

# 이렇게 하면 "과거 데이터로 학습 → 미래 데이터 예측" 시뮬레이션이 됨
# 랜덤 분할보다 성능이 낮게 나오지만, 더 현실적인 기대치를 줌

커스터마이징 포인트 3: 슬라이스별 성능 평가 추가

# AutoML은 전체 데이터에 대한 메트릭만 보여줌
# 현업에서는 세그먼트별 성능이 더 중요함

from sklearn.metrics import f1_score, classification_report

# 전체 성능 (AutoML이 이미 보여줌)
print(f"Overall F1: {f1_score(y_test, y_pred):.4f}")

# === 세그먼트별 성능 (직접 추가해야 함) ===
segments = {
    'VIP': test_df['tier'] == 'VIP',
    'Regular': test_df['tier'] == 'Regular',
    'New': test_df['tenure_months'] < 3,
    'High-value': test_df['total_spent'] > 1000000,
}

for name, mask in segments.items():
    if mask.sum() > 0:
        segment_f1 = f1_score(y_test[mask], y_pred[mask])
        print(f"  {name} F1: {segment_f1:.4f} (n={mask.sum()})")

# 결과 예시:
# Overall F1: 0.85
#   VIP F1: 0.62 ← 문제 발견! VIP 세그먼트에서 성능이 낮음
#   Regular F1: 0.89
#   New F1: 0.71 ← 신규 고객도 성능이 낮음
#   High-value F1: 0.58 ← 고가치 고객에서 최악

커스터마이징 포인트 4: MLflow에 최종 모델 등록

# AutoML 노트북을 커스터마이징한 후, 최종 모델을 MLflow에 등록

import mlflow

with mlflow.start_run(run_name="customized-churn-model-v1") as run:
    # 커스텀 태그 추가
    mlflow.set_tag("base", "automl")
    mlflow.set_tag("customizations", "domain_features, time_split, segment_eval")
    mlflow.set_tag("data_version", "2025-03-31")

    # 모델 학습 + 로깅
    model.fit(X_train, y_train)
    mlflow.sklearn.log_model(
        model, "model",
        registered_model_name="catalog.ml.churn_predictor"
    )

    # 세그먼트별 메트릭 로깅
    for name, mask in segments.items():
        segment_f1 = f1_score(y_test[mask], y_pred[mask])
        mlflow.log_metric(f"f1_{name.lower()}", segment_f1)

    # 전체 메트릭
    mlflow.log_metric("f1_overall", f1_score(y_test, y_pred))
💡 현업 팁: AutoML → 커스터마이징 → MLflow 등록 → Model Serving 배포의 전체 사이클을 처음에 1~2일 만에 완주하는 것을 목표로 하세요. 완벽한 모델을 만드는 것보다 빠르게 전체 파이프라인을 구축하고, 이후에 모델을 개선하는 접근이 현업에서 훨씬 효과적입니다. 많은 팀이 “모델 성능을 0.01 올리는 데 2주”를 쓰면서 배포 파이프라인은 구축하지 않습니다. 그러면 아무리 좋은 모델도 비즈니스 가치를 만들 수 없습니다.

정리

핵심 개념설명
AutoML데이터를 주면 자동으로 전처리, 모델 선택, 튜닝을 수행합니다
3가지 문제 유형분류(classify), 회귀(regress), 시계열 예측(forecast)을 지원합니다
노트북 생성각 시행의 전체 코드가 담긴 노트북이 자동 생성되어 커스터마이즈할 수 있습니다
MLflow 연동모든 시행이 MLflow에 자동 로깅되어 비교, 추적, 배포가 가능합니다
SHAP 분석피처 중요도를 자동으로 계산하여 모델 해석성을 제공합니다

참고 링크