사전 귀무가설
개념

귀무가설

gabury1고친 사람 github-actions[bot]

귀무가설은 「아무것도 달라지지 않았다」고 먼저 세워 두는 가정입니다. 잰 데이터가 이 가정과 얼마나 어긋나는지를 보고 차이가 있다고 말할지 정합니다. 새 버전을 올린 뒤 응답 시간이 정말 달라졌는지 가릴 때 이 가정에서 출발합니다.

쉽고 빠른 이해

귀무가설은 「차이가 없다」는 가정입니다. 새 버전을 올렸더니 평균 응답 시간이 0.20초에서 0.21초가 됐다고 해 봅니다. 이때 「두 버전의 평균 응답 시간은 같다」가 귀무가설입니다.

같은 코드를 두 번 재도 값은 매번 조금씩 다릅니다. 이 가정 없이 차이만 보면 그 흔들림을 개선이나 성능 저하로 잘못 읽습니다.

  1. 먼저 「차이가 없다」고 가정합니다
  2. 그 가정 아래서 지금만큼 큰 차이가 우연히 나올 확률을 계산합니다
  3. 그 확률이 미리 정한 기준보다 작으면 가정을 버립니다. 그리고 「달라졌다」고 판정합니다

대가는 판정이 틀릴 수 있다는 것입니다. 차이가 없는데 가정을 버리기도 합니다. 차이가 있는데 못 버리기도 합니다. 가정을 못 버렸다고 해서 차이가 없다는 것이 증명되지도 않습니다.

상세

법정은 피고인을 처음부터 무죄로 보고 재판을 시작합니다. 검사가 내놓은 증거가 무죄라고 보기 어려울 만큼 강할 때만 유죄를 선고합니다. 증거가 모자라면 무죄로 풀어 줍니다.

통계로 무언가 달라졌는지 가릴 때도 같은 순서를 밟습니다. 먼저 「차이가 없다」고 가정합니다. 데이터가 이 가정과 도저히 안 맞을 때만 「차이가 있다」고 말합니다. 이렇게 처음에 세워 두는 「차이가 없다」는 가정이 귀무가설입니다.

이 절은 동전 던지기와 응답 시간 두 예를 가지고 귀무가설을 따라갑니다. 먼저 귀무가설을 어떻게 적는지 봅니다. 그다음 이 가정 아래서 무엇을 계산하고 어떻게 판정하는지 봅니다. 마지막으로 판정이 틀리는 방식과 흔한 오해를 봅니다.

가설과 귀무가설

가설은 데이터로 확인해 보려고 세운 주장입니다. 「새 버전의 응답 시간이 더 길다」도 가설입니다. 「이 동전은 앞뒤가 반반으로 나온다」도 가설입니다. 둘 다 맞는지 틀린지를 데이터로 따져 볼 수 있습니다.

귀무가설은 그 가운데 「차이가 없다」나 「효과가 없다」를 말하는 가설입니다. 영어로는 null hypothesis 라고 합니다. null 은 「없음」이라는 뜻입니다. 한국어 이름의 「귀무」도 「없음으로 돌아간다」는 뜻입니다.

기호로는 H₀ 라고 적습니다. 「에이치 제로」로 읽습니다. 「영가설」이라고 부르기도 합니다. 귀무가설·H₀·영가설은 모두 같은 것을 가리킵니다.

무엇을 비교하느냐에 따라 귀무가설의 문장이 달라집니다. 아래 표는 세 경우를 나란히 놓았습니다.

비교하려는 것 귀무가설
동전 하나 앞면과 뒷면이 반반으로 나온다
배포 전후의 응답 시간 두 버전의 평균 응답 시간이 같다
가입 버튼 색 두 가지 두 화면의 가입 비율이 같다

세 문장 모두 「같다」나 「반반이다」로 끝납니다. 귀무가설은 언제나 차이가 0인 상태를 적습니다.

짝이 되는 대립가설

귀무가설에는 반대편 가설이 짝으로 붙습니다. 귀무가설이 틀렸을 때 대신 받아들일 주장입니다. 이것을 대립가설이라고 부릅니다. 기호로는 H₁ 로 적습니다.

응답 시간이라면 대립가설은 「두 버전의 평균 응답 시간이 다르다」입니다. 동전이라면 「앞뒤가 반반으로 나오지 않는다」입니다. 대개 두 가설은 가능한 경우를 나눠 가집니다. 하나가 틀리면 다른 하나가 맞습니다.

「없다」 쪽을 세우는 까닭

같은 서버에 같은 요청을 백 번 보내도 응답 시간은 매번 조금씩 다릅니다. 그 순간 함께 돌던 작업과 네트워크 상태가 매번 다르기 때문입니다. 그래서 차이가 눈에 보여도 그것이 코드 탓인지 흔들림 탓인지는 차이만 봐서는 모릅니다.

이것을 가리려고 판정을 거꾸로 된 질문에서 시작합니다. 알고 싶은 것은 「느려졌나」입니다. 그런데 가정은 「안 달라졌다」로 세웁니다.

