A/B 테스트 관련 공부를 하다가 Statsig, Hackle 같은 상용 툴을 살펴본 적이 있습니다. 그런데 쓰면 쓸수록 내부에서 어떻게 돌아가는지가 궁금해졌습니다. 그룹 배정은 어떻게 하는지, 유의성 검정은 어떤 공식으로 계산하는지, SRM은 어떻게 잡아내는지 — 블랙박스로 두고 쓰는 게 점점 찜찜해졌습니다. 그래서 직접 만들어보기로 했습니다. 상용 툴 수준은 아니어도, 핵심 기능을 하나씩 직접 구현하면서 원리를 코드 수준에서 확인해보는 게 목표였습니다. 🧪
1. 왜 만들었나
A/B 테스트를 공부할 때 이론은 어느 정도 정리가 됐는데, 막상 "그래서 실제 시스템에서 어떻게 구현되는가"라는 질문에는 답이 잘 안 잡혔습니다. 상용 툴들은 그룹 배정, 유의성 검정, 데이터 품질 진단 같은 기능을 모두 자동으로 처리해주는데, 그 안에서 어떤 알고리즘이 돌아가는지는 문서만으로 완전히 파악하기 어려웠습니다.
가장 궁금했던 것 중 하나가 결정적 그룹 배정이었습니다. 같은 사용자가 실험 도중 다시 접속했을 때 항상 같은 그룹에 배정되어야 합니다. 그런데 서버에 배정 이력을 저장하지 않아도 같은 결과를 재현할 수 있다는 게 어떻게 가능한지, 해시 기반으로 구현한다는 말은 알겠는데 실제 코드는 어떻게 생겼는지 궁금했습니다. SRM도 마찬가지였습니다. "배정 비율이 의도한 것과 다르게 나왔을 때 실험 결과를 신뢰할 수 없다"는 내용은 알고 있었는데, 실제로 카이제곱 검정으로 어떻게 잡아내는지 코드로 짜보고 싶었습니다.
직접 구현해보는 게 가장 확실한 방법이라는 결론을 내리고 프로젝트를 시작했습니다.
2. 프로젝트 개요
AB Compass는 A/B 테스트의 핵심 기능을 직접 구현한 Windows 데스크톱 애플리케이션입니다. 2026년 3월부터 5월까지 약 2개월간 1인 개발로 진행했습니다.
| 항목 | 내용 |
|---|---|
| 개발 기간 | 2026.03 ~ 2026.05 |
| 구성 | 개인 프로젝트, 1인 개발 |
| 기술 스택 | Python, scipy, pandas, CustomTkinter, matplotlib, Gemini API |
| 산출물 | Windows 데스크톱 애플리케이션 (.exe) |
| GitHub | github.com/hyeonsumo/ab-test-compass |
3. 핵심 기능 네 가지
구현 범위를 정할 때 상용 툴에서 핵심이 되는 기능들만 추렸습니다. 운영 기능(SDK, API, 실시간 대시보드)이나 고급 통계(CUPED, 순차 검정)는 이번 범위에서 제외했습니다.
3.1 결정적 그룹 배정
사용자 ID와 실험별 고유 salt를 조합해서 MD5로 해싱한 뒤 0~1 사이 버킷 값으로 변환합니다. 버킷 값이 설정한 배정 비율보다 작으면 A 그룹, 크면 B 그룹으로 배정합니다. 같은 사용자 ID와 salt 조합은 항상 같은 해시 값을 내기 때문에, 서버에 배정 이력을 저장하지 않아도 재방문 시 항상 같은 그룹에 배정됩니다. 실험마다 salt를 다르게 쓰기 때문에 여러 실험이 동시에 진행될 때도 배정이 서로 영향을 주지 않습니다.
3.2 통계적 유의성 검정
두 그룹의 전환율 차이를 2-표본 z-검정으로 검증합니다. p-value와 함께 95% 신뢰구간, lift(기준 그룹 대비 상대 개선율)를 함께 계산합니다. scipy의 검정 함수를 그대로 쓰지 않고 합동 표준오차부터 z-score, 신뢰구간까지 수식을 직접 구현했습니다. 공식을 코드로 옮기는 과정에서 각 수치가 어떤 의미인지 더 명확하게 이해하게 됐습니다.
3.3 데이터 품질 진단
유의성 검정 결과만 보고 결론을 내리면 위험합니다. AB Compass는 유의성 판단과 함께 세 가지를 항상 같이 체크합니다. 카이제곱 검정으로 실제 배정 비율이 설정값과 유의하게 다른지 SRM을 진단하고, 기준 전환율과 MDE를 기반으로 필요 표본 수를 계산해서 현재 표본이 충분한지 알려줍니다. 필요 표본에 도달하지 않은 상태에서 유의한 결과가 나와도 조기 종료를 보류하도록 경고합니다.
3.4 AI 실험 설계
Gemini API를 연동해서 자연어로 적은 아이디어를 구조화된 실험 설계안으로 변환합니다. "결제 버튼 색상을 바꾸면 전환율이 오를까?"처럼 입력하면 가설, 측정 지표, 실험 기간, 주의사항이 포함된 설계안이 JSON 형태로 생성됩니다. 생성된 설계안은 앱에서 바로 실험으로 등록할 수 있습니다.
4. 전체 워크플로우

