paint-brush
언데드 연어 이야기: 다중 가설 테스트에서 Bonferroni 수정 탐구~에 의해@igorkhomyanin
2,134 판독값
2,134 판독값

언데드 연어 이야기: 다중 가설 테스트에서 Bonferroni 수정 탐구

~에 의해 Igor Khomyanin10m2023/05/24
Read on Terminal Reader
Read this story w/o Javascript

너무 오래; 읽다

이 기사에서는 적절한 조정 없이 여러 가설을 테스트하는 문제에 대해 설명합니다. 위양성 결과를 제어하기 위한 솔루션으로 Bonferroni 보정을 도입했습니다. 시뮬레이션은 수정의 효율성을 보여줍니다. 다중 가설 검정의 수정 사항을 이해하고 적용하는 것은 정확한 데이터 분석과 의사 결정을 위해 필수적입니다.
featured image - 언데드 연어 이야기: 다중 가설 테스트에서 Bonferroni 수정 탐구
Igor Khomyanin HackerNoon profile picture
0-item


통계적 추론은 결론을 도출하고 표본 데이터를 기반으로 모집단에 대해 예측하는 강력한 도구입니다. 이를 통해 우리는 정보에 입각한 결정을 내리고 다양한 옵션의 효과를 이해할 수 있습니다. 통계적 추론의 널리 사용되는 응용 프로그램 중 하나는 A/B 테스트 입니다. 여기서는 두 가지 버전이나 처리 방법을 비교하여 우수한 성능을 결정합니다. 하지만 실험에 더 많은 버전이나 처리 방법을 도입하면 어떻게 될까요 ?


실험에 추가 버전을 도입하는 것은 더 나은 결정을 내릴 수 있는 기회로 보일 수 있습니다. 불행하게도 제대로 처리하지 않으면 테스트 가능한 가설의 수가 늘어나 잘못된 결과와 잘못된 결정으로 이어질 수 있습니다 . 이 문제는 다중 비교 문제 로 알려져 있습니다.


이 기사에서는 다중 가설 테스트의 개념과 잠재적인 함정을 설명하고 Python 시뮬레이션이 지원하는 한 가지 가능한 솔루션을 제공합니다.


다중 가설 검정이란 무엇입니까?

다중 가설 테스트를 이해하기 위해 먼저 두 가지 변형을 포함하는 간단한 A/B 테스트 의 기본 개념을 살펴보겠습니다.


A/B 테스트에서는 두 가지 경쟁 가설, 즉 변형 간의 차이가 없음을 나타내는 귀무 가설 과 차이가 있음을 암시하는 대립 가설을 공식화하는 것부터 시작합니다.


그런 다음 alpha 로 표시된 유의 수준을 설정합니다. 이 임계값은 귀무 가설을 기각하는 데 필요한 증거의 양을 결정합니다. 일반적으로 사용되는 유의 수준은 0.05(5%)와 0.01(1%)이며 귀무 가설이 참일 경우 데이터를 관찰할 확률을 나타냅니다.


실험을 실행하고 데이터를 수집한 후 p-값을 계산합니다. p-값은 귀무 가설이 참인 경우 관찰된 데이터만큼 극단적이거나 더 극단적인 결과를 얻을 확률을 나타냅니다 . p-값이 유의 수준 alpha 보다 작으면 대립 가설을 선호하여 귀무 가설을 기각합니다.


낮은 p-값은 귀무 가설에 반하는 강력한 증거를 제시하며, 이는 관찰된 데이터가 우연히 발생할 가능성이 낮다는 것을 의미한다는 점에 유의하는 것이 중요합니다. 그러나 이것이 확실성을 의미하는 것은 아닙니다. 귀무가설이 참이더라도 표본 간의 차이를 관찰할 확률은 0이 아닙니다.


다중 대립 가설이 있는 상황에 직면할 때 이를 다중 가설 검정 이라고 합니다. 이러한 경우 여러 테스트를 동시에 수행할 때 발생할 수 있는 영향을 신중하게 고려해야 하므로 복잡성이 증가합니다.


다중 가설 검정의 함정

다중 가설 테스트의 함정은 유의 수준 alpha 조정하지 않고 여러 가설을 테스트할 때 발생합니다. 그러한 경우, 우리는 무심코 "유형 I" 오류의 비율을 부풀립니다 . 즉, 귀무 가설이 실제로는 사실(차이가 전혀 없음)인 반면 귀무 가설을 기각 (차이 찾기)하는 경향이 있음을 의미합니다.


