본문 바로가기

Statistics/데이터 과학을 위한 통계

[Practical Statistics for Data Scientists] 3 - 통계적 실험과 유의성 검정

728x90
반응형

  지난 글에서는 데이터와 표본분포에 대해 공부하였다. 이번 포스트에서는 'Practical Statistics for Data Scientists' 교재의 109~164페이지의 통계적 실험과 유의성 검정에 대한 내용을 다룰 것이다. 코드 또한 필자의 깃허브에서 참조했으니 궁금한 독자들은 본문의 링크를 이용하길 바란다.

 

<Practical Statistics for Data Scientists> 도서 페이지 : https://bit.ly/3zSetGu


 

 

Index

     

    3장 통계적 실험과 유의성 검정

    • 추론 inference : 실험 결과를 더 큰 과정 또는 모집단에 적용하려는 의도 반영
    • 통계 추론 과정 : 가설 수립 - 실험 설계 - 데이터 수집 - 추론 및 결론 도출

    1. A/B 검정

    • A/B 검정 : 두 비교대상 중 한쪽의 우월성을 입증하고자 실험군을 두 그룹으로 나눠 진행하는 실험.
      • 대조군 : 두 대상 중 하나는 기존 방법 or 아무 처리도 하지 않는 것.
      • 대개 새 방법을 적용한 것이 대조군보다 낫다고 전제
    • 용어 정리
      • 처리군 treatment group : 특정 방법이 적용된 집단.
    • 결과를 쉽게 측정할 수 있어 웹 디자인과 마케팅에서 활용됨.

    2. 가설 검정 (유의성 검정)

    • 용어 정리
      • 귀무가설 : 우연 때문이라는 가설 (유의 : 영가설)
      • 대립가설 : 귀무가설과 대조 (증명코자하는 가설)
      • 일원검정 : 한 방향으로만 우연히 일어날 확률을 계산하는 가설 검정
    • 귀무가설 
      • '실제로 우연히 발생했다 해도 그것이 흔하지 않다면 뭔가 의미가 있을 것이라 해석하는 경향이 있다.'는 가정
      • 귀무가설이 틀렸다는 것을 입증해 A, B 그룹의 차이가 우연이 아님을 입증하길 원함.
    • 대립가설 : 귀무가설과 대립가설로 모든 가능성을 설명할 수 있어야 함.
    • 일원/이원 가설 검정
      • 일원 가설 검정 : 기본값이 지정된 상황에서 유용. (B가 A보다 낫다)
      • 이원 가설 검정 : 어느 쪽으로도 속지 않도록. (A는 B와 다르고 크거나 작을 수 있음)
    • 가설검정 : 귀무가설이 사실이라는 전제 하에 영모형 null model을 생성하고 관찰한 효과가 합리적 결과인지 검증하는 것.

    3. 재표본추출

    • 재표본추출 : 랜덤한 변동성을 살펴보자는 목표에서 비롯돼, 관찰된 데이터 값에서 표본을 반복적으로 추출하는 것. 몇몇 머신러닝 모델의 정확성 평가 및 향상에 사용됨 (배깅)
    • 부트스트랩 (추정의 신뢰성 평가)과 순열검정이 주요 유형.
    • 용어 정리
      • 순열검정 permutation test : 복수의 표본을 결합해 관측값을 무작위로 (혹은 전부로) 재표본으로 추출하는 과정 (유의어 : 임의화검정, 임의순열검정)
      • 재표본추출 : 관측 데이터로부터 반복해 표본추출하는 과정
    • 순열검정
      • 순서를 바꾸다 permute : 어떤 값들의 집합에서 값들의 순서를 변경한다는 의미
      • 절차
        • 1) 여러 그룹의 결과를 단일 데이터 집합으로 합침.
        • 2) 합쳐진 데이터를 섞고, 그룹 A와 같은 크기의 표본을 무작위로 (비복원) 추출
        • 3) 나머지 데이터에서 그룹 B와 같은 크기의 샘플을 무작위로 (비복원) 추출
        • 4) C, D 그룹에 대해서도 동일 작업을 수행하는 것으로 재표본 수집 완료
        • 5) 재표본의 통계량을 계산 및 기록.
        • 6) 상기 단계 R번 반복하여 검정통계량의 순열분포 획득.
      • 관찰된 차이가 순열로 보이는 차이의 집합 안에 있다면, 우연히 일어날 수 있는 범위 안에 있다고 해석. 바깥에 있어야 우연이 아닌 것, 즉, 통계적으로 유의미.
    • R 코드 (pp.121-125)
      • 페이지 B에서 오랜 시간 머무름.
      • 평균 35.67초 더 긺.
      • 과연 이 결과가 우연일까? 순열검정으로 확인!
      • 수직선은 관측된 차이를 뜻함.
    > library(ggplot2)
    > setwd('C:/Users/phc07/Desktop/dataHC/01_bigdata/04_PracticalStatistics/Practical_Statistics_DS')
    > route <- file.path(getwd())
    > session <- read.csv(file.path(route, 'data', 'web_page_data.csv'))
    > session[,2] <- session[,2] * 100
    > ggplot(session, aes(x = Page, y = Time)) + 
    +   geom_boxplot()

    > mean_a <- mean(session[session['Page'] == 'Page A', 'Time'])
    > mean_b <- mean(session[session['Page'] == 'Page B', 'Time'])
    > mean_b - mean_a
    [1] 35.66667

     

    > ## Permutation test
    > per <- function(x, A, B)
    + {
    +   n<- A + B
    +   idx_b <- sample(1:n, B)
    +   idx_a <- setdiff(1:n, idx_b)
    +   mean_diff <- mean(x[idx_b]) - mean(x[idx_a])
    +   return(mean_diff)
    + }
    > perm <- rep(0,1000) 
    > for (i in 1:1000){
    +   perm[i] = per(session[,'Time'], 21, 15)
    + }
    > hist(perm, xlab = 'Sessiong Time Diff')
    > abline(v = mean_b - mean_a)

     

     

    • 전체 및 부트스트랩 순열검정
      • 상기 랜덤 셔플링 과정을 임의순열검정 random permutation test임의화검정 randomization test라고 칭함.
      • 이외에 전체순열검정, 부트스트랩 순열검정이라는 유형이 존재.
      • 1) 전체순열검정 exhaustive permutation test
        • 데이터를 무작위 셔플&분할해 모든 가능한 조합을 탐색.
        • 샘플이 작을 때 효율적 (모든 조합을 탐색하기 때문)
        • 셔플링을 거듭할수록 임의순열검정의 결과는 전체순열검정의 그것과 근접.
        • 정확검정exact test라고 불림. (영모형보다 정확한 결론을 보장하기 때문.)
      • 2) 부트스트랩 순열검정
        • 무작위 순열검정 2, 3단계의 비복원추출을 복원추출로 진행.
        • 개체 선택과 할당의 임의성을 확보.
    • 결론
      • 순열검정은 랜덤한 변화가 어떤 영향을 미치는지 파악하고자 사용되는 휴리스틱한 기법. (*휴리스틱 : 직관적인, 어림짐작의) → 해석과 설명이 용이.
      • 재표본추출의 장점 
        • 1) 숫자형, 이진형 데이터 모두 가능
        • 2) 샘플크기가 달라도 됨.
        • 3) 정규분포가 아니어도 됨.
    • Point!
      • 순열검정으로 복수의 표본을 결합하고 섞은 다음, 섞인 값을 재표본추출하여 표본통계량을 계산. 이 과정을 반복해 재표본추출한 통계를 도표로!
      • 관측된 통계량과 재표본추출한 통계라을 비교해 샘플 간의 차이라 우연에서 비롯됐는지 확인할 수 있음.

     

    반응형

     


      지금까지 빅데이터분석기사 필기를 준비하고자 R로 진행해왔으나 실기는 python으로 임할 생각이기에 코딩을 python으로 하려고 합니다. 독자 여러분의 양해를 구합니다. (221011)

    4. 통계적 유의성과 p값

    • 통계적 유의성 : 본인의 실험 혹은 연구 결과가 우연으로 일어났는지 여부를 판단하는 방법. 우연히 일어날 가능성의 바깥에 속한다면 이를 통계적으로 유의하다고 표현.
    • 키워드
      •  p 값 p-value : 귀무가설을 구체화한 기회 모델이 주어졌을 때 관측된 값처럼 특이하거나 극단적인 결과를 얻을 확률.
      • 알파 : 실제 결과가 통계적으로 의미있다고 여겨지기 위해 우연에 의한 결과가 넘어야 하는 비정상적인 가능성의 임계확률.
      • 제1종 오류 : 우연에 의한 효과를 실제 효과로 잘못 판단하는 것
      • 제2종 오류 : 실제 효과를 우연으로 잘못 판단하는 것.

     

    결과 A B
    전환  200 182
    전환 X 23,539 22,406
    • A는 B보다 5%가량 우수.
      • 200/(23539+200) VS 182/(22406+182)
    • 전환율이 너무 낮아 우연에 의한 차이인지 규명 필요. (귀무가설 : 두 전환율 사이에 차이가 없다.)

     

    ※ 코드 참조 : https://bit.ly/3ViSyAN

    - for _ in range(1000) 에서 _ 의 의미? 참고

    random.seed(1)
    
    obs_pct_diff = 100 * (200 / 23739 - 182 / 22588)
    print(f'Observed difference: {obs_pct_diff:.4f}%')
    
    conversion = [0] * 45945
    conversion.extend([1] * 382)
    conversion = pd.Series(conversion)
    
    perm_diffs = [100 * perm_fun(conversion, 23739, 22588) 
                  for _ in range(1000)]
    
    fig, ax = plt.subplots(figsize=(5, 5))
    ax.hist(perm_diffs, bins=11, rwidth=0.9)
    ax.axvline(x=obs_pct_diff, color='black', lw=2)
    ax.text(0.06, 200, 'Observed\ndifference', bbox={'facecolor':'white'})
    ax.set_xlabel('Conversion rate (percent)')
    ax.set_ylabel('Frequency')
    
    plt.tight_layout()
    plt.show()

    • p 값
      • 순열검정으로 0.332, 정규근사법으로 0.3498이라는 p 값 확인.
      • 가설이 이항분포를 따르므로 p 값 근사 가능.

     

    • 유의수준
      • 무작위 모델이 주어졌을 때 극단적 결과가 나올 확률은 어느 정도인가? → 랜덤 모델의 적합도를 역추적.
      • 많은 연구자들이 p 값이 무엇인지도 모르면서 논문이 통과되도록 유의미한 값이 나올 때까지 가설검정 반복. (신랄하다...)
      • p값으로 전달코자 하는 것 : 결과가 우연에서 비롯될 확률
      • 실제 p값 : 무작위 모델이 주어졌을 때 극단적 결과가 나올 확률
      • 2016년 3월, 미국통계협회의 성명서
        • 1) p값은 이 데이터가 특정 통계 모델과 얼마나 상반되는지 나타낼 수 있음.
        • 2) p값은 연구가설이 참일 확률 혹은 데이터가 랜덤하게 생성되었을 확률을 측정하는 것이 아님.
        • 3) 과학적 결론, 비즈니스, 정책 결정은 p값이 특정 임곗값을 통과하는 여부를 기준으로 정해서는 안됨.
        • 4) 적절한 추론을 위해 완전한 보고와 투명성이 요구됨.
        • 5) p값 혹은 통계적 유의성은 효과의 크기나 결과의 중요성을 뜻하지 아니함.
        • 6) p값 그 자체는 모델 또는 가설에 대한 증거를 측정하기 위한 좋은 지표가 아님.
    • 1종 오류 & 2종 오류
      • 유의성검정(가설검정)의 기본 기능은 우연에 현혹되지 않도록 하는 것. → 1종 오류를 최소화하도록 가설 설계.
      • 2종 오류는 오류라기보다 표본크기가 너무 작아 효과를 알 수 없음을 의미. p값이 통계적 유의성에 미치지 못하는 경우 (ex. 5% 초과), 효과가 아직 입증되지 않음을 뜻함. → 표본이 커질수록 p값 감소.
    • Point!
      • 유의성검정은 관찰값이 귀무가설 모형에 대한 랜덤 변이의 범위 안에 있는지 판단하는 데 사용.
      • p값 : 귀무가설에서 비롯된 결과가 관찰된 결과만큼 극단적으로 나올 확률.
      • 유의수준 (알파) : 귀무가설 모델에서 '비정상'이라 판단할 임곗값.

    5. t 검정

    • 윌리엄 고셋이 단일 표본평균의 분포를 근사하고자 만듦,
    • 키워드
      • 검정통계량 test statistic : 관심의 차이 또는 효과에 대한 측정 지표
      • t 통계량 : 평균처럼 표준화된 형태의 일반적 검정통계량
      • t 분포 : 관측된 t 통계량을 비교할 수 있는 기준분포 
    • python의 scipy.stats.ttest_ind 함수로 t-test 가능
      • 대립가설 : 페이지 A의 평균 세션 시간이 페이지 B의 평균보다 작음.
    ttest = stats.ttest_ind(session_times[session_times.Page == 'Page A'].Time, 
                          session_times[session_times.Page == 'Page B'].Time,
                          equal_var=False)
    print(f'p-value for single sided test: {ttest.pvalue / 2:.4f}')

    t test 결과

    6. 다중검정

    데이터를 충분히 괴롭히다 보면 언젠가 뭐든 털어놓을 것이 있다.

     

    • 20개의 예측변수와 1개의 결과변수를 무작위 생성
    • 유의수준 0.05로 20번의 유의성검정을 실시하면 적어도 하나의 예측변수에서 통계적으로 유의미한 결과를 초래. (실수)☞ 1종 오류
    • 유의미한 결과가 아닐 확률 : 1 - 0.05 = 0.95
    • 20번 모두 무의미한 결과가 나올 확률 : 0.95^20 = 0.36 이므로 최소 한 번은 유의미할 확률이 0.64 ☞ 알파 인플레이션

    • 알파 인플레이션은 데이터마이닝에서 오버피팅 (모델이 노이즈까지 학습)을 야기할 수 있음.
    • 추가되는 변수와 모델이 많을수록 우연으로 유의미하다고 판단할 확률도 높아짐.
      • 따라서 지도학습에서는 홀드아웃 세트를 사용.
    • 키워드!
      • 1종 오류 : 어떤 결과가 통계적으로 유의미하다고 잘못 판단할 확률.
      • 거짓발견비율 FDR : 다중검정에서 1종 오류가 발생하는 비율
      • 알파 인플레이션 : 1종 오류를 만들 확률인 알파가 많은 테스트를 거듭할수록 증가하는 다중검정 현상.
      • p 값 조정 : 동일한 데이터로 다중검정을 수행하는 경우에 필요
    • 통계학의 수정 : 단일 가설검정보다 통계적 유의성에 대한 기준을 엄격하게!
      • 일반적으로 검정횟수에 따라 유의수준을 나눔.
      • 본페로니 수정 Bonferroni adjustment : 알파를 비교 횟수 n으로 나눔.
      • 투키의 정직유의차 HSD : 복수 집단의 평균을 비교할 때 쓰임.

    7. 자유도

    • 표본 데이터로 계산된 통계량에 적용되고 변화가 가능한 값들의 개수를 표현. (ex.10개의 값으로 이뤄진 표본에서 평균을 안다고 가정했을 때, 9개의 자유도가 존재. → 10번째는 계산 가능하고, 자유롭게 변경할 수 없음.)
    • 자유도 모수는 분포의 모양에 영향을 미침.
    • 데이터 과학의 유의성 검정 측면에서는 자유도가 중요치는 않음. but 회귀에서 요인변수를 사용할 땐 중요.
      • 범주형 변수를 더미변수화할 때, 빈번.
      • 일주일은 7일인데 요일을 지정 시, 자유도는 6개.
      • 모든 요일을 포함하면 다중공선성 오차로 회귀 실패.
    • Point!
      • 자유도는 검정통계량을 표준화하는 계산의 일부로, 이로써 기준분포(t분포, F분포 등)와 비교 가능
      • 회귀 시, 범주형 변수를 n-1 지표 혹은 더미변수로 요인화하는 이유.

    8. 분산분석

    • ANOVA : 여러 그룹 간에 통계적으로 유의미한 차이를 검정하는 통계적 절차 
    • Keywords!
      • 쌍별 비교 pairwise comparison : 여러 집단 중 두 집단 간의 가설검정
      • 총괄검정 omnibus test : 여러 그룹 평균들의 전체 분산에 대한 단일 가설검정
      • 분산분해 : 구성 요소의 분리. (ex - 전체 평균, 잔차 오차 등으로부터 개별값에 대한 기여)
      • F 통계량 : 그룹 평균 간 차이가 랜덤 모델로 예상되는 것으로부터 이탈하는 정도를 나타내는 표준화된 통계량
      • SS : 특정 평균으로부터의 편차 제곱합
    • 4개의 웹페이지 비교
      • 각각은 꽤 상이한 차이를 보임
      • 한 쌍씩 비교하면 횟수가 증가할수록 우연에 속을 가능성이 높아짐. 
      • ☞ 모든 페이지가 동일한 점착성을 지니는지? 이들의 차이는 우연이고, 페이지 할당 세션 시간 역시 랜덤? 과 같은 질문을 다루는 전체적인 총괄검정을 실시
    four_sessions = pd.read_csv(FOUR_SESSIONS_CSV)
    
    ax = four_sessions.boxplot(by='Page', column='Time', figsize=(4, 4))
    ax.set_xlabel('Page')
    ax.set_ylabel('Time (in seconds)')
    plt.suptitle('')
    plt.title('')
    plt.tight_layout()
    plt.show()

    • 순열검정
      • 재표본추출한 분산이 고나찰된 변화를 초과한 시간 → p-value
      • p-value가 0.07이라면, 7%의 확률로 실제 관측된 값과 다른 경우가 우연히 발생 (임곗값인 5%보다 크므로 귀무가설을 채택함.)
      • python은 R과 달리 순열검정을 지원하는 함수가 없어 직접 코딩해야되나? 
    observed_variance = four_sessions.groupby('Page').mean().var()[0]
    print('관측 평균값:', four_sessions.groupby('Page').mean().values.ravel())
    print('분산:', round(observed_variance, 3))
    
    # 순열검정
    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))

    • F 통계량
      • 두 집단의 평균비교를 위해 순열검정 대신 t 검정을 쓸 수 있는 것처럼, F 통계량을 사용하는 ANOVA 통계검정도 존재.
      • F 통계량은 잔차 오차로 인한 분산과 그룹 평균 (처리 효과)의 분산에 대한 비율에 기반.→ 비율이 높을수록 유의미.
      • 데이터가 정규성을 띠면, 해당 통계량은 특정 분포를 따름.
      • 다행히 python에서도 statsmodel 패키지로 ANOVA 구현 가능.
      • sum_sq : 제곱합, mean_sq : 평균제곱편차
      • F통계량 = MS (처리) / MS (오차)
    model = smf.ols('Time ~ Page', data=four_sessions).fit()
                    
    anv_table = sm.stats.anova_lm(model)
    print(anv_table)

     

    • 이원 분산분석
      • 위에서는 Page라는 요소에 대해서만 분석
      • 이번에는 주말과 평일이라는 두 요소를 분석한다고 가정.
      • 총평균 효과와 처리효과를 확인하고, 각 집단의 주말과 평일 데이터를 분리. 그 후, 부분집합의 평균과 처리 평균 사이의 차이를 탐색.
    • Points!
      • ANOVA : 여러 그룹의 실험결과 분석을 위한 통계적 절차
      • A/B test와 유사한 절차를 확장해 그룹 간 전체 편차가 우연히 생기는 범위 내에 있는지 평가하고자 사용
      • 그룹 처리, 상호작용 효과, 오차에 관한 분산의 구성요소 구분에서 강점을 드러냄.

    9. 카이제곱 검정

    • 횟수 관련 데이터에 주로 사용. 예상 분포와 얼마나 적합한지 검정.
    • 관습적으로 변수의 독립성에 대한 귀무가설의 타당성 평가를 위해 r x c 분할표 (r = row, c = column) 함께 사용.
    • 칼 피어슨이 1900년에 개발.
    • Keywords!
      • 카이제곱 통계량 : 기댓값으로부터 어떤 관찰값까지의 거리를 나타내는 측정치
      • 기댓값 : 특정 가정 (대개 귀무가설)으로 데이터가 발생할 때, 이에 대한 기대 정도
    • 재표본추출방법
      • 클릭률이 우연히 발생할 수 있는 것보다 유의미하게 높은지 검정
      • 클릭의 기대 분포 필요
      • 귀무가설 : 각 헤드라인이 모두 동일한 클릭률을 가짐.
      • 피어슨 잔차 : R = 관측값 - 기대값 / 기댓값의 제곱근
      • 순열검정 코드는 과정을 이해하지 못한 자는 쓰지 못할 듯하다 ㅠㅠ

    원 데이터
    기댓값 (모두 같은 클릭률이라는 가정)

    # 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
    expected_noclicks = 1000 - expected_clicks
    expected = [34 / 3, 1000 - 34 / 3]
    chi2observed = chi2(clicks.values, expected)
    
    def perm_fun(box):
        sample_clicks = [sum(random.sample(box, 1000)),
                         sum(random.sample(box, 1000)),
                         sum(random.sample(box, 1000))]
        sample_noclicks = [1000 - n for n in sample_clicks]
        return chi2([sample_clicks, sample_noclicks], expected)
    
    perm_chi2 = [perm_fun(box) for _ in range(2000)]
    
    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}')

    • 카이제곱 검정 : 통계적 이론
      • 점근적 asymptotic 통계 이론은 카이제곱 통계량의 분포가 카이제곱분포로 근사화될 수 있음을 나타냄.
      • 적절한 표준 카이제곱분포는 자유도로 결정 → d.f = (r-1)(c-1)
      • 보통 오른쪽으로 긴꼬리를 가지고, 관찰 통계량이 분포의 바깥에 있을수록 p-value 작다.
      • 하지만, 통계에 약한 데이터 분석가들을 위해 python과 R은 엄청난 혜택을 준다..!
      • p-value가 재표본추출로 얻은 것보다 작은데 이는 근사치이기 때문.

    카이제곱분포

    chisq, pvalue, df, expected = stats.chi2_contingency(clicks)
    print(f'Observed chi2: {chisq:.4f}')
    print(f'p-value: {pvalue:.4f}')

     

    • 피셔의 정확검정 
      • 카이제곱분포는 재표본검정의 좋은 근사치 제공 (빈도가 낮은 경우 (5개 이하) 제외)
      • 예외적인 경우에도 재표본추출로 정확한 p 값 확보 가능
      • python은 쉽게 구현할 방법 없음.
    • 데이터 과학과의 연관성
      • 카이제곱 검정, 피셔의 정확검정은 어떤 효과가 실제인지 우연인지 확인하고자 사용.
      • 고전적 통계 응용 분야에서 카이제곱검정은 통계적 유의성을 결정하는 역할이고, 연구 혹은 실험이 논문에 올라가기 전 수행해야 함. ↔ 데이터 과학에서는 통계적 유의성이 아닌 최적의 처리 방법을 찾는 것이 목표라 멀티암드 밴딧이 더 적합.

    10. 멀티암드 밴딧 알고리즘 

    • 전통적 통계 방식보다 명시적인 최적화와 보다 빠른 의사결정이 가능하고, 주로 웹테스트에서 활용.
    • Keywords!
      • 멀티암드 밴딧 MAB : 손잡이가 여러 개인 가상의 슬롯머신. 각 손잡이는 제각기 다른 보상을 줌. 다중처리 실험에 대한 비유라고 보면 됨.
      • 손잡이 : 실험에서 특정 하나의 처리
    • 가장 높은 승률의 선택지를 취하나 다른 선택지도 테스트하여 최대의 수익을 거두고자 함.
    • 잡아당기는 비율을 수정하는 알고리즘
      • 엡실론-그리디 알고리즘
        • 1) 0~1 사이의 균등분포의 난수 생성
        • 2) 난수가 0과 엡실론 (0과 1사이의 값) 사이에 있으면 50대50 확률로 동전 뒤집기 실시 (앞면 - A, 뒷면 - B)
        • 3) 숫자가 엡실론보다 크다면 가장 좋은 보상을 취한 선택지를 취함.
        • 엡실론이 0 → 탐욕 알고리즘, 즉 최상의 즉각적 옵션 (지역 최적) 선택.
      • 톰슨의 샘플링
        • 베이즈 방식 사용
        • 베타 분포로 수익의 일부 사전분포 가정
    • 3가지 이상의 처리를 효율ㅈㄱ으로 다루고 최고를 위한 최적의 선택의 하도록 도움.

    11. 검정력과 표본크기

    • Keywords!
      • 효과크기 : 통계검정으로 판단할 수 있는 효과의 최소 크기
      • 검정력 : 주어진 표본크기로 효과크기를 알아낼 확률 
      • 유의수준 : 검증 시 사용할 통계 유의 수준
      • ex) 20타석에서 3할 타자와 2할타자를 구분할 확률 0.75라 가정.
        • 효과크기 : 1할
        • n = 20
        • 75%의 검정력
    • 표본크기
      • 검정력 계산의 주목적 : 표본크기의 필요량 추정.
      • 표본크기, 알아내고자 하는 효과크기, 유의수준, 검정력 중 3개를 정하면 나머지 하나 추정 가능.
    effect_size = sm.stats.proportion_effectsize(0.0121, 0.011) # 효과크기 계산
    analysis = sm.stats.TTestIndPower() # 표본크기 계산
    result = analysis.solve_power(effect_size=effect_size, 
                                  alpha=0.05, power=0.8, alternative='larger')
    print('표본크기: %.3f' % result)

    • Points!
      • 통계검정을 진행하기 전, 포뵨크기의 필요량을 미리 고려해야 함.
      • 확인하고자 하는 효과의 최소크기, 검정력 (효과크기를 알아내기 위해 요구되는 확률), 유의수준을 지정해야 함.

      상당히 어렵다... 앞으로 계속할지, 기초 개념을 다지고 진행할지 고민된다. 

      이 챕터의 핵심은 기존의 통계 체계에서 번거로웠 것이 데이터 과학에서는 쉽게 분석할 수 있도록 대체되었거나 필요가 없어졌다는 것이 아닐까. 그럼에도 랜덤 변이가 사람을 혼란스럽게 한다는 사실을 이해하는 것만은 중요하다고 맺음말로 강조하고 있으니 유념하자. 

    728x90
    반응형