실험은 다섯 단계로 진행됩니다. 각 단계가 독립적인 모듈로 구현되어 있어서 어느 단계든 단독으로 테스트할 수 있는 구조입니다.
실험 설계 → 그룹 배정 → 트래픽 시뮬레이션 → 통계 분석 → 결과 시각화
실험 이름, 가설, 배정 비율, 기준 전환율, 예상 효과(MDE), 실험 기간을 입력해 실험을 정의합니다. 실험이 생성되면 고유한 salt가 자동으로 할당됩니다. 실제 트래픽이 없어도 시뮬레이터로 가상 사용자의 노출과 전환 데이터를 생성할 수 있고, 데이터가 쌓이면 통계 분석 탭에서 유의성, 신뢰구간, SRM, 표본 충분성을 한 번에 확인합니다. 마지막으로 시각화 탭에서 전환율 비교 차트와 누적 전환율 추이를 봅니다.
5. 기술 스택 선택 이유
각 기술을 고른 데는 이유가 있습니다. 단순히 익숙한 걸 쓴 게 아니라 프로젝트 목적에 맞는 걸 선택하려고 했습니다.
| 구분 | 기술 | 선택 이유 |
|---|---|---|
| UI | CustomTkinter | PyInstaller 패키징 안정적, 웹 서버 없이 단독 실행 가능 |
| 통계 | scipy.stats | 정규분포 CDF, 카이제곱 분포 함수를 별도 구현 없이 사용 가능 |
| 시각화 | matplotlib | TkAgg 백엔드로 GUI 안에 차트 직접 임베딩 가능 |
| 데이터 | pandas + CSV | DB 설치 없이 로컬에서 실험 데이터 저장·불러오기 가능 |
| AI | Google Gemini API | 무료 티어로 자연어 → JSON 변환 구현 가능 |
| 빌드 | PyInstaller | Python 환경 없이 Windows에서 단일 .exe 생성 |
UI 라이브러리 선택이 가장 고민됐습니다. 처음엔 Streamlit을 생각했는데 브라우저 기반이라 로컬 단독 실행 형태로 배포하기가 번거로웠습니다. CustomTkinter는 PyInstaller와 잘 맞아서 .exe 하나로 배포할 수 있다는 게 결정적이었습니다.
6. 상용 툴과의 비교
AB Compass가 구현한 것과 상용 플랫폼의 차이입니다. 이 비교표를 먼저 그려두고 나서 구현 범위를 확정했습니다.
| 항목 | 상용 플랫폼 (Statsig, Hackle) | AB Compass |
|---|---|---|
| 그룹 배정 | 결정적 해싱 내부 자동 처리 | MD5 해싱 직접 구현 |
| 유의성 검정 | p-value 자동 산출 | z-검정과 신뢰구간 직접 구현 |
| 데이터 품질 | Data Quality Alert 자동 제공 | 카이제곱 검정으로 SRM 직접 진단 |
| 표본 및 검정력 | 권장 표본 자동 안내 | 필요 표본 수 직접 계산, 조기 종료 경고 |
| 고급 통계 | CUPED, 순차 검정 등 제공 | 이번 범위에서 제외 |
| 운영 기능 | SDK, API, 실시간 대시보드 | 이번 범위에서 제외 |
상용 플랫폼이 자동으로 처리해주는 것들을 직접 구현하다 보니, 블랙박스로만 알던 기능들의 원리가 코드 수준에서 명확해졌습니다. 특히 SRM을 카이제곱 검정으로 진단하는 구조는 직접 짜보기 전까지는 어떻게 동작하는지 막연했는데, 수식을 코드로 옮기는 과정에서 이해가 됐습니다.
정리
툴을 쓰는 것과 직접 만드는 건 꽤 다른 경험이었습니다. A/B 테스트를 공부할 때 "그래서 실제 코드는 어떻게 생겼지?"라는 질문이 계속 남아 있었는데, 직접 구현하면서 그 답을 찾아가는 과정이었습니다. 2편에서는 이 프로젝트의 핵심인 결정적 해싱 그룹 배정과 통계 엔진 구현을 자세히 다루겠습니다. 😊
'Project' 카테고리의 다른 글
| [AB Compass] 시뮬레이터와 AI 설계 자동화 (0) | 2026.06.11 |
|---|---|
| [AB Compass] 해싱과 통계 엔진, 핵심 로직 구현 (0) | 2026.06.11 |
| [Team Project] 네이버 플레이스 광고/체험단 리뷰 판별 모델 개발 - 모델링 및 페이지 표출 (3) (2) | 2026.04.10 |
| [Team Project] 네이버 플레이스 광고/체험단 리뷰 판별 모델 개발 - EDA (2) (0) | 2026.01.19 |
| [Kaggle] IEEE-CIS Fraud Detection - 모델링 (3) (0) | 2026.01.13 |
HELLO WORLD
안녕하세요. 데이터로 말하는 분석가 모모입니다.
데이터를 구조화하고 분석하는 과정과 실무에 활용되는 도구 중심의 내용을 기록합니다.