문서

임계값은 코드가 소유하고, 모델은 확률만 줍니다

수백 개의 실제 프로젝트를 나란히 놓고 보면, 가장 안정적으로 공통되는 특징은 이것입니다.

모델은 “얼마나 그럴듯한가”를 답합니다. 코드는 “충분한가”를 답합니다.

이것은 스타일 취향이 아닙니다. 스스로 보고하는 신뢰도는 신뢰할 수 없다는 사실에서 이끌어낼 수 있는 유일하게 안전한 결론입니다 —— 그리고 그 뒤에는 확률을 믿어도 되는가에 담긴 독립적인 측정이 있습니다.

구체적인 모습

Choice와 Score는 confidence가 붙은 답을 반환하고, Noul은 0에서 1 사이의 확률을 직접 반환합니다. 인터페이스 자체는 아무 판단도 대신 해주지 않습니다 —— 임계값은 여러분의 것입니다. 실제 프로젝트에서 이것은 아주 구체적인 모습이 됩니다.

  • Cloudflare Worker에서 돌아가는 비속어 필터는 임계값, max() 집계 정책, 그리고 공개 OpenAPI schema를 모두 Worker 자체 코드에 둡니다. 모델은 그저 호출하는 함수 하나일 뿐입니다.
  • 댓글을 가리는 브라우저 확장 기능은 0.85 / 0.7 / 0.5를 확장 기능 안에 고정하고, 검사가 실패하면 가린 상태를 유지합니다 —— 그 선호도 임계값 정책의 일부입니다.
  • 장애 트리아지 도구는 “호출하기”를 P(SEV1) + P(SEV2) ≥ 0.80으로 정의하고, 그 0.80은 모델이 아니라 자체 설정에 있습니다.

세 가지 모두 같은 성질을 공유합니다. 모델을 바꿔도 임계값은 움직이지 않고, 임계값을 다시 조정해도 모델은 움직이지 않습니다. 임계값을 모델에 넘기면 그 두 가지가 하나가 됩니다 —— 그때 “내 임계값 조정하기”는 프롬프트를 편집하는 일이 됩니다.

이 원칙이 중요한 이유

두 종류의 실패를 분리해 주기 때문입니다.

  • 모델이 잘못 답한 경우 —— 질문을 바꾸고, 상태를 바꾸고, 모델을 바꿉니다.
  • 임계값이 잘못 설정된 경우 —— 코드 안의 숫자를 바꿉니다.

둘을 섞으면 “정확도가 충분하지 않다”는 문제가 둘 중 어느 쪽일 수도 있고, 어느 쪽인지 구별할 방법이 없습니다. 트리아지 도구가 0.80을 설정에 바로 넣을 수 있는 것은 그 숫자를 단독으로 검토할 수 있기 때문입니다.

반드시 알아야 할 반례

이 원칙은 하나의 가정 위에 서 있습니다. 여러분이 받는 숫자가 캘리브레이션(보정)된 확률이라는 가정입니다.

독립적인 재계산 결과, Score 질문에 대해 반환되는 confidence가 흔히 그저 점수의 소수 부분이며 그러한 출력들이 촘촘히 몰려 있다는 사실이 발견되었습니다 (121개). 이것은 “모델이 확신한다”가 아닙니다 —— 점수 자체에서 파생된 값처럼 보입니다.

차이는 중요합니다.

  • 캘리브레이션된 확률이라면, 0.85는 “이런 경우의 약 85%에서 내가 맞을 것이다”라는 추론을 뒷받침합니다.
  • 점수의 함수라면, 0.85는 “이번 것은 점수가 높았다”는 뜻일 뿐이고 얼마나 자주 맞는지에 대해서는 아무것도 말하지 않습니다 —— 그리고 그것에 임계값을 설정하는 것은 확률적 의미가 없는 숫자에 기준을 세우는 일입니다.

따로, 한 독립 측정 보고서는 모델이 스스로 보고한 필드를 정답과 대조한 결과, 그 값들이 설명이 시사하는 것보다 훨씬 덜 세분화되어 있음을 발견했습니다 (공개 비판 참고).

대신 해야 할 일

세 단계이며, 순서가 중요합니다.

  1. 임계값을 의미론적으로가 아니라 운영적으로 사용합니다. 0.8이 “80% 정답”을 뜻하는지는 중요하지 않습니다. 중요한 것은 여러분의 데이터에서 0.8을 넘는 사례들이 측정 가능할 만큼 더 정확한지입니다. 그것은 홀드아웃으로 확인할 수 있습니다.
  2. 자체 레이블로 임계값을 적합합니다. 이를 위한 도구가 있습니다. 레이블링한 데이터를 가져와 목표 정확도에 도달하는 질문별 임계값을 적합하고, 홀드아웃에서 검증하며, 모델 업데이트가 잠긴 임계값을 깨뜨리면 CI를 실패시킵니다.
  3. 임계값을 코드에 넣고 검토 날짜를 부여합니다. 임계값은 가격처럼 모델 버전과 함께 만료됩니다. 한 번 정하면 끝나는 것이 아니라 사람이 다시 들여다봐야 하는 것입니다.

한 문장으로

모델의 신뢰성은 모델이 스스로 보고한 숫자가 아니라 여러분의 임계값에 나타나야 합니다. 전자는 자체 데이터로 측정할 수 있고, 후자는 측정할 수 없습니다.