BigQuery에서 AB 테스트 결과의 검정(모비의 차이의 검정)

개요와 동기


사용자를 두 개 이상의 그룹으로 나누어 각 그룹에 대한 조치를 실시하여 반응의 차이AB 테스트를 관찰하고 통계 검정에서 각 그룹의 반응이 통계적으로 현저한 차이가 있는지 확인하는 것이 중요하다.
인용: Unity Analythics ABTesting의 통계 검정 결과 화면significant=yes은 통계적 의미차가 있음)

https://docs.unity3d.com/ja/2020.1/Manual/UnityAnalyticsABTesting.html
AB 테스트에서 테스트 대상으로 전환 여부를 결정할 때 아래 표에'모비율차의 감정'을 실시한다.
CV입니다.
CV 없음
컨트롤 그룹
300
2000
treatment 그룹 (개입 그룹) 1
380
2200
treatment군(개입군)2
450
1800
↑ BigQuery로 이런 표를 낸 뒤 지금까지 어머니의 비율을 측정할 수 있는 도구에 수치를 입력해 의미 차이가 있는지 검증했지만 BigQuery 안에서 감정을 할 수 있다면 편리할 것 같아서 실제로 해보겠습니다.

UDF(사용자정의 함수) 구현


BigQuery에서 모든 Javascript 함수를 UDF로 정의할 수 있습니다.

  • https://cloud.google.com/bigquery/docs/reference/standard-sql/user-defined-functions
  • 이미 UDF 기능가가 나온 지 1년이 넘었어요.이죠...
  • 세계적으로 모비지차 검정을 실시하는 자바스크립트가 몇 개 있기 때문에 이번에는 모비지차 검정을 실시하는 빅큐리 UDFhttps://github.com/thumbtack/abba를 사용한다.
    UDF 문서에 따라 필요한 js 라이브러리를 GCS bucket에 설치한 후 다음과 같은 UDF를 정의한다.
    CREATE OR REPLACE FUNCTION `util.abba_test`(
      baseSuccess FLOAT64,
      baseTotal FLOAT64,
      variationSuccess FLOAT64,
      variationTotal FLOAT64,
      numOfGroups FLOAT64
    ) 
    RETURNS STRUCT<
      pValue FLOAT64, 
      proportion FLOAT64,
      lowerBound FLOAT64,
      upperBound FLOAT64,
      relativeLowerBound FLOAT64,
      relativeUpperBound FLOAT64
      >
    DETERMINISTIC
    LANGUAGE js
    OPTIONS (
      library=[
        "gs://udf-bucket/path/to/jstat.min.js",
        "gs://udf-bucket/path/to/stats.js"
      ])
    AS """
      const ALPHA = 0.05  // 有意水準は5%とする
      const experiment = new Abba.Experiment(numOfGroups-1, baseSuccess, baseTotal, ALPHA, jStat)
      const result = experiment.getResults(variationSuccess, variationTotal)
    
      return {
        "pValue": result.pValue,
        "proportion": result.proportion.value,
        "lowerBound": result.proportion.lowerBound,
        "upperBound": result.proportion.upperBound,
        "relativeLowerBound": result.relativeImprovement.lowerBound,
        "relativeUpperBound": result.relativeImprovement.upperBound,
      }
    """
    
    매개변수와 반환 값은 다음과 같습니다.
    
    # 引数:
      - baseSuccess: 基準となる母集団の成功人数
      - baseTotal: 基準となる母集団の人数
      - variationSuccess: 比較する母集団の成功人数
      - variationTotal: 比較する母集団の人数
      - numOfGroups: 母集団の数。2集団の比較のときは2 (Bonferroni調整に使用する)
    # 返り値:
      - 以下の要素を含んだ構造体
        - pValue: p値
        - proportion: 母集団から推定される成功者の割合
        - lowerBound: 母集団から推定される成功者の割合の、信頼区間の下限
        - upperBound: 母集団から推定される成功者の割合の、信頼区間の上限
        - relativeLowerBound: 基準となる母集団からの、比較する母集団の改善率の下限
        - relativeUpperBound: 基準となる母集団からの、比較する母集団の改善率の上限
    
    캡처:

    UDF 활용


    처음에 보여준 ABC 테스트 결과를 검정하려면 다음과 같은 내용을 물어야 한다.
    WITH data AS (
    SELECT 'control' _label, 300 success, 2000 total
    UNION ALL
    SELECT 'treatment1' _label, 380 success, 2200 total
    UNION ALL
    SELECT 'treatment2' _label, 450 success, 1800 total
    )
    
    SELECT 
      _label, 
      success, 
      total,
      util.abba_test(
        first_value(success) over (order by _label = 'control' desc), -- control群のCV数
        first_value(total) over (order by _label = 'control' desc),  -- control群の人数
        success,
        total,
        count(1) over() -- 群の数(今回はABCテストなので3)
      ).*,
    FROM data
    GROUP BY 1,2,3
    ORDER BY 1
    

    ↓ 소수를 보기 어려우므로 포맷
    _label
    success
    total
    pValue
    proportion
    lowerBound
    upperBound
    relativeLowerBound
    relativeUpperBound
    control
    300
    2000
    1.000
    0.150
    0.133
    0.169
    -0.168
    0.168
    treatment1
    380
    2200
    0.083
    0.173
    0.155
    0.192
    -0.019
    0.318
    treatment2
    450
    1800
    0.000
    0.250
    0.228
    0.274
    0.469
    0.854
    이 ABC 테스트에서.
  • control팀의 CV율은 15.0%(95% 신뢰구간 13.3%~16.9%)
  • treatment 1조의 CV율은 17.3%(95% 신뢰구간 15.5%~19.2%)로 control조에 비해 현저한 차이가 없음(p치=0.083>0.05), 개선률은 -1.9%~+31.8%
  • treatment2조의 CV율은 25.0%(95% 신뢰구간 22.8%~27.4%)로 control조에 비해 현저한 차이(p치≥0.0001), 개선률 +46.9%~+85.4%
  • 심사에서 이런 일을 깨달았다.

    총결산


    UDF에서 AB 테스트를 실시하는 검정(모비의 차이의 검정)을 통해 현재까지 인력 복제 도구로만 실시할 수 있는 AB 테스트의 통계적 검정.
    루커 대시보드 등 각종 BI 도구와 조합하면 인력 계산이 안 되는 강력한 대시보드를 만들 수 있다.

    시험을 준비하다


    통계 심사 수법에 대한 상세한 설명


    https://github.com/thumbtack/abba 모비율이 낮은 검정 내부에서 사용하는 신뢰 구간은'아그레스티-컬신뢰 구간', 다중 ABC 테스트(즉 ABC 테스트) 때는'본페로니 조정'을 통해 유의미한 수준의 조정이 이뤄진다.
    상세한 상황을 알고 싶은 사람은 아래의 참고 문헌을 참고하세요.저도 너무 디테일한 부분을 잘 설명할 자신이 없어요.
  • 모비율차에 대한 검정: https://bellcurve.jp/statistics/course/18227.html
  • ABBA 기반 통계 검정 방법
  • http://thumbtack.github.io/abba/demo/abba.html
  • Agresti-Col 신뢰 구간(또는 Wald법 조정)
  • https://en.wikipedia.org/wiki/Binomial_proportion_confidence_interval#Agresti%E2%80%93Coull_interval
  • https://towardsdatascience.com/five-confidence-intervals-for-proportions-that-you-should-know-about-7ff5484c024f#a837
  • Agresti-Col 신뢰 구간의 원시 윌슨 score 신뢰 구간: https://ja.wikipedia.org/wiki/%E3%82%A6%E3%82%A3%E3%83%AB%E3%82%BD%E3%83%B3%E3%81%AE%E4%BF%A1%E9%A0%BC%E5%8C%BA%E9%96%93
  • Bonferroni 튜닝(다중 그룹 AB 테스트(ABC...테스트) 방법)
  • https://www.med.osaka-u.ac.jp/pub/kid/clinicaljournalclub1.html
  • 요약하면 비교할 전체 견본의 수량 N은 유효한 수준이다.α로 수정됨α/N.
  • 라이센스 태그


    abba

    Copyright (c) 2014 Thumbtack
    BSD 3-Clause "New" or "Revised" License
    

    jStat

    Copyright (c) 2013 jStat
    MIT License
    

    좋은 웹페이지 즐겨찾기