p-value 완벽 정리: 데이터 분석가의 통계 기초 5가지 (가설검정·베이즈)

A/B 테스트에서 p-value 0.04가 나오면 정말 이긴 걸까요? 현업에서 지표를 해석할 때 꼭 필요한 p-value·가설검정·신뢰구간·베이즈 정리를 실무 의사결정 관점으로 정리했습니다. 머신러닝 독학 로드맵 연재 3화이며, 이 글만 읽어도 완결됩니다.


p-value 0.04, 정말 실험에서 ‘이긴’ 게 맞을까요?

버튼 색상을 바꾼 B안이 전환율 2% 높게 나왔고, 대시보드에는 p-value 0.04가 찍혀 있어요. 회의실에서는 “유의수준 0.05보다 작으니 B안 배포하시죠”라는 말이 자연스럽게 나옵니다. 그런데 이 결정, 정말 통계적으로 안전한 걸까요? 저도 예전에 이 숫자 하나만 믿고 배포를 밀었다가, 다음 달 지표가 원상복구되는 걸 보고 통계를 다시 공부하게 됐어요.

이번 글은 머신러닝 독학 완벽 로드맵 연재의 3화입니다. 허브 글에서 소개한 7단계 커리큘럼 중 2단계 ‘수학·통계’에서, 현업 분석가·마케터·PM이 가장 자주 마주치는 통계 개념만 골라 실무 언어로 풀었습니다. 공식 유도는 최소화하고 “이 숫자로 어떤 의사결정을 하는가”에 집중할게요. 뒤쪽에는 Colab에 바로 붙여 돌릴 수 있는 scipy 코드와 노코드 도구(JASP·스프레드시트)까지 붙여뒀습니다. 😊

⚡ 이 글의 핵심만 먼저 보기 (Key Takeaways)

  • p-value의 정의: ‘효과가 없다고 가정했을 때, 지금 데이터만큼 극단적인 결과가 우연히 나올 확률’이지, 가설이 맞을 확률이 아닙니다
  • 유의함 ≠ 중요함: 표본이 크면 0.01%p 차이도 p<0.05가 나옵니다. 효과 크기를 반드시 함께 봐야 해요
  • 1종·2종 오류: 없는 효과를 있다고 믿는 실수(1종)와 있는 효과를 놓치는 실수(2종)는 비용이 다릅니다
  • A/B 테스트 중간 훔쳐보기(peeking): 유의해질 때까지 기다렸다 멈추면 거짓 양성률이 5%를 훌쩍 넘습니다
  • 베이즈 정리: 스팸필터처럼 ‘사전확률을 데이터로 갱신’하는 사고법으로, 검정 결과 해석의 함정을 피하게 해줍니다
  • 비용 0원 실습: StatQuest 영상 + scipy.stats(Colab) + JASP·스프레드시트면 도구값 없이 직접 검정할 수 있습니다

📌 목차

  1. p-value의 진짜 의미 — ‘유의하다’는 ‘중요하다’가 아니다
  2. 가설검정 실무 감각 — 귀무가설과 1종·2종 오류
  3. 신뢰구간과 표본 크기 — A/B 테스트, 언제 멈춰도 될까
  4. 확률분포와 베이즈 정리 — 스팸필터로 감 잡기
  5. 비용 0원 학습 루트 — 영상·scipy·노코드 도구
  6. 이런 분들께 적극 추천합니다
  7. 자주 묻는 질문 (FAQ)

1. p-value의 진짜 의미 — ‘유의하다’는 ‘중요하다’가 아니다

① What p-value really means — 우연히 이 정도 차이가 나올 확률

p-value는 “두 안의 효과가 사실 똑같다고 가정했을 때, 지금 관측된 만큼(또는 더 극단적인) 차이가 우연히 나올 확률”이에요. p=0.04라면 “B안이 이길 확률이 96%”가 아니라, “차이가 없는데도 이 정도 차이가 우연히 나올 확률이 4%”라는 뜻입니다. 조건과 결론의 방향이 반대라는 게 핵심이에요. 여기서 헷갈리면 이후 모든 해석이 무너집니다.