까닭은 계산에 있습니다. 「안 달라졌다」는 차이가 0인 한 가지 상태로 정해져 있습니다. 그래서 그 상태에서 우연이 어떤 결과를 얼마나 자주 만드는지 계산할 수 있습니다.

「느려졌다」는 계산의 출발점이 못 됩니다. 0.001초 느려졌는지 1초 느려졌는지가 안 정해져 있기 때문입니다. 가능한 경우가 끝없이 많아 하나로 계산할 수 없습니다.

귀무가설 아래서 계산하는 확률

귀무가설이 맞다고 치고 확률 하나를 계산합니다. 지금 본 결과만큼, 또는 그보다 더 귀무가설에서 벗어난 결과가 우연히 나올 확률입니다. 이 확률을 p값이라고 합니다. p 는 확률을 뜻하는 영어 probability 의 머리글자입니다.

동전으로 계산해 봅니다. 귀무가설은 「앞뒤가 반반으로 나온다」입니다. 이 동전을 열 번 던졌더니 열 번 모두 앞면이 나왔습니다.

반반인 동전을 열 번 던지면 앞뒤가 나오는 순서는 2를 열 번 곱한 1024가지입니다. 순서마다 나올 확률은 모두 같습니다.

대립가설이 「반반으로 나오지 않는다」라서 앞면 쪽으로 쏠려도, 뒷면 쪽으로 쏠려도 벗어난 결과로 칩니다. 그래서 열 번 모두 앞면인 순서와 열 번 모두 뒷면인 순서를 함께 셉니다. 두 가지이므로 p값은 1024분의 2, 약 0.002입니다.

이 값은 「귀무가설이 맞다면 오백 번에 한 번꼴로 나올 결과를 봤다」는 뜻입니다. 이렇게 드문 결과가 나왔다면 동전보다 가정 쪽을 의심하게 됩니다.

응답 시간처럼 이어진 값은 동전처럼 경우를 셀 수 없습니다. 그 대신 평균이 평소 얼마나 흔들리는지를 계산에 씁니다. 방법은 달라도 「귀무가설이 맞다면 이만한 차이가 얼마나 자주 나오나」를 묻는 것은 같습니다.

기각과 기각하지 못함

p값이 얼마나 작아야 귀무가설을 의심할지는 데이터를 보기 전에 정해 둡니다. 이 기준을 유의 수준이라고 부릅니다. 기호로는 그리스 문자 알파(α)로 적습니다. 흔히 0.05를 씁니다.

p값이 유의 수준보다 작으면 귀무가설을 버립니다. 이것을 귀무가설을 기각한다고 말합니다.

기각했을 때 그 차이가 통계적으로 유의하다고 판정합니다. 우연만으로는 설명하기 어려운 차이라는 뜻입니다. 동전의 p값 0.002는 0.05보다 작으므로 「반반인 동전」이라는 가정을 기각합니다.

p값이 유의 수준보다 작지 않으면 귀무가설을 기각하지 못합니다. 이때는 「귀무가설을 채택한다」고 하지 않습니다. 「기각하지 못한다」고 말합니다.

「기각하지 못했다」는 「이번 데이터로는 차이를 가려내지 못했다」는 뜻입니다. 차이가 없다는 것을 증명한 것이 아닙니다.

차이를 가려내지 못하는 흔한 원인은 표본이 작은 것입니다. 표본은 전체 가운데 일부만 뽑아 잰 값의 묶음입니다. 응답 시간을 백 번 쟀다면 그 백 개가 표본입니다. 표본이 작으면 평균이 크게 흔들리므로 있는 차이도 흔들림에 묻혀 안 보입니다.

지금까지 본 순서를 그림 하나로 모읍니다.

flowchart TD
    A["귀무가설을 세운다 · 차이가 없다"] --> B["유의 수준을 정한다 · 흔히 0.05"]
    B --> C["데이터를 모아 p값을 계산한다"]
    C --> D{"p값이 유의 수준보다 작은가"}
    D -->|"작다"| E["귀무가설을 기각한다 · 유의하다"]
    D -->|"작지 않다"| F["기각하지 못한다 · 차이를 가려내지 못했다"]

그림에 담긴 절차 전체를 가설 검정이라고 합니다. 가설을 세우고 데이터로 기각할지 정하는 일입니다. 줄여서 「검정」이라고도 합니다.

판정이 틀리는 두 방식

기각하든 못 하든 판정은 틀릴 수 있습니다. 데이터는 언제나 흔들리기 때문입니다.

귀무가설이 맞는데 기각하는 것이 1종 오류입니다. 차이가 없는데 「달라졌다」고 알리는 오경보입니다.

귀무가설이 틀렸는데 기각하지 못하는 것이 2종 오류입니다. 있는 차이를 놓친 것입니다.

귀무가설이 맞는지 틀리는지와 판정을 맞대면 네 경우가 나옵니다. 오류 두 칸은 대각선으로 놓입니다.

