Skip to main content
이 페이지에서는 W&B를 사용해 실험을 추적하고 모델 성능을 시각화하고 비교하는 차트를 자동으로 로깅하는 방법을 안내합니다. W&B Python SDK(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 키로 설정합니다. <>로 묶인 값은 사용자 환경에 맞게 바꾸세요.
  2. wandb 라이브러리를 설치하고 로그인합니다.

메트릭 로깅

설치와 로그인을 완료한 후 scikit-learn 트레이닝 코드에서 메트릭을 로깅하면 W&B에서 Runs를 비교할 수 있습니다.

플롯 만들기

메트릭 로깅 외에도 scikit-learn 모델의 진단 플롯을 생성해 run의 일부로 로깅할 수 있습니다. 다음 step에서는 run을 초기화한 다음, 지정된 모델 유형에 대해 개별 플롯이나 전체 플롯 세트를 시각화합니다.

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

플롯 시각화

다음 섹션에서는 특정 모델 유형의 개별 플롯 또는 모든 플롯을 시각화하는 방법을 설명합니다.
개별 플롯
모델을 트레이닝하고 예측을 만든 후에는 W&B에서 플롯을 생성해 예측을 분석할 수 있습니다. 지원되는 차트에 대한 자세한 내용은 지원되는 플롯 섹션을 참조하세요.
모든 플롯
W&B에는 plot_classifier처럼 관련 플롯 여러 개를 그려 주는 함수가 있습니다:

기존 Matplotlib 플롯

이미 Matplotlib로 플롯을 만들고 있다면 scikit-learn 플롯과 함께 W&B 대시보드에 로깅할 수 있습니다. 그러려면 먼저 plotly를 설치해야 합니다.
마지막으로, 다음과 같이 플롯을 W&B 대시보드에 로깅하세요:

지원되는 플롯

다음 섹션에서는 wandb.sklearn이 생성할 수 있는 각 플롯 유형별 함수 시그니처와 인수를 설명합니다. 개별 플롯 함수를 호출하거나 plot_classifier, plot_regressor, plot_clusterer의 출력을 해석할 때 레퍼런스로 활용하세요.

학습 곡선

Scikit-learn 학습 곡선
크기가 서로 다른 데이터셋으로 모델을 트레이닝하고, 트레이닝 세트와 테스트 세트 모두에 대해 데이터셋 크기 대비 교차 검증 점수 플롯을 생성합니다. wandb.sklearn.plot_learning_curve(model, X, y)
  • model (clf or reg): 학습이 완료된 회귀 모델 또는 분류기를 입력받습니다.
  • 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 정밀도-재현율 곡선
서로 다른 임곗값에 따른 정밀도와 재현율의 상충 관계를 계산합니다. 곡선 아래 면적이 클수록 재현율과 정밀도가 모두 높다는 의미입니다. 여기서 높은 정밀도는 거짓 양성 비율이 낮음을, 높은 재현율은 거짓 음성 비율이 낮음을 나타냅니다. 두 점수가 모두 높으면 분류기가 정확한 결과를 예측하고(높은 정밀도), 실제 양성 결과의 대부분도 찾아낸다(높은 재현율)는 뜻입니다. 정밀도-재현율 곡선은 클래스가 불균형한 경우에 유용합니다. 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): 학습이 완료된 회귀 모델 또는 분류기를 입력으로 받습니다.
  • 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 커뮤니티에서 질문하세요.

예시

Colab에서 실행: 시작하는 데 도움이 되는 단순한 노트북입니다.