참고: 이 글은 원래 영어로 작성된 블로그의 한국어 번역본입니다. 원문은 다음 링크에서 확인하실 수 있습니다: https://statsig.com/blog/controlling-type-i-errors-bonferroni-benjamini-hochberg
Benjamini-Hochberg 절차가 이제 Statsig에서 거짓 양성을 줄이는 방법으로 사용 가능합니다.
우리가 테스트하는 가설이 많을수록, 기본 효과가 없더라도 우연히 통계적으로 유의미한 결과를 볼 가능성이 높아집니다. Bonferroni 보정과 Benjamini-Hochberg 절차는 다중 비교를 수행할 때 이러한 거짓 양성을 줄이는 서로 다른 기법입니다.
Benjamini-Hochberg 절차와 Bonferroni 보정은 모두 출시하지 말아야 할 때 출시하는 것을 방지하는 데 도움이 됩니다. Benjamini-Hochberg 절차는 테스트하는 가설의 수가 많고 거짓 양성을 적당히 줄이고자 할 때 가장 유용하며, Bonferroni 보정은 더 보수적이고 동시에 테스트되는 가설의 수가 적을 때 가장 유용합니다.
조정 없음 vs Benjamini-Hochberg 절차 vs Bonferroni 보정 간의 근본적인 트레이드오프는 제1종 및 제2종 오류에 대한 위험 허용도입니다.
귀무가설이 거짓 | 귀무가설이 참 | |
귀무가설 기각 | 올바름 | 제1종 오류: 거짓 경보 |
귀무가설 기각 실패 | 제2종 오류: 놓친 탐지 | 올바름 |
제1종 및 제2종 오류에 대한 더 자세한 설명은 여기에서 찾을 수 있습니다.
어느 것이 더 나쁠까요?
(제1종 오류) 실제로 제품을 개선하지 않는 불필요한 변경을 하고 있습니다.
(제2종 오류) 실험에서 차이를 감지하지 못해 제품을 개선할 기회를 놓쳤습니다.
답은 팀의 목표, 제품의 성숙도, 변경 사항을 구현하고 유지하는 데 투입할 수 있는 리소스에 따라 달라집니다.
테스트하고자 하는 가설이 많다면, Bonferroni 보정을 사용하면 실험의 검정력이 매우 빠르게 감소할 수 있습니다. Benjamini-Hochberg 절차는 다중 비교에 대한 페널티가 덜 심하지만, 그 대신 Bonferroni 보정을 사용할 때보다 제1종 오류를 범할 가능성이 더 높다는 것을 의미합니다.
Bonferroni 보정은 가족별 오류율(FWER)을 제어하는 반면, Benjamini-Hochberg 절차는 거짓 발견율(FDR)을 제어합니다.
FWER = 비교 중 하나에서 제1종 오류를 범할 확률
FDR = 귀무가설을 기각했을 때 그것이 참일 확률
대조군 대비 한 변형의 각 지표 평가에 대해 다음과 같습니다:
귀무가설이 거짓 | 귀무가설이 참 | |
귀무가설 기각 | 제1종 오류: 거짓 경보 | |
귀무가설 기각 실패 |
온라인 실험에서는 주어진 실험에 하나의 지표와 하나의 변형만 있는 경우가 드물며, 예를 들어:
우리는 일반적으로 Bonferroni 보정보다 덜 엄격하면서도 여전히 어느 정도의 제1종 오류로부터 보호해주는 Benjamini-Hochberg 절차를 권장합니다. 어떤 방법론을 사용하기로 결정하든, 실험 결과를 기반으로 출시한 변경 사항의 수와 그러한 변경 사항이 제품에 미친 영향(홀드아웃은 이를 수행하는 좋은 방법입니다!)을 기반으로 실험 프로그램을 평가하여 거짓 양성을 방지하기 위해 더 많거나 적은 제어가 필요한지 결정할 수 있습니다.
Statsig의 모든 실험의 고급 설정에서 Bonferroni 보정 또는 Benjamini-Hochberg 절차를 사용할지 선택할 수 있습니다.
Benjamini-Hochberg 절차 설정은 실험 설정 페이지의 고급 설정에서 Bonferroni 보정 설정 바로 아래에서 찾을 수 있습니다.
이는 조직의 실험 정책에서도 구성할 수 있습니다 - 기본값으로 활성화하거나 사용을 요구하도록 설정할 수 있습니다.
Bonferroni 보정과 마찬가지로, Statsig에서 Benjamini-Hochberg 절차를 적용할 때 변형별, 지표별 또는 둘 다에 대해 방법을 적용할지 결정할 수 있습니다. 이는 실험자가 서로 다른 가설에 페널티를 부과하는 것과 관련하여 내려야 하는 결정입니다.
변형: 보정을 사용하는 경우 일반적으로 변형별로 해당 보정을 적용해야 합니다. 각 변형은 실험 대상에 대한 별개의 처리이며 별개의 가설을 나타냅니다.
지표: 서로 다른 지표가 하나의 가설에 대한 증거로 사용되거나 각각 다른 가설을 뒷받침하는 데 사용될 수 있습니다. 스스로에게 물어볼 좋은 질문: 측정된 지표 중 하나라도 긍정적인 방향으로 움직이면 기능을 출시하고 싶으신가요? 그렇다면 여러 지표에 대해 α에 페널티를 부과하는 것이 좋습니다.
p-값을 오름차순으로 정렬하는 것부터 시작합니다. 그런 다음 원하는 거짓 발견율을 평가되는 비교 수로 나눈 값에 정렬된 목록에서 p-값의 순위를 곱한 임계값을 계산합니다. 임계값보다 작은 가장 큰 p-값이 새로운 유의 수준(α)이 되거나, p-값이 임계값보다 작은 것이 없으면 가장 작은 임계값이 됩니다.
예를 들어, FDR <= 0.05로 다음과 같이 정렬된 관찰된 p-값이 있다면
관찰된 p-값 | 가능한 임계값 | p-val < 임계값 | 통계적으로 유의한가? |
0.010 | 0.05/4*1 = 0.0125 | 참 | 예 |
0.031 | 0.05/4*2 =0.0250 | 거짓 | 예 |
0.032 | 0.05/4*3 = 0.0375 | 참 | 예 |
0.120 | 0.05/4*4 = 0.0500 | 거짓 | 아니오 |
이는 조정된 α = 0.0375임을 의미합니다.
지표 수에 기반하여 Benjamini-Hochberg 절차를 적용할 때, 우리는 각 변형에 대해 다른 변형과 독립적으로 위의 방법을 사용하여 FDR을 제어합니다. 마찬가지로, 변형 수에 기반하여 Benjamini-Hochberg 절차를 적용할 때, 우리는 각 지표에 대해 다른 지표와 독립적으로 위의 방법을 사용하여 FDR을 제어합니다. 지표 및 변형 수에 기반하여 Benjamini-Hochberg 절차를 적용할 때, 우리는 각 지표와 변형에 대한 모든 p-값에 대해 위의 방법을 함께 적용하여 전체 실험에 대한 FDR을 제어합니다.
예를 들어, 다음과 같은 관찰된 p-값이 있고 FDR ≤ 0.05로 각 변형에 대한 지표 수에 기반하여 Benjamini-Hochberg를 적용하면 다음과 같은 결과를 얻습니다:
변형 1 vs 대조군 | 변형 2 vs 대조군 | |
지표 1 | 0.043 | 0.129 |
지표 2 | 0.049 | 0.074 |
지표 3 | 0.042 | 0.005 |
지표 4 | 0.037 | 0.042 |
조정된 α | 0.05 | 0.0125 |
동일한 기본 데이터로, FDR ≤ 0.05로 각 지표에 대한 변형 수에 기반하여 Benjamini-Hochberg를 적용하면 다음과 같은 결과를 얻습니다:
변형 1 vs 대조군 | 변형 2 vs 대조군 | 조정된 α | |
지표 1 | 0.043 | 0.129 | 0.025 |
지표 2 | 0.049 | 0.074 | 0.025 |
지표 3 | 0.042 | 0.005 | 0.025 |
지표 4 | 0.037 | 0.042 | 0.05 |
그리고 FDR ≤ 0.05로 변형 및 지표 수에 기반하여 Benjamini-Hochberg를 적용하면 다음과 같은 결과를 얻습니다:
변형 1 vs 대조군 | 변형 2 vs 대조군 | |
지표 1 | 0.043 | 0.129 |
지표 2 | 0.049 | 0.074 |
지표 3 | 0.042 | 0.005 |
지표 4 | 0.037 | 0.042 |
조정된 α = 0.00625