티스토리 뷰

카테고리 없음

통계적 가설 검정

루돌푸다요 2024. 3. 31. 17:56

통계적 가설 검정 이란 ? 주어진 자료가 특정 가설을 충분히 뒷받침 하는지 여부를 결정하는 통계적 추론 방법. 

 

통계적 가설의 구분

  • 귀무(영) 가설 Nll Hypothesis 
    - 기존의 통념이라 일반적으로 표현, 기본값 Default 에 가깝습니다. 
  • 대립 가설 Alternative Hypothesis 
    - 새롭게 입증, 주장하고자 하는 것 
    - 우리의 목표는 보통 귀무가설이 틀렸을 데이터로 증명하는 것 입니다. 
  • Example 
    - 앞의 인스타카트 예시를 다시 다듬으면 다음과 같이 됩니다. 
    - Before : 인스타카트를 이용하는 유저들은 주말에 조금 더 많은 수량의 상품을 구매할 것이다. 
  • After 
    - 귀무가설 : 인스타카트를 이용하는 유저들의 1회 상품 구매량은, 주중과 주말에 차이가 없다. 
    - 대립가설 : 인스타카트를 이용하는 유저들의 1회 상품 구매량은, 주중과 주말에 차이가 있다. 

가설의 검정 Test 

 

  • 가설을 검정할 수 있는 통계량 Statistic 을 생성 합니다 
    - 통계량은 특정 분포를 따르므로, 관련된 확률을 구할 수 있습니다. (아래서 볼 P-value) 
    - 위의 예시의 경우 1회 상품 구매량 평균 
    - 두 집단의 1회 상품 구매량 평균을 각각 x1, x2 라 하겠습니다 
  • 통계량이 따르는 분포를 확인 합니다 .

 

  • 검정을 위한 하나의 검정 통계량 Test Statistic 생성

 

 

검정 통계량과 가설의 기각 

  • 앞에서 검정 통계량 t값은, 두 집단의 평균의 차이 (Xdiff) 를 가공한 것 입니다. 
  • 좀 더 정확히는 그 차이를 합동 표준편차로 나눠준 값입니다. 
    - 합동 표준편차로 나누는 이유는 다음의 그래프를 통해 알 수 있습니다. 
    - "합동" 의 의미는 다음에 살펴보겠습니다. 

  • 귀무가설에서는 Xdiff 가 0임을 가정합니다. 
    이는 동시에 검정 통계량 t 가 평균이 0인 t 분포를 따른다는 것을 의미합니다. 
  • 이때 검정 통계량 t 가 귀무가설에서 가정한 것보다 지나치게 크거나 작을 경우, 우리는 귀무가설을 기각 할 수 있습니다. 
  • 이렇게 지나치게 크거나 작음을 정량화한 것을 p-value 라 합니다. 

