본문 바로가기
기획공부

데이터 PM을 위한 가설검정 실전 가이드

by 보라색두부찌개 2024. 11. 19.

목차

  1. 사전지식 : 기초 통계
  2. 가설검정
  3. A/B테스트 : t-test, z-test, ANOVA, 카이제곱 검정

데이터 분석의 목적은 단순히 숫자를 해석하는 것에 그치지 않습니다.

데이터 분석은 문제 정의와 해결을 위한 중요한 도구이며, 이를 통해 PM은 고객 행동의 숨겨진 패턴을 발견하고 문제의 원인을 파악할 수 있습니다.

프로덕트 매니저가 데이터를 이해하고 요약하는 능력을 갖추면, 더 나은 데이터 기반 의사결정을 내릴 수 있습니다.

통계량과 분포 분석은 이러한 데이터 분석의 첫걸음입니다. 이는 고객 행동 데이터를 요약하고 이상치를 파악하는 데 중요한 역할을 합니다.

예를 들어, 고객 데이터를 요약해 주요 고객군의 평균 구매 금액을 파악하거나, 데이터가 특정 고객층에 편향되어 있는지를 확인함으로써, 프로덕트 매니저는 효율적인 마케팅 전략을 수립할 수 있습니다.


1. 사전지식 : 기초 통계

데이터 기반의 PM이 되기 위해서는, 먼저 알아야 할 기초 통계에 대한 사전 지식이 필요합니다.

  • 평균(Mean) - (이상치에 민감함)
  • 중앙값(Median) - (이상치에 민감하지 않음)
  • 분산(Variance)와 표준편차(Standard Deviation) : 데이터가 얼마나 흩어져 있는지 나타냄
  • 왜도(Skewness) : 데이터의 비대칭성을 나타내는 지표
  • 첨도(Kurtosis) : 분포의 꼬리가 두꺼운 정도를 나타내는 지표

 

그러나 이러한 기초 통계량만으로는 의사결정에 필요한 설명력과 맥락 파악에 한계가 있습니다.

 

  • 평균과 중앙값
    • 중심 경향만 보여줄 뿐, 변화나 차이의 '의미'를 설명하지 못함
    • 예: "신규 기능 도입 후 사용시간이 평균 5분 증가" → 이 증가가 의미있는 것인지 판단 불가
  • 분산과 표준편차
    • 퍼짐 정도는 알 수 있으나, 그 변동이 자연스러운 것인지 판단 어려움
    • 예: "구매액 표준편차가 2만원 증가" → 이것이 우려할 수준인지 평가 불가
  • 왜도
    • 분포의 비대칭성은 보여주지만, 다른 집단과의 '유의미한' 차이는 판단 불가
    • 예: "기존 고객군과 신규 고객군의 왜도 차이" → 이 차이가 의미있는 것인지 평가 어려움
  • 첨도
    • 이상치의 존재는 파악할 수 있으나, 이상치 처리의 정당성 판단 불가
    • 예: "프로모션 기간 중 특이 구매패턴" → 제외해도 되는지 판단 근거 부족

따라서, 의사결정에 필요한 여러 모델들이 필요하게 됩니다.