동시에 테스트하는 가설이 많을수록 하나 이상의 가설에 대해 alpha 보다 낮은 p-값을 찾고 유의미한 차이를 잘못 결론 내릴 가능성이 높아집니다.


이 문제를 설명하기 위해 N 가설을 테스트하여 원하는 alpha = 0.05 로 더 많은 고객을 유치하는 여러 새로운 웹 페이지 디자인을 결정하려는 시나리오를 고려하십시오. 새로운 설계 중 기본 설계보다 더 나은 설계가 없다는 것을 알고 있다고 가정해 보겠습니다. 즉, 모든 N 케이스에 대해 귀무가설이 유지됩니다.


그러나 각 경우마다 "제1종" 오류 또는 거짓양성 을 범할 확률은 5%입니다(귀무가설이 참이라고 가정). 즉, 잘못된 긍정을 올바르게 감지하지 못할 확률이 95%입니다. 이론적으로 N 테스트 중 하나 이상의 거짓양성이 발생할 확률 1 - (1 - alpha)^N = 1 - 0.95^N 같습니다. 예를 들어 N = 10 일 때 이 확률은 약 40%로 초기 5%보다 상당히 높습니다.



테스트 가능한 가설의 수를 더 늘리면 어떻게 되나요?



문제는 테스트된 가설의 수를 늘릴수록 더욱 분명해집니다. 소수의 변형과 하위 샘플만 포함된 시나리오에서도 비교 횟수가 빠르게 누적될 수 있습니다. 예를 들어, 모든 사용자에 대해 세 가지 디자인 D1, D2, D3을 비교한 다음 국가 C1의 사용자에 대해 별도로 비교하고 다시 C1 이외의 국가에 있는 사용자에 대해 비교하면 총 9개의 비교 결과가 생성됩니다. 제1종 오류율이 나중에 늘어나는 것을 깨닫지 못한 채 무의식적으로 다중 비교에 참여하기 쉽습니다.


다중 가설 검정을 사용한 연어의 부활

각 주황색 사각형은 뇌 활동이 있는 복셀입니다! 죽은 연어에요!



여러 가설을 테스트할 때 "제1종" 오류를 제어하지 못한 결과를 강조하는 흥미로운 예를 살펴보겠습니다.


2009년에 한 연구자 그룹이 죽은 대서양 연어를 대상으로 fMRI 스캔을 실시한 결과 놀랍게도 마치 살아있는 것처럼 뇌 활동이 발견되었습니다! 이 예상치 못한 결과가 어떻게 발생했는지 이해하려면 fMRI 스캔의 특성을 탐구해야 합니다.


fMRI 스캐너는 각 환자에 대해 수많은 테스트가 수행되는 광범위한 실험 플랫폼 역할을 합니다 . 스캐너는 뇌 활동의 지표로 혈액 산소화의 변화를 모니터링합니다. 연구자들은 일반적으로 특정 관심 영역에 초점을 맞춰 신체 전체를 복셀이라는 작은 큐브로 분할합니다. 각 복셀은 특정 큐브 내에서 뇌 활동의 존재를 테스트하는 가설을 나타냅니다 . 고해상도 스캔에 대한 요구로 인해 fMRI 스캐너는 단일 절차 중에 수천 개의 가설을 평가하게 됩니다.


이 경우 연구자들은 의도적으로 초기 유의 수준 alpha = 0.001 적절하게 수정 하지 않았 으며 죽은 연어에서 뇌 활동이 있는 3개의 복셀을 식별했습니다. 그러나 이 결과는 연어가 실제로 죽었다 는 우리의 이해와 모순됩니다. 유의수준을 보정한 결과 부활 유사 현상이 사라져 제1종 오류 문제 해결의 의의가 있음을 알 수 있다.


단일 실험 내에서 여러 가설을 테스트할 때마다 이 문제를 해결하고 제1종 오류를 제어하는 것이 중요합니다. Bonferroni 보정 과 같은 다양한 통계 기법을 사용하여 다중 가설 테스트와 관련된 과장된 거짓 긍정 비율을 완화할 수 있습니다.


본페로니 교정

Bonferroni 수정은 가설 검정 중 다중 비교 문제를 해결하기 위해 특별히 고안된 통계 절차입니다.

이론

실험 중에 제1종 오류 확률이 alpha 미만으로 유지되도록 N 가설을 테스트해야 한다고 가정해 보겠습니다.


절차의 기본 아이디어는 간단합니다. 즉, 각 대립 가설에 대해 귀무 가설을 기각하는 데 필요한 유의 수준을 줄이는 것입니다 . 적어도 하나의 잘못된 긍정 가능성에 대한 공식을 기억하십니까? 해당 공식에는 전체 확률을 줄이기 위해 줄일 수 있는 alpha 있습니다.