P-value와 귀무가설 
- 귀무 가설이 정확하다는 가정 하에서 실제 관찰된 결과만큼 극단적인 검정 결과를 얻을 확률 

  • p-value 의 정의는 사실 직관적이지는 않습니다. 
  • 동전 던지기의 예시로 p-value 를 이해해보겠습니다. 
  • 동전을 던져서 앞면이 나올 확률(p)을 50% 라 하고(귀무가설) 이를 30회 던져 확인해본다고 할 때 일부의 확률 값들입니다.  너무 작은 값은 0으로 표기 했습니다. 

 

  • 동전을 30회 던져 앞면이 30번 나온다면, 누구도 앞면의 확률을 50% 라고 생각하지 않을 것입니다. 그리고 29,28,27회 모두 비슷할 것입니다. 
  • 하지만 17번 쯤 나오면 긴가민가 할 것이고, 20~22쯤 되면 어떻게 결정해야 할지 혼란이 오기 시작할 것입니다. 
  • 이를 객관적이고 정량적으로 다루기 위해 우리는 확률을 사용합니다. 
  • 더불어 하나하나의 사건의 확률은 크지 않을 수 있기 때문에, 해당 사건 뿐 아니라 더 극단적인 사건의 확률을 고려합니다. 
  • 예를 들어 앞면이 20회 나왔다면 20~30회 모두의 확률을 고려 합니다. 
  • 따라서 앞면이 20회 나올 확률은 2.7982% , 20~30회 나올 확률은 4.9369% 입니다. 
  • 수식으로 하면 다음과 같습니다 
     - P (X = 20 ) = 0.027982 
    -  P (X >= 20 ) =0.049369 
  • 이에 더해, 앞면이 20회 나오는 것은 사실 앞면이 10회 나오는 것만큼 극단적 extreme 입니다. 따라서 20회 나왔을 떄의 P-value 는 정확히 9.8738% 입니다. 
  • 수식으로 하면 다음과 같습니다 
    - P(|X - 15 | >= 5 ) = 0.098738 

 


  • 일반적으로 p-value 가 연구를 시작 할 때 세운 기준 수치보다 작으면 귀무가설이 틀렸다고 생각합니다. 이러한 기준 수치를 신뢰 수준 Confidence Level 이라고 합니다. 사회 과학에서는 일반적으로 5%를 채택하지만, 절대적이지는 않습니다. 
  • 여기서의 신뢰 수준은 오류의 가능성을 허용한다는 것입니다. 통계는 확률적이기 때문에, 항상 오류의 여지를 안고 있습니다. 또한 0.05 라는 절대적 기준으로 의사결정하는 것은 오랜 시간동안 비판의 대상 이었습니다. 

 

신뢰 수준과 오류 

  • 통계적 가설검정의 오류는 크게 2가지로 나뉩니다. 
  • 1종 오류 Type l Error : 귀무가설이 맞았는데 기각하는 것 입니다. 거짓 약팔이가 대표적인 예시입니다. 
  • 2종 오류 Type || Error : 귀무가설이 틀렸는데 기각하지 못하는 것 입니다. 연구비 날림이 대표적인 예시 입니다. 
  • 일반적으로 통계학은 1종 오류를 더 중요시 하여 이를 기준으로 잡고, 2종 오류를 최소화 합니다. 

  • 1종 오류가 발생하지 않을 가능성을 신뢰 수준 Confidence level 이라 하며 
  • 1종 오류가 발생할 가능성을 유의 수준 Significance level 이라 합니다. 이를 보통 알파 로 표기합니다. 
예제 

stats.ttest_ind(
	order_item_count_weekday,
    order_item_count_weekend,
    equal_Var=False
)
Ttest_indResult(statistic=136.28489660027753, pvalue=0.0) 

order_item_count_weekday_mean = order_item_count_weekeday.mean()
order_item_count_weekend_mean = order_item_count_weekend.mean()

print(f"주중 평균 구매 상품 수 : {order_item_count_weekday_mean :.2f}개")
print(f"주말 평균 구매 상품 수 : {order_item_count_weekend_mean :.2f}개")

주말 평균 구매 상품 수 :10.97개 
주말 평균 구매 상품 수 :9.71개

 

건강한 t-test 

이상치와 왜도 

  • t-test 의 결과를 왜곡하는 가장 큰 이유는 보통 이상치와 왜도 입니다. 
  • 앞서 보았던 p-value 를 신뢰하기 위해서는 이상치나 왜도가 문제를 일으키지 않았음을 확인해보아야 합니다. 
  • 실제로 데이터의 히스토그램은 다음과 같습니다. 
    - 좌측은 원본 데이터로 왜도가 심한 것을 확인 할 수 있으며 
    - 우측은 로그를 취한 것으로 왜도가 잡힌 것을 확인할 수 있습니다. 

 

  • 왜도나 이상치가 반드시 결과를 반대 방향으로 왜곡하는 것은 아닙니다. 
    - 이 경우 왜도가 실제 결과에 영향을 미치지는 않습니다. 
    - log 변환을 한 뒤 다시 검정을 해보아도 결과는 바뀌지 않습니다. 
    하지만 많은 경우, 이상치와 왜도는 결과에 큰 영향을 미칠 수 있습니다. 

