소개
머신러닝 모델을 훈련한 후, 새로운 미지의 데이터에 얼마나 잘 일반화되는지 이해하기 위해 모델 성능을 평가하는 것이 중요합니다. 머신러닝을 위한 강력한 Python 라이브러리인 Scikit-learn 은 sklearn.metrics 모듈에 모델 평가를 위한 포괄적인 도구 세트를 제공합니다.
이 실습에서는 가장 일반적인 지표 중 일부를 사용하여 분류 모델을 평가하는 방법을 배우게 됩니다. 평가 과정에만 집중하기 위해 미리 정의된 실제 레이블 및 예측 레이블 세트를 사용할 것입니다. 다음을 계산하는 방법을 배우게 됩니다.
- 정확도 점수 (Accuracy Score)
- 혼동 행렬 (Confusion Matrix)
- 정밀도 점수 (Precision Score)
- 재현율 점수 (Recall Score)
- F1 점수 (F1 Score)
이 실습이 끝나면 이러한 기본적인 Scikit-learn 함수를 능숙하게 사용하여 분류 모델의 성능을 평가할 수 있게 될 것입니다.
sklearn.metrics 의 accuracy_score 를 사용하여 정확도 점수 계산
이 단계에서는 모델 예측의 정확도를 계산합니다. 정확도는 가장 직관적인 분류 지표 중 하나입니다. 전체 인스턴스 수에 대해 올바르게 예측된 인스턴스의 비율을 측정합니다.
sklearn.metrics의 accuracy_score 함수는 이 값을 계산합니다. 실제 레이블과 예측된 레이블을 인수로 받습니다.
먼저 왼쪽 파일 탐색기에서 evaluate.py 파일을 엽니다. 이 파일에는 이미 y_true 및 y_pred 목록이 포함되어 있습니다. 이제 accuracy_score 함수를 가져오고, 정확도를 계산하고, 결과를 출력하기 위해 파일 끝에 다음 코드를 추가합니다.
from sklearn.metrics import accuracy_score
## 정확도 계산
accuracy = accuracy_score(y_true, y_pred)
print(f"Accuracy: {accuracy}")
이제 전체 evaluate.py 파일은 다음과 같이 보일 것입니다.
## 이 실습에서는 다양한 평가 지표를 이해하기 위해 미리 정의된 실제 레이블 및 예측 레이블 세트를 사용합니다.
## y_true 는 데이터 포인트의 실제, 정답 레이블을 나타냅니다.
## 이진 분류의 경우, 0 은 '음성'을, 1 은 '양성'을 의미할 수 있습니다.
y_true = [0, 1, 1, 0, 1, 0, 0, 1, 0, 1]
## y_pred 는 가상의 분류 모델이 예측한 레이블을 나타냅니다.
y_pred = [0, 1, 0, 0, 1, 1, 0, 1, 0, 1]
print("Setup complete. True and predicted labels are defined in evaluate.py.")
print(f"True labels: {y_true}")
print(f"Predicted labels: {y_pred}")
from sklearn.metrics import accuracy_score
## 정확도 계산
accuracy = accuracy_score(y_true, y_pred)
print(f"Accuracy: {accuracy}")
이제 스크립트를 실행해 보겠습니다. IDE 에서 터미널을 열고 다음 명령을 실행합니다.
python3 evaluate.py
정확도 점수를 포함한 다음 출력이 표시되어야 합니다. 정확도 0.8 은 예측의 80% 가 올바르게 이루어졌음을 의미합니다.
Setup complete. True and predicted labels are defined in evaluate.py.
True labels: [0, 1, 1, 0, 1, 0, 0, 1, 0, 1]
Predicted labels: [0, 1, 0, 0, 1, 1, 0, 1, 0, 1]
Accuracy: 0.8
sklearn.metrics 의 confusion_matrix 를 사용하여 혼동 행렬 생성
이 단계에서는 혼동 행렬을 생성합니다. 정확도는 성능에 대한 빠른 요약을 제공하지만, 특히 불균형 데이터셋의 경우 오해의 소지가 있을 수 있습니다. 혼동 행렬은 각 클래스에 대한 올바른 예측 및 잘못된 예측 수를 보여줌으로써 분류기의 성능에 대한 더 자세한 분석을 제공합니다.
이 행렬은 예측된 값과 실제 값의 네 가지 조합으로 구성된 표입니다.
- True Negatives (TN): 모델이 음성 클래스를 올바르게 예측했습니다.
- False Positives (FP): 모델이 양성 클래스를 잘못 예측했습니다.
- False Negatives (FN): 모델이 음성 클래스를 잘못 예측했습니다.
- True Positives (TP): 모델이 양성 클래스를 올바르게 예측했습니다.
sklearn.metrics의 confusion_matrix 함수를 사용합니다. evaluate.py 파일 끝에 다음 코드를 추가합니다.
from sklearn.metrics import confusion_matrix
## 혼동 행렬 생성
cm = confusion_matrix(y_true, y_pred)
print("Confusion Matrix:")
print(cm)
이제 터미널에서 스크립트를 다시 실행합니다.
python3 evaluate.py
출력에 이제 혼동 행렬이 포함됩니다.
Setup complete. True and predicted labels are defined in evaluate.py.
True labels: [0, 1, 1, 0, 1, 0, 0, 1, 0, 1]
Predicted labels: [0, 1, 0, 0, 1, 1, 0, 1, 0, 1]
Accuracy: 0.8
Confusion Matrix:
[[4 1]
[1 4]]
이 행렬은 다음을 알려줍니다.
- TN = 4 (좌측 상단)
- FP = 1 (우측 상단)
- FN = 1 (좌측 하단)
- TP = 4 (우측 하단)
sklearn.metrics 의 precision_score 를 사용하여 정밀도 점수 계산
이 단계에서는 정밀도 점수를 계산합니다. 정밀도는 "모델이 양성으로 예측한 모든 인스턴스 중에서 실제로 양성이었던 비율은 얼마인가?"라는 질문에 답합니다. 이는 분류기의 정확성을 측정하는 지표입니다.
정밀도는 다음과 같이 계산됩니다: 정밀도 = True Positives / (True Positives + False Positives)
낮은 정밀도는 높은 수의 거짓 양성 (False Positives) 을 나타냅니다. sklearn.metrics의 precision_score 함수를 사용합니다.
정밀도를 계산하고 출력하기 위해 evaluate.py 파일 끝에 다음 코드를 추가합니다.
from sklearn.metrics import precision_score
## 정밀도 계산
precision = precision_score(y_true, y_pred)
print(f"Precision: {precision}")
터미널에서 스크립트를 실행합니다.
python3 evaluate.py
출력에 정밀도 점수가 추가된 것을 볼 수 있습니다. 혼동 행렬 (TP=4, FP=1) 을 기반으로 정밀도는 4 / (4 + 1) = 0.8 입니다.
Setup complete. True and predicted labels are defined in evaluate.py.
True labels: [0, 1, 1, 0, 1, 0, 0, 1, 0, 1]
Predicted labels: [0, 1, 0, 0, 1, 1, 0, 1, 0, 1]
Accuracy: 0.8
Confusion Matrix:
[[4 1]
[1 4]]
Precision: 0.8
sklearn.metrics 의 recall_score 를 사용하여 재현율 점수 계산
이 단계에서는 재현율 점수를 계산합니다. 재현율은 민감도 또는 참 양성률 (True Positive Rate) 이라고도 하며, "실제 양성 인스턴스 중에서 모델이 올바르게 식별한 비율은 얼마인가?"라는 질문에 답합니다. 이는 분류기의 완전성을 측정하는 지표입니다.
재현율은 다음과 같이 계산됩니다: 재현율 = True Positives / (True Positives + False Negatives)
낮은 재현율은 높은 수의 거짓 음성 (False Negatives) 을 나타냅니다. sklearn.metrics의 recall_score 함수를 사용합니다.
재현율을 계산하고 출력하기 위해 evaluate.py 파일 끝에 다음 코드를 추가합니다.
from sklearn.metrics import recall_score
## 재현율 계산
recall = recall_score(y_true, y_pred)
print(f"Recall: {recall}")
터미널에서 스크립트를 실행합니다.
python3 evaluate.py
출력에 이제 재현율 점수가 포함됩니다. 혼동 행렬 (TP=4, FN=1) 을 기반으로 재현율은 4 / (4 + 1) = 0.8 입니다.
Setup complete. True and predicted labels are defined in evaluate.py.
True labels: [0, 1, 1, 0, 1, 0, 0, 1, 0, 1]
Predicted labels: [0, 1, 0, 0, 1, 1, 0, 1, 0, 1]
Accuracy: 0.8
Confusion Matrix:
[[4 1]
[1 4]]
Precision: 0.8
Recall: 0.8
sklearn.metrics 의 f1_score 를 사용하여 F1 점수 계산
이 마지막 단계에서는 F1 점수를 계산합니다. F1 점수는 정밀도와 재현율의 조화 평균입니다. 두 지표 간의 균형을 찾으려고 합니다. 정밀도가 거짓 양성을 최소화하는 데 초점을 맞추고 재현율이 거짓 음성을 최소화하는 데 초점을 맞추는 반면, F1 점수는 두 가지를 모두 고려하는 단일 지표를 제공합니다.
F1 점수는 다음과 같이 계산됩니다: F1 Score = 2 * (Precision * Recall) / (Precision + Recall)
정밀도와 재현율 간의 균형이 필요하고 클래스 분포가 고르지 않을 때 특히 유용합니다. sklearn.metrics의 f1_score 함수를 사용합니다.
마지막 코드 조각을 evaluate.py 파일에 추가합니다.
from sklearn.metrics import f1_score
## F1 점수 계산
f1 = f1_score(y_true, y_pred)
print(f"F1 Score: {f1}")
마지막으로 터미널에서 스크립트를 실행합니다.
python3 evaluate.py
최종 출력에는 계산된 모든 지표가 표시됩니다. 정밀도와 재현율이 0.8 이면 F1 점수도 0.8 이 됩니다.
Setup complete. True and predicted labels are defined in evaluate.py.
True labels: [0, 1, 1, 0, 1, 0, 0, 1, 0, 1]
Predicted labels: [0, 1, 0, 0, 1, 1, 0, 1, 0, 1]
Accuracy: 0.8
Confusion Matrix:
[[4 1]
[1 4]]
Precision: 0.8
Recall: 0.8
F1 Score: 0.8
요약
실습을 완료하신 것을 축하드립니다! scikit-learn 라이브러리의 몇 가지 주요 지표를 사용하여 분류 모델을 평가하는 방법을 성공적으로 학습했습니다.
이 실습에서는 다음을 연습했습니다:
- 모델 성능에 대한 전반적인 감을 잡기 위해
accuracy_score로 정확도 (accuracy) 계산하기 - 참/거짓 양성 및 음성에 대한 자세한 보기를 얻기 위해
confusion_matrix로 혼동 행렬 (confusion matrix) 생성하기 - 모델의 정확성을 측정하기 위해
precision_score로 정밀도 (precision) 계산하기 - 모델의 완전성을 측정하기 위해
recall_score로 재현율 (recall) 계산하기 - 정밀도와 재현율 간의 균형을 찾기 위해
f1_score로 F1 점수 (F1 score) 계산하기
이러한 지표는 모든 데이터 과학자 또는 머신러닝 엔지니어에게 기본적인 도구입니다. 이를 이해하면 모델의 강점과 약점을 더 잘 진단하고 특정 문제에 맞는 올바른 모델을 선택할 수 있습니다.



