본문 바로가기
학습노트/통계

[통계학습] 통계적실험과 유의검정(1)

by kime2 2024. 5. 22.

범위: 3.1 A/B 검정 ~ 3.3 재표본추출

 

3.1 A/B 검정

 

1) 가설을 세운다

2) 실험을 설계한다

3) 데이터를 수집한다

4) 추론 및 결론을 도출한다

 

두가지 처리방법, 제품, 절차 중 어느쪽이 다른 쪽보다 더 우월하다는 것을 입증하기 위해 실험군을 두 그룹으로 나누어 진행하는 실험

-> 원하는 결과의 방향으로 도출하기 위해 '원인'을 추가하거나

-> 결과가 발생했을 때 해당 변화의 '원인'이 예상한 것과 동일한지 판단하기 위해

https://www.beusable.net/blog/?p=2854

처리: 어떤 대상에 주어지는 특별한 환경이나 조건

처리군 : 특정 처리에 노출된 대상들의 집단

대조군 : 어떤 처리도 하지 않은 대상들의 집단

임의화(랜덤화) : 처리를 적용할 대상을 임의로 결정하는 과정

대상(피실험자) : 처리를 적용할 개체 대상

검정통계량 : 처리 효과를 측정하기 위한 지표

 

1) 예시

종자 발아가 어디에서 더 잘되는지 알아보기 위해 두 가지 토양처리를 검정한다

암을 더 효과적으로 억제하는 두 가지 치료법을 검정한다

두 가지 가격을 검정하여 더 많은 순수익을 산출하는 쪽을 결정한다

두 개의 인터넷 뉴스 제목을 검정하여 더 많은 클릭을 생성하는 쪽을 결정한다

두 개의 인터넷 광고를 검정하여 어느 것이 더 높은 전환율을 얻는지 판단한다

 

2) 대조군의 필요성

대조군이 없으면 '모든 다른 것들을 동일하다' 라는 보장이 어려움

또한 어떠한 처리로 인한 것인지(또는 우연이지) 확인이 어려움

 

🎈 주요개념

  • 연구 대상을 두 가지 이상의 그룹 중 하나에 할당한다. 여기서 서로 다른 처리 조건을 제외한 나머지 조거들은 정확히 동일하게 처리된다
  • 이상적으로, 대상들은 그룹에 무작로 배정된다

3.2 가설검정

연구자가 랜덤하게 우연히 일어날 일에 속지 않도록 보호하기 위한 방법으로 개발

-> 그룹A와 B사이에서 보이는 차이가 우연에 의한 것인지를 평가하기 위해 A/B검정이나 더 나아가 그 외 여러 무작위 실험을 포함하는 분석

 

귀무가설(null hypothesis) : 우연때문이라는 가설

대립가설(alternative  hypothesis) : 귀무가설과의 대조(증명하고자 하는 가설)

일원검정(one-way test) : 한 방향으로만 우연히 일어날 확률을 계산하는 가설검정

이원검정(two-way test) : 양방향으로 우연히 일어날 확률을 계산하는 가설검정

 

1) 귀무가설/대립가설

목적: 유연이 아님(귀무가설이 틀렸음)을 입증해서 A그룹과 B그룹간의 차이가 우연이 아니라는 것을 증명

방법: 재표본추출, 순열검정

-> 귀무가설과 대립가설이 실험의 모든 가능성을 설명할 수 있어야 함

 

2) 일원/이원 가설검정

(1) 일원 가설검정

한 방향으로만 우연히 일어날 확률을 계산하는 가설

귀무가설 : 집단 A의 평균은 집단 B의 평균은 같다

대립가설 : 집단 A의 평균은 집단 B의 평균보다 작다(좌측검정)

 

(2) 이원 가설검정

양방향으로 우연히 일어난 확률을 계산하는 가설

귀무가설 : 집단 A의 평균은 집단 B의 평균은 같다

대립가설 : 집단 A의 평균은 집단 B의 평균과 같지 않다

 

