[AI] 정밀도/재현율 트레이드오프

2026. 2. 28. 20:28·AI/Machine Learning
반응형

들어가며

저번 글에서도 말했듯이 정밀도와 재현율을 모두 얻는 것은 어렵다

정밀도를 올리면 재현율이 줄고

정밀도를 내리면 재현율이 올라가게된다

이 현상을 정밀도/재현율 트레이드오프라고 하고 이를 고려하여 모델을 조정하는 것이 중요하다

 

트레이드오프 균형 조정

일반적으로 분류기는 결정 함수를 통해 각 샘플의 점수를 계산하고

이 값이 임계값보다 크면 양성 클래스에 할당하고 작으면 음성 클래스에 할당하는 방식으로 분류한다

출처:https://kr.linkedin.com/pulse/precision-recall-trade-off-finding-balancing-point-6-javier-rjibf?tl=ko

화살표가 가리키는 곳이 임계값을 의미하여 임계값을 여러 값으로 조정하며

정밀도와 재현율이 어떤 식으로 바뀌는지 나타낸 사진이다

 

임계값을 높이게되면 정밀도가 올라가지만 재현율이 낮아지고

임계값을 낮추게되면 정밀도는 낮아지고 재현율이 높아지는 것을 볼 수 있다

 

임계값을 조정하면 모델의 정확도,재현율,정밀도 등 지표가 바뀌어

모델의 예측을 활용한 의사결정 과정에서 목적에 맞게 조금 더 나은 선택을 할 수 있게된다

여기서 주의하여 생각할 것은 모델의 정확도나 재현율 등 지표가 바뀌었다고해서

모델의 성능이 개선된것은 아니라는 것을 알아야한다

 

사이킷런에서 원하는 임계값을 정해 예측을 만들 수 있는 메서드를 제공한다

y_scores = sgd_clf.decision_function([some_digit])
threshold = 0
y_some_digit_pred = (y_scores > threshold)

decision_fuction 함수를 활용해 샘플의 점수를 얻을 수 있고

이 점수를 기반으로 임계값을 통해 예측을 만들 수 있다

y_some_digit_pred
결과 : array([ True])

임계값을 3000으로 올려보겠다

threshold = 3000
y_some_digit_pred = (y_scores > threshold)
y_some_digit_pred
결과 : array([False])

임계값이 0일때 True라고 예측했던 것이 3000으로 올리니 False라고 예측한 것을 볼 수 있다

임계값을 높였을 때 재현율이 떨어진다는 것을 의미한다

 

여기서 적절한 임계값은 어떻게 정할 수 있을까에 대한 의문이 들 수 있다

적절한 임계값을 찾기 위해서는 임계값에 대한 정밀도와 재현율 그래프를 그리는 방법이 있다

y_scores = cross_val_predict(sgd_clf, X_train, y_train_5, cv=3,
                             method="decision_function")

우선 훈련 세트에 있는 모든 샘플의 점수를 구해야 하므로 위와 같은 값을 준비해야한다

from sklearn.metrics import precision_recall_curve

precisions, recalls, thresholds = precision_recall_curve(y_train_5, y_scores)

precision_recall_curve() 함수를 사용하여 모든 임계값에 대한 정밀도와 재현율을 계산할 수 있다

이를 바탕으로 그래프를 그려보면 아래와 같다

좋은 임계값은 상황이나 목적에 따라 달라진다

어떤 상황에서는 정밀도가 더 요구되는 상황이 있고

어떤 상황에서는 정확도가 더 요구되는 상황이 있다

 

예를 들면 암 진단 환자를 분류한다고 할 때 놓치는 환자를 최소화해야하므로

재현율이 정밀도보다 중요시 되어야한다

반대로 스팸 메일 필터는 정상 메일을 스팸이라고 오분류하는 경우를 최소화해야하므로

정밀도가 재현율보다 중요시 되어야한다

 

적절한 임계값을 찾는 또 다른 방법으로는

재현율에 대한 정밀도 곡선을 그리는 방법이 있다

재현율이 80% 근처에서 급격히 줄어드는 것을 볼 수 있다

이 부분을 임계값으로 설정해주는 것이 일반적으로 괜찮다

여기서는 60~80% 사이에서 임계값을 설정해주는 것이 바람직해 보인다

 

마치며

이번 글에서는 여러 임계값에서의 정밀도와 재현율을 보며 트레이드오프 관계에 대하여 알아보았고

올바른 임계점을 찾기 위해서는 어떻게 해야하는 지에 대하여 공부했다

처음에 임계값을 조정하여 정확도나 정밀도 재현율 등이 바뀌었다고 해서

모델의 성능이 달라진다는 가정을 스스로 해버려서 개념들이 충돌하여 혼동이 왔었다

하지만 잘못된 가정이 있었다는 것을 알고 난 후 임계값이 어디서 어떻게 활용되며

더 나은 임계값을 위해 어떤 판단을 해야하는 지에 대해 이해할 수 있게되었다

다음 글에서는 정밀도/재현율 곡선과 비슷한 개념인 ROC곡선에 대하여 알아볼 것이다

반응형

'AI > Machine Learning' 카테고리의 다른 글

[AI] 다중 분류(multiclass classifier)  (0) 2026.03.02
[AI] ROC곡선  (0) 2026.03.01
[AI] 오차 행렬(Confusion Matrix)과 정밀도(Precision), 재현율(Recall)  (1) 2026.02.28
[AI] 그리드 서치(Grid Search), 랜덤 서치(Random Search)  (1) 2026.02.08
[AI] 변환 파이프라인  (1) 2026.02.08
'AI/Machine Learning' 카테고리의 다른 글
  • [AI] 다중 분류(multiclass classifier)
  • [AI] ROC곡선
  • [AI] 오차 행렬(Confusion Matrix)과 정밀도(Precision), 재현율(Recall)
  • [AI] 그리드 서치(Grid Search), 랜덤 서치(Random Search)
20puddle
20puddle
20puddle 님의 블로그 입니다.
  • 20puddle
    20puddle 님의 블로그
    20puddle
  • 전체
    오늘
    어제
    • 분류 전체보기 (100)
      • Spring boot (5)
      • git & github (5)
      • algorithm (47)
        • theory (3)
        • 배열 (7)
        • 연결 리스트 (3)
        • 스택 (5)
        • 큐 (3)
        • 덱 (2)
        • 기초 코드 (19)
        • BFS (5)
      • AI (43)
        • Machine Learning (35)
        • Deep Learning (8)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    머신러닝
    게시판
    ML
    오프라인 학습
    list
    AI
    홀드아웃 검증
    Aimers
    알고리즘
    그레디언트 클리핑
    github
    백준
    Java
    연결리스트
    인공지능
    DL
    Spring Boot
    주성분변환
    git
    딥러닝
  • 최근 댓글

  • 최근 글

  • 반응형
  • hELLO· Designed By정상우.v4.10.3
20puddle
[AI] 정밀도/재현율 트레이드오프
상단으로

티스토리툴바