P-value 와 신뢰 구간 

  • p-value 에 기반한 의사결정은 단일한 값에 의존하며, 정보량이 적습니다. 또한 p-value 가 0.499 라고 연구를 기각하고 끝내는 등의 흑백논리는 많은 우려를 가져옵니다. 실제로 2016년 미국  통계협회는 p-value 에 지나치게 의존 하지 말라는 성명서를 낸 바 있습니다. 
  • 이에 대한 대안으로 신뢰 구간 Confidence Interval 을 보는 것을 권장 합니다 
    신뢰 구간의 정의는 다음과 같습니다 
    - 표본을 뽑아 신뢰 구간을 무수히 많이 계산한다면 100번 중 95번은 신뢰구간이 모수를 포함하고 있다. 
  • 흔히 보이는 잘못된 해석은 "모수가 신뢰 구간 안에 들어갈 확률이 95%(신뢰 수준)" 이라는 것 입니다. 
    - 모수도 신뢰 구간도 모두 변수가 아닌 상수이기 때문에 들어가거나 들어가지 않거나 둘 중 하나만 가능 합니다. 
  • 신뢰 구간을 통해 우리는 모수의 범위를 대략 짐작해 볼 수 있습니다. 하지만 아쉽게도 파이썬은 이런 부분에서 구하기가 어려워, 다음과 같이 긴 코드로 신뢰 구간을 구해보았습니다.