🎈 주요개념

  • 귀무가설은 우리가 관찰한 어떤 효과가 특별한 것이 아니고 우연에 의해 발생한 것이라는 개념을 구체화한 일정의 논리적 구조이다
  • 가설검정은 귀무가설이 사실이라고 가정하고 영모형/확률모형을 생성하여 관찰한 효과가 해당 모델로부터 합리적으로 나올 수 있는 결과인지 검증하는 것이다

 

3.3 재표본추출

재표본추출: 랜덤한 변동성을 알아보고자 관측 데이터로부터 반복해서 표본추출하는 과정, 

순열검정 permutation test : 두 개 이상의 표본을 함께 결합해서 관측값들을 무작위로 비복원하여 재표본추출하는 과정(임의화검정, 임의순열검정, 정확검정)

복원/비복원 : 표본을 추출할 때, 이미 한 번 뽑은 데이터를 다음번 추출을 위해 다시 제자리에 돌려 놓거나/다음 추출을 제외하는 표본추출 방법

 

1) 순열검정

  1. 기존 데이터의 검정통계량을 구한다-> observed test statistics = D
  2. 그룹A와 그룹 B의 결과를 합친다
    -> 그룹A와 그룹B가 유의미한 차이가 없다는 귀무가설을 논리적으로 구체화 하는 것
  3. 결합된 데이터를 섞고 그룹A와 동일한 크기(동일한 개수)의 표본을 무작위로 비복원추출한다
  4. 나머지 데이터에서 그룹B와 동일한 크기의 표본을 무작위로 비복원추출한다-> permuted dataset
  5. 원래 샘플에 대한 통계량과 무관하게 추출한 표본에 대한 통계량(차이)을 기록한다 -> permuted test statistics
  6. 앞선 단계들을 반복하여 검정통계량의 순열분포를 얻는다

-> 관찰된 차이가 순열과정에서 얻은 집합안에 잘 들어가 있다면 우연

-> 관찰된 차이가 대부분의 순열 분포 바깥에 있다면 통계적으로 유의미함

 

🎈 통계적 유의미

통계적으로 유의미하다 => 어떤 실험결과가 확률적으로 봐서 단순한 우연이라고 생각되지 않을 정도로 의미가 있다

통계적으로 유의미하지 않다 => 실험결과가 단순한 우연일 수도 있다

 

2) 웹 점착성

웹점착성 : 사용자가 웹사이트에 얼마나 오래 머무르고 지속적으로 방문하는지를 나타내는 지표

-> 웹사이트의 디자인, 콘텐츠, 사용성 등이 웹점착성에 영향을 미친다

 

대리변수 proxy variable : 참된 관심변수를 대신하는 변수로 관심변수를 직접 얻을 수 없거나, 측정하는 데 많은 비용이나 시간이 소요될 경우 이를 대체하는 용도

예) 기후연구에서 고대 빙하 중심부의 산화 함량 -> 당시 온도

 

<주중/주말 tip평균의 차이>

# A/B 테스트 : 주중, 주말에 따른 팁 비교

def test(tips):
    if (tips['day']=='Sun') | (tips['day']=='Sat'):
        val = 'Weekend'
    else: 
        val = 'Weekday'
    return val
    
tips['test'] =tips.apply(lambda x : test(x), axis=1) 
    
#boxplot으로 나타내기
ax = tips.boxplot(by = 'test', column = 'tip')
ax.set_xlabel('')
ax.set_ylabel('tip')

상자그림을 통해 주말이 고객들이 평균적으로 더 많은 팁을 지불한 것으로 나타난다

 

(1) 각 그룹의 평균 구하기

# 각 그룹의 평균
mean_weekday = tips[tips.test =='Weekday']['tip'].mean()
mean_weekend = tips[tips.test =='Weekend']['tip'].mean()

print(mean_weekday)
print(mean_weekend)
print(mean_weekday-mean_weekend)

주중의 팁 평균 : 2.7628395061728392

주말의 팁 평균 :3.115276073619632

두 그룹 평균의 차이 : 0.35243656744679264

 

주말의 팁은 주중보다 평균적으로 0.35더 많다.

