ExperimentGuard는 기존 실험 도구에 연결해 A/B 테스트의 할당·이벤트 데이터를 점검하고, 결과가 신뢰할 만한지와 데이터 문제가 무엇인지 진단하는 도구다. 진단 결과에는 문제를 재현할 SQL 쿼리와 권장 사항이 포함된다.

설치와 사용

저장소의 ExperimentGuard 안내에 따르면 현재 제공하는 기능은 하나의 워크플로다. 할당 데이터와 이벤트 데이터를 입력하면 진단 보고서를 만든다. 설치에는 pandas, numpy, scipy가 필요하다.

```text

pip install -e . # needs pandas, numpy, scipy

experimentguard demo --scenario exposure_loss --out demo_data

experimentguard diagnose --assignments demo_data/assignments.csv \\

--events demo_data/events.csv --out report.html

```

종료 코드는 0이 신뢰 가능, 1이 의심스러움, 2가 신뢰하기 어려움, 3이 잘못된 입력을 뜻한다. 따라서 CI 게이트로 사용할 수 있다. 설치하지 않고 실행하려면 python -m experimentguard diagnose ...를 사용한다.

입력 형식에서 assignments.csv에는 user_id, variant, assigned_at 열이 필요하다. device, app_version, channel 열이 있으면 세그먼트별 문제 위치를 찾을 수 있다. events.csv에는 user_id, event_type, timestamp가 필요하며, event_id는 정확히 같은 이벤트의 중복을 탐지하고 variant는 노출과 할당을 대조하는 데 쓰인다. 노출 이벤트는 기본적으로 event_type == "exposure"인 행이며 --exposure-event로 바꿀 수 있다. 비율이 균등하지 않다면 --split 90/10을 지정할 수 있고, 이때 변형군은 정렬된 순서로 처리한다. 기준군은 --control NAME으로 고른다.

진단 항목과 한계

점검 항목에는 카이제곱 검정을 이용한 표본 비율 불일치(SRM, p < 0.001), 할당 후 노출이 없는 사용자, 여러 변형군에 속한 사용자나 잘못된 노출, 중복 이벤트율 차이, 날짜·변형군별 이벤트 급감이 포함된다. 도구는 문제의 발생 시점과 기기·앱 버전·채널 등 위치도 찾는다. 각 결과에는 수치와 권장 사항, assignments 및 events 테이블에서 결과를 재현하는 SQL 쿼리가 제공된다.

위치 추정 방식은 코호트별 일일 통계에서 변화점을 한 번 탐색하고, 전후 차이가 |z| >= 5일 때만 표시한다. 세그먼트별 노출 누락과 SRM은 Bonferroni 보정을 적용해 살피며, 해당 세그먼트가 전체 누락의 10% 이상을 설명해야 위치로 보고한다.

ExperimentGuard는 데이터 품질 문제를 찾지만, 엿보기(peeking), 여러 지표 검정, 신기성 효과 등 지표 분석의 통계적 타당성은 확인하지 않는다. 각 점검에서 변화점은 하나만 찾으므로 여러 문제가 동시에 발생하면 시작 시점은 주요 문제를 반영한다. 세그먼트 위치를 찾으려면 할당 데이터에 관련 열이 있어야 한다. 현재 테스트는 합성 오류에만 적용됐으며 실제 고객 데이터로 검증되지는 않았다. 노출을 할당 코호트 기준으로 측정하므로 노출이 할당 직후 발생한다는 가정도 둔다.

테스트는 다음 명령으로 실행한다.

```text

python -m unittest discover -s tests -v

```