Menu
CoddyTech

정밀도와 재현율

Coddy Machine Learning 여정의 지도 학습 섹션에 포함된 레슨. 58개 중 22번째.

두 가지 질문으로 독감 검사 결과를 평가합니다. 독감 양성으로 판정한 것 중 실제로 맞은 것은 몇 건인가요? 실제 독감 사례 중 검사에서 발견한 것은 몇 건인가요?

독감 검사의 혼동 행렬을 두 번 그린 그림. 왼쪽 제목은 정밀도 42 / 45 = 0.933이며, 독감이라고 판정한 열이 강조되어 있습니다. 오탐 3건과 발견한 42건이 표시되어 있습니다. 오른쪽 제목은 재현율 42 / 47 = 0.894이며, 독감 행이 강조되어 있습니다. 놓친 사례 5건과 발견한 42건이 표시되어 있습니다.

정밀도는 첫 번째 질문에 답합니다: 경보 45건 중 42건입니다. 재현율은 두 번째 질문에 답합니다: 사례 47건 중 42건입니다.

from sklearn.metrics import precision_score, recall_score

print(f"{precision_score(y_test, pred):.3f}")
print(f"{recall_score(y_test, pred):.3f}")

:.3f는 항상 소수점 이하 3자리까지 표시하므로, 0.9는 0.900으로 출력됩니다. 다음과 같이 출력됩니다:

0.933
0.894

비용이 더 큰 실수를 기준으로 선택하세요. 독감 사례를 놓치면 전파될 수 있으므로 이 검사에는 재현율이 필요합니다. 실제 메일을 스팸으로 분류해 묻어 버리는 스팸 필터에는 정밀도가 필요합니다.

challenge icon

챌린지

중급

상점의 필터는 가짜처럼 보이는 리뷰를 숨깁니다. 시작 코드는 하나의 모델로 두 가지 버전인 strict_pred와 eager_pred를 만들고, 어떤 실수가 더 큰 피해를 주는지 읽어 들입니다. missed(가짜 리뷰가 그대로 남음) 또는 hidden(실제 리뷰가 사라짐)입니다.

  1. 각 필터의 정밀도와 재현율을 소수점 이하 3자리로 출력하세요.
  2. 아래와 같이 해당 실수를 더 적게 하는 필터를 출력하세요(missed의 경우: Fewer fakes missed: ...).

다른 상점에서 hidden을 선택한 경우:

Strict: precision 0.900, recall 0.450
Eager: precision 0.640, recall 0.800
Fewer real reviews hidden: strict

직접 해보기

import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import precision_score, recall_score

# 어떤 실수가 더 해로운가: 놓침(가짜 리뷰가 그대로 게시됨) 또는 숨김(진짜 리뷰가 숨겨짐)
worse = input()

# 리뷰당 한 행: fake가 1이면 해당 리뷰가 의뢰를 받고 작성되었다는 뜻
reviews = pd.read_csv("reviews.csv")
features = ["words", "exclamations", "account_days", "user_reviews", "stars", "photo"]
X_train, X_test, y_train, y_test = train_test_split(reviews[features], reviews["fake"], test_size=0.25, random_state=0)
scaler = StandardScaler()
X_train = scaler.fit_transform(X_train)
X_test = scaler.transform(X_test)
model = LogisticRegression(max_iter=1000)
model.fit(X_train, y_train)
proba = model.predict_proba(X_test)[:, 1]

# 같은 모델을 사용하는 두 필터: strict는 가짜일 확률이 0.7일 때 리뷰를 숨기고, eager는 0.3일 때 숨김
strict_pred = proba >= 0.7
eager_pred = proba >= 0.3

# 아래에 코드를 작성하세요
quiz icon실력 점검

이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.

지도 학습의 모든 레슨

직접 연습해 보세요: 온라인 Python 컴파일러