한 팀이 프롬프트 변경을 배포합니다. 평가 세트(eval set)는 100개의 질문으로 구성되어 있습니다. 이전 프롬프트 점수는 78점이었고, 새 프롬프트는 82점을 기록했습니다. 슬랙에 알림이 울리고; 이 수치가 배포 노트에 적히며; 변경 사항이 배포됩니다. 2주 후, 고객 지원 문의량은 변화가 없습니다. '성공'은 100개 예시 중 네 개가 바뀐 것에 불과했습니다. 이렇게 작은 샘플로는 네 개의 차이가 노이즈 플로어(noise floor) 안에 완전히 포함됩니다. 동일한 프롬프트를 다른 날 같은 모델에서 다시 실행해도 그보다 더 많이 변동합니다. 이 팀은 개선을 측정한 것이 아니라, 동전 던지기를 측정하고 어느 면이 나오든 결과를 취급했습니다. 이것이 프로덕션 LLM 작업에서 가장 저렴하고 흔한 평가 실수입니다.
해결책은 더 나은 심사관이나 더 정교한 지표가 아닙니다. 해결책은 평가 세트 크기(eval set size)를 충분히 크게 만들어 4점의 차이가 의미를 갖게 만드는 것입니다. 이것은 알려진 답이 있는 수학 문제입니다.
왜 100개 예시로는 동전 던지기와 같은가?
통과율 평가(Pass-rate evals)는 이항 분포(binomial distribution)입니다. 각 예시는 베르누이 시행(Bernoulli trial)입니다: 답이 맞거나 아니거나 둘 중 하나입니다. 점수는 표본 비율(sample proportion)입니다.
$n=100$이고 $p=0.80$일 때, 비율의 표준 오차(standard error of a proportion)는 약 $\sqrt{0.80 \times 0.20 / 100} = 0.04$입니다.
95% 신뢰 구간(confidence interval)은 대략 $\pm 2 \times SE = \pm 8$ 퍼센트포인트입니다. 다시 읽어보세요. 100개 예시로 80%의 통과율이라면, 95% 신뢰 수준에서 실제 통과율은 72%와 88% 사이에 있습니다. 두 프롬프트 간의 4점 차이는 노이즈의 절반도 되지 않습니다.
이것은 단일 실행에 대한 이야기입니다. 프롬프트 A와 프롬프트 B 사이의 차이를 감지하려면, 두 신뢰 구간이 겹치지 않아야 합니다. 차이에 대한 표준 오차는 양쪽 팔(both arms)의 분산(variances)에 따라 증가하므로 임계값은 더 엄격해집니다.
import math
def se_proportion ( p : float , n : int ) -> float :
return math.sqrt ( p * ( 1 - p ) / n )
def ci_95 ( p : float , n : int ) -> tuple [ float , float ]:
se = se_proportion ( p , n )
return ( p - 1.96 * se , p + 1.96 * se )
print ( ci_95 ( 0.80 , 100 ))
print ( ci_95 ( 0.80 , 1000 ))
print ( ci_95 ( 0.80 , 5000 ))
$n=1000$일 때, 95% 구간은 대략 $\pm 2.5$ 포인트로 줄어듭니다. $n=5000$일 때는 $\pm 1.1$ 포인트입니다.
평가 실행 비용(cost of an evaluation run)은 $n$에 비례하여 증가하지만, 당신의 판결 정밀도(precision of your verdict)는 $\sqrt{n}$에 비례하여 증가합니다. 샘플링에 투자하세요.