점수는 계산되고 있었습니다
앱 다운로드를 목표로 하는 숏폼 채널들에는 카테고리별 성과를 매기는 단계가 있습니다. 여기서 나온 순위가 다음 주제를 정하는 LLM 회의 프롬프트에 들어가서, 어떤 카테고리를 더 만들지 정할 때 근거가 됩니다.
그 점수는 조회수 × 시청유지율이었습니다. 유지율에는 상한과 하한을 두는 상수 두 개가 붙어 있었고요. 계산 자체는 잘 돌았고 순위도 매번 나왔습니다. 고장 난 곳은 없었습니다.
문제는 같은 저장소의 다른 곳에 이미 공용 보상 함수가 있었다는 점입니다. 피드백 루프에서 쓰는 그 함수는 조회수 × 유지율 × 참여(공유·구독 같은 반응)로 영상을 평가합니다. 다른 곳은 다 이 함수로 '좋은 영상'을 판단하는데, 다음에 뭘 만들지 정하는 카테고리 랭킹만 참여를 아예 보지 않고 있었습니다.
여러분 시스템에서 '성과'를 계산하는 곳이 몇 군데인지, 그리고 그 계산식이 전부 같은지 확인해 보신 적이 있으신가요?
왜 눈에 띄지 않았나
두 계산식 모두 그럴듯해 보였습니다. 조회수와 유지율은 누가 봐도 성과 지표니까요. 에러도 없었고 순위가 엉뚱하게 나오지도 않았습니다. 그래서 공유나 구독으로 이어지는 카테고리와, 많이 보이기만 하고 끝나는 카테고리가 이 랭킹 안에서는 같은 기준으로 비교되고 있었다는 게 드러나지 않았습니다.
앱 다운로드 채널에서 이건 꽤 중요한 차이입니다. 보고 지나가는 시청보다 반응까지 남기는 시청이 우리가 원하는 결과에 더 가깝기 때문입니다. 그런데 다음 주제를 고르는 회의는 그 신호를 받지 못하고 있었습니다.
당신이라면? 랭킹 쪽 식에 참여 항을 하나 더 넣으시겠습니까, 아니면 이미 있는 함수를 그대로 가져다 쓰시겠습니까?
한 일
저는 가져다 쓰는 쪽을 골랐습니다. 카테고리 성과는 이제 공용 보상 함수로 점수를 매기고, 기존에 따로 쓰던 유지율 상한·하한 상수 두 개는 쓸 데가 없어져서 지웠습니다. 변경은 파일 하나, 추가 6줄과 삭제 7줄입니다.
참여 항을 랭킹에 따로 넣었다면 계산식은 여전히 두 개였을 겁니다. 나중에 한쪽만 고치면 또 어긋납니다. 함수를 하나만 두면 피드백 루프가 '좋다'고 하는 것과 랭킹이 '더 만들자'고 하는 것이 같은 기준을 따르게 됩니다.
자가진단 체크리스트
- 성과·보상·점수를 계산하는 곳을 저장소에서 모두 찾았을 때 계산식이 정말 하나입니까?
- 다음 행동을 고르는 단계(프롬프트, 우선순위, 스케줄러)가 학습·피드백 쪽과 같은 지표를 받고 있습니까?
- 특정 계산식에만 붙어 있는 상수(상한, 하한, 가중치)가 있다면, 왜 거기에만 있는지 설명할 수 있습니까?
솔직한 부분
이 커밋은 계산식을 맞춘 것이지, 결과가 나아졌다는 증거는 아닙니다. 바꾼 뒤 어떤 카테고리의 순위가 실제로 올랐는지, 다운로드나 구독이 달라졌는지는 이 기록에 없고 저도 아직 모릅니다. 지운 유지율 상한·하한이 공용 함수 안에서 같은 방식으로 처리되는지도 이 커밋만으로는 확인되지 않습니다. 참여 수치가 적은 카테고리라면 곱셈 하나로 순위가 크게 흔들릴 수도 있습니다. 지금 확실하게 말할 수 있는 건, 시스템 안에 '좋음'의 정의가 두 개 있었고 이제 하나가 됐다는 것까지입니다.