-
CH 03. 통계적 실험과 유의성검정_2데이터 분석/통계 2024. 6. 11. 09:57
통계적 유의성과 p 값
통계적 유의성
: 실험의 결과가 우연히 일어난 것인지 아니면 우연히 일어날 수 없는 극단적인 것인지를 판단하는 방법
p 값
: 확률모형이 관측된 결과보다 더 극단적인 결과를 생성하는 빈도
p 값에 대한 논란
p 값을 통해 전달하고자 하는 의미 → 결과가 우연에서 비롯될 확률
실제 p 값의 의미 → 랜덤 모델이 주어졌을 때, 그 결과가 관찰된 결과보다 더 극단적일 확률- p 값이 유의미하다고 해서 그것이 기대처럼 바로 '증거'가 되는 것은 아니다.
- p 값의 진짜 의미를 이해하면 '통계적으로 유의미하다'라는 결론에 대한 논리적 뒷받침이 다소 약하다는 것을 알게 된다.
더보기미국통계협회 성명서는 연구자들과 저널 편집자들에게 아래 6가지 원칙을 강조했다.
- p 값은 이 데이터가 특정 통계 모멜과 얼마나 상반되는지 나타낼 수 있다.
- p 값은 연구 가설이 사실일 확률이나, 데이터가 랜덤하게 생성되었을 확률을 측정하는 것이 아니다.
- 과학적 결론, 비즈니스나 정책 결정은 p 값이 특정 임곗값을 통과하는지 여부를 기준으로 해서는 안 된다.
- 적절한 추론을 위해서는 완전한 보고와 투명성이 요구된다.
- p 값 또는 통계적 유의성은 효과의 크기나 결과의 중요성을 의미하지 않는다.
- p 값 그 자체는 모델이나 가설에 대한 증거를 측정하기 위한 좋은 지표가 아니다.
제1종과 제2종 오류
1종 오류
: 어떤 효과가 우연히 발생한 것인데, 그것이 사실이라고 잘못 판단하는 경우
2종 오류
: 어떤 효과가 실제로 있는 것인데, 그것이 우연히 발생한 것이라고 잘못 판단하는 경우
데이터 과학과 p 값
- 데이터 과학자에게 p 값은 관심 있고 유용한 모델의 결과가 일반적인 랜덤 변이의 범위 내에 있는지를 알고 싶을 때 유용한 측정 지표이다.
- p 값을 모든 실험에서 의사결정을 좌우하는 도구로서 간주해서는 안 된다.
- p 값은 일부 통계 또는 머신러닝 모델에서 중간 입력으로 사용되기도 한다. p 값에 따라 어떤 피처를 모델에 포함하거나 제외하기도 한다.
t 검정
- 척도에 상관없이 t 분포를 사용하려면, 표준화된 형태의 검정통계량을 사용해야 한다.
다중검정
- 연구 조사나 데이터 마이닝 프로젝트에서 다중성(다중비교, 많은 변수, 많은 모델 등)은 일부가 우연히 유믜하다는 결론을 내릴 위험을 증가 시킨다.
- 여러 통계 비교(즉, 여러 유의성검정)와 관련된 상황의 경우 통계적 수정(adjustment) 절차가 필요하다.
- 통계학의 수정 절차는 보통 단일 가설검정을 할 때보다 통계적 유의성에 대한 기준을 더 엄격하게 설정함으로써 이를 보완한다. 이러한 수정 절차는 일반적으로 검정 횟수에 따라 '유의수준을 나누는' 방법이다. 이는 각 검정에 대해 더 작은 알파를, 즉 통계적 유의성에 대해 더 엄격한 잣대를 적용한다.
- 이러한 절차 중 하나인 본페로니 수정에서는 간단히 알파를 비교 횟수 n으로 나눈다.
- 여러 그룹의 평균을 비교하는 또 다른 방법은 투키의 HSD라고 부르는 투키의 '정직유의차'다. 이 테스트는 그룹 평균 간의 최대 차이에 적용되며 t 분포를 기반으로 한 벤치마크와 비교한다.
- 예측 모델링의 경우, 교차타당성검사와 홀드아웃 표본 사용을 통해, 실제 우연히 발생한 것을 겉보기에 유효한 것처럼 보이도록 잘못된 모델을 만들 위험을 낮춘다.
- 미리 분류되어 있는 홀드아웃 표본이 없는 다른 절차의 경우, 다음 사항에 의존해야 한다.
- 데이터를 더 여러 번 사용하고 조작할수록 우연이 더 큰 역할을 할 수 있다는 것을 인식해야 한다.
- 재표본추출과 시뮬레이션 결과들을 사용하여 무작위 모델의 기준값을 만들어 관찰된 결과를 비교한다.
자유도
- 표본을 통해 모집단의 분산을 추정하고자 할 때 분모에 n을 사용하면 추정치가 살짝 아래쪽으로 편향될 것이다. 분모에 n-1을 사용하면 추정값에 편향이 발생하지 않는다.
- 완전히 불필요한 예측변수들이 있는 경우 회귀 알고리즘을 사용하기 어렵다. 이것은 범주형 변수를 이진 지표(더미)로 변요인화(factoring)할 때 가장 많이 일어난다. 예를 들어 월~토 지표를 포함하면서 동시에 일요일까지 포함한다면 다중공선성 오차로 인해 회귀를 실패하게 된다.
- 즉 자유도는 회귀를 할 때 다중공선성을 피하기 위해 범주형 변수들을 n-1 지표 혹은 더미 변수로 요인화하는 것의 이유가 된다.
분산분석(ANOVA; ANalysis Of VAriance)
- 여러 그룹 간의 통계적으로 유의미한 차이를 검정하는 통계적 절차
- A/B 검정과 비슷한 절차를 확장하여 그룹 간 전체적인 편차가 우연히 발생할 수 있는 범위 내에 있는지를 평가하기 위해 사용한다.
- ANOVA의 결과 중 유용한 점 중 하나는 그룹 처리, 상호작용 효과, 오차와 관련된 분산의 구성 요소들을 구분하는 데 있다.
- 한 쌍씩 비교하는 횟수가 증가할수록 우연히 일어난 일에 속을 가능성이 커진다. 개별 페이지 간의 가능한 모든 비교에 대해 걱정하는 대신, '모든 페이지가 동일한 기본적인 점착성(페이지에 머무르는 시간)을 갖는가? 그리고 이들 사이의 차이는 우연에 의한 것이고 원래 4개의 페이지에 할당된 세션 시간 역시 무작위로 할당된 것인가?'라는 질문을 다루는 전체적인 총괄검정을 할 수 있다. ANOVA가 바로 이 검정에 사용되는 방법이다.
예제: 네 페이지 간의 점착성의 유의미한 차이
observed_variance = four_sessions.groupby('Page').mean().var()[0] print('Observed means:', four_sessions.groupby('Page').mean().values.ravel()) print('Variance:', observed_variance) # Permutation test example with stickiness def perm_test(df): df = df.copy() df['Time'] = np.random.permutation(df['Time'].values) return df.groupby('Page').mean().var()[0] print(perm_test(four_sessions)) # Observed means: [172.8 182.6 175.6 164.6] # Variance: 55.426666666666655 # 4.066666666666703 random.seed(1) perm_variance = [perm_test(four_sessions) for _ in range(3000)] print('Pr(Prob)', np.mean([var > observed_variance for var in perm_variance])) fig, ax = plt.subplots(figsize=(5, 5)) ax.hist(perm_variance, bins=11, rwidth=0.9) ax.axvline(x = observed_variance, color='black', lw=2) ax.text(60, 200, 'Observed\nvariance', bbox={'facecolor':'white'}) ax.set_xlabel('Variance') ax.set_ylabel('Frequency') plt.tight_layout() plt.show()
- 여전히 많은 순열 검정 값들 중 일부가 관찰된 분산 값보다 크다. 이는 네 페이지 간의 점착성 차이가 통계적으로 유의미하지 않다는 결론을 내리게 한다. 따라서 귀무 가설을 기각할 수 없으며, 네 페이지의 점착성 차이는 우연에 의해 발생한 결과일 수 있다.
F 통계량
- F 통계량은 잔차 오차로 인한 분산과 그룹 평균(처리 효과)의 분산에 대한 비율을 기초로 한다. 이 비율이 높을수록 통계적으로 유의미하다고 할 수 있다.
카이제곱검정
- 주로 횟수 관련 데이터에 사용되며 예상되는 분포에 얼마나 잘 맞는지를 검정한다.
- 통계적 관행에서 카이제곱통계량은 일반적으로 변수 간 독립성에 대한 귀무가설이 타당한지를 평가하기 위해 r x c 분할표를 함께 사용한다.
카이제곱통계량
: 기댓값으로부터 어떤 관찰값까지의 거리를 나타내는 측정치
카이제곱검정: 재표본추출 방법
예제: A, B, C 세 가지 헤드라인 비교
비모수 검정 - 데이터의 분포를 가정하지 않고 재표본추출을 통해 p-값을 계산
# Resampling approach box = [1] * 34 box.extend([0] * 2966) random.shuffle(box) # 카이제곱 통계량을 계산하는 함수 def chi2(observed, expected): pearson_residuals = [] for row, expect in zip(observed, expected): pearson_residuals.append([(observe - expect) ** 2 / expect for observe in row]) # return sum of squares return np.sum(pearson_residuals) # 기대값 계산 expected_clicks = 34 / 3 # 기대되는 클릭 수 (총 34번의 클릭을 세 그룹으로 나눔) expected_noclicks = 1000 - expected_clicks # 각 그룹의 기대되는 '클릭하지 않음'의 수 expected = [expected_clicks, expected_noclicks] # 기대값 배열 chi2observed = chi2(clicks.values, expected) # 관찰된 데이터의 카이제곱 통계량 계산 # 재표본추출 함수 def perm_fun(box): random.shuffle(box) sample_clicks = [sum(box[0:1000]), sum(box[1000:2000]), sum(box[2000:3000])] sample_noclicks = [1000 - n for n in sample_clicks] return chi2([sample_clicks, sample_noclicks], expected) # 재표본추출한 데이터의 카이제곱 통계량 계산 # 2000번의 재표본추출 시뮬레이션을 통해 카이제곱 통계량 계산 perm_chi2 = [perm_fun(box) for _ in range(2000)] # 재표본추출한 p-값 계산: 관찰된 카이제곱 통계량보다 큰 경우의 비율 resampled_p_value = sum(perm_chi2 > chi2observed) / len(perm_chi2) print(f'Observed chi2: {chi2observed:.4f}') print(f'Resampled p-value: {resampled_p_value:.4f}') # Observed chi2: 1.6659 # Resampled p-value: 0.4660
모수 검정 - 데이터가 카이제곱 분포를 따른다는 가정 하에 p-값을 계산
chisq, pvalue, df, expected = stats.chi2_contingency(clicks) print(f'Observed chi2: {chisq:.4f}') print(f'p-value: {pvalue:.4f}') # Observed chi2: 1.6659 # p-value: 0.4348
카이제곱검정: 통계적 이론
- 적절한 표준 카이제곱분포는 자유도에 의해 결정된다.
- 분할표에서 자유도는 행과 열의 수와 관련이 있다.
- 자유도 = (r-1) × (c-1)
- 카이제곱분포는 일반적으로 한쪽으로 기울어져 있고 오른쪽으로 긴 꼬리가 있다.
- 관찰된 통계량이 카이제곱분포의 바깥쪽에 위치할수록 p 값은 낮아진다.
- 카이제곱분포는 재표본 검정의 좋은 근사치를 제공한다.
피셔의 정확검정
- 사건 발생 횟수가 매우 낮을 떄(한 자리 숫자이거나 특히 5개 이하인 경우)에도 재표본추출 방법을 통해 더 정확한 p 값을 얻을 수 있다.
데이터 과학과의 관련성
- 카이제곱검정이나 피셔의 정확검정은 어떤 효과가 실제인지 아닌지 우연인지 알고 싶을 때 사용한다.
- 데이터 과학에서 카이제곱검정, 특히 피셔의 정확검정을 활용하는 대표적인 예로, 웹 실험에 적합한 표본크기를 판별하는 일을 들 수 있다.
멀티암드 밴딧(MAD; Multi-Armed Bandit) 알고리즘
- 고객이 선택할 수 있는 손잡이가 여러 개인 가상의 슬롯머신을 말하며, 손 잡이는 각기 다른 수익을 가져다준다. 다중 처리 실험에 대한 비유라고 생각할 수 있다.
- 실험설계에 대한 전통적인 통계적 접근 방식보다 명시적인 최적화와 좀 더 빠른 의사 결정을 가능하게 하며, 여러 테스트, 특히 웹 테스트를 위해 사용한다.
- 고객은 클릭(상품 판매자 입장에서는 '승리')하거나 클릭하지 않을 것이다. 처음에는 여러 제안이 무작위로 균등하게 표시된다. 그러다가 한 제안이 다른 제안보다 좋은 결과를 내기 시작하면 더 자주 표시('잡아당기기')될 수 있게 한다. 그러나 잡아당기는 비율을 수정하는 알고리즘을 위한 파라미터는 무엇이 되어야 하고, 잡아당기는 비율을 언제 어떻게 수정해야 할까? 앱실론-그리디 알고리즘과 톰슨의 샘플링을 사용할 수 있다.
엡실론-그리디 알고리즘
: 0과 1 사이의 난수를 생성하고, 이 값이 엡실론보다 작으면 무작위로 제안(A 또는 B)을 선택하며, 그렇지 않으면 현재까지 가장 좋은 결과를 보인 제안을 선택한다.
- 엡실론 값이 높을수록 탐험(다양한 옵션을 시도) 확률이 높아지며, 엡실론 값이 낮을수록 현재 최적의 옵션을 선택할 확률이 높아진다.
- 엡실론은 이 알고리즘을 제어하는 단일 파라미터이다. 엡실론이 1이면 간단한 표준 A/B 검정(매 실험마다 A와 B를 무작위로 할당)을 하게 되는 셈이다. 엡실론이 0이라면 완전한 탐욕 알고리즘이 되어버린다. 즉 당장 최상의 즉각적인 옵션을 선택한다.
톰슨의 샘플링
: 각 단계마다 확률 분포(베타 분포)를 사용하여 샘플을 추출하고, 이 샘플을 기반으로 최적의 옵션을 선택한다.
- 이는 각 옵션의 성공과 실패를 기반으로 확률을 갱신하여 점점 더 좋은 선택을 할 수 있게 한다.
검정력과 표본크기
효과크기(effect size)
: '클릭률 20% 향상'과 같이 통계 검정을 통해 판단할 수 있는 효과의 최소 크기
검정력
: 주어진 표본크기로 주어진 효과크기를 알아낼 확률
표본크기
- 검정력 계산의 주된 용도는 표본크기가 어느 정도 필요한가를 추정하는 것이다.
- 검정력 혹은 필요한 표본크기의 계산과 관련한 다음 4가지 중요한 요소들이 있다.
- 표본크기
- 탐지하고자 하는 효과크기
- 가설검정을 위한 유의수준
- 검정력
effect_size = sm.stats.proportion_effectsize(0.0121, 0.011) # 비율 간의 효과 크기 계산 analysis = sm.stats.TTestIndPower() # 독립 표본 t-검정에 대한 검정력 분석 # 원하는 검정력(power)을 달성하기 위해 필요한 표본 크기 계산 result = analysis.solve_power(effect_size=effect_size, alpha=0.05, power=0.8, alternative='larger') print('Sample Size: %.3f' % result) # Sample Size: 116602.391
'데이터 분석 > 통계' 카테고리의 다른 글
CH 05. 분류 (0) 2024.06.25 CH 04. 회귀와 예측 (1) 2024.06.20 CH 03. 통계적 실험과 유의성검정_1 (0) 2024.06.10 CH 02. 데이터와 표본분포 (1) 2024.06.09 CH 01. 데이터 탐색적 분석_시각화 (0) 2024.06.09