Skip to main content
wandb를 사용하면 몇 줄의 코드만으로 scikit-learn 모델 성능을 시각화하고 비교할 수 있습니다. 예제 사용해보기 →

시작하기

가입하고 API 키 생성하기

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

wandb 라이브러리 설치 및 로그인

로컬에 wandb 라이브러리를 설치하고 로그인하려면 다음 단계를 따르세요.
  1. WANDB_API_KEY 환경 변수를 API 키로 설정합니다.
    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

플롯 만들기

Step 1: wandb를 임포트하고 새 run을 초기화하기

import wandb

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

Step 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 or reg): 학습이 완료된 regressor 또는 classifier를 입력받습니다.
  • X (arr): 데이터셋 특성.
  • y (arr): 데이터셋 레이블.

ROC

Scikit-learn ROC 곡선
ROC 곡선은 진양성률(y축)과 위양성률(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 정밀도-재현율 곡선
서로 다른 임곗값에 따른 정밀도와 재현율의 상충 관계를 계산합니다. 곡선 아래 면적이 클수록 재현율과 정밀도가 모두 높다는 의미입니다. 여기서 높은 정밀도는 거짓 양성 비율이 낮음을, 높은 재현율은 거짓 음성 비율이 낮음을 나타냅니다. 두 점수가 모두 높으면 분류기가 정확한 결과를 예측하고(높은 정밀도), 실제 양성 결과의 대부분도 찾아낸다(높은 재현율)는 뜻입니다. 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): 특성 이름입니다. 특성 인덱스를 해당 이름으로 바꿔 플롯을 더 쉽게 읽을 수 있게 합니다.

보정 곡선

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

혼동 행렬

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

요약 메트릭

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

엘보 플롯

Scikit-learn 엘보 플롯
클러스터 수에 따른 설명 분산 비율과 트레이닝 시간을 측정해 플롯으로 표시합니다. 최적의 클러스터 수를 선택하는 데 유용합니다. 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 (클러스터러): 학습이 완료된 클러스터러를 입력으로 받습니다.
  • X (arr): 트레이닝 세트 특성.
    • cluster_labels (list): 클러스터 레이블 이름입니다. 클러스터 인덱스를 해당 이름으로 바꿔 표시해 플롯을 더 읽기 쉽게 만듭니다.

이상치 후보 플롯

Scikit-learn 이상치 플롯
Cook의 거리를 사용해 데이터 포인트가 회귀 모델에 미치는 영향을 측정합니다. 영향이 크게 치우친 인스턴스는 이상치일 가능성이 있습니다. 이상치 탐지에 유용합니다. wandb.sklearn.plot_outlier_candidates(model, X, y)
  • model (regressor): 학습이 완료된 회귀 모델을 입력으로 받습니다.
  • X (arr): 트레이닝 세트 특성.
  • y (arr): 트레이닝 세트 레이블.

잔차 플롯

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

예제