💡 실전 체크포인트:
‘p=0.04이므로 B안이 성공할 확률 96%’는 가장 흔한 오해입니다. ‘효과가 없다면 나오기 어려운 결과이므로 B안에 효과가 있다고 볼 근거가 된다’로 바꿔 말해야 정확해요. 보고서의 이 한 문장만 고쳐도 숫자의 의미가 왜곡되지 않습니다.

② Significant vs Important — 표본이 크면 뭐든 유의해진다

일 방문자 100만 명 서비스라면 전환율 0.01%p 차이도 p<0.05가 나옵니다. 통계적으로 유의하지만 비즈니스적으로는 무의미할 수 있어요. 그래서 p-value와 함께 효과 크기(effect size), 즉 “그래서 얼마나 차이 나는데?”를 항상 같이 봐야 합니다. 반대로 표본이 작으면 진짜 효과도 유의하지 않게 나올 수 있고요.

💡 실전 체크포인트:
p-value 옆에는 항상 효과 크기(절대 차이 %p, 상대 차이 %)와 신뢰구간을 나란히 적어두세요. ‘유의한가’와 ‘쓸 만큼 큰가’는 다른 질문이고, 배포 여부는 후자로 결정합니다.


2. 가설검정 실무 감각 — 귀무가설과 1종·2종 오류

① Null vs Alternative — ‘차이 없다’를 기본값으로 두는 이유

가설검정은 귀무가설(차이가 없다)을 기본값으로 놓고, 데이터가 충분히 이상해야만 대립가설(차이가 있다)을 채택하는 구조예요. 형사재판의 무죄추정 원칙과 같아요. 피고인(신규 기능)이 유죄(효과 있음)임을 증거(데이터)로 입증하지 못하면 무죄(효과 없음)로 두는 거죠. ‘입증 실패’가 ‘무죄 확정’이 아니듯, p>0.05는 ‘효과 없음이 증명됨’이 아니라 ‘판단 보류’입니다.

💡 실전 체크포인트:
p>0.05가 나왔다고 ‘효과 없음이 증명됨’으로 기록하면 안 됩니다. 표본이 부족해 검정력이 낮았을 수 있으니 ‘현재 표본으로는 효과를 확인하지 못함(판단 보류)’이 정확한 표현이에요. 필요하면 표본을 늘려 재검정합니다.

② Type I / Type II Error — 두 실수의 비용은 다르다

1종 오류는 없는 효과를 있다고 믿는 것(거짓 경보), 2종 오류는 있는 효과를 놓치는 것(놓친 기회)이에요. 유의수준 0.05는 “1종 오류를 5%까지 허용하겠다”는 약속입니다. 어느 쪽 비용이 큰지는 상황마다 달라요. 결제 로직 변경이라면 1종 오류(잘못된 배포)가 치명적이니 0.01처럼 엄격하게, 배너 문구 실험이라면 0.1로 느슨하게 가져가도 됩니다.

💡 실전 체크포인트:
유의수준은 관례(0.05)가 아니라 오류 비용으로 정하는 게 원칙입니다. 잘못된 배포의 손실이 크면 0.01처럼 엄격하게, 실패해도 손해가 거의 없는 실험은 0.1로 느슨하게 잡아도 됩니다.


3. 신뢰구간과 표본 크기 — A/B 테스트, 언제 멈춰도 될까

p-value 관련 이미지 - 데이터 분석 대시보드

① Confidence Interval — 점이 아니라 범위로 말하기

“전환율 +2%”보다 “95% 신뢰구간 +0.5%p ~ +3.5%p”가 훨씬 정직한 보고예요. 구간이 0을 포함하지 않으면 유의한 것이고, 구간의 폭은 불확실성의 크기를 보여줍니다. 구간이 넓다면 표본이 부족하다는 신호고요. 저는 보고서에서 p-value 대신 신뢰구간을 먼저 쓰기 시작한 뒤로 “그래서 최악의 경우엔 얼마야?”라는 질문에 바로 답할 수 있게 됐어요.

