A/B 테스트 배분 설계를 업계 표준에 맞춘 이야기 — "노출 비율"과 "A/B 배분"을 분리하다

HeatMapX Engineering Team4 min read
  • engineering
  • ab-testing
  • product-design

이 글의 요약

  • A/B 테스트의 비율 설정에는 "노출 비율"과 "A/B 배분"이라는 서로 다른 관심사가 섞이기 쉽습니다
  • 저희는 이 둘을 독립된 파라미터로 분리했습니다
  • 분리함으로써 "리스크 관리"와 "공정한 비교"를 각각 자연스럽게 다룰 수 있습니다

HeatMapX에 A/B 테스트 기능을 구현하면서, 눈에 띄지는 않지만 중요한 설계 판단이 있었습니다. "비율"을 어떻게 모델링할 것인가였습니다. 결론적으로 "실험에 포함할 비율(노출 비율)"과 "A/B 배분"을 독립된 2개의 파라미터로 분리했습니다. 이 글에서는 그 이유를 공유합니다.

섞이기 쉬운 두 가지 관심사

A/B 테스트의 "비율"에는 사실 성격이 다른 두 가지 관심사가 포함되어 있습니다.

  • 얼마나 많은 방문자를 실험에 포함시킬 것인가(=리스크 관리)
  • 포함된 방문자 중에서 A와 B를 어떻게 배분할 것인가(=비교의 공정성)

초기의 단순한 설계에서는 이 두 가지를 하나의 슬라이더로 합쳐버리기 쉽습니다. 하지만 그렇게 하면 "안전하게 소규모로 시도하고 싶다"는 목적과 "A와 B를 공정하게 비교하고 싶다"는 목적이 서로 얽혀, 사용자에게도 구현 측에도 이해하기 어려워집니다.

분리한 모델

그래서 이 둘을 독립시켰습니다.

  • traffic_allocation(실험에 포함할 비율): 전체 방문자 중 실험 대상으로 삼는 비율. 0~100%.
  • A/B 배분: 실험 대상 중에서 Control과 Variant B의 가중치.

의사코드로 표현하면 할당 판정은 다음과 같습니다.

  1. 먼저 방문자가 "실험 대상인지 아닌지"를 노출 비율로 판정한다.
  2. 대상이 된 방문자만 A/B 배분에 따라 Control / Variant B로 분배한다.

대상에서 제외된 방문자는 평소와 같은 페이지(변경 없음)를 그대로 보게 됩니다.

분리의 장점

  • 리스크를 단계적으로 확대할 수 있다: 노출 비율을 10% → 30% → 100%로 늘려가면서도 비교의 공정성(50:50)은 그대로 유지한 채 리스크만 조정할 수 있습니다.
  • 설정의 의미가 명확하다: "얼마나 포함시킬지"와 "어떻게 보여줄지"가 별개의 UI로 분리되어 오해가 줄어듭니다.
  • 업계 표준과 일치한다: 주요 A/B 테스트 도구들도 마찬가지로 트래픽 배분과 실험 내 할당을 분리해서 다루고 있습니다.

UI에도 반영

이 설계 판단은 그대로 UI에도 반영되어 있습니다. 실험 설정 화면에서 "실험에 포함할 비율"과 "A/B 배분"을 각각 별도로 지정할 수 있으며, 실험 상세 화면에서는 두 값을 모두 요약으로 확인할 수 있습니다.

마치며

"비율"이라는 언뜻 단순해 보이는 요소 안에도 리스크 관리와 비교의 공정성이라는 별개의 관심사가 숨어 있습니다. 이를 분리해서 모델링함으로써 사용자에게 이해하기 쉽고 운영하기 쉬운 A/B 테스트가 되었습니다. 작은 설계 판단이지만, 이런 것들이 쌓여 사용 편의성을 좌우합니다.

Claude Code에서 실행하는 히트맵, 무료로 시작.

한 줄의 트래커 태그를 붙이고 CLI에서 분석부터 개선 제안까지.