0Pricing
Python Academy · 강의

모델 평가와 교차 검증

정확도, F1, ROC-AUC 및 k-겹 CV로 모델을 평가합니다.

모델 평가와 교차 검증은(는) CoddyKit의 무료 Python Academy 강의입니다. 이것은 4개 중 4번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 Python Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. Python Academy 강의에는 총 4개의 강의가 포함되어 있습니다.

학습/검증/테스트 분할

세 부분으로 나눕니다. 학습 세트는 적합에, 검증 세트는 하이퍼파라미터 조정에, 테스트 세트는 최종 성능 보고에 사용합니다. 개발 중에는 테스트 세트를 절대 사용하지 마십시오.

from sklearn.model_selection import train_test_split
import numpy as np

X = np.random.rand(1000, 10)
y = (X[:,0] > 0.5).astype(int)

X_tr, X_rest, y_tr, y_rest = train_test_split(X, y, test_size=0.3)
X_val, X_te, y_val, y_te = train_test_split(X_rest, y_rest, test_size=0.5)

정확도 점수

accuracy_score는 올바르게 예측한 비율입니다. 클래스가 균형 잡힌 경우에 사용하고, 불균형 데이터에는 F1 또는 AUC를 우선적으로 사용합니다.

from sklearn.metrics import accuracy_score
from sklearn.linear_model import LogisticRegression
from sklearn.datasets import make_classification
from sklearn.model_selection import train_test_split

X, y = make_classification(random_state=0)
X_tr, X_te, y_tr, y_te = train_test_split(X, y, random_state=0)
model = LogisticRegression().fit(X_tr, y_tr)
print("Accuracy:", accuracy_score(y_te, model.predict(X_te)))

정밀도, 재현율, F1

불균형 클래스에서는 정밀도 = TP/(TP+FP), 재현율 = TP/(TP+FN), F1 = 정밀도와 재현율의 조화 평균입니다.

from sklearn.metrics import precision_score, recall_score, f1_score, classification_report

# Use classification_report for a full summary:
print(classification_report(y_te, model.predict(X_te)))
# shows precision, recall, f1 for each class

오차 행렬

오차 행렬은 참 양성, 거짓 양성, 참 음성, 거짓 음성을 보여 줍니다.

from sklearn.metrics import confusion_matrix, ConfusionMatrixDisplay
import matplotlib.pyplot as plt

cm = confusion_matrix(y_te, model.predict(X_te))
print(cm)
# [[TN FP]
#  [FN TP]]

ROC 곡선 및 AUC

roc_auc_score는 ROC 곡선 아래 면적을 측정합니다. AUC = 1.0은 완벽한 값이고, 0.5는 무작위 추측과 같습니다.

from sklearn.metrics import roc_auc_score, roc_curve

y_prob = model.predict_proba(X_te)[:,1]
print("AUC:", roc_auc_score(y_te, y_prob))

fpr, tpr, thresholds = roc_curve(y_te, y_prob)
# plot fpr vs tpr for the full ROC curve

회귀 평가지표

회귀 작업에는 mean_squared_error(MSE), root_mean_squared_error(RMSE), r2_score를 사용합니다.

from sklearn.metrics import mean_squared_error, r2_score

y_pred = regression_model.predict(X_te)
mse = mean_squared_error(y_te, y_pred)
print("RMSE:", mse**0.5)
print("R²:", r2_score(y_te, y_pred))

k-겹 교차 검증

cross_val_score는 데이터를 k개의 폴드로 나누고, k-1개로 학습한 다음 1개로 평가하는 과정을 k번 반복합니다. 단일 분할보다 더 견고합니다.

from sklearn.model_selection import cross_val_score
from sklearn.linear_model import LogisticRegression
from sklearn.datasets import make_classification

X, y = make_classification(random_state=0)
scores = cross_val_score(LogisticRegression(), X, y, cv=10, scoring="accuracy")
print(f"{scores.mean():.3f} ± {scores.std():.3f}")

StratifiedKFold

각 폴드가 동일한 클래스 분포를 갖도록 하려면 StratifiedKFold를 사용합니다. 이는 불균형 데이터셋에 매우 중요합니다.