따라서 여러 가설 중에서 하나 이상의 잘못된 긍정 가능성을 낮추려면 각 p-값을 alpha 가 아닌 더 작은 값과 비교할 수 있습니다. 그런데 "더 작은 것"이란 정확히 무엇입니까?


bonferroni_alpha = alpha / N 각 개별 가설의 유의 수준으로 사용하면 제1종 오류의 전체 확률이 alpha 미만으로 유지되는 것으로 나타났습니다.


예를 들어, 10개의 가설( N = 10 )을 검정하고 원하는 유의 수준이 5%( alpha = 0.05 )인 경우 각 개별 p-값을 bonferroni_alpha = alpha / N = 0.05 / 10 = 0.005 와 비교해야 합니다. 따라서 하나 이상의 실제 귀무 가설을 잘못 기각할 확률은 원하는 수준인 0.05를 초과하지 않습니다.


Bonferroni 수정 후 모든 테스트에서 귀무 가설이 유지되면 확률은 정확히 알파와 같습니다.



이 놀라운 기술 은 사건의 결합 확률이 개별 확률의 합보다 작거나 같다는 부울 부등식 으로 인해 작동합니다. 공식적인 수학적 증명이 존재하지만 시각적 설명을 통해 직관적인 이해가 가능합니다.


내 낙서들 :)


따라서 각 개별 가설이 bonferroni_alpha = alpha / N 유의 수준에서 테스트될 때 bonferroni_alpha 확률이 위양성입니다. N 개의 테스트에 대해 "위양성" 이벤트의 합집합 확률은 개별 확률의 합보다 작거나 같습니다. 모든 N 테스트에서 귀무 가설이 유지되는 최악의 시나리오에서는 N * bonferroni_alpha = N * (alpha / N) = alpha 와 같습니다.


관행

앞서 논의한 개념을 추가로 지원하기 위해 Python에서 시뮬레이션을 수행해 보겠습니다. 우리는 결과를 관찰하고 Bonferroni 수정의 효과를 평가할 것입니다.


단일 테스트 내에 10개의 대체 가설이 있는 시나리오를 생각해 보세요. 10가지 경우 모두 귀무가설이 참이라고 가정해 보겠습니다. 귀하는 유의 수준 alpha = 0.05 가 분석에 적합하다는 데 동의합니다. 그러나 부풀려진 제1종 오류를 수정하지 않으면 이론적으로 적어도 하나의 잘못된 긍정 결과가 발생할 가능성이 약 40%에 이를 것으로 예상됩니다. 그리고 Bonferroni 수정을 적용한 후에는 이 확률이 5%를 초과하지 않을 것으로 예상됩니다.


특정 실험의 경우 하나 이상의 거짓 긍정을 얻거나 얻지 못합니다. 이러한 확률은 여러 실험의 규모에서만 볼 수 있습니다. 그런 다음 각 개별 실험의 시뮬레이션을 100번 실행하고 하나 이상의 거짓 양성(유의 수준보다 낮은 p-값)이 포함된 실험 수를 계산해 보겠습니다.


이 시뮬레이션을 실행하고 GitHub의 내 저장소에서 그래프를 생성하기 위한 모든 코드가 포함된 .ipynb 파일을 찾을 수 있습니다 - IgorKhomyanin/blog/bonferroni-and-salmon


 import numpy as np import matplotlib.pyplot as plt # To replicate the results np.random.seed(20000606) # Some hyperparameters too play with N_COMPARISONS = 10 N_EXPERIMENTS = 100 # Sample p-values # As we assume that null hypothesis is true, # the p-value would be distributed uniformly sample = np.random.uniform(0, 1, size=(N_COMPARISONS, N_EXPERIMENTS)) # Probability of type I error we are ready to accept # Probabiltiy of rejecting null hypothesis when it is actually true alpha = 0.05 # Theoretical False Positive Rate # # 1. # Probability that we cocnlude a significant difference for a given comparison # is equal to alpha by definition in our setting of true null hypothesis # Then [(1 - alpha)] is the probability of not rejecting the null hypothesis # # 2. # As experiments are considered independent, the probability of not rejecting # the null hypothesis in [(1 - alpha)]^N # # 3. # Probability that at least one is a false positive is equal to # 1 - (probability from 2.) prob_at_least_one_false_positive = 1 - ((1 - alpha) ** N_COMPARISONS) # Observed False Positive Rate # We conclude that experiment is a false positive when p-value is less than alpha false_positives_cnt = np.sum(np.sum(sample <= alpha, axis=0) > 0) false_positives_share = false_positives_cnt / N_EXPERIMENTS # Bonferroni correction bonferroni_alpha = alpha / N_COMPARISONS bonferroni_false_positive_comparisons_cnt = np.sum(np.sum(sample <= bonferroni_alpha, axis=0) > 0) bonferroni_false_positive_comparisons_share = bonferroni_false_positive_comparisons_cnt / N_EXPERIMENTS print(f'Theoretical False Positive Rate Without Correction: {prob_at_least_one_false_positive:0.4f}') print(f'Observed False Positive Rate Without Correction: {false_positives_share:0.4f} ({false_positives_cnt:0.0f} out of {N_EXPERIMENTS})') print(f'Observed False Positive Rate With Bonferroni Correction: {bonferroni_false_positive_comparisons_share:0.4f} ({bonferroni_false_positive_comparisons_cnt:0.0f} out of {N_EXPERIMENTS})') # Output: # Theoretical False Positive Rate Without Correction: 0.4013 # Observed False Positive Rate Without Correction: 0.4200 (42 out of 100) # Observed False Positive Rate With Bonferroni Correction: 0.0300 (3 out of 100)


