상세 컨텐츠

본문 제목

데이터 분석 - 가설 검정

데이터분석/통계

by 2^7 2025. 1. 8. 21:00

본문

가설 검정

데이터를 기반으로 특정 주장이나 가설이 맞는지 검토하는 과정

 

가설 검정이란?

  • 두 가지 가설을 비교하여 데이터를 통해 어떤 가설이 더 신뢰할 수 있는지를 판단하는 과정
  • 데이터를 기반으로 우리의 주장이나 생각이 통계적으로 의미가 있는지 확인

 

가설 검정의 기본 구성요소

    • 귀무가설(null hypothesis, H₀): 반증하고자 하는 기본 가설로, "변화가 없다" 또는 "효과가 없다"는 내용을 담고 있음
    • 대립가설(alternative hypothesis, H₁): 입증하고자 하는 가설로, "변화가 있다" 또는 "효과가 있다"는 내용을 담고 있음
      • ex) 새로운 약이 기존 약보다 효과가 있는지 검정할 때
      • H₀: 새로운 약은 기존 약과 효과가 같다.
      • H₁: 새로운 약은 기존 약보다 효과가 더 크다.

 

가설 검정의 과정

  1. 가설 설정: 귀무가설(H₀)과 대립가설(H₁)을 명확히 정의
  2. 유의 수준 설정: 결과를 통계적으로 유의미하다고 판단할 기준을 설정(일반적으로 5%, 즉 α=0.05를 사용).
  3. 검정 통계량 계산: 데이터를 기반으로 검정 통계량을 계산
  4. 가설 검정 수행: 검정 통계량과 유의 수준을 비교하여 귀무가설을 기각할지 결정
  5. 결론 도출: 분석 결과를 바탕으로 최종 결론을 내림

 

가설 검정의 유형

  1. 단일 표본 t-검정(one-sample t-test)
    • 단일 그룹의 평균이 특정 값과 다른지를 검정
    • ex) 학생들의 평균 시험 점수가 70점과 다른지 검정.
  2. 독립 표본 t-검정(independent t-test)
    • 두 독립된 그룹의 평균이 같은지 비교
    • ex) 남학생과 여학생의 평균 키를 비교.
  3. 대응 표본 t-검정(paired t-test)
    • 동일한 그룹의 두 조건 간 차이를 비교
    • ex) 운동 전후의 체중 변화를 비교.
  4. 카이제곱 검정(chi-square test)
    • 범주형 데이터의 분포가 기대치와 다른지 검정
    • ex) 설문조사 결과에서 특정 응답이 골고루 분포되었는지 확인.
  5. 분산 분석(ANOVA)
    • 세 개 이상의 그룹 평균을 비교합니다.
    • 예: 세 개의 다른 학습법이 학생들의 성적에 미치는 영향을 비교.
  6. 상관 검정(correlation test)
    • 두 변수 간의 상관관계가 유의미한지 검정
    • ex) 공부 시간과 시험 점수 간의 상관관계 확인.
 

유의 수준과 P-value

  • 유의 수준(α): 귀무가설을 기각할 기준으로, 일반적으로 0.05(5%)를 사용
  • P-value: 데이터에서 관찰된 결과가 귀무가설 하에서 나타날 확률. P-value가 유의 수준보다 작으면 귀무가설을 기각함
  • ex) P-value가 0.03이라면 이는 3%의 확률로 관찰된 결과가 우연히 발생했다는 뜻이며, 일반적으로 유의미하다고 판단

 

주의사항

  • 가설 검정은 표본 크기데이터 품질에 민감합니다. 표본 크기가 작으면 결과의 신뢰도가 낮아질 수 있음
  • P-value만으로 결과를 과대해석하지 말고, 실제 데이터의 맥락을 고려해야 함
  • 유의미한 결과가 반드시 실질적으로 중요한 결과를 의미하는 것은 아님

ptrhon을 이용한 샘플 예제 코드

import numpy as np
from scipy import stats
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns

# 예제 1: 독립표본 t-검정
# 두 학습 방법의 시험 점수 비교
np.random.seed(42)  # 재현성을 위한 시드 설정

# 데이터 생성
method_a = np.random.normal(loc=75, scale=10, size=30)  # 기존 학습 방법
method_b = np.random.normal(loc=80, scale=10, size=30)  # 새로운 학습 방법

def run_ttest_example():
    """두 학습 방법의 효과 비교를 위한 독립표본 t-검정"""
    t_stat, p_value = stats.ttest_ind(method_a, method_b)
    
    print("1. 독립표본 t-검정 결과")
    print(f"t-통계량: {t_stat:.4f}")
    print(f"p-값: {p_value:.4f}")
    print(f"방법 A 평균: {np.mean(method_a):.2f}")
    print(f"방법 B 평균: {np.mean(method_b):.2f}")
    
    # 시각화
    plt.figure(figsize=(10, 6))
    plt.boxplot([method_a, method_b], labels=['방법 A', '방법 B'])
    plt.title('학습 방법별 시험 점수 분포')
    plt.ylabel('점수')
    plt.show()

# 예제 2: 카이제곱 검정
# 성별과 선호하는 프로그래밍 언어의 관계 분석
def run_chi2_example():
    """성별과 선호 프로그래밍 언어 간의 관계 분석"""
    # 가상의 설문 데이터 생성
    data = {
        'Python': [50, 30],
        'Java': [40, 35],
        'JavaScript': [30, 45]
    }
    
    # 데이터프레임 생성
    df = pd.DataFrame(data, index=['남성', '여성'])
    
    # 카이제곱 검정 수행
    chi2, p_value, dof, expected = stats.chi2_contingency(df)
    
    print("\n2. 카이제곱 검정 결과")
    print(f"카이제곱 통계량: {chi2:.4f}")
    print(f"p-값: {p_value:.4f}")
    print("\n관찰된 빈도:")
    print(df)
    print("\n기대 빈도:")
    print(pd.DataFrame(expected, index=['남성', '여성'], 
                      columns=['Python', 'Java', 'JavaScript']))

# 예제 3: 일원배치 분산분석(ANOVA)
# 세 가지 다른 학습 방법 비교
def run_anova_example():
    """세 가지 학습 방법의 효과 비교"""
    # 데이터 생성
    method_1 = np.random.normal(loc=70, scale=10, size=30)
    method_2 = np.random.normal(loc=75, scale=10, size=30)
    method_3 = np.random.normal(loc=80, scale=10, size=30)
    
    # ANOVA 수행
    f_stat, p_value = stats.f_oneway(method_1, method_2, method_3)
    
    print("\n3. 일원배치 분산분석 결과")
    print(f"F-통계량: {f_stat:.4f}")
    print(f"p-값: {p_value:.4f}")
    
    # 시각화
    data = [method_1, method_2, method_3]
    plt.figure(figsize=(10, 6))
    plt.boxplot(data, labels=['방법 1', '방법 2', '방법 3'])
    plt.title('세 가지 학습 방법의 점수 분포')
    plt.ylabel('점수')
    plt.show()

# 모든 예제 실행
if __name__ == "__main__":
    print("가설 검정 예제 실행\n")
    run_ttest_example()
    run_chi2_example()
    run_anova_example()
728x90

'데이터분석 > 통계' 카테고리의 다른 글

데이터 분석 - 분포 분석  (0) 2025.01.06
데이터 분석 - 기술 통계  (0) 2024.12.11

관련글 더보기