A/B테스트의 신뢰성을 저하하는 현상, SRM(Sampling Ratio Mismatch)

A/B테스트의 신뢰성을 저하하는 현상, SRM(Sampling Ratio Mismatch)
Photo by Chanhee Lee / Unsplash

SRM(Sampling Ratio Mismatch)란?

  • SRM(Sampling Ratio Mismatch)은 A/B 테스트에서 두 개 이상의 그룹에 할당된 샘플 수가 의도한 비율과 일치하지 않는 현상을 말합니다.
  • 예를 들어, A/B 테스트를 진행할 때 A와 B 그룹에 각각 50%씩 트래픽을 할당하는 것이 일반적입니다. 하지만 예상과 다르게, A 그룹에 70%, B 그룹에 30%가 할당되는 문제가 발생하면 이를 SRM이라고 합니다.

예시

  • 새로운 추천 시스템이 **실험군 A(20%)**에 적용되고, 기존 추천 시스템이 **대조군 B(80%)**에 적용되는 A/B 테스트를 진행하고 있습니다.목표는 사용자의 클릭 전환율을 비교하는 것입니다.
  • 만약 실험 설계에서 트래픽을 20% 대 80%로 분배하려고 했는데, 결과적으로 다른 비율로 트래픽이 할당되었다면 SRM 문제가 발생합니다.

SRM이 문제가 되는 이유

  • A/B 테스트의 전제 조건 중 하나는 트래픽의 무작위 할당입니다. 각 그룹에 균등하게 트래픽이 분배되어야만 통계적으로 유효한 결론을 도출할 수 있습니다. SRM이 발생하면 샘플링에 의한 오차가 비대칭적으로 발생하여 실험 결과의 신뢰성이 저하됩니다.
  • 즉, 테스트 결과에서 특정 그룹이 과대표되거나 과소대표되면, 해당 그룹에서 발생한 결과를 일반화하기 어렵게 됩니다.
  • SRM이 발생할 경우, 다음과 같은 문제가 발생합니다:
    • 결과 왜곡: 트래픽이 불균등하게 배분되면, 실험 결과는 해당 그룹에 치우칠 수 있으며 이는 결론의 왜곡을 초래합니다.
    • 전환율 오류: 각 그룹의 전환율 계산이 불균형해져서 통계적으로 유의미한 결과를 얻기 힘듭니다.
    • 테스트 시간 증가: 실험이 제대로 이루어지지 않았기 때문에 더 많은 트래픽을 필요로 하게 되어 실험 기간이 길어집니다.

원인

  • 랜덤화 오류: 트래픽을 무작위로 분배하는 과정에서 시스템 오류가 발생할 수 있습니다.
  • 사용자 세분화 오류: 실험을 위해 특정 사용자 세분화(subgroup)를 설정할 때, 해당 세분화가 잘못 적용되면 특정 그룹으로 트래픽이 쏠릴 수 있습니다.
  • 동일 사용자의 중복 참여: 동일 사용자가 여러 번 참여하거나, 세션이 여러 개 생성되면 트래픽 할당이 왜곡됩니다.
  • 시스템 성능 문제: 서버나 네트워크의 병목 현상으로 트래픽이 특정 그룹으로 집중될 수 있습니다.

SRM 확인방법

  • SRM은 실험이 진행되는 도중에 카이제곱(Chi-Square) 검정을 통해 확인할 수 있습니다. 이 방법은 실제 트래픽 배분이 기대치와 통계적으로 차이가 있는지를 확인합니다.
import numpy as np
from scipy.stats import chisquare

# 각 그룹에 할당된 트래픽 수
group_A = 7000  # A 그룹
group_B = 3000  # B 그룹

# 기대 트래픽 비율 (50:50)
expected_A = 0.5 * (group_A + group_B)
expected_B = 0.5 * (group_A + group_B)

# 카이제곱 검정 수행
chi2_stat, p_value = chisquare([group_A, group_B], f_exp=[expected_A, expected_B])

print(f"Chi2 Statistic: {chi2_stat}, p-value: {p_value}")

if p_value < 0.05:
    print("SRM 발생 가능성이 높습니다.")
else:
    print("SRM이 발생하지 않았습니다.")

해소방안

  • 무작위 할당 검토: 테스트 그룹에 트래픽이 제대로 무작위로 할당되고 있는지 확인합니다. A/B 테스트에서 사용자 세분화와 랜덤화 과정이 문제없이 작동하는지 점검해야 합니다.
  • 샘플링 단계에서 검증: 실험을 시작하기 전, 각 그룹에 대해 샘플을 추출하는 단계에서 샘플링 비율을 미리 확인합니다. 이로 인해 SRM을 사전에 감지할 수 있습니다.
  • 데이터 분석 도구 활용: SRM을 자동으로 감지할 수 있는 도구나 알고리즘을 사용합니다. Google Optimize, Optimizely 같은 A/B 테스트 플랫폼은 SRM을 감지하는 기능을 기본 제공하는 경우가 많습니다.
  • 네트워크 성능 개선: 시스템 성능 문제로 인해 트래픽 분배에 차질이 발생하지 않도록 서버 성능을 점검하거나 네트워크 병목을 해결해야 합니다.
  • SRM 발생 시 실험 중단: SRM이 감지된 경우, 실험을 지속하기보다 일단 중단하고, 문제를 해결한 후 재시작하는 것이 좋습니다.