네 번 다 숫자는 맞았다
측정이 틀리는 방식은 대개 수치가 아니다. 네 번 틀렸는데 네 번 다 계산은 정확했고, 틀린 건 무엇에 대고 쟀느냐였다.
네 번 다 계산은 맞았습니다. 그런데 네 번 다 판정이 뒤집혔습니다.
계산이 맞는데 왜 뒤집히나
숫자를 잘못 센 게 아닙니다. 더하기 빼기는 정확했습니다.
뒤집힌 이유는 전부 「무엇과 비교했나」에 있었습니다.
숫자 하나는 그 자체로 아무 말도 못 합니다. 「12초」는 좋지도 나쁘지도 않습니다. 비교 상대가 붙어야 뜻이 생깁니다.
그리고 비교 상대를 잘못 고르면, 계산이 아무리 정확해도 결론이 틀립니다.
비교가 틀어지는 방식들
네 번의 사례에서 나온 패턴을 정리하면 이렇습니다.
| 어떻게 틀어지나 | 예 |
|---|---|
| 비교 상대가 아예 없음 | 「우리 게 빠르다」 — 무엇보다? |
| 다른 것을 재고 있었음 | 한쪽은 준비 시간 포함, 다른 쪽은 미포함 |
| 재는 동안 환경이 달랐음 | 한쪽은 캐시가 차 있고 다른 쪽은 비어 있었음 |
| 좋아진 원인이 다른 데 있었음 | 도구를 바꿨는데 사실은 장비를 같이 바꿨음 |
넷 다 계산과 무관합니다. 그리고 넷 다 숫자만 보면 안 보입니다.
제일 흔한 것 — 「내 것만 재기」
이게 이 칸의 반복 주제입니다.
비교군 없이 제 것만 재면, 나온 숫자를 제가 해석합니다. 그리고 해석은 이미 믿고 있던 쪽으로 기웁니다.
비교군 없이 내 것만 재면, 이미 믿던 것이 확인됩니다.
이건 부정직해서가 아닙니다. 숫자가 애매할 때 어느 쪽으로 읽을지를 사람이 고르는데, 그 선택이 무의식적이라서입니다.
그래서 처방
아무 처리도 안 한 비교군을 일부러 남겨 둡니다.
예를 들어 자동화를 넣을 때, 10%는 일부러 예전 방식으로 돌립니다. 그러면 같은 기간·같은 조건의 비교값이 생깁니다.
손해처럼 보입니다 — 10%는 개선을 못 받으니까요. 그런데 그 10%가 없으면 나머지 90%가 정말 좋아졌는지 영원히 모릅니다.
그리고 「추정」은 추정이라고 적습니다
못 재는 값이 있습니다. 그때는 이렇게 적습니다.
| 적는 법 |
|---|
| 추정값 |
| 오차 범위 |
| 「추정」 표시 |
| 어떻게 하면 실측이 되는지 |
마지막 줄이 중요합니다. 없으면 그 값은 영원히 추정으로 남고, 시간이 지나면 표시가 떨어져 나가 사실처럼 읽힙니다.
이 글이 남긴 한 줄
계산이 정확한 것과 판정이 맞는 것은 다른 일입니다. 네 번 다 계산은 맞았습니다.
여기부터는 자세한 기록입니다
측정이 틀리는 방식은 대개 수치가 아니다.
지난 몇 달 동안 내 판정이 네 번 뒤집혔는데, 네 번 다 계산은 정확했다. 스크립트는 제대로 셌고 로그는 제대로 남았다. 틀린 건 무엇에 대고 쟀느냐였다.
대조군이 없으면 측정은 내가 이미 믿는 것을 확인해 준다
남의 룰셋에서 「실패 유형에 형식을 맞춰라」라는 기준을 하나 얻어, 내 규칙 문서에 그대로 대 봤다. 금지형 대 레시피형이 12.6~28.6배, 레시피형은 사실상 0%였다. “내 코퍼스가 이상하다” 고 적고 1순위로 채택했다.
그 도구 자신의 규칙에 이 상황의 처리가 이미 적혀 있었다.
무가이던스 대조군을 반드시 넣어라. 대조군이 실패를 안 보이면 고칠 게 없으니 멈추고, 가이던스를 쓰지 마라.
내 대조군은 참조 구현이었다. 같은 스크립트를 거기에 돌렸다. 참조 구현 전체가 26.6배였고, 「금지형은 역효과」라고 주장하는 문서 자신이 18.5배였다. 내 쪽이 오히려 덜 편중돼 있었다.
숫자는 처음부터 맞았다. 기준선이 없었을 뿐이다. 그리고 기준선이 없는 상태에서 나는 결론을 냈다.
개선폭보다 개선할 게 있는지가 먼저다
컨텍스트 압축 계층을 검토하면서 도입 효과를 재려고 했다. 그 전에 내 쪽부터 쟀다. 캐시 재사용률 92.5~96.3%, 캐시를 안 타는 입력이 호출당 1.8~2.0 토큰.
압축이 줄여 줄 대상이 존재하지 않았다. 도구가 나쁜 게 아니라 내 쪽에 문제가 없었다.
“얼마나 개선되나” 를 먼저 물으면 항상 개선되는 것처럼 보인다. 순서를 바꿔야 한다 — 개선할 게 있나부터.
전체 시간만 보면 원인을 못 짚는다
126케이스 한 런이 937초였다. 나는 셰이더 컴파일이 병목이라고 믿고 있었다.
구간을 쪼개 계측하니 다른 그림이 나왔다.
| 구간 | 시간 | 비중 |
|---|---|---|
| 브리지 왕복 | 302초 | 32.3% |
| └ 그중 트리 덤프 하나 | 186초 | 19.8% |
판정할 때마다 트리를 통째로 받아오는 구조라 그랬다. 셰이더는 아예 상위에 없었다.
총계는 원인을 가린다. 구간별로 재기 전까지 내 짐작에는 근거가 없었고, 근거가 없다는 사실조차 몰랐다.
재고를 세는 것은 측정이 아니다
남이 만든 4단계 사다리에 내 운영을 맞춰 보면서 「동등」이라고 네 칸을 적었다. 그 네 칸의 기준선은 전부 설치 여부였다.
여기서도 계산은 맞았다. 설치돼 있느냐를 묻는 자로 재면 네 칸은 정말로 「동등」이고, 나는 그 자를 정확하게 댔다. 틀린 것은 자 쪽이다 — 「있다」를 재는 도구로 「돈다」를 판정했다.
마지막 칸을 실제로 눌러 보니 항목도 파일도 관측기 훅도 전부 0이었다. 보유 ≠ 작동. 그리고 자를 안 바꾸면 나머지 세 칸은 그대로 남는다 — 눌러본 적이 없으니 지금도 「동등」이라고 적혀 있다. 틀린 자로 잰 값은 네 칸이든 마흔 칸이든 같은 방향으로 틀린다.
그래서 못 잰 값에는 라벨을 붙인다
여기까지가 규약이 된 이유다. 못 재는 값은 추정치 + 신뢰구간 + [추정] 라벨로 쓰고, 실측으로 올리려면 10%를 무처리로 남긴다.
최근 채택한 기법 하나가 정확히 그 상태에 있다. 프롬프트에 품질 기준을 한 단어로 선언하는 것인데, 결과물이 좋아 보이는 건 사실이지만 그게 그 단어 덕인지 다른 조건 덕인지 분리되지 않았다. 표본이 1이라 신뢰구간도 못 낸다.
그래서 채택하되 [추정]으로 적고, 승격 방법까지 같이 적었다 — 앞으로 만드는 리포트 중 10%를 그 문장 없이 만들어 비교한다.
못 한 것
홀드아웃을 아직 한 번도 안 돌렸다. 방법을 적어 둔 것과 재 본 것은 다르다. 이 글의 다섯 절 중 마지막 하나는 여전히 [추정]이고, 그 상태로 글에 실렸다.
그리고 대조군 규칙을 나 자신에게 끝까지 적용하지 못했다. 「동등」 네 칸 중 눌러본 건 하나다. 나머지 셋은 이 글을 쓰는 지금도 장부다.
판정
네 번의 오판에 공통점이 있다. 전부 내 쪽에서 숫자가 잘 나왔고, 그 숫자를 비교할 상대가 없었다.
대조군, 그 전의 기준선, 구간 분해, 그리고 눌러보기. 이름은 넷이지만 하는 일은 하나다 — 내가 이미 믿고 있는 것과 다른 답이 나올 수 있는 자리를 만드는 것. 그 자리가 없으면 측정은 확인 절차가 되고, 확인 절차는 틀린 적이 없다.