무인 파이프라인이 매일 쇼츠를 만들어 올립니다. 성과 피드백도 붙어 있습니다. 조회수와 완주율로 앱 순서를 스스로 고칩니다. 자기개선하는 시스템이라고 생각했습니다.
오늘 채널 도달을 실측하다가, 그게 절반만 사실이라는 걸 알았습니다.
당신의 자동화는 자기가 계산한 점수를 실제로 쓰고 있습니까? 저는 계산까지만 확인하고 소비를 확인하지 않았습니다.
먼저 채널부터 비교했습니다
앱 유입을 만들 채널이 어디인지 보려고 두 채널의 편당 도달을 나란히 놨습니다.
| 채널 | 편당 도달 |
|---|---|
| 쓰레드 | 0~81 조회 |
| 유튜브 쇼츠(ko) | 100~2,958 조회, 최근 25편 합계 11,386 |
쓰레드 계정 누적 조회는 156,064입니다. 큰 숫자처럼 보이지만 그건 남의 타래에 답글을 달아서 생긴 노출이고, 우리 게시물 도달이 아닙니다. 자기 글은 편당 수십 명이 봅니다.
여기서 다른 것도 설명됐습니다. 며칠 전 "댓글 남기면 리딤코드 드립니다"라는 공개 오퍼를 올렸는데 요청이 0건이었습니다. 제안이 나빠서가 아니라 본 사람이 수십 명이어서였습니다.
그리고 쇼츠 안에서 격차가 또 있었습니다
최근 25편을 조회순으로 세웠습니다.
2,958 나의 띠 — 소·뱀·닭띠
2,466 나의 띠 — 범·말·개띠
928 혈액형 성격
598 MBTI 궁합
569 나의 띠 — 쥐·용·원숭이띠띠 4편 중앙값이 약 1,500, 나머지 21편 중앙값이 약 220입니다. 같은 제작비로 4~10배입니다.
그래서 "주제 비중을 띠로 옮기자"고 생각했고, 큐를 직접 만지려다 멈췄습니다. 큐는 매일 자동 생성됩니다. 제가 손으로 넣은 항목은 렌더에 필요한 필드가 없어 실패했습니다. 손댈 곳이 아니었습니다.
시스템은 이미 알고 있었습니다
성과 피드백 스크립트를 그냥 돌려봤습니다.
[perf] ko 점수: {ddi: 1390, bloodtype: 345, animalface: 196, zodiac: 83}
[perf] ja 점수: {ddi: 2009, bloodtype: 707, zodiac: 185, animalface: 158}띠(ddi)가 1위였습니다. 한국어에서 2위의 4배, 일본어에서도 1위. 제가 오늘 발견했다고 생각한 것을 파이프라인은 매일 계산하고 있었습니다.
그런데 왜 MBTI가 계속 나갔을까요.
원인은 한 줄이었습니다
콘텐츠 생성은 두 트랙입니다. 성격형과 궁합형. 채널당 매일 각각 하나씩 만듭니다.
성격형은 이렇게 순서를 정합니다.
order, _ = _perf(lang) # 성과 점수를 읽는다
pref = [a for a in order if a in REGISTRY] or LANG_APP_ORDER.get(lang)궁합형은 이렇게 정합니다.
pref = LANG_APP_ORDER.get(lang) # 하드코딩된 딕셔너리만 본다그리고 그 딕셔너리는 이랬습니다.
LANG_APP_ORDER = {"ja": ["ddi", "mbti", "bloodtype"]}일본어만 있습니다. 한국어와 영어는 키가 없으니 None이 되고, 선언 순서를 그대로 씁니다. 선언 순서는 mbti가 처음입니다. MBTI 16유형의 조합은 120쌍입니다. 하루 한 편씩이면 넉 달 동안 MBTI만 나갑니다. 그동안 4배 잘 되는 주제는 순서를 기다립니다.
일본어만 예외였던 이유는 짐작됩니다. 누군가 일본어 성과가 눈에 띄어 손으로 넣었을 겁니다. 손으로 고친 자리는 그 언어만 고쳐집니다.
여기서 갈립니다 — 당신이라면?
두 가지 방법이 있습니다.
A. 딕셔너리에 ko와 en을 추가한다. 5분이면 끝나고, 오늘의 승자가 반영됩니다. B. 궁합 트랙도 성과 점수를 읽게 한다. 성격형과 같은 소스를 쓰게 만듭니다.
A는 오늘 맞고 다음 달에 틀립니다. 승자가 바뀌면 아무도 딕셔너리를 고치지 않을 테니까요. 지금 그 상태가 정확히 그렇게 만들어졌습니다 — 누군가 한 번 손으로 넣었고, 나머지 두 언어는 잊혔습니다.
B로 갔습니다. 두 줄입니다.
order, _ = R._perf(lang) # 성격형과 같은 소스
pref = [a for a in order if a in MATCH] or LANG_APP_ORDER.get(lang)고친 뒤 계획을 다시 뽑으니 한국어·영어·일본어 전부 다음 궁합이 띠로 잡혔습니다.
실험은 사전등록했습니다
여기서 "그래서 조회수가 올랐습니다"라고 쓰고 싶지만 아직 모릅니다. 대신 판정 조건을 먼저 적어뒀습니다.
- 실험군만 채우지 않고 대조군을 섞습니다. 전부 띠로 바꾸면 시기 효과와 구분할 수 없습니다.
- 1차 판정 3주 뒤. PASS는 띠 중앙값이 대조군의 2배 이상, FAIL은 1.3배 미만, 그 사이는 "판정 불가"로 기록합니다.
- 표본은 4편입니다. 유튜브 추천이 우연히 그 4편을 집었을 가능성을 배제하지 못합니다.
- 노출수와 CTR을 못 봅니다(애널리틱스 스코프 미인증). 주제 효과와 썸네일 효과를 분리할 수 없습니다.
그리고 이 실험이 답하지 않는 것도 적었습니다. 조회가 늘어도 앱 유입이 느는지는 별개 문제입니다. 현재 앱 유입은 월 193명입니다. 도달이 늘고도 유입이 안 늘면 병목은 주제가 아니라 "쇼츠 시청자는 앱을 안 깐다"는 쪽입니다.
자가진단 3개
- 자기개선 지표를 계산하는 코드와 소비하는 코드가 같은 함수를 봅니까? 저는 계산 쪽만 확인하고 소비 쪽을 안 봤습니다. 트랙이 둘이면 둘 다 봐야 합니다.
- 언어·지역별 설정에 하드코딩된 딕셔너리가 있습니까? 키가 하나만 있으면 나머지는 조용히 기본값으로 돕니다. 오류도 경고도 안 납니다.
- 큐가 순서대로 소비된다면, 지금 큐 앞에 뭐가 있습니까? 조합 폭발형 콘텐츠(16×16 같은)를 앞에 두면 몇 달치가 그걸로 찹니다.
솔직한 부분
이건 자동화가 고장 난 이야기가 아닙니다. 전부 정상 작동했습니다. 매일 영상이 만들어지고, 올라가고, 점수가 계산됐습니다. 대시보드는 초록불이었을 겁니다.
시스템이 아는 것과 하는 것 사이에 한 줄이 빠져 있었을 뿐입니다. 그 한 줄이 넉 달치 산출을 지는 주제에 배정하고 있었습니다.
기본값이 결론을 대신 써준 적도 있었습니다. 자동화를 점검할 때 보통 "돌고 있나"를 봅니다. 저는 오늘 "돌면서 뭘 고르고 있나"를 봐야 한다는 걸 배웠습니다. 지금 당신 파이프라인의 성과 점수를 한 번 출력해 보세요. 그 점수가 실제로 다음 산출물을 고르고 있는지, 아니면 계산만 되고 버려지는지.