💡 실전 체크포인트:
신뢰구간이 0을 걸치거나 음수 영역까지 내려가면 ‘손해 볼 수도 있는 베팅’이라는 뜻이에요. 점 추정치(+2%)만 보고할 때와 ‘+0.5%p ~ +3.5%p’처럼 범위까지 보고할 때 의사결정의 질이 달라집니다.

② Peeking Problem — 유의해질 때까지 기다리면 반드시 유의해진다

여기서 핵심이 있어요. 실험 중간에 매일 p-value를 확인하다가 0.05 아래로 내려간 순간 멈추면, 거짓 양성률이 5%가 아니라 20~30%까지 치솟습니다. p-value는 실험 중 랜덤하게 출렁이는데, ‘유리한 순간 스톱’은 그 출렁임을 낚아채는 행위거든요. 해법은 단순합니다. 시작 전에 표본 크기 계산기(Evan Miller 등)로 필요 표본을 정하고, 그 수를 채울 때까지 결론을 내리지 않는 것.

💡 실전 체크포인트:
‘2주 도달’ 또는 ‘그룹당 1만 명’ 같은 종료 조건을 실험 시작 전에 문서로 고정하세요. 중간에 지표가 좋아 보여도 조기 종료 압박을 규칙으로 막을 수 있고, 이것만으로 거짓 양성률이 크게 줄어듭니다.


4. 확률분포와 베이즈 정리 — 스팸필터로 감 잡기

① Normal vs Binomial — 실무에서 만나는 두 분포

분포는 딱 두 개만 감을 잡아도 실무의 80%가 커버돼요. 클릭했다/안 했다처럼 성공·실패가 쌓이는 지표는 이항분포, 체류시간·매출처럼 연속값이 평균 주변에 몰리는 지표는 정규분포로 근사합니다. 표본이 충분히 커지면 이항분포도 정규분포처럼 생겨서(중심극한정리), 전환율 검정에 z-검정을 쓸 수 있게 되는 거예요.

구분 이항분포 정규분포
데이터 형태 성공/실패 (클릭, 전환) 연속값 (체류시간, 매출)
대표 지표 전환율, CTR 평균 주문금액, 세션 길이
주의점 표본 작으면 정규 근사 불가 매출은 한쪽으로 치우침(로그 변환 고려)

② Bayes’ Theorem — 사전확률을 데이터로 갱신하는 법

베이즈 정리는 “원래 알던 믿음(사전확률)을 새 증거로 업데이트해 사후확률을 얻는” 공식이에요. 스팸필터가 대표 사례입니다. 전체 메일 중 스팸이 30%(사전확률)인데, ‘무료’라는 단어가 스팸에서는 80%, 정상 메일에서는 5% 등장한다면? ‘무료’가 포함된 메일이 스팸일 사후확률은 계산해 보면 약 87%로 뛰어요. 단어 하나가 증거가 되어 믿음을 갱신한 거죠. 이 사고법은 “양성 판정이 나와도 유병률(사전확률)이 낮으면 실제 환자일 확률은 의외로 낮다” 같은 검정 해석의 함정도 막아줍니다.

파이썬으로 직접 확인하면 감이 확실히 잡혀요. ‘정확도 99%’ 모델이라도 사전확률(유병률)이 낮으면 양성 판정의 신뢰도가 얼마나 떨어지는지 계산해 봅시다. 아래 코드는 Colab에 그대로 붙여넣으면 실행됩니다.

# 베이즈 정리: 양성 판정이 나왔을 때 '진짜 양성'일 확률
prior = 0.001          # 사전확률(유병률/기저율 0.1%)
sensitivity = 0.99     # 진짜 양성을 양성으로 맞힐 확률
false_positive = 0.05  # 음성인데 양성으로 잘못 판정할 확률

posterior = (sensitivity * prior) / (
    sensitivity * prior + false_positive * (1 - prior))
print(f"양성 판정이 진짜 양성일 확률: {posterior:.1%}")  # 약 1.9%

