자동화 파이프라인8 분 읽기

내 자가개선 루프는 '끝까지 본 영상'에만 상을 주고 있었다

유튜브 자동화의 보상이 평균 시청 지속률 하나뿐이었습니다. 그래서 루프는 끝까지 재생된 영상만 밀어줬고, 공유나 구독으로 이어졌는지는 보지 않았습니다. 보상식을 고치고 이탈 구간 진단, 피로도 감쇠, UTM 태그를 넣었습니다. 다만 이번에 고친 건 계산식이고, 진짜 병목은 신호 자체가 거의 없다는 점입니다.

#youtube#reward-function#retention#utm#feedback-loop
왼쪽은 '끝까지 시청'만 보는 보상, 오른쪽은 시청 이후 행동을 아무도 재지 않는 상태를 대비한 이미지
지속률은 영상이 끝까지 재생됐는지만 알려 주고, 그다음에 무슨 일이 있었는지는 알려 주지 않았습니다.

끝까지 본 영상이 이기는 루프

제 유튜브 자동화에는 스스로 나아지려고 만든 루프가 있습니다. 올린 영상의 성과를 읽어 오고, 성과가 좋았던 쪽에 가중치를 더 줘서 다음 영상의 앱과 훅을 고르는 구조입니다. 지금까지 그 성과의 기준은 평균 시청 지속률(average view percentage)이었습니다.

문제는 지속률이 '끝까지 봤는가' 하나만 묻는다는 점입니다. 끝까지 재생된 영상은 점수를 높게 받습니다. 그런데 그 영상을 본 사람이 공유를 했는지, 구독을 눌렀는지는 점수에 전혀 들어가지 않았습니다.

당신의 루프가 보상하는 지표는 실제로 원하는 결과입니까, 아니면 재기 쉬운 근처의 무언가입니까?

이 문제는 다른 코딩 에이전트에게 '아직 남아 있는 정당한 레버'를 리뷰받다가 드러났습니다. 지속률만 보는 보상은 두 군데로 새고 있었습니다. 하나는 전환으로 이어지지 않는 영상을 밀어준다는 점, 다른 하나는 한 번 이긴 앱을 계속 밀어줘서 결국 영상이 전부 비슷해진다는 점입니다.

새던 곳 네 군데

첫째, 보상이 시청 행동만 봤습니다. 끝까지 본 것과 행동으로 이어진 것을 구분하지 못했습니다.

둘째, 지속률은 숫자 하나입니다. 영상이 초반에 버려지는지 중간에 처지는지 알 수 없었고, 영상을 심사하는 위원회 프롬프트도 어디서 시청자를 잃는지 모른 채 판단하고 있었습니다.

셋째, 가중치 로테이션에 브레이크가 없었습니다. 한 앱이 이기면 그 앱이 더 자주 뽑히고, 더 자주 뽑히니 표본이 쌓여 또 이기는 쪽으로 수렴할 수 있었습니다.

넷째, 설명란 링크에 출처 표시가 없었습니다. 누군가 영상에서 랜딩 페이지로 넘어와도 어느 채널, 어느 앱, 어느 언어, 어느 훅에서 왔는지 분석 도구에서 나눠 볼 방법이 없었습니다.

당신이라면?

신호가 아직 얇은데 보상식부터 고치겠습니까, 아니면 측정할 트래픽이 쌓일 때까지 기다리겠습니까?

바꾼 것

저는 둘 다 했습니다. 지금 고칠 수 있는 건 고치고, 나중에는 심을 수 없는 건 지금 심었습니다.

보상식은 이렇게 바꿨습니다.

reward = views × retention × (1 + engagement)
engagement = (shares + 3 × subscribersGained) / views   # 상한 있음

구독을 공유보다 3배 무겁게 친 건 실제로 전환에 더 가깝다고 본 제 판단입니다. 데이터로 맞춘 값은 아닙니다. 상한을 둔 이유는 조회수가 작은 영상 하나가 공유 몇 번으로 보상을 독식하지 못하게 하려는 것입니다.

시청 지속 곡선은 따로 읽습니다. 영상 진행 비율(elapsedVideoTimeRatio)마다 시청 유지 비율(audienceWatchRatio)을 가져와 앱별로 '초반 이탈'인지 '중반 처짐'인지 진단하고, 그 결과를 hook/retention_hints.json에 씁니다. 이 파일이 위원회 프롬프트에 주입되기 때문에, 심사 단계가 영상이 어디서 죽는지 알고 판단하게 됩니다.

로테이션에는 앱 단위 피로도를 넣었습니다. 최근 구간에서 많이 뽑힌 앱일수록 FATIGUE^count만큼 가중치가 줄어듭니다. 이긴 앱 하나가 전체를 차지하지 못하게 하려는 장치입니다.

설명란 링크에는 UTM(source, medium, campaign, content)을 붙였습니다. 분석 도구를 읽는 쪽은 아직 만들지 않았습니다. 그런데도 태그부터 단 이유는 이미 올라간 영상에는 소급해서 태그를 붙일 수 없기 때문입니다. 리더는 나중에 만들 수 있어도, 지금까지 쌓였어야 할 태그는 나중에 만들 수 없습니다.

테스트는 보상의 engagement 가산, 상한, 0일 때 동작과, 곡선 진단의 초반 이탈·중반 처짐·짧은 데이터 처리, 그리고 피로도가 선택을 분산시키는지를 확인합니다.

값싼 수정이 아닌 부분

이번 커밋에서 바뀐 건 대부분 계산식입니다. 계산식은 싸게 고칠 수 있습니다. 진짜 병목은 그 계산식에 들어갈 신호입니다. engagement는 조회수로 나눈 비율이라 조회수가 작으면 공유 한두 번에 크게 흔들립니다. 상한이 그 흔들림을 잘라 줄 뿐, 신호를 만들어 주지는 않습니다. 분석 리더를 '트래픽이 생길 때까지' 미룬다고 커밋에 적었다는 사실 자체가 지금 상태를 보여 줍니다. 측정의 끝단이 아직 비어 있습니다.

자가진단 체크리스트

  • 내 루프의 보상 지표가 실제로 원하는 행동(구독, 클릭, 구매)을 포함하는가, 아니면 재기 쉬운 대리 지표 하나뿐인가?
  • 가중치 선택에 피로도나 감쇠가 있어서, 한 번 이긴 후보가 전체를 독식하는 걸 막고 있는가?
  • 나중에 소급할 수 없는 추적 정보(UTM 같은 출처 태그)를 측정 도구가 생기기 전부터 심어 두었는가?

솔직한 부분

이 변경으로 영상이 나아졌는지는 모릅니다. 커밋 시점에는 비교할 결과가 없었고, 구독 가중치 3배, engagement 상한, 피로도 계수는 모두 판단으로 정한 값이라 맞는 값인지 검증된 적이 없습니다. 곡선 진단이 정말 더 나은 훅으로 이어지는지도, 위원회 프롬프트가 그 힌트를 제대로 쓰는지도 아직 확인하지 못했습니다. UTM은 심어만 뒀고, 그 태그로 무언가를 읽어 낸 적은 아직 한 번도 없습니다.

관련 글