메인 콘텐츠로 건너뛰기
wandb를 사용하면 몇 줄의 코드만으로 scikit-learn 모델의 성능을 시각화하고 서로 비교할 수 있습니다. 예제 실행해 보기 →

시작하기

회원 가입 및 API key 생성

API key는 사용 중인 머신을 W&B에 인증합니다. 사용자 프로필에서 API key를 생성할 수 있습니다.
보다 간편하게 설정하려면 User Settings로 바로 이동해 API key를 생성하세요. 새로 생성된 API key는 즉시 복사하여 비밀번호 관리자와 같은 안전한 위치에 저장하세요.
  1. 오른쪽 상단에서 사용자 프로필 아이콘을 클릭합니다.
  2. User Settings를 선택한 다음, 아래로 스크롤하여 API Keys 섹션으로 이동합니다.

wandb 라이브러리를 설치하고 로그인하기

로컬 환경에서 wandb 라이브러리를 설치하고 로그인하려면:
  1. WANDB_API_KEY 환경 변수를 API key로 설정합니다.
    export WANDB_API_KEY=<your_api_key>
    
  2. wandb 라이브러리를 설치하고 로그인합니다.
    pip install wandb
    
    wandb login
    

메트릭 로깅

import wandb

wandb.init(project="visualize-sklearn") as run:

  y_pred = clf.predict(X_test)
  accuracy = sklearn.metrics.accuracy_score(y_true, y_pred)

  # 시간 경과에 따라 메트릭을 로깅하려면 run.log를 사용하세요
  run.log({"accuracy": accuracy})

  # 또는 학습 종료 시 최종 메트릭을 로깅하려면 run.summary를 사용할 수도 있습니다
  run.summary["accuracy"] = accuracy

플롯 생성하기

1단계: wandb를 임포트하고 새 실행을 초기화하기

import wandb

run = wandb.init(project="visualize-sklearn")

2단계: 플롯 시각화하기

개별 플롯

모델을 학습하고 예측을 수행한 후, wandb에서 플롯을 생성하여 예측 결과를 분석할 수 있습니다. 지원되는 플롯의 전체 목록은 아래의 지원되는 플롯 섹션을 참조하세요.
# 단일 플롯 시각화
wandb.sklearn.plot_confusion_matrix(y_true, y_pred, labels)

모든 플롯

W&B에는 여러 가지 관련 플롯을 한 번에 그려 주는 plot_classifier 같은 함수들이 있습니다:
# 모든 분류기 플롯 시각화
wandb.sklearn.plot_classifier(
    clf,
    X_train,
    X_test,
    y_train,
    y_test,
    y_pred,
    y_probas,
    labels,
    model_name="SVC",
    feature_names=None,
)

# 모든 회귀 플롯
wandb.sklearn.plot_regressor(reg, X_train, X_test, y_train, y_test, model_name="Ridge")

# 모든 클러스터링 플롯
wandb.sklearn.plot_clusterer(
    kmeans, X_train, cluster_labels, labels=None, model_name="KMeans"
)

run.finish()

기존 Matplotlib 플롯

Matplotlib에서 생성한 플롯도 W&B 대시보드에 기록할 수 있습니다. 이를 위해 먼저 plotly를 설치해야 합니다.
pip install plotly
마지막으로, 다음과 같이 플롯을 W&B 대시보드에 로깅할 수 있습니다:
import matplotlib.pyplot as plt
import wandb

with wandb.init(project="visualize-sklearn") as run:

  # plt.plot(), plt.scatter() 등을 여기서 모두 작성합니다.
  # ...

  # plt.show() 대신 다음을 사용합니다:
  run.log({"plot": plt})

지원되는 플롯 유형

학습 곡선

Scikit-learn 학습 곡선
모델을 다양한 크기의 데이터셋으로 학습시키고, 학습 세트와 테스트 세트 각각에 대해 데이터셋 크기에 따른 교차 검증 점수를 나타내는 플롯을 생성합니다. wandb.sklearn.plot_learning_curve(model, X, y)
  • model (clf 또는 reg): 적합이 완료된 회귀 모델(regressor) 또는 분류기(classifier)를 입력으로 받습니다.
  • X (arr): 데이터셋 특징(features).
  • y (arr): 데이터셋 레이블(labels).

ROC

