Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Week 4&5_Summary_RCT와 실험 플랫폼 #4

Open
fenzhantw opened this issue Jun 12, 2024 · 2 comments
Open

Week 4&5_Summary_RCT와 실험 플랫폼 #4

fenzhantw opened this issue Jun 12, 2024 · 2 comments
Assignees
Labels
documentation Improvements or additions to documentation

Comments

@fenzhantw
Copy link
Member

fenzhantw commented Jun 12, 2024

무작위 실험의 순서

(0) 가설 및 실험 디자인 – Sample Size(how long?), OEC, Guardrail Metric, Data Quality etc..
(1) 실험 할당 – 고유 식별자에 기반하여, 사용자를 그룹으로 나누고, 제품 변형(variant) 하나로 할당
(2) 실험 실행 – 사용자의 행동 데이터를 Logging
(3) 실험 로그 처리 - Log 데이터를 저장소로 업로드하여 처리 (e.g., 서버 로그와 실험 metadata 결합)
(4) 실험 분석 - variant로 영향을 받은 사용자로 필터링 처리된 로그를 분석하는 단계
(5) Ship or Abort – 실험한 Feature를 반영? or 실험 Reproduce? or Abort ?

무작위 실험의 패턴 (Engineering)
image

  1. Assignment : Hash Function

    • Randomize 요청에 따라 Deterministic하게 응답 관리자가 설정한 비율대로 올바르게 배정
    • Murmur Hash3, SHA1(Facebook PlanOut), SHA256, MD5
    • Bucket(Slot)은 물리적으로 존재하는 저장 공간이 아니며, 논리적으로 존재하는 개념

    Assignment 샘플 모집단 목록을 재사용 한다면? Carryover Effect (Kohavi et al. 2012)

    • 동일한 사용자 그룹이 여러 테스트에서 지속적으로 변경 사항을 경험할 때 발생

    • 버킷 할당에 사용되는 일관된 시드 때문에 버킷은 이전 A/B 테스트를 "기억"하여 후속 테스트 결과에 영향

  2. Release :

  • Feature Toggles + Release Strategy (Blue & Green, Canary)
  1. Architecture:
  • 사용자 로그 및 메타 데이터 저장
  • 실험 관리와 Config 서버(실험 정보와 실험 정책 저장)
  • 지표 계산 및 대시보드 결과 생성 파이프라인

무작위 실험의 패턴 (Analytics)

  1. Randomization Unit = Analysis Unit
    ->Independence of randomization units -> User Level Randomization

  2. 실험군과 대조군의 간섭 Interference (Network Effect) -> 네트워크 클러스터 생성 [Detecting interference: An A/B test of A/B tests]
    -> 클러스터에 따라 사용자를 무작위로 처리하여 동일한 클러스터의 모든 사용자가 동일한 치료 그룹에 속하도록 처리

image

  1. Selection Bias 처리 하기 위한 패턴 A/A Testing(Randomization Check) & SRM(Sample Ratio Mismatch)
    -> A/A Testing : 부스트트랩된 A/A 테스트에서 P값 분포가 균일한지 테스트

    • H0: average metric in group A = average metric in group B
    • H1: average metric in group A ≠ average metric in group B

    -> SRM: A와 B에서 계산된 사용자 비율과 실험이 시작되기 전에 구성된 비율(예: 50/50 분할) 사이에 통계적으로 유의미한 차이

    SRM은 Microsoft에서 지난 1년 동안 수행된 실험에서 약 6%를 자치할 만큼 일반적인 Data Quality 문제

    기본적인 접근은 세그먼트 하위 모집단에 대해 카이제곱 테스트를 통해서, 비율의 불균형을 파악

  2. Variance와 민감도(Conditional Triggering & CUPED)

    -> Conditional Triggering: A/B 테스트가 진행되는 화면에 접근하기 어려울 때, Treatment를 받지 못한 사용자를 실험에 포함 시키면 오버트래킹 현상 (ATE가 0 -> Variance 증가) 작은 변화를 감지하기 어려움

    • 트리거 분석은 트리거 조건을 충족하지 못한 사용자의 이벤트를 제외

    -> Variance Reduction 방법 중 CUPED는 실험 전 공변량을 활용

    • Low Traffic에서 작은 효과를 탐지하기 위해서 CUPED-adjustment 필수
      CUPED-adjusted metric =metric - (covariate - mean(covariate)) x theta
  3. Novelty & Primary effect

    -> 초두 효과 (Primacy Effect)
    사용자들이 기존 제품/방식에 익숙하고 변화를 꺼려하여 발생하는 효과

    -> 신기 효과 (Novelty Effect)
    변화를 좋아하고 기존 제품/방식보다 새로운 기능을 선호하여 발생하는 효과

    • 처치 효과가 언제 안정화되는지 확인하려면 (1) 실험을 오래 실행 (2) Novelty & Primary에 영향을 받지 않는 신규 사용자를 통해 실험

    • 신규 사용자는 제품을 처음 사용하기 때문에, 두 효과에 영향을 받지 않음 / 제품 사용 기간에 따라 가중치를 줄 수도 있음