판정 귀무가설이 맞을 때 귀무가설이 틀릴 때
기각한다 1종 오류 맞게 잡았다
기각하지 못한다 맞게 넘겼다 2종 오류

1종 오류가 날 확률은 유의 수준이 정합니다. 유의 수준을 0.05로 잡으면 아무것도 안 달라졌을 때도 스무 번에 한 번꼴로 귀무가설을 기각합니다.

유의 수준을 낮추면 1종 오류는 줄어듭니다. 그 대신 2종 오류가 늘어납니다. 작은 차이는 기준을 못 넘어 놓치기 때문입니다.

귀무가설이 틀렸을 때 그것을 기각해 내는 확률이 검정력입니다. 유의 수준을 그대로 두고 표본을 늘리면 검정력이 올라갑니다. 표본이 클수록 평균의 흔들림이 줄어 작은 차이도 드러납니다.

귀무가설을 두고 흔히 하는 오해

p값을 「귀무가설이 맞을 확률」로 읽는 것이 가장 흔한 오해입니다. p값 0.05는 「차이가 없을 확률이 0.05」가 아닙니다. 「차이가 없다면 이만한 결과가 나올 확률이 0.05」입니다. 조건과 결과의 방향이 반대입니다.

귀무가설을 기각했다고 차이가 크다는 뜻도 아닙니다. 표본이 아주 크면 평균의 흔들림이 아주 작아집니다. 그러면 0.0001초 같은 작은 차이로도 귀무가설이 기각됩니다.

그래서 얼마나 달라졌는지가 궁금하면 귀무가설 검정만으로는 답이 안 나옵니다. 차이의 크기를 재는 값이 효과 크기입니다. 0.20초가 0.21초가 됐다면 두 평균의 차이 0.01초가 가장 단순한 효과 크기입니다.

차이의 크기와 흔들림을 함께 보여 주는 방법도 있습니다. 「느려진 정도는 0.005초에서 0.015초 사이일 것이다」처럼 범위로 적는 신뢰 구간입니다.

백엔드 실험에서 세우는 귀무가설

백엔드 개발자가 가설 검정을 만나는 대표적인 경우가 둘 있습니다.

첫째는 A/B 테스트입니다. 사용자를 둘로 나눠 서로 다른 화면을 보여 줍니다. 그다음 두 무리의 결과를 비교합니다. 귀무가설은 「두 화면의 가입 비율이 같다」 같은 문장입니다.

둘째는 성능 회귀를 가려낼 때입니다. 바꾸기 전과 후를 각각 여러 번 재 두 표본을 만듭니다. 귀무가설은 「두 버전의 평균 응답 시간이 같다」입니다.

이 가정을 기각하는 것만으로는 성능 회귀로 보지 않습니다. 차이가 미리 정한 허용 폭까지 넘어야 성능 회귀로 봅니다.

유의 수준 0.05는 검정 한 번에서 1종 오류가 날 확률입니다. 검정을 여러 번 하면 그중 하나라도 잘못 기각될 확률이 커집니다.

지표 스무 개를 각각 유의 수준 0.05로 검정한다고 해 봅니다. 아무것도 안 달라졌고 지표끼리 서로 영향을 주지 않는다면, 스무 번 모두 기각하지 않을 확률은 0.95를 스무 번 곱한 약 0.36입니다. 그러니 하나라도 기각될 확률은 약 0.64입니다.

검정을 여러 번 할수록 잘못된 기각이 늘어나는 이 현상이 다중 비교 문제입니다.

관련 항목

귀무가설과 짝을 이루는 가설

대립가설 · 연구 가설 · 단측 검정 · 양측 검정

귀무가설을 시험하는 절차와 값

가설 검정 · p값 · 유의 수준 · 검정 통계량 · 기각역 · 통계적 유의성

귀무가설을 시험하는 검정 방법

t 검정 · z 검정 · 카이제곱 검정 · 순열 검정 · 맨-휘트니 U 검정

귀무가설 판정이 빠지는 오류와 보정

1종 오류 · 2종 오류 · 검정력 · 다중 비교 · 본페로니 보정 · p-해킹

귀무가설 기각과 함께 보는 차이의 크기 지표

효과 크기 · 신뢰 구간 · 실무적 유의성 · 표준 오차 · 표본 크기

귀무가설 검정을 쓰는 실험과 측정

A-B 테스트 · 성능 회귀 · 벤치마크 · 응답 시간 · 실험 설계

귀무가설 검정과 맞세워지는 추론 방식

베이즈 추론 · 베이즈 인자 · 사후 확률 · 빈도주의 통계

귀무가설 검정의 바탕이 되는 개념

표본 · 모집단 · 평균 · 표준편차 · 확률 분포 · 정규 분포

귀무가설이 속하는 상위 분류

통계 · 추론 통계 · 데이터 분석

다른 이름: null hypothesis · H0 · 영가설 · 귀무 가설