Scikit-learn ROC curve
ROC 곡선은 참양성 비율(true positive rate, TPR, y축)과 거짓양성 비율(false positive rate, FPR, x축)을 나타냅니다. 이상적인 값은 TPR = 1, FPR = 0으로, 왼쪽 상단의 점에 해당합니다. 일반적으로 ROC 곡선 아래 면적(AUC-ROC)을 계산하며, AUC-ROC 값이 클수록 성능이 더 좋습니다. wandb.sklearn.plot_roc(y_true, y_probas, labels)
  • y_true (arr): 테스트 세트의 레이블.
  • y_probas (arr): 테스트 세트에 대한 예측 확률.
  • labels (list): 타깃 변수(y)의 명명된 레이블.

클래스 비율

Scikit-learn 분류 특성
학습 세트와 테스트 세트에서 타깃 클래스의 분포를 시각화합니다. 불균형 클래스를 탐지하고, 한 클래스가 모델에 과도한 영향을 미치지 않도록 확인하는 데 유용합니다. wandb.sklearn.plot_class_proportions(y_train, y_test, ['dog', 'cat', 'owl'])
  • y_train (arr): 학습 세트 레이블.
  • y_test (arr): 테스트 세트 레이블.
  • labels (list): 타깃 변수(y)의 이름이 지정된 레이블.

정밀도-재현율 곡선

Scikit-learn precision-recall curve
서로 다른 임곗값에 대해 정밀도와 재현율 간의 트레이드오프를 계산합니다. 곡선 아래 면적(AUC)이 높다는 것은 재현율과 정밀도가 모두 높다는 뜻이며, 높은 정밀도는 낮은 거짓 양성 비율과, 높은 재현율은 낮은 거짓 음성 비율과 관련됩니다. 두 점수가 모두 높다는 것은 분류기가 정확한 결과(높은 정밀도)를 반환하면서, 동시에 전체 양성 결과의 대부분(높은 재현율)을 반환한다는 의미입니다. PR 곡선은 클래스 불균형이 심할 때 유용합니다. wandb.sklearn.plot_precision_recall(y_true, y_probas, labels)
  • y_true (arr): 테스트 세트 레이블.
  • y_probas (arr): 테스트 세트 예측 확률.
  • labels (list): 타깃 변수(y)에 대한 이름이 지정된 레이블.

특성 중요도