from sklearn.model_selection import StratifiedKFold, cross_val_score
from sklearn.linear_model import LogisticRegression
from sklearn.datasets import make_classification

X, y = make_classification(weights=[0.9,0.1], random_state=0)
cv = StratifiedKFold(n_splits=5)
scores = cross_val_score(LogisticRegression(), X, y, cv=cv, scoring="f1")
print("Stratified F1:", scores.mean())

편향-분산 트레이드오프

높은 편향은 과소적합을 뜻합니다(모델이 너무 단순함). 높은 분산은 과적합을 뜻합니다(모델이 너무 복잡함). 교차 검증을 통해 어떤 문제가 있는지 확인할 수 있습니다.

# Underfitting: low train score AND low val score
# → increase model complexity, add features

# Overfitting: high train score, low val score
# → regularise, reduce complexity, get more data

from sklearn.model_selection import validation_curve
import numpy as np

train_sc, val_sc = validation_curve(DecisionTreeClassifier(), X, y, param_name="max_depth", param_range=range(1,10))

중첩 교차 검증

편향 없이 하이퍼파라미터를 조정하고 AND 평가하려면 중첩 CV를 사용합니다. 내부 반복은 조정하고 외부 반복은 평가합니다.

from sklearn.model_selection import cross_val_score, GridSearchCV
from sklearn.svm import SVC
from sklearn.datasets import make_classification

X, y = make_classification(random_state=0)
gs = GridSearchCV(SVC(), {"C":[0.1,1,10]}, cv=5)
outer_scores = cross_val_score(gs, X, y, cv=5)
print("Nested CV accuracy:", outer_scores.mean())

확률 보정

분류기의 확률 추정값은 제대로 보정되지 않을 수 있습니다. 더 나은 확률 추정값을 얻으려면 CalibratedClassifierCV를 사용합니다.

from sklearn.calibration import CalibratedClassifierCV
from sklearn.svm import SVC
from sklearn.datasets import make_classification
from sklearn.model_selection import train_test_split

X, y = make_classification(random_state=0)
X_tr, X_te, y_tr, y_te = train_test_split(X, y)

cal = CalibratedClassifierCV(SVC(), cv=5).fit(X_tr, y_tr)
print(cal.predict_proba(X_te[:3]))

빠른 확인

모델을 평가할 때 단일 학습/테스트 분할보다 교차 검증을 선호하는 이유는 무엇입니까?

복습

균형 잡힌 문제에는 정확도를 사용하고, 불균형 문제에는 F1/AUC를 사용합니다. k-겹 cross_val_score로 평가하고, 불균형 데이터에는 StratifiedKFold를 사용하며, 하이퍼파라미터를 조정할 때는 편향 없는 최종 추정값을 얻기 위해 중첩 CV를 사용합니다. 개발 중에는 테스트 세트를 절대 들여다보지 마십시오.

자주 묻는 질문

“모델 평가와 교차 검증” 강의는 무료인가요?

네 — “모델 평가와 교차 검증” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 Python Academy 강의 전체를 잠금 해제할 수 있습니다. Python Academy 강의에는 총 4개의 강의가 포함되어 있습니다.

“모델 평가와 교차 검증”에서 뭘 배우나요?

정확도, F1, ROC-AUC 및 k-겹 CV로 모델을 평가합니다. 브라우저에서 직접 실행하는 실습 코드로 Python Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.

Python Academy을(를) 시작하는 데 경험이 필요한가요?

사전 경험은 필요하지 않습니다. CoddyKit의 Python Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 4번째 강의입니다.

“모델 평가와 교차 검증” 강의는 얼마나 걸리나요?

대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.

이 Python Academy 강의에서 코드를 작성하고 실행할 수 있나요?

네. 모든 Python Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.

이 강의의 모든 강의

  1. scikit-learn API: fit, transform, predict
  2. 선형 모델: 회귀와 분류
  3. 트리 기반 모델: 결정 트리와 랜덤 포레스트
  4. 모델 평가와 교차 검증
← Python Academy(으)로 돌아가기