AI 채점기가 같은 이력서에 30점씩 다르게 매긴다 — sambellll의 100번 실험이 폭로한 것
핵심 요약 (TL;DR)
한 익명 엔지니어가 HackerRank가 오픈소스로 공개한 ATS(이력서 자동 평가 시스템)에 자기 이력서 한 장을 100번 돌려봤습니다. 같은 모델, 같은 temperature 0.1, 같은 프롬프트인데 점수가 66~99점 사이에서 흔들렸어요. 컷오프가 85점이면 같은 이력서가 65%의 경우 떨어진다는 뜻입니다. 바이브코더가 신뢰하는 AI 채점·코드 리뷰·자동 심사 파이프라인이 모두 같은 함정을 안고 있습니다.
이력서 한 장을 100번 돌리면 어떤 일이 벌어지나
지난 주말 Hacker News 프론트페이지 상단에 묘한 글 한 편이 올라왔습니다. 약 940포인트, 댓글 400개. 제목은 단순했어요. "HackerRank가 오픈소스로 공개한 자기네 ATS에 내 이력서를 100번 돌려봤다."
작성자 sambellll이 한 일은 간단합니다. HackerRank가 자사 채용 자동화 시스템을 GitHub에 푼 걸 발견하고, 본인 이력서 한 장을 골랐습니다. 모델은 gemma3:4b, temperature는 가장 결정론적인 0.1. 그리고 똑같은 프롬프트로 100번을 돌렸습니다. 추가로 gemini-3.1-flash-lite로 50번 더.
결과는 충격적이었습니다.
- gemma3:4b 점수: 66점 ~ 99점 사이 (대부분 78~88점 클러스터)
- gemini-3.1-flash-lite 점수: 48점 ~ 64점
- 같은 입력, 같은 모델, 같은 temperature, 같은 프롬프트 — 변동 폭 30점
만약 회사가 컷오프를 85점으로 걸어놓았다면, 같은 이력서가 약 65%의 경우 탈락합니다. 100번 응시했으면 그중 65번은 떨어진다는 거예요. 이력서의 품질이 떨어진 게 아니라 채점기의 분산이 떨어뜨린 거죠.
더 무서운 발견: 정량은 일관, 정성은 무작위
sambellll이 점수를 카테고리별로 쪼개보니 더 또렷한 패턴이 드러났습니다.
- Work Experience: 25/25 × 100런 → 100% 일관성
- Technical Skills: 약 98/100런 결정론적
- Projects: "HUGE variation" (저자의 표현)
"5년차 백엔드 엔지니어" 같은 정량 정보는 LLM이 매번 똑같이 짚어냈습니다. 그런데 "이 프로젝트가 가치 있는가" 같은 정성 판단은 매번 다르게 나왔어요. 같은 프로젝트 설명을 두고 어떤 시도에서는 만점, 다른 시도에서는 반토막이 났습니다.
LLM은 사실 추출(extraction)에는 강하지만, 가치 판단(judgment)에는 본질적으로 잡음이 섞입니다. temperature를 0으로 깎아도 마찬가지예요. 모델 내부의 sampling, hardware-level non-determinism, 토큰 순서까지 — 결정론적이지 않은 층이 여러 개 겹쳐 있거든요.
바이브코더 직격: 우리가 매일 쓰는 AI 채점기들
이 실험이 남의 일로 들리지 않는 이유는, 바이브코더 워크플로의 절반이 "LLM이 점수를 매기는 파이프라인"이기 때문입니다. 몇 가지 예시를 들어볼게요.
- AI 코드 리뷰 봇 — PR을 열면 LLM이 "8/10, 머지 가능" 같은 점수를 답니다. 같은 PR을 두 번 열면 다른 점수가 나올 수 있어요. 머지 컷오프를 8점으로 걸면, 같은 코드가 떨어졌다 통과했다 합니다.
- 자동 평가가 들어간 콘텐츠 파이프라인 — "이 트윗 후보 10개 중 점수 높은 거 골라줘" 같은 패턴. 같은 후보를 다시 점수 매기면 순위가 뒤바뀝니다.
- AI 기반 채용 스크리닝 — sambellll의 사례 그대로. 운영 측은 "AI가 객관적"이라 믿지만, 분산은 사람보다 훨씬 클 수 있습니다.
문제는 단순합니다. 이 파이프라인을 운영하는 사람도, 평가받는 사람도, "한 번의 점수가 진실"이라고 믿고 있다는 것.
그러면 어떻게 다뤄야 하는가
근본 해법은 두 가지 방향입니다.
첫째, 분산을 가정하고 설계하기. 한 번 호출해서 점수 받지 마세요. k번(보통 5~10번) 샘플링하고 median 또는 평균으로 결정하세요. 시간과 비용은 늘지만, 분산 문제는 해결됩니다. sambellll의 실험에서도 100번의 median은 안정적이었습니다.
둘째, 정량과 정성을 분리하기. "5년 이상 경력인가"는 LLM에게 시켜도 되지만(100% 일관), "이 프로젝트가 가치 있나"는 LLM 단독 판단에 맡기지 마세요. 사람의 결재(또는 다른 모델의 교차 평가)를 한 단 더 끼우는 게 답입니다.
루피가 운영하는 자동화에서도 이 원칙은 깨지지 않습니다. 팩트체크 봇은 "신뢰도 높음/보통/낮음" 같은 정성 라벨을 한 번에 결정하지 않아요. 여러 단계의 cross-check이 끼어 있죠. 한 번의 LLM 호출로 결재 권한을 주는 순간, 운명이 dice roll에 맡겨집니다.
FAQ
Q. temperature를 0으로 깎으면 결정론적인 거 아닌가요?
아닙니다. temperature 0은 sampling 분포를 가장 좁힐 뿐, 완전히 결정론적이지 않아요. 모델 inference 시점의 hardware non-determinism, batch 구성, kv-cache 상태 — 여러 층이 잡음을 만듭니다. sambellll의 실험도 정확히 temperature 0.1에서 30점 변동이 나왔습니다.
Q. GPT-4나 Claude Opus처럼 큰 모델은 더 일관적이지 않을까요?
큰 모델은 분산이 작아질 수는 있어요. 하지만 0이 되지는 않습니다. 더 무거운 모델일수록 비용이 커져서 "10번 샘플링"이 부담스러워지는 거죠. 결국 분산은 다뤄야 할 변수지, 모델을 바꾼다고 사라지는 문제가 아닙니다.
Q. 그러면 LLM 자동 채점을 쓰지 말라는 건가요?
아니요, 쓸 수 있는 영역과 쓰면 안 되는 영역을 나누라는 거예요. 정량 추출(나이, 경력 연차, 키워드 매칭)은 LLM이 잘합니다. 정성 가치 판단(이 코드가 좋은가, 이 사람이 fit한가)은 사람이 마지막에 결재해야 합니다.
그래서
sambellll이 한 번도 본 적 없는 회사의 ATS에 자기 이력서를 100번 돌려본 이유는 단순합니다. AI한테 운명을 맡기는 시대에 그 AI가 얼마나 변덕스러운지 누군가는 측정해야 한다는 것. 100번의 실험 끝에 나온 30점 변동 폭은 한 사람의 이력서 이야기를 넘어, 우리가 매일 쓰는 자동 평가 파이프라인 전체에 던지는 질문입니다.
여러분이 신뢰하는 AI 채점기는 같은 입력에 매번 같은 점수를 주나요? 그 답을 모른다면, 오늘 한 번 돌려보세요. 같은 입력으로 10번. median과 표준편차를 보면, 그 파이프라인의 신뢰도가 한 번에 보입니다.
원본 글: https://danunparsed.com/p/hackerrank-open-source-ats
Hacker News 토론: https://news.ycombinator.com/item?id=48713832
댓글 0
아직 댓글이 없습니다