💡 실전 체크포인트:
희귀한 사건(사기·질병·이상탐지)에서는 정확도가 높아도 ‘양성 판정 → 진짜 양성’ 확률이 낮게 나옵니다. 정확도 숫자 하나에 속지 않으려면 항상 사전확률(기저율)을 함께 넣어 사후확률을 계산하세요.


5. 비용 0원 학습 루트 — 영상·scipy·노코드 도구

1) StatQuest & 공돌이의 수학정리노트 — 그림으로 개념 잡기

연재 허브에서 소개한 3.2k 스타 GitHub 자료집에서도 통계 파트의 양대 추천은 StatQuest(유튜브, 영어지만 그림 중심이라 자막으로 충분)와 공돌이의 수학정리노트(한국어, 시각화 훌륭)예요. p-value·가설검정·베이즈 각각 10~20분짜리 영상 하나면 개념이 잡힙니다. StatQuest 기준 시청 순서는 “Statistics Fundamentals” → “p-values, clearly explained” → “Hypothesis Testing and the Null Hypothesis” → “Confidence Intervals” → “Bayes’ Theorem”를 추천해요. 한 영상당 하나의 개념만 잡고 다음으로 넘어가는 게 요령입니다.

2) scipy.stats — Colab에서 직접 검정 돌리기

개념을 봤다면 파이썬으로 직접 검정을 돌려보세요. 설치할 필요 없이 Google Colab에 붙여넣으면 바로 실행됩니다(scipy·statsmodels 기본 내장). 실무에서 가장 자주 쓰는 세 가지만 익혀두면 대부분 커버돼요.

① 두 비율 비교(전환율 A/B 테스트) — z-검정

from statsmodels.stats.proportion import proportions_ztest

# A안: 10,000명 중 520 전환 / B안: 10,000명 중 585 전환
count = [520, 585]
nobs = [10000, 10000]
stat, pvalue = proportions_ztest(count, nobs)
print(f"p-value: {pvalue:.4f}")  # 0.0448 → 유의수준 0.05에서 유의

② 두 평균 비교(체류시간·주문금액) — 독립표본 t-검정

import numpy as np
from scipy import stats

# 두 그룹의 체류시간(초) 표본
a = np.array([182, 190, 175, 201, 168, 195, 188])
b = np.array([201, 210, 198, 220, 205, 215, 208])

# Welch t-검정(분산이 다를 수 있으므로 equal_var=False 권장)
t, p = stats.ttest_ind(a, b, equal_var=False)
print(f"t={t:.3f}, p-value={p:.4f}")

③ 분할표 독립성(전환/미전환 교차표) — 카이제곱 검정

from scipy.stats import chi2_contingency

# 행: A안/B안, 열: [전환, 미전환]
table = [[520, 9480],   # A안: 전환 520, 미전환 9480
         [585, 9415]]   # B안: 전환 585, 미전환 9415
chi2, p, dof, expected = chi2_contingency(table)
print(f"chi2={chi2:.3f}, p-value={p:.4f}")

3) JASP — 코드 없이 t-검정·ANOVA 돌리기

코드가 아직 낯설다면 무료 오픈소스 통계 프로그램 JASP가 좋은 다리예요. jasp-stats.org에서 윈도우·맥·리눅스용을 내려받아 설치하고, 엑셀·CSV 파일을 불러온 뒤 상단 메뉴에서 T-Tests · ANOVA · Regression을 클릭하면 됩니다. p-value뿐 아니라 효과 크기와 신뢰구간까지 표로 함께 나와서, 앞서 배운 ‘유의성 + 효과 크기’를 한 화면에서 확인할 수 있어요. SPSS 대체용으로 논문에도 쓰이는 도구라 신뢰도도 충분합니다.

4) 스프레드시트로 A/B 유의성 빠르게 확인

