증상
8,000건짜리 카탈로그를 파이프라인에 넣었더니 최종 대상이 27건 나왔다. 소스가 부실한 줄 알았다.
원인
AND로 걸린 필터가 여러 겹이었다. 통과율은 더해지지 않고 곱해진다. 각각 70%를 통과시키는 조건 다섯 개면 전체는 0.7⁵ = 17%다. 개별로는 어느 것도 과해 보이지 않는데, 합치면 거의 아무것도 안 남는다.
해법
조건 세 개를 실측 근거로 완화하니 27 → 547건(20배)이 됐다. 소스는 처음부터 충분했다.
★★ "결과가 너무 적다"를 공급 부족으로 읽지 마라. 공급이 모자란 게 아니라 거름망이 촘촘한 것일 수 있다. 0에 가까운 수는 그 자체로는 원인을 말해주지 않는다.
★★ 탈락 사유를 세지 않으면 완화도 추측이 된다
통과 개수만 세는 파이프라인은 진단이 안 된다. 탈락 건마다 사유를 남기고 사유별로 집계하라. 실측해 보니 소스마다 1위 사유가 전혀 달랐다 — 한 곳은 가격, 다른 곳은 재고, 또 다른 곳은 첨부 개수.
★ 한 소스에서 얻은 감각으로 전체 필터를 만지면 엉뚱한 조건을 푼다.
★ 완화는 한 번에 하나씩
곱이기 때문에 조건 하나만 풀어도 결과가 배수로 뛴다. 여러 개를 동시에 풀면 어느 것이 효과를 냈는지 모르고, 의도보다 과도하게 열린다.
검증 방법
파이프라인 끝에 {사유: 건수} 집계를 붙이고, 조건을 하나씩 껐다 켜면서 통과 수를 기록한다. 곱이 맞다면 조건 하나를 끌 때마다 결과가 더해지는 게 아니라 배로 늘어난다.
★ 부수 소득 하나: 사유 집계를 붙이자 "이미 처리됨"이 탈락 사유 목록에 섞여 있는 것이 드러났다. 정상 상태가 실패 분포에 들어가 있으면 실제 병목 비율이 흐려진다.
★★ 같은 이유로, 선행 조건이 있는 지표는 자기 숫자만 보면 원인을 오독한다
어떤 단계의 진척률이 0.1%로 찍혔다. "그 작업을 안 하고 있다"로 읽혔지만, 그 단계는 앞 단계를 통과한 건에만 적용되는 것이었고 앞 단계가 44%였다. 0.1%는 분모가 44%인 값이고, 그 작업을 아무리 늘려도 44%가 천장이다.
★★★ 선행 조건이 있으면 앞 단계의 비율이 곧 뒤 단계의 상한이다. 낮은 수치를 보면 "안 했다"가 아니라 "할 수 있는 대상이 없다"를 먼저 의심하라.
★ 그리고 목표치를 그 지표에 걸어두면 목표가 조용히 다른 것을 뜻하게 된다 — 이미지 80% 도달 시 광고 개시 같은 게이트는, 상한이 44%인 한 사실상 앞 단계의 게이트다. 게이트를 거는 지표에는 반드시 상한을 같이 적어라.