결과를 시각화하면 다음과 같습니다.


내 GitHub 저장소에서 이 그래프의 코드를 찾을 수 있습니다.



상단 그림은 각 사각형을 개별 비교(가설 테스트)의 p-값으로 나타냅니다. 사각형이 어두울수록 p-값이 더 높습니다. 모든 경우에 귀무가설이 성립한다는 것을 알고 있으므로 중요한 결과는 모두 거짓양성(false positive)이 됩니다.


p-값이 유의 수준(거의 흰색 사각형으로 표시)보다 낮으면 귀무 가설을 기각하고 위양성 결과를 얻습니다. 가운데 그래프는 수정하지 않은 실험을 나타내고, 하단 그래프는 Bonferroni 수정을 적용한 실험을 나타냅니다. 하나 이상의 거짓 양성이 발생한 실험은 빨간색으로 표시됩니다.


분명히 수정은 효과적으로 이루어졌습니다. 수정 없이 100번의 실험 중 42번의 실험에서 적어도 하나의 거짓 양성이 관찰되었으며 이는 이론적 ~40% 확률과 밀접하게 일치합니다. 그러나 Bonferroni 수정을 사용하면 100개 중 적어도 하나의 잘못된 긍정이 포함된 실험이 3개만 있어 원하는 5% 임계값보다 훨씬 낮게 유지됩니다.


이 시뮬레이션을 통해 우리는 Bonferroni 수정이 위양성 발생을 완화하는 데 미치는 영향을 시각적으로 관찰할 수 있으며 다중 가설 테스트에서 유용성을 더욱 검증할 수 있습니다.


결론

이 기사에서는 다중 가설 검정의 개념을 설명하고 잠재적인 위험을 강조했습니다. A/B 테스트 중 다중 비교를 수행하는 등 여러 가설을 테스트할 때 드물게 "거짓양성" 이벤트가 관찰될 확률이 높아집니다. 이렇게 높아진 확률은 적절하게 해결되지 않으면 우연히 발생할 수 있는 중대한 영향에 대한 잘못된 결론으로 이어질 수 있습니다.


이 문제에 대한 한 가지 가능한 해결책은 각 개별 가설의 유의 수준을 조정하는 Bonferroni 수정입니다 . 이 수정은 부울의 부등식을 활용하여 원하는 임계값에서 전반적인 유의 수준을 제어하여 거짓 긍정의 위험을 줄이는 데 도움이 됩니다.


그러나 모든 솔루션에는 비용이 따른다는 점을 인식하는 것이 중요합니다. Bonferroni 수정을 활용하면 필요한 유의 수준이 감소하여 실험의 검정력에 영향을 미칠 수 있습니다. 이는 동일한 차이를 탐지하기 위해 더 큰 표본 크기나 더 강력한 효과가 필요할 수 있음을 의미합니다. 연구원은 Bonferroni 수정 또는 기타 수정 방법을 구현하기로 결정할 때 이러한 절충안을 신중하게 고려해야 합니다.


이 기사에서 논의된 내용에 관해 질문이나 의견이 있으면 주저하지 말고 공유해 주십시오. 더 나은 이해와 실제 적용을 위해서는 통계 기법에 대한 추가 토론과 탐구에 참여하는 것이 필수적입니다.


참고자료