표본의 수 고려

  1. 테스트 수행 기간을 정하기 위해서는 테스트를 위한 샘플 사이즈를 알아야 하며, 요구되는 파라미터
    (1) Type II 에러율 β 또는 Power (1−β) -> 업계 표준 0.8
    (2) 유의 수준 α -> 업계 표준 0.05
    (3) 최소 검출 가능 효과 (Minimum detectable effect, MDE)

  2. 샘플 사이즈를 알게 되었다면 샘플 사이즈를 사용자 수로 나눠 테스트 수행 기간을 구할 수 있음

    • 일반적으로 2주 정도는 테스트하길 권장하지만 데이터를 더 수집할 수 있다면 길 수록 좋음
      일주일 미만인 경우에는 주간 패턴을 포착하기 위해 최소 7일 동안 실험
  3. 추가적 고려 사항

    • 온라인 실험의 상황에서 데이터의 왜도나 첨도가 높은 경우, 표준 정규 분포로의 근사가 완벽하지 않을 수 있음 Alex Deng은 데이터 비대칭 상황에서 엄밀한 표본크기 결정과 정규 분포 근사를 위해 n > 100*s^2를 경험적 규칙으로 제안 (s는 왜도)
    • Kohavi et al. (2014)는 유사당 수익 지표가 17.9의 왜도를 가져, 30,000개의 표본 크기가 필요하다고 주장 → Capping으로 필요한 표본을 줄이기
    • 베르누이 분포와 같이 0과 1로 데이터가 구성된 경우 Capping이 불가능 한데, 이때, 라플라스 스무딩으로 인위적으로 새롭게 평균을 계산하여 신뢰 구간 개선
@fenzhantw fenzhantw added the documentation Improvements or additions to documentation label Jun 12, 2024
@jsshin2022
Copy link
Member

와 자료 퀄리티.... 감동이네요!

@sim-so
Copy link

sim-so commented Jun 25, 2024

좋은 자료를 만들어주셔서 정말 감사합니다!
자료 다시 읽어보면서 현재 실험 환경이 마련되어 있지는 않지만 업무를 하면서 여기서 RCT를 진행한다면 어떻게 할 수 있을까 고민해 볼 수 있었습니다. 그러다 관찰 단위와 관련하여 궁금한 점이 생겨 질문 드립니다!

  1. 분석할 단위에 맞춰 무작위 할당을 수행하는 것이 첫 번째 단계인데요, 주로 사용하는 '사용자'라는 단위의 조작적 정의가 어려운 경우도 많을 것 같아요. 이를테면 사용자 대부분이 로그인하지 않은 채로 서비스를 이용하여서 계정이 아닌 세션 등의 정보로 사용자를 식별해야 하는 경우도 있고, 회원가입과 로그인이 필수인 서비스이지만 한 계정을 여러 사용자가 이용하거나 한 사용자가 여러 계정을 가지는 경우도 떠오릅니다. 조작적으로 정의된 관찰 단위가 적절한지 어떻게 확인할 수 있을까요?
  2. 특히 비회원의 규모가 커서 사용자 식별이 어려운 경우에 RCT는 어떻게 이루어질 수 있을까요? 식별 가능한 사용자만 대상으로 실험군/대조군을 구성하고 실험한다면, 그 실험의 결과로 알게 된 인과효과가 식별되지 못한 사용자에게도 적용되는지/어느 정도로 적용되는지 검토할 수 있는 방법이 있을까요? 비회원 사용자와 회원 사용자 간 interference도 존재할 수 있을 것 같은데요, 이 경우 어떻게 다룰 수 있을지도 궁금해요. (이러한 어려움 때문에 사용자를 식별할 수 있도록 애쓰거나 반대로 관찰 단위를 바꾸어 실험해야 할 것 같기도 하고, RCT 외에 다른 방법을 사용할 수밖에 없을 것 같기도 하네요.)

질문을 정리하다 보니 RCT 뿐만 아니라 대부분의 실험에서 고려할 점 같아요. 다른 분들은 '사용자'(혹은 주 관찰 단위)를 주로 어떻게 정의하여 실험하시는지, 관찰 단위를 설정하는 데에 큰 어려움이 없으셨을지도 궁금합니다. 😃

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
documentation Improvements or additions to documentation
Projects
None yet
Development

No branches or pull requests

3 participants