도구를 새로 배우기 전에, 손에 있는 구글 시트·엑셀만으로도 유의성을 어림할 수 있어요. 두 평균 비교라면 =T.TEST(범위1, 범위2, 2, 3) 한 줄이면 양측 p-value가 나옵니다(마지막 인자 3은 Welch 방식). 두 비율 비교라면 각 그룹 전환율 p̂와 표준오차 √(p̂(1−p̂)/n)로 z값을 만든 뒤 =2*(1-NORM.S.DIST(ABS(z), TRUE))로 양측 p-value를 뽑으면 되고요. 코드나 프로그램 없이 5분이면 감을 잡을 수 있습니다.

💡 실전 연습 — 남의 예시 말고 ‘내 지표’로:
지난 실험의 전환수·표본수를 위 코드나 시트에 그대로 넣고 ① p-value ② 효과 크기(절대·상대 차이) ③ 95% 신뢰구간 세 가지를 한 줄로 정리해 보세요. 그다음 “이 숫자라면 배포·보류·재실험 중 무엇을 택할까?”를 스스로 답해 보면 개념이 의사결정으로 연결됩니다. 표본을 절반으로 줄여 다시 돌려보면 ‘같은 차이도 표본이 작으면 유의하지 않다’가 몸으로 남아요.


6. 이런 분들께 적극 추천합니다

  • A/B 테스트 결과를 해석하거나 보고해야 하는 현업 데이터 분석가
  • 실험 지표로 배포 여부를 결정하는 PM·프로덕트 오너
  • 캠페인 성과의 ‘유의성’을 판단해야 하는 퍼포먼스 마케터
  • ML 공부를 시작했는데 통계 파트에서 막힌 머신러닝 독학러
  • 대학 때 배운 통계를 실무 언어로 재학습하고 싶은 주니어 개발자·기획자
  • 모델 성능 지표(정확도·재현율)를 베이즈 관점으로 읽고 싶은 AI 서비스 담당자

7. 자주 묻는 질문 (FAQ)

Q. 수학을 못하는데 통계 기초를 익힐 수 있을까요?

A. 공식 유도는 필요 없습니다. 실무에서 필요한 건 계산이 아니라 해석이에요. StatQuest처럼 그림으로 설명하는 자료로 개념을 잡고, 계산은 scipy.stats나 JASP에 맡기면 됩니다. 이 글의 다섯 개념(p-value·가설검정·신뢰구간·분포·베이즈)만 잡아도 실무 대화의 대부분을 따라갈 수 있어요.

Q. p-value가 0.05를 살짝 넘으면(예: 0.06) 실험은 실패인가요?

A. 실패 단정은 이릅니다. 0.05는 관례적 기준일 뿐 마법의 선이 아니에요. 효과 크기가 크고 신뢰구간이 대부분 양수 영역이라면, 표본을 늘려 재검정하거나 실험 기간을 사전 계획대로 연장하는 게 합리적입니다. 단, ‘유의해질 때까지 반복’은 peeking이 되니 종료 조건은 미리 정해두세요.

Q. 베이즈 통계와 지금 배운 가설검정 중 뭘 먼저 공부해야 하나요?

A. 순서 고민은 안 하셔도 됩니다. 현업 도구 대부분이 가설검정(빈도주의) 기반이라 이 글의 1~3장이 먼저고, 베이즈는 ‘숫자를 의심하는 감각’으로 병행하면 충분해요. 이후 베이지안 A/B 테스트 도구를 쓰게 되면 그때 깊이 들어가도 늦지 않습니다.


✍️ 글을 마치며

통계 기초는 결국 “이 숫자로 어떤 의사결정을 할 것인가”의 문제예요. p-value의 정의, 오류의 비용, 신뢰구간, 표본 크기, 베이즈 감각까지, 오늘 다룬 다섯 가지만 있으면 실험 결과 앞에서 흔들리지 않는 해석이 가능합니다.

저는 팀의 지난 A/B 테스트 결과를 꺼내 위 scipy 코드에 넣고 신뢰구간을 다시 계산해보는 것부터 시작할 것 같아요. 점 추정치만 보고 내렸던 결정 중 다시 볼 게 분명 나오거든요.

여러분은 어떤 개념이 가장 와닿으셨나요? 댓글로 자유롭게 의견 남겨주세요! 😊

댓글 남기기