p-value의 오해, 유의확률이 말해주지 않는 것
들어가며
분석 결과가 왔다. “새 온보딩 화면 전환율이 기존보다 높다. p = 0.03.” 디자인 보고서에 그렇게 적었다. 회의에서 그 한 줄이 인용된다. “유의미한 차이니까 새 화면으로 갑니다.” 그 한 줄이 릴리스를 결정한다.
그런데 회의가 끝나고 PM이 묻는다. “그 p = 0.03이 정확히 무슨 뜻이에요? 새 화면이 나을 확률이 97%라는 건가요?” 자리에 있던 누구도 정확히 답하지 못한다. 가장 그럴듯한 답이 방금 그 97%다. 그리고 그 답은 틀렸다.
p-value는 디자인 보고서에 가장 자주 등장하는 통계 숫자다. t-test, 카이제곱 검정, ANOVA. 이 시리즈에서 다룬 검정은 전부 마지막에 p-value 한 줄을 내놓는다. 그만큼 자주 쓰이는데, 그만큼 자주 틀리게 읽힌다. 이 글에서는 p-value가 실제로 답하는 게 무엇인지, 그리고 무엇을 답하지 않는지 정리한다. 답하지 않는 쪽이 이 글의 본론이다. 유의확률이 말해주지 않는 것을 알아야, p = 0.03 한 줄에 릴리스 결정을 통째로 얹는 실수를 피한다.
p-value가 실제로 답하는 것
정의부터 정확히 깔자. p-value는 이렇다. 귀무가설(null hypothesis)이 참이라고 가정할 때, 지금 관측된 데이터만큼 극단적이거나 더 극단적인 데이터가 나올 확률.
들어가며의 전환율 예시로 풀어보자. 귀무가설은 “새 화면과 기존 화면의 전환율에 차이가 없다"다. 두 화면이 사실은 똑같다고 가정한다. 그 가정 위에서, 지금 우리가 본 만큼의 전환율 격차가 (또는 그보다 더 큰 격차가) 순전히 표본 우연으로 나올 확률. 그게 0.03이다. 3%. 즉 두 화면이 정말 똑같다면, 이 정도이거나 더 큰 격차는 100번 중 3번쯤 우연히 나온다는 뜻이다.
이 확률이 작을수록, “두 화면이 똑같다"는 가정과 지금 데이터가 잘 안 맞는다는 신호다. 가정이 맞다면 좀처럼 안 나올 데이터가 나왔으니까. 그래서 p-value가 충분히 작으면 귀무가설을 기각한다. 두 화면에 차이가 있다고 본다. 디자인 보고서에서는 보통 0.05를 기준으로 삼는다. p-value가 0.05보다 작으면 통계적으로 유의하다고 적는다.
여기까지가 p-value가 답하는 전부다. 다시 한 줄로 줄이면 이렇다. 귀무가설이 참일 때 지금만큼 극단적인 데이터가 나올 법한 정도. 이 정의를 손에 쥐고 있으면, 다음 절의 오해가 왜 오해인지 자연스럽게 보인다.
p-value가 답하지 않는 것
들어가며의 PM 질문으로 돌아가자. “새 화면이 나을 확률이 97%인가요?” 이 질문이 왜 틀렸는지가 첫 번째 오해다. 그리고 오해는 하나가 아니다.
첫째, p-value는 귀무가설이 참일 확률이 아니다. 앞 절의 정의를 다시 보자. p-value는 귀무가설이 참이라고 가정한 다음의 확률이다. 가정을 조건으로 깔고 데이터의 확률을 잰다. 그런데 “새 화면이 나을 확률 97%“는 데이터를 조건으로 깔고 가설의 확률을 재는 말이다. 방향이 반대다. p = 0.03은 “차이가 없는데도 이 데이터가 나올 확률이 3%“라는 뜻이지, “차이가 없을 확률이 3%“라는 뜻이 아니다. 전자에서 후자로 넘어가려면 사전확률이라는 정보가 더 필요한데, p-value에는 그 정보가 없다. 조건과 결과를 뒤집어 읽는 이 실수가 가장 흔하다.
둘째, p-value는 차이의 크기를 말해주지 않는다. p = 0.001이 나와도 두 화면의 전환율 차이는 0.2%p에 불과할 수 있다. p-value는 차이가 있는지 없는지에만 답하고, 그 차이가 실질적으로 얼마나 큰지는 답하지 않는다. 더 헷갈리는 지점이 있다. 표본이 커지면 아주 작은 차이도 유의하게 나온다. 응답자 3만 명을 모으면 0.2%p 차이도 p < 0.001로 찍힌다. 통계적으로 유의하다는 말과 디자인 관점에서 의미 있다는 말은 다르다. 그 간격을 메우는 게 효과 크기(effect size)다. t-test라면 Cohen’s d, 카이제곱이라면 Cramér’s V. 유의성 옆에는 늘 효과 크기가 따라와야 한다.
셋째, p ≥ 0.05는 차이가 없다는 증명이 아니다. p-value가 0.05를 넘으면 보고서에 “차이 없음"이라고 적고 싶어진다. 하지만 유의하지 않다는 건, 지금 표본에서 차이를 잡아낼 만큼의 근거가 없다는 뜻이지, 차이가 없다고 증명된 게 아니다. 응답자가 20명뿐이라 검정력(statistical power)이 부족해서 못 잡았을 수도 있다. 실제로 존재하는 차이를 표본이 작아서 놓친 경우와, 정말 차이가 없는 경우는 p-value만으로는 구분할 수 없다. 증거의 부재는 부재의 증거가 아니다. p ≥ 0.05일 때는 “차이가 없다"가 아니라 “이 표본에서는 유의한 차이가 관측되지 않았다"라고 적는 게 정확하다.
넷째, 0.05는 자연에 새겨진 경계가 아니다. p = 0.049와 p = 0.051은 근거의 강도가 사실상 같다. 그런데 0.05를 칼처럼 쓰면 앞쪽은 유의, 뒤쪽은 유의하지 않음으로 갈려서, 릴리스하느냐 마느냐가 뒤바뀐다. 0.05는 관습적인 약속이지 진리가 아니다. 분야에 따라 0.01을 쓰기도 하고, 탐색적 분석에서는 0.1을 쓰기도 한다. 그래서 유의/비유의 이분법으로만 적지 말고, p-value 실제 값을 그대로 적는 편이 낫다. 0.03인지 0.0001인지에 따라 독자가 판단할 여지가 생긴다.
다섯째, 한 번의 유의성은 재현을 보장하지 않는다. 유의한 결과가 우연히 나오는 경로가 있기 때문이다. 같은 데이터를 여러 방식으로 잘라 검정을 반복하면, 그중 하나는 우연히 유의하게 나온다. 20번 검정하면 귀무가설이 다 참이어도 평균 한 번은 p < 0.05가 뜬다. 이게 다중비교(multiple comparisons) 문제다. 가장 차이가 큰 셀 하나를 골라 p-value를 강조하거나, 유의하게 나온 지표만 보고서에 남기는 패턴이 여기 걸린다. 그렇게 우연히 걸린 한 번은 데이터를 새로 모아 다시 검정하면 재현되지 않는다. 유의한 결과 하나를 손에 쥐었을 때, 그게 진짜 신호인지 여러 번 시도 중 우연히 걸린 한 번인지는 p-value 혼자 답하지 못한다.
다섯 가지를 관통하는 한 문장은 이렇다. p-value는 하나의 좁은 질문에만 답한다. 나머지 질문, 그러니까 차이가 얼마나 큰지, 없다고 봐도 되는지, 재현될지는 전부 p-value 바깥에 있다.
R에서 p-value를 읽을 때
앞 절의 오해는 대부분 p-value 한 줄만 떼어 읽을 때 생긴다. 그런데 R 출력에는 p-value 말고도 읽을 게 더 있다. R에서 검정을 돌리면 p-value가 결과 한 줄에 박혀 나온다. 전환율 예시를 t-test로 돌려보자. 두 화면 각각 230명에게 노출했고, 전환은 1, 이탈은 0으로 기록했다고 하자.
# 전환 여부를 1/0으로 기록한 벡터 (1 = 전환, 0 = 이탈)
new_screen <- c(rep(1, 56), rep(0, 174)) # 새 화면: 230명 중 56명 전환
old_screen <- c(rep(1, 37), rep(0, 193)) # 기존 화면: 230명 중 37명 전환
t.test(new_screen, old_screen)
이 한 줄을 돌리면 결과가 이렇게 나온다.
Welch Two Sample t-test
data: new_screen and old_screen
t = 2.2174, df = 447.3, p-value = 0.02718
95 percent confidence interval:
0.009 0.156
sample estimates:
mean of x mean of y
0.243 0.161
p-value = 0.027만 보고 유의하다고 넘어가기 쉽다. 그런데 이 출력에는 p-value보다 더 많은 걸 말해주는 줄이 있다. 신뢰구간(confidence interval)이다. 95 percent confidence interval이 0.009에서 0.156이다. 지금 데이터와 양립하는 전환율 차이가 대략 0.9%p에서 15.6%p에 걸쳐 있다는 뜻이다. 폭이 넓다. 차이가 거의 없는 쪽부터 꽤 큰 쪽까지 걸쳐 있다. p-value 한 줄에는 없던 정보가 여기 있다.
그래서 R 출력을 읽을 때는 세 가지를 같이 본다. p-value로 유의성을 보고, 신뢰구간으로 차이가 걸쳐 있는 범위를 보고, 효과 크기로 그 차이의 크기를 본다. 카이제곱이라면 assocstats()로 Cramér’s V를, t-test라면 두 그룹 평균차와 Cohen’s d를 함께 읽는다. p-value만 떼어내 적으면, 앞 절의 오해가 그대로 보고서에 옮겨 붙는다.
실제 값을 적는 습관도 중요하다. “유의함"이라고만 적지 말고 p = 0.027이라고 적는다. “유의하지 않음"이라고만 적지 말고 p = 0.21이라고 적는다. 별표 세 개로 유의성을 표시하는 관례가 있지만, 별표는 0.05라는 경계를 다시 칼처럼 만든다. 값을 그대로 남기면 독자가 근거의 강도를 직접 읽는다.
보고서에 옮길 때 자주 빠지는 것
앞에서 p-value의 정의, 다섯 가지 오해, R 출력 읽는 법까지 봤다. 이제 이걸 디자인 보고서 한 단락으로 옮길 차례다. 옮기는 과정에서 자주 빠지는 게 있다.
첫째, p-value만 적고 효과 크기와 신뢰구간을 빠뜨린다. p < 0.05 한 줄로 끝난 보고서가 의외로 많다. 그 차이가 0.2%p인지 7%p인지가 안 적혀 있으면, 독자는 유의하다는 사실 하나만 손에 쥔 채 릴리스를 결정한다. 유의성과 효과 크기는 한 단락에 같이 적는다.
둘째, 유의하지 않은 결과를 차이 없음으로 적는다. 셋째 오해가 그대로 보고서에 들어온 경우다. p ≥ 0.05일 때는 표본 크기를 함께 적고, “이 표본에서는 유의한 차이가 관측되지 않았다"로 적는다. 표본이 작았다면 그 사실도 남긴다.
셋째, 여러 번 검정한 사실을 감춘다. 지표 열 개를 돌려서 유의하게 나온 두 개만 보고서에 남기면, 다중비교 문제가 숨는다. 몇 개를 검정했고 그중 몇 개가 유의했는지 짧게 적어두면, 독자가 우연의 가능성을 감안해 읽는다.
들어가며의 PM 질문으로 돌아가자. “그 p = 0.03이 정확히 무슨 뜻이에요?” 이 글의 답은 이렇다. 두 화면이 정말 똑같다고 가정했을 때, 지금 본 만큼의 격차가 우연히 나올 확률이 3%라는 뜻이다. 새 화면이 나을 확률이 97%라는 뜻이 아니다. 차이가 얼마나 큰지는 신뢰구간과 효과 크기를 봐야 하고, 유의하다는 사실 하나로 릴리스를 확정하기 전에 그 차이가 디자인 관점에서 의미 있는 크기인지 확인해야 한다.
p-value는 통계 도구가 내놓는 답의 일부일 뿐이다. 좁은 질문 하나에 정확히 답하고, 나머지는 말하지 않는다. 그 나머지를 채워 읽는 게 보고서를 쓰는 디자이너의 몫이다. p = 0.03을 릴리스 결정으로 바꾸는 건 통계가 아니라 사람이 한다.