def welch_ttset(x1, x2) : 

	n1 = x1.size
    n2 = x2.size
    m1 = np.mean(x1)
    m2 = np.mena(x2)
    
    v1 =np.var(x1, ddof=1)
    v2 =np.var(x2, ddof=1)
    
    pooled_se =np.sqrt(V1 / n1 + v2 / n2) 
    delta = m1=m2
    
    tstat = delta / pooled_Se 
    df = (v1 / n1 + v2 / n2) **2 / (v1**2 / (n1**2 * (n1- 1)) + v2**2 / (n2**2 *(n2 -1)))
    
    # two side t-test 
    p = 2 *stats.t.cdf(-abvs(tstat),df) 
    
    #upper and lower bounds
    lb =delta - stats.t.ppf(0.975,df)*pooled_se 
    ub = delta + stats.t.ppf(0.975,df)*pooled_Se 
    
    return pd.DataFrame(np.array([tstat,df,p,delta,lb,ub]).reshape(1,-1),
    					 columns=['T statistic', 'df', 'pvalue 2 dided', 'Difference in mean', 'lb', 'ub])
welch_ttest(order_item_count_weekday, order_item_count_weekend)

 

다양한 t-test 

  • 사실 t-test 에는 다양한 변형이 있습니다 .
  • 그 중 가장 까다로운 것을 기준으로 앞을 학습하였는데, 각 원리를 다 증명할 게 아니면 쓰는 데에 큰 지장은 없을겁니다.

일표본 One Sample  T-test 

  • 한 집단의 평균이 특정값과 크게 차이나는지 검정합니다. 
  • scipy 에서는 scipy.stats.ttest_1samp 를 사용 할 수 있습니다. 
  • 개인적으로는 쓸 일이 별로 없습니다 .

이표본 Two-sample t-test 

  • 두 집단의 평균의 차이를 검정 합니다. 
  • 앞에서 봤던 예시가 이것이고, 응용하면 그 차이가 특정 값보다 큰지도 검사할 수 있습니다. 
  • 두 집단의 표본 수와 분산이 같은 지에 따라 여러 변형이 있습니다. 
  • 기본적으로 두 집단의 표본이 다르다는 가정하였고, 분산 도한 다르다고 가정하였습니다. 
    - 이를 Welch- t test 라 합니다. 
    - 자유도와 분산을 구하는 것이 다소 복잡하지만, 우리는 컴퓨터가 계산해줍니다. 
    - 제약조건이 풀어지면, 보통 검정력 Power 이 약해집니다. 

대응표본 Paired t-test 

  • 두 집단 사이의 대응관계를 확인 합니다. 
    - 일반적으로 동일한 집단 사이의 전후 비교를 할 때 많이 사용합니다. 
    단, 정확한 표본으로 통제된 환경에서 측정해야 합니다. 
  • 수리적 원리는 사실상 일표본 t-test 와 동일 합니다. 

t-test 의 한계 

  • 지금까지 본 t-test는 한 두개의 집단을 상대로 유용했습니다. 
  • 하지만 3개 이상의 집단을 대상으로 평균을 검정하기에는 부족할 수 있습니다. 
    예를 들어 A,B,C 에 대한 평균을 비교할 떄 
    세쌍 : (A, B), (B,C), (A,C) 에 대해 3번 검정을 진행할 수도 있습니다. 
    하지만 이 경우 통계는 항상 오류의 가능성을 안고있기 때문에,회차를 반복하며 신뢰 수준이 크게 떨어질 수 있습니다. 예를 들어 5개 집단의 평균을 각각 비교하면 10번 검정을 진행하면 아래와 같이 신뢰 수준이 떨어집니다. 

 

  • 앞의 예시에서도 주중과 주말의 차이를 보았지만, 데이터를 좀 더 들여다보았을 때는 사실 평일 요일 별 차이가 더 커보였습니다. 이를 해결 하기 위한 방법론, 분산 분석ANalysis Of VAriance 를 살펴보겠습니다. 

한 번에 해결하는 ANOVA 

 

  • ANOVA 는 여러 집단 사이의 평균에 차이가 있는지 검사하는 방법론이며, 통계학에서 가장 많이 쓰이는 방법론 중 하나 입니다. 

분산과 표준 편차 

 

  • 일반적으로 더 많이 쓰이는 말은 분산이지만, 통계학을 공부한 사람은 보통 표준 편차를 더 선호합니다. 
  • 가장 큰 문제는 단위Unit로, 분산은 제곱 때문에 원래 값과 단위가 다릅니다. 

더불어 자유도 degree of freedom 를 한번 이야기 하고 가겠습니다 

- 자유도는 통계학에서 설명하기 가장 난해한 개념 중 하나입니다. 

정의는 다음과 같습니다 : 통계의 최종 계산에서 변동이 자유로운 값의 수 

 

자유도는 본래 데이터의 수와 같지만, 통계량을 계산할 때마다 하나씩 감소합니다. 

  • 자유도는 본래 데이터의 수와 같지만, 통계량을 계산할 때마다 하나씩 감소 합니다. 
    - 예를 들어 분산이나 표준편차를 계산 할 때는 평균을 구하기 때문에 1개 감소합니다. 
    - 분산을 구하는 등 다양한 상황에서 N 을 나누는 것은, 사실 n-(df) 입니다. 그래야 불편성 unbiased 이 만족됩니다. 

샘플 사이즈 이야기 

  • 과거 통계학이 발달할 때(20세기 초) 샘플 사이즈는 보통 수십~수백 단위였습니다.
    - 농업과 제조, 의학 등에서 주로 발달하였으며 어차피 수천 이상의 데이터를 사람 손으로 계산하기는 굉장히 어려웠습니다. 당연하지만 현대에도 이런 상황은 많으며, 통계학 교재들은 이런 상황에 초점이 맞춰져 있습니다. 
    극단적인 예시로, 실험 설계의 상당수 방법론은 10개 이하의 샘플을 효과적으로 활용 합니다. 
  • 현대 통계학은 굉장히 다양한 분야에서 활약하고 있으며, 특히 빅데이터의 샘플 사이즈는 과거와 비교하기 어렵습니다. 이에 따라 방법론 또한 적응이 필요합니다. 하지만 대개의 경우 이런 부분을 인지하지 못하고 그대로 쓰는 패착이 있습니다.