
소규모 사이트에서 A/B 테스트를 제안받은 AI가 '하지 않겠다'고 답한 이야기
요약
Claude Code 에이전트에게 소규모 사이트의 A/B 테스트 설계를 맡겼으나, 에이전트는 통계적 유의성 부족과 데이터 측정 오류를 근거로 테스트 실시를 거부했습니다. 이는 AI 에이전트가 단순 실행을 넘어 실무적인 의사결정 지원 능력을 갖추고 있음을 보여줍니다.
핵심 포인트
- 모수 부족으로 인한 통계적 검출력(MDE) 한계 지적
- 측정 지표와 실제 구현 간의 불일치 확인
- GA4 커스텀 차원 미설정 등 데이터 파이프라인 문제 식별
- 모바일 환경에서의 UI/UX 구현 제약 사항 검토
「톱 이미지, 얼굴 클로즈업이랑 사람들이 북적이는 사진 중 어느 게 좋을까? A/B 테스트를 해보는 것도 방법이겠네!」
커뮤니티 운영 LINE 스레드에서 나온 이 한마디로부터, AI 에이전트(Claude Code)에게 A/B 테스트 설계를 맡겼습니다. 돌아온 결론은 의외였습니다. 「이 A/B 테스트는 실시하지 않음(보류)」. 게다가 그 판단 브리프(Brief)가 통계학 교과서보다 실무적이었기에, 그 경위와 배움을 정리합니다.
컨텍스트: 20대 대상 커뮤니티 「Coelia」의 HP(coelia.jp)는 Notion을 헤드리스 CMS(Headless CMS)로 사용한 Next.js + Cloudflare Workers 구성으로, 개발·분석·개선 제안을 AI 에이전트가 거의 자율적으로 수행하고 있습니다.
검증하고 싶었던 것
퍼스트 뷰(First View, FV)의 히어로 이미지를 어느 쪽을 첫 번째로 배치해야 하는가에 대한 논점입니다.
후보는 2장입니다. 한 명이 크게 찍힌 클로즈업 사진과, 여러 명이 찍힌 사진입니다.
- 가설 A: 「얼굴의 비율이 높을수록 클릭된다」 (동영상 썸네일의 일반론. 단, 제안한 측도 「퍼스트 뷰에 통용될지는 불투명하다」며 유보)
- 가설 B: 「여러 명이 찍힌 사진은 첫 번째 이미지로서 끌어당기는 힘이 약하다」 (체감)
(후보 사진 자체는, 사진 속 인물의 게재 동의가 이 기사의 이차 이용까지 미치는지 확인되지 않았기 때문에 본 기사에는 싣지 않습니다.)
그야말로 A/B 테스트에 적합한 주제처럼 보입니다. 하지만 에이전트는 테스트 설계 전에 성립 조건의 검증부터 시작했습니다.
「실시하지 않음」이라고 판단한 5가지 이유
판단 브리프에서 요점을 그대로 가져왔습니다.
1. 모수(Sample Size)가 구조적으로 부족함
최근 4주간의 실측 결과, 톱 페이지 랜딩은 월 2천 세션 미만 규모였으며, 그곳으로부터의 CTA 클릭은 4주간 두 자릿수 초반이었습니다 (구체적인 KPI 실수는 비공개 운영 방침에 따라 자릿수로 표기합니다). 50/50으로 나누면 각 군은 주당 200 세션대입니다. 이미지 한 장의 차이로 현실적인 효과 크기(MDE, Minimum Detectable Effect)를 검출할 수 있는 수준이 아니며, 「차이가 없는」 것이 아니라 「차이가 있어도 보이지 않는」 결과가 된다는 것이 첫 번째 이유였습니다.
이는 Zenn의 「A/B 테스트의 샘플 사이즈 설계는 통계 계산이 아니라 의사결정 설계다」라는 기사의 주장과 그대로 일치합니다. 「몇 건이 필요한가」를 묻기 전에 「어느 정도의 개선이 비즈니스상 의미가 있는가」를 결정해야 합니다. 역산하면, 이 모수로는 의사결정에 사용할 수 있는 실험이 되지 않습니다. 실제로 과거에는 다른 A/B 테스트가 시작 4일 만에 중도 종료되어 판정이 무효(void)가 된 전례도 기록되어 있었습니다.
2. 판정 지표가 구현과 어긋나 있었음
「CTA 랜딩률로 판정하자」고 대화에서는 결정되었으나, FV의 주 CTA는 페이지 내 앵커(<a href="#this-week">)로, 측정 구현상으로는 cta_click이 아니라 internal_click으로 전송됩니다. 측정하고 싶은 지표의 이벤트가 애초에 날아오지 않고 있습니다. 분자와 분모가 맞지 않는 상태로 실행하면 기간만 소비할 뿐 아무것도 알 수 없습니다.
3. 측정 파이프라인이 end-to-end로 성립하지 않음
GA4 관리 측에 ab_variant 커스텀 차원(Custom Dimension)이 등록되지 않았으며, 게다가 등록 전의 데이터에는 소급 적용되지 않습니다. 즉, 실행하더라도 변이군별 행(Row)이 나오지 않는 상태였습니다.
4. B안은 그대로는 모바일에 노출할 수 없었음
1:1 원본 소스를 object-fit: cover로 전체 화면에 깔기 때문에, 스마트폰 세로 화면에서는 원본 이미지의 가로 46.2%밖에 보이지 않습니다.