Scikit-learn 특성 중요도 차트
분류 작업에서 각 특성의 중요도를 평가하고 그래프로 시각화합니다. 트리 모델처럼 feature_importances_ 속성이 있는 분류기에서만 작동합니다. wandb.sklearn.plot_feature_importances(model, ['width', 'height, 'length'])
  • model (clf): 학습이 완료된 분류기 모델을 입력합니다.
  • feature_names (list): 특성 이름입니다. 특성 인덱스를 해당 이름으로 대체하여 플롯을 더 읽기 쉽게 만듭니다.

보정 곡선(Calibration curve)

Scikit-learn calibration curve
분류기의 예측 확률이 얼마나 잘 보정(calibrated)되어 있는지, 그리고 보정되지 않은 분류기를 어떻게 보정할 수 있는지를 시각화합니다. 기준선 로지스틱 회귀 모델, 인자로 전달된 모델, 그리고 해당 모델에 대해 적용한 isotonic 보정과 sigmoid 보정에서 나온 추정 예측 확률을 비교합니다. 보정 곡선이 대각선에 가까울수록 더 좋습니다. 뒤집힌 S자(sigmoid) 형태의 곡선은 과적합된 분류기를, 일반적인 S자(sigmoid) 형태의 곡선은 과소적합된 분류기를 나타냅니다. 모델에 대해 isotonic 및 sigmoid 보정을 학습하고 그 곡선을 비교함으로써, 모델이 과적합 또는 과소적합인지, 그리고 그렇다면 어떤 보정 방법(sigmoid 또는 isotonic)이 이를 개선하는 데 도움이 될 수 있는지 판단할 수 있습니다. 자세한 내용은 sklearn의 문서를 참고하세요. wandb.sklearn.plot_calibration_curve(clf, X, y, 'RandomForestClassifier')
  • model (clf): 학습이 완료된 분류기를 전달합니다.
  • X (arr): 학습 세트 특성(features)입니다.
  • y (arr): 학습 세트 레이블(labels)입니다.
  • model_name (str): 모델 이름입니다. 기본값은 ‘Classifier’입니다.

혼동 행렬

Scikit-learn confusion matrix
분류 모델의 정확도를 평가하기 위해 혼동 행렬을 계산합니다. 이는 모델 예측의 품질을 평가하고, 모델이 잘못 예측한 사례에서 패턴을 찾는 데 유용합니다. 대각선은 실제 레이블과 예측 레이블이 같은 경우처럼, 모델이 올바르게 예측한 결과를 나타냅니다. wandb.sklearn.plot_confusion_matrix(y_true, y_pred, labels)
  • y_true (arr): 테스트 세트의 실제 레이블.
  • y_pred (arr): 테스트 세트의 예측 레이블.
  • labels (list): 타깃 변수(y)의 레이블 이름 목록.

요약 지표

Scikit-learn 요약 지표
  • f1, accuracy, precision, recall과 같은 분류용 요약 지표를 계산합니다.
  • mse, mae, r2 점수와 같은 회귀용 요약 지표를 계산합니다.
wandb.sklearn.plot_summary_metrics(model, X_train, y_train, X_test, y_test)
  • model (clf 또는 reg): 학습이 완료된 회귀기(regressor) 또는 분류기(classifier)를 입력으로 받습니다.
  • X (arr): 학습 세트 특성(features).
  • y (arr): 학습 세트 레이블(labels).
    • X_test (arr): 테스트 세트 특성(features).
  • y_test (arr): 테스트 세트 레이블(labels).

엘보 플롯

Scikit-learn elbow plot
클러스터 수에 따른 분산 설명 비율을 학습 시간과 함께 측정하여 그래프로 표시합니다. 최적의 클러스터 개수를 선택할 때 유용합니다. wandb.sklearn.plot_elbow_curve(model, X_train)
  • model (clusterer): 학습이 완료된 클러스터링 모델을 전달합니다.
  • X (arr): 학습 데이터셋의 특징.

실루엣 플롯

Scikit-learn 실루엣 플롯
각 클러스터 내의 점이 이웃 클러스터의 점들과 얼마나 가까운지를 측정하고 시각화합니다. 클러스터의 두께는 클러스터 크기에 비례합니다. 수직선은 모든 점의 평균 실루엣 점수를 나타냅니다. 실루엣 계수가 +1에 가까울수록 해당 샘플이 이웃 클러스터로부터 멀리 떨어져 있음을 의미합니다. 값이 0이면 샘플이 두 이웃 클러스터 사이의 결정 경계 위나 그 근처에 있음을 의미하고, 음수 값은 해당 샘플이 잘못된 클러스터에 할당되었을 수 있음을 나타냅니다. 일반적으로 모든 실루엣 점수가 평균 이상(빨간 선을 지난 위치)에 있고 1에 최대한 가깝기를 원합니다. 또한 데이터의 근본적인 패턴을 잘 반영하는 클러스터 크기를 선호합니다. wandb.sklearn.plot_silhouette(model, X_train, ['spam', 'not spam'])
  • model (clusterer): 학습이 완료된 클러스터링 모델을 입력으로 받습니다.
  • X (arr): 학습용 특성 배열입니다.
    • cluster_labels (list): 클러스터 레이블의 이름입니다. 클러스터 인덱스를 해당 이름으로 바꿔 표시하여 플롯을 더 읽기 쉽게 만듭니다.

이상치 후보 플롯

Scikit-learn 이상치 플롯
Cook’s distance를 통해 회귀 모델에서 각 데이터 포인트의 영향력을 측정합니다. 영향력이 크게 한쪽으로 치우친 인스턴스는 잠재적으로 이상치일 수 있습니다. 이상치 탐지에 유용합니다. wandb.sklearn.plot_outlier_candidates(model, X, y)
  • model (regressor): 학습이 완료된 회귀 모델을 입력으로 받습니다.
  • X (arr): 학습용 특성 배열입니다.
  • y (arr): 학습용 레이블 배열입니다.

잔차 플롯

Scikit-learn 잔차 플롯
예측된 타깃 값(y축)과 실제 값과 예측 값의 차이(x축)를 측정해 플로팅하며, 잔차 오차의 분포도 함께 보여 줍니다. 일반적으로 잘 학습된 모델의 잔차는 무작위로 분포해야 합니다. 좋은 모델은 데이터셋에서 무작위 오차를 제외한 대부분의 현상을 설명하기 때문입니다. wandb.sklearn.plot_residuals(model, X, y)
  • model (regressor): 학습이 완료된 회귀 모델을 입력으로 받습니다.
  • X (arr): 학습 세트 특성.
  • y (arr): 학습 세트 레이블. 질문이 있다면 Slack 커뮤니티에서 언제든지 문의해 주세요.

예시