그러한 모델들의 예측력을 보장하는 가정들을 알아봅시다.

 

  • 선형성
    • 독립변수와 종속변수 사이의 관계가 직선(선형) 형태여야 한다는 조건
    • 선형성 확인하는 방법 
      • 산점도(Scatter Plot : 흩어져 있는 정도)를 그려서, 직선형태인지 확인
      • 잔차(Residuals : 실제값과 예측값의 차이)를 그려서, 특정 패턴없이 흩어져 있는지 확인
  • 독립성
    • 관측값들이나 잔차가 서로 독립적이어야 한다는 조건
      (= 한 관측값이 다른 관측값에 영향을 주지 않아야 한다는 조건)
    • 독립성 확인하는 방법
      • 잔차가 자기 자신과 상관이 없는지 확인
      • Durbin-Watson 통계량을 구해, 1.5~2.5면 독립성 만족(
  • 정규성
    • 잔차정규분포를 따라야한다는 조건
    • 정규성 확인하는 방법
      • Q-Q Plot를 그려서, 잔차가 대각선에 가까울수록 정규성을 만족.
      • 잔차 히스토그램을 그려서, 종 모양이면 정규성을 만족.
      • Shapiro-Wilk 테스트 또는 Kolmogorov-Smirnov 테스트로 통계적으로 검증.
  • 등분산성
    • 잔차의 분산이 독립변수의 모든 값에 대해 일정해야 한다는 조건
      (= 잔차가 고르게 분포되어있어야 한다는 조건)
    • 등분산성 확인하는 방법
      • 잔차와 예측값을 나타낸 그래프를 그려서, 특정 패턴을 보이지 않아야함
      • Breusch-Pagan 테스트 또는 White 테스트로 검증.

2. 가설검정

2.1 가설검정의 필요성

이 지점에서 가설검정이라는 개념이 필요하게 됩니다. 
실무적으로는 기초 통계 -> 분포 특성 -> 가설검정 순으로 분석 프로세스가 발전합니다.

  1. 기초통계 단계
    • 현상 파악: "전환율이 2% 증가했다"
    • 한계: 증가의 의미 해석 불가
  2. 분포특성 단계
    • 패턴 파악: "전환율 증가가 특정 세그먼트에 집중됨"
    • 한계: 패턴의 유의미성 판단 불가
  3. 가설검정 단계
    • 의미 검증: "전환율 증가는 95% 신뢰수준에서 유의미함"
    • 개선: 객관적 의사결정 근거 제공

따라서, 기초통계와 분포특성은 데이터의 '현재 상태'를 보여주는 중요한 도구지만,

의사결정을 위해서는 그 '차이와 변화의 의미'를 해석해야 합니다. 가설검정은 이러한 한계를 보완할 수 있습니다.


2.2 가설검정의 개념

가설검정이란 귀무가설 대립가설을 세우고, 데이터를 통해 두 가설 중 어떤 것이 더 타당한지를 검증하는 과정입니다.

주요 요소 : 
1. 귀무가설(H₀)과 대립가설(H₁) : 가설을 두고, p-value에 따라 어떤 가설을 채택할지 정함
- 귀무가설(H₀): 두 그룹 간에 차이가 없다.
- 대립가설(H₁): 두 그룹 간에 차이가 있다.
2. p-value : 두 그룹 간의 차이가 우연이 아닌지를 확인하는 데 사용함
- p-value는 이 가설검정에서 검증 결과를 판단하는 기준입니다. 
- 일반적으로 p-value가 0.05 미만이면, 귀무가설을 기각하고, 차이가 유의미하다고 판단합니다.
(해당 변수나 평균의 차이가 우연에 의해 발생했을 가능성이 5% 미만이라는 의미)

 


3. A/B테스트 : t-test, z-test, ANOVA, 카이제곱 검정

 

가설검정을 적용하는 실험인, A/B 테스트를 하려고합니다.

(≈ A/B 테스트의 실험 결과를 평가하기 위해, 가설검정을 사용하는 것 입니다.)

A/B 테스트에서 자주 사용하는 통계적 방법에는 t-test, z-test, ANOVA, 그리고 카이제곱 검정이 있습니다.

그 중에서 t-test, z-test, 카이제곱 검정와, ANOVA를 케이스를 나눠서 해봅시다.
(이유 : 데이터 유형과 분석 그룹 수 별로 가 다른 방법들이기에)

A/B 테스트란? :
- A/B 테스트는 두 가지(혹은 여러 가지) 옵션 중 어떤 것이 더 나은 성과를 내는지 실험을 통해 확인하는 방법입니다.
- 따라서 A/B 테스트는 가설검정 방법 자체라기보다는, 가설검정을 적용하는 실험입니다.
  • 실험 설계 :
    • A그룹(대조군): 기존 홈페이지 디자인.
    • B그룹(실험군): 새로운 홈페이지 디자인.
    • 성과 지표: 전환율(홈페이지 방문자 중 구매한 고객 비율).
  • 가설 정의 :
    • 귀무가설(H₀): A와 B의 전환율 차이가 없다.
    • 대립가설(H₁): A와 B의 전환율 차이가 있다.
  • Python 코드로 분석(t-test) : 
    • 가설검정(p-value 계산)을 통해 A/B 테스트 결과를 분석:
    • import scipy.stats as stats
      
      # 전환율 데이터
      group_a = [1, 0, 1, 1, 0, 1, 0, 1, 0, 0]  # A그룹 (0: 실패, 1: 성공)
      group_b = [1, 1, 1, 0, 1, 1, 1, 0, 1, 1]  # B그룹 (0: 실패, 1: 성공)
      
      # t-test로 두 그룹의 평균 차이 비교
      t_stat, p_value = stats.ttest_ind(group_a, group_b)
      
      print(f"T-statistic: {t_stat:.2f}, p-value: {p_value:.4f}")
      # 결과 해석
      if p_value < 0.05:
          print("결과: 두 그룹 간 유의미한 차이가 있음.")
      else:
          print("결과: 두 그룹 간 유의미한 차이가 없음.")
    • t-통계량(T-statistic)은 약 -1.41이 나올 것입니다
    • p-value는 약 0.1769이 나올 것입니다
    • 해석 :  
      • 함수, stats.ttest_ind에, 인자 group_a, group_b를 넣어 실행하면,
        t-통계량(T-statistic)과 p_value 두 가지 출력값이 나옵니다.
      • p-value가 0.1769로, 일반적인 유의수준 0.05보다 큽니다.
      • 따라서 "두 그룹 간 유의미한 차이가 없음"이라는 결과가 나옵니다.
      • 실제로 B그룹(80%)이 A그룹(50%)보다 성공률이 높아 보이지만, 통계적으로는 이 차이가 '우연히 발생했을 가능성'을 배제할 수 없다는 의미입니다.
  • Python 코드로 분석(z-test)
더보기
import numpy as np
from statsmodels.stats.proportion import proportions_ztest

# 전환율 데이터
group_a = [1, 0, 1, 1, 0, 1, 0, 1, 0, 0]  # A그룹 (0: 실패, 1: 성공)
group_b = [1, 1, 1, 0, 1, 1, 1, 0, 1, 1]  # B그룹 (0: 실패, 1: 성공)

count = [np.sum(group_a), np.sum(group_b)]  # 성공 횟수 리스트
nobs = [len(group_a), len(group_b)]       # 총 시도 횟수 리스트

# z-test로 두 그룹의 평균 차이 비교
z_stat, p_value = proportions_ztest(count, nobs)

print(f"z-statistic: {z_stat:.2f}, p-value: {p_value:.3f}")
# 결과 해석
alpha = 0.05  # 유의수준
if p_value < alpha:
    print("귀무가설을 기각합니다: 두 그룹의 전환율 차이는 통계적으로 유의미합니다.")
else:
    print("귀무가설을 채택합니다: 두 그룹의 전환율 차이는 통계적으로 유의미하지 않습니다.")
  • Python 코드로 분석(카이제곱검정)
더보기
import scipy.stats as stats
import numpy as np

# 빈도 데이터 준비
success = np.array([5, 8])  # A그룹과 B그룹의 성공 횟수
failure = np.array([5, 2])  # A그룹과 B그룹의 실패 횟수
contingency_table = np.array([success, failure]).T

# 카이제곱 검정 실행
chi2_stat, p_value, dof, expected = stats.chi2_contingency(contingency_table)

print(f"Chi-squared Statistic: {chi2_stat:.2f}, p-value: {p_value:.4f}")
if p_value < 0.05:
    print("결과: 두 그룹 간 유의미한 차이가 있음.")
else:
    print("결과: 두 그룹 간 유의미한 차이가 없음.")
  • Python 코드로 분석(ANOVA)
# 전환율이라는 1가지 요인에 대해 분석하기 때문에 oneway방식을 차용
from scipy.stats import f_oneway

# 데이터
group_a = [0.2, 0.25, 0.22, 0.23, 0.24]
group_b = [0.3, 0.35, 0.32, 0.33, 0.31]
group_c = [0.4, 0.42, 0.38, 0.41, 0.43]

# ANOVA 수행
f_stat, p_value = f_oneway(group_a, group_b, group_c)

# 결과 출력
print(f"F-statistic: {f_stat:.2f}, p-value: {p_value:.4f}")
if p_value < 0.05:
    print("결과: 적어도 한 집단의 평균이 다르다.")
else:
    print("결과: 모든 집단의 평균이 같다.")
  • F-통계량: 154.11
  • p-value: 0.0000 (매우 작은 값)
  • 유의수준 0.05 기준으로 귀무가설 기각
  • 해석 : 
    • 세 그룹 간 전환율에, 적어도 한 집단의 평균이, 다른 집단의 값과 다르다.
    • C그룹의 전환율이 가장 높고, A그룹이 가장 낮음
    • 차이가 우연이 아닌 것으로 판단됨
  • 대립가설을 채택할때, 어떤 집단이 다른지를 알려주지 않는다.
    따라서, 다중 비교(Tukey HSD)를 통해 추가 분석을 함.
  • 정규성 만족 & 등분산성 만족 → 일반 ANOVA 수행.
    정규성 만족 & 등분산성 불만족 → Welch's ANOVA 수행.
    정규성 불만족 → Kruskal-Wallis Test 수행.
      정규성 만족 정규성 불만족
    등분산성 만족 일반 ANOVA Kruskal-Wallis Test
    등분산성 불만족 Welch's ANOVA Kruskal-Wallis Test
  • t-test VS z-test VS ANOVA VS 카이제곱 검정
특징 t-test z-test ANOVA 카이제곱 검정
데이터 유형 연속형 데이터 연속형 데이터, 비율 데이터 연속형 데이터 범주형 데이터
분석 대상 두 그룹의 평균 차이 두 그룹의 평균 또는 비율 차이 세 그룹 이상의 평균 차이 범주 간의 분포 차이,
독립성 검정
사용 조건 표본 크기가 작거나
모집단 분산 모름
표본 크기가 크거나
모집단 분산 알고 있음
독립변수는 범주형,
종속변수는 연속형
범주형 변수 간 관계,
분포 차이
검정 통계량 t-통계량 z-통계량 F-통계량 카이제곱 통계량
주요 가정 정규성, 등분산성 정규성, 모집단 분산 알고 있음 정규성, 등분산성 기대값 >= 5
귀무가설 (H₀) 두 집단의 평균 차이가 없다 두 집단의 평균 
또는 비율 차이가 없다
모든 집단의 평균이 같다 두 변수 간에 독립적이다 
또는 분포가 동일하다
대립가설
(H₁)
두 집단의 평균 차이가 있다 두 집단의 평균 
또는 비율 차이가 있다
적어도 한 집단의 평균이 다르다 두 변수 간에 독립적이지 않다 또는 분포가 다르다
결과 해석 t값과 p-value를 
통해 유의미성 판단
z값과 p-value를 
통해 유의미성 판단
카이제곱 값과 p-value를 
통해 유의미성 판단
F값과 p-value를 
통해 유의미성 판단