문제는 잘려 나간 결과가 실제 현장과 다르게 보인다는 점이었습니다. 여러 명이 놀고 있는 사진인데, 중앙 부분만 잘라내면 소수가 마주 보고 있는 것처럼 보여, 자사의 이미지 요건(커뮤니티의 실태가 전달되는 구도로 만들 것)에서 벗어나 읽힙니다. 실험의 변수로 내놓기 전에, 표시 방식 자체를 고칠 필요가 있었던 것입니다.
5. 교란 변수(Confounding)가 너무 많음
두 장의 사진은 얼굴 비율, 인원수, 구도, 색조가 동시에 다른 다변량(Multivariate)이므로 「얼굴 비율」에 대한 검증이 되지 않습니다. 게다가 군상 사진은 슬라이드 2번째 장(5초 후에 표시)이므로, 「실제로 본 처치」가 「측정하고 싶은 결과(체류 시간)」에 의존합니다. prefers-reduced-motion 사용자에게는 2번째 장이 DOM에 올라오지 않는다는 수준까지 교란 요인을 찾아냈습니다.
대신 무엇을 했는가: A/B 테스트 전에, 모두에게 일어나고 있던 버그를 수정하기
이 부분이 이번의 가장 큰 배움입니다. A/B 테스트는 보류되었지만, 조사 과정에서의 부산물로 "A/B 테스트 이전에, 운영 환경에서 모든 사용자에게 발생하고 있던 표시 문제"를 발견하여 즉시 수정했습니다. 군상 슬라이드(group slide)의 잘림 위치를 바로잡는 작업입니다.
수정은 object-position을 한 줄 바꾸는 것뿐입니다 (50% 50% → 66% 30%). 잘린 부분의 중심을 옮겨서, 여러 명과 손에 든 장난감이 동일한 띠 안에 들어오도록 위치를 조정했습니다.
이런 종류의 수정에서 잊기 쉬운 점은, 배경이 바뀌면 글자의 대비(contrast)도 바뀐다는 것입니다. 변경 전후로 흰색 글자의 실측값을 전체 너비에 대해 측정하여, 퇴행(regression)이 없음을(한 곳은 오히려 개선됨) 확인한 후 채택했습니다.
| 뷰포트 (Viewport) | 헤드라인 | 리드 (Lead) | 주석 |
|---|---|---|---|
| 360×800 | 4.75 → 4.75 | 7.30 → 7.30 | 10.90 → 13.44 |
| ... | |||
| 차이는 0.05 이내로, 샘플링 오차 범위 내에서 중립적이며 주석만 개선되었다는 결과입니다 (텍스트를 숨기고 배경의 실제 픽셀을 샘플링한 보수적인 근사치입니다. 글리프(glyph) 위치 그 자체는 아닙니다). |
어느 쪽이 더 좋았는가? 이 수정은 "A/B 테스트에서 승리한" 것이 아니라, "모든 사용자에게 나타나던 요구사항 위반 표시를 바로잡은" 것입니다. 효과를 숫자로 말할 수 있는 종류의 변경과, 말할 수 없는 종류의 변경을 구분하는 것 자체가 A/B 테스트 규율(discipline)의 일부라고 생각합니다.
그 후, A/B 기반에서 빠졌던 3가지 함정
이 브리프(brief)에는 "A/B 테스트를 재개할 때의 조건"(ab_variant 등록 실확인 · 지표 구현 정합성 · 필요 샘플 수 사전 계산 · 중단 조건 사전 등록)이 적혀 있었고, 며칠 후 그에 따라 다른 A/B 테스트가 시작되었습니다. 필요 샘플 수를 사전 계산한 후 이미지 A/B를 배선(wiring)한다는 PR도 포함되어 있었습니다. 그럼에도 함정은 빠지게 됩니다. 실제로 빠졌던 세 가지입니다.
- GA4 사용자 속성(user property)의 36자 제한. 여러 실험의 할당을 하나의 속성에 통합했더니, 기존 2개의 실험만으로도 56자가 되어 잘려 나갔습니다. 망가지는 것이 사용자 스코프(user scope) 쪽뿐이라 이벤트 스코프(event scope)의 숫자는 살아있어 알아채기 어려웠습니다. 수정 후에는 "실험 ID는 33자 이내"로 제한하는 내용을 테스트 코드에 반영했습니다.
- gtag 미로드 시 노출(exposure) 이벤트가 조용히 누락됨. 노출(분모)이 누락되면 A/B 비율이 통째로 망가집니다. 로드가 완료된 후 전송하는 방식으로 수정했습니다.
- "유령 세션". 백그라운드 탭의 자동 재취득 이벤트가 GA4의 30분 세션 만료 후에 단독으로 발생하여, 랜딩 페이지
(not set)· 참여도(engagement) 0%인 세션을 양산했습니다.document.hidden상태일 때는 보내지 않도록 수정했습니다.
세 가지의 공통점은, 실험 로직이 아니라 계측 파이프라인(measurement pipeline)이 먼저 망가진다는 것입니다. 샘플 사이즈를 논하기 전에, 분모와 분자가 올바르게 전달되고 있는지에 대한 검증이 필요합니다. 앞서 언급한 기사의 말을 빌리자면, 샘플 사이즈 설계가 "실험을 끝내는 방법에 대한 설계"라면, 계측 정합성은 "실험을 시작해도 되는지에 대한 설계"입니다.
이 체제에서의 A/B 테스트 규율 (요약)
| 공정 | 할 일 |
|---|---|
| 실험 전 | 모수로부터 검출 가능한 효과 크기(effect size)를 역산하고, 도달할 수 없다면 실시하지 않음 (첫인상 테스트 등의 정성적 방법으로 전환) |
| ... |
소규모 사이트의 A/B 테스트는 "하는 기술"보다 "하지 않는 판단"이 더 어렵습니다. 그리고 그 판단은 실측 데이터가 갖춰져 있다면 AI 에이전트에게도 맡길 수 있다는 것이 이번의 발견이었습니다.
다음에는 이 판단력의 토대가 되고 있는 리뷰 체제(착수 전 · 구현 후의 2단계 적대적 게이트)에 대해 쓰겠습니다.
커뮤니티 운영과 커리어 설계 관련 발신은 obata-tomu.jp/articles 에서 확인하실 수 있습니다.
Discussion

AI 자동 생성 콘텐츠
본 콘텐츠는 Zenn AI의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기