이러한 차이가 우연에 의한 것인지, 통계적으로 중요한 것인지 순열검정을 통해 알 수 있다

(방법: 주중의 163개의 테이블, 주말의 81개의 테이블로 반복하여 추출)

def perm_fun(x, na, nb):
    n = na + nb
    # perm_fun 함수는 비복원추출방식으로 nb개의표본을 추출하고 그룹 b에 해당한다.
    idx_B = list(set(random.sample(range(n),nb)))
    # 그리고 나머지 na개는 그룹A에 해당한다 -> 비복원
    idx_A = list(set(range(n))- set(idx_B))
    # 이때 두 평균의 차이를 결과로 반환한다
    return x.loc[idx_B].mean() - x.loc[idx_A].mean() 


import random

tip_diff = [perm_fun(tips['tip'], 163, 81)for _ in range(1000)]
fig,ax = plt.subplots(figsize = (5,5))
ax.hist(tip_diff, bins =11, rwidth = 0.9)
# bins=11은 히스토그램의 막대 개수를 11개로 설정
# rwidth=0.9는 막대의 너비를 전체 너비의 90%로 설정
ax.axvline( x=mean_weekend-mean_weekday, color = 'black', lw=2)
# 수직선 그리기: mean_weekend-mean_weekday(0.35243656744679264)
ax.set_xlabel('mean_weekend-mean_weekday')
ax.set_ylabel('Frequency')

 

주말과 주중의 팀에 대한 차이의 도수분포로 여기서 수직선은 관측한 데이터로

구한 주말-주중 차이를 보여준다

np.mean(np.array(tip_diff)>mean_weekend-mean_weekday)

실험결과 이 경우는 3.3%의 확률로 발생한다.

즉, 주말과 주중사이의 팀에 대한 차이는 신뢰수준 0.05기준으로 유의미한 차이가 있다 

 

3) 전체 및 부트스트랩 순열 검정

전체순열검정 부트스트랩 순열 검정
데이터를 무작위로 섞고 나누는 대신 실제로 나눌 수 있는 모든 가능한 조합을 찾는다
샘플 크기가 비교적 작을 때만 실용적
셔플링을 반복할수록 임의순열검정결과는 전체순열검정과 유사
무작위 순열검정의 2,3단계에서 비복원하던 것을 복원추출한다

 

🎈 주요개념

  • 순열검정에서는 여러표본을 결합한 다음 잘 섞는다
  • 그런 다음 섞은 값들을 이용해 재표본추출 과정을 거쳐, 관심있는 표본통계량을 계산한다
  • 이 과정을 반복하고 재 표본추출한 통계를 도표화 한다
  • 관측된 통계량을 재표본추출한 분포와 비교하면 샘플간에 관찰된 차이가 우연에 의한 것인지를 판단할 수 있다

🎈 면접질문

1) 검정력(statistical power)은 무엇일까요?

  • 검정하려는 귀무가설이 거짓인 경우, 이를 옳지 않다고 판단하는 활률로 제2종 오류를 범하지 않을 확률
  • 제2종오류 : 귀무가설이 옳지 않은데도 채탁하는 오류

2) A/B 테스트의 장점과 단점, 그리고 단점의 경우 이를 해결하기 위한 방안에는 어떤 것이 있나요?

https://datarian.io/blog/a-b-testing

 

A/B 테스트란

A/B 테스트란 무엇인지, 왜 하는지, 어떤 단점이 있는지 개괄해서 읽기 좋은 글이에요. A/B 테스트 입문자에게 이 글을 추천합니다.

datarian.io

 

  • 장점은 새로운 방식이 기존 방식에 비해 효과적인지 확인가능하며 실험설정에 따라 결과에 따른 인과관계일 가능성을 찾아낼 수 있다.
  • 단점은 고객을 대상으로 테스트를 많이 하면 손해가 발생하거나 테스트의 결과가 시간에 따라 바뀔 수 있기 때문에 유효한 기간이 길지 않을 수 있다
  • 이를 보완하기 위해 통계적 유의성을 확보하는 최소 표본의 대상을 기준으로 진행한다