추천 가젯

[10.분석 플랫폼] 모델 검정 공부하기 - 이항 검정

자 재미있는 통계 공부시간입니다

지난 편에서 카이제곱을 다뤘습니다. 제조업·서비스업을 성사·무산으로 갈라 놓은 칸 네 개짜리 표가 예시였죠. 그런데 실무에서 제일 자주 만나는 표는 칸이 네 개도 아닙니다. 두 개예요. 맞고 틀림. 이게 끝입니다.

예측이 맞았나 틀렸나. 딜이 성사됐나 무산됐나. 주가가 올랐나 내렸나. 전부 이 모양입니다. 오늘은 이런 표를 재는 자를 봅니다.

이항이 무슨 말인가

결과가 두 가지뿐이라는 뜻입니다. 두 항. 앞면/뒷면, 맞음/틀림, 성사/무산. 중간이 없는 경우죠. 그러니까 위에서 본 칸 두 개짜리 표가 곧 이항입니다. 이름이 좀 어려워서 그렇지 우리 수학의 정석에서 배웠던 개념이지요. 물론 기억이 잘 안나는게 당연합니다! 저도 어지간하면 그렇거든요 ㅎㅎ

분포와 검정, 둘을 갈라 놓고 봅시다

"이항분포"와 "이항검정"이 둘 다 나오는데, 역시 분포를 해석하는 하나의 세트입니다.

이항분포 : 찍었을 때 100번 중 몇 번 맞는지 그 확률을 전부 그려 놓은 것. 데이터가 없어도 그릴 수 있습니다 - 측정하는 눈금
이항검정 : 그 눈금 위에 내 결과를 놓고 "여기가 얼마나 드물게 나오는 위치인가"를 읽는 것

지난 편도 똑같은 구조였습니다. 카이제곱분포가 눈금이었고 카이제곱검정이 거기에 대보는 일이었죠. 앞으로 나오는 자들도 대부분 이 짝으로 되어 있습니다.

★ 분포는 미리 그려 둔 눈금, 검정은 거기에 내 숫자를 대보는 행위입니다.

그럼 "정확"은? 겸손을 떠는 이름이 아니라 계산 방식을 그대로 적어 놓은 이름입니다. 영어를 보면 조금 더 정확? 하게 이해가 갈 수 있습니다. Exact Binomial Test 입니다. Correct가 아니지요.

하나, 오늘 풀 문제

모델을 하나 만들었다고 해봅시다. 딜이 성사될지 무산될지를 예측하는 모델입니다. 100건에 대해 예측을 시켰더니 62건을 맞혔다고 예를 들어봅니다.

예측 100건 중 맞음 62 건 → 적중률 62 % 틀림 38 건

그런데 이 문제는 성사 아니면 무산, 둘 중 하나입니다. 동전을 던져 찍어도 50%는 맞습니다. 그러니 62%가 잘한 건지 아닌지는 그 자체로는 알 수 없어요. 찍어서 62개를 맞히는 일이 얼마나 흔한지를 알아야 판단이 됩니다. 흔한 일이라면 이 모델은 아무것도 아니고, 드문 일이라면 뭔가 하고 있는 겁니다.

귀무가설을 못 박아 둡시다

★ 귀무가설 : 이 모델은 찍는 것과 다르지 않다. 한 건을 맞힐 확률이 정확히 50%다.

여기서도 계산이 가능한 쪽을 기본값으로 놓습니다. "모델이 낫다"고 가정하면 얼마나 나은지를 정할 수 없어 계산을 시작할 수가 없거든요. 반면 "찍는 것과 같다"는 50%로 딱 하나입니다.

둘, 찍었을 때 몇 개나 맞나

동전을 100번 던지면 앞면이 몇 번 나올까요. 정확히 50번은 아닙니다. 48번일 수도 53번일 수도 있죠. 그 흔들림이 어느 정도인지를 그려 보면 이렇게 됩니다.

찍었을 때 100번 중 몇 번 맞는가 · 이항분포

                ▁▂▄▆██▆▄▂▁
▁▁▁▁▁▁▁▁▁▁▁              ▁▁■■▁▁▁
가로축은 맞힌 개수입니다. 가운데가 50, 양 끝이 35와 65.

회색이 찍어서 나올 법한 결과들이고, 50 근처가 가장 흔합니다. 초록 막대가 62개 이상 — 이 넓이가 바로 p값입니다.

찍었을 때 이만큼 이상 맞을 확률 55개 이상 ▓▓▓▓▓▓▓▓ 18.4 % 60개 이상 ▓▓ 2.8 % 62개 이상 ▓ 1.05 %

55개는 찍어도 다섯 번에 한 번은 나옵니다. 62개는 백 번에 한 번꼴이고요. 그래서 62개를 맞혔다면 "찍은 것과 같다"고 보기 어렵습니다. 그 정도가 얼마인지를 숫자로 구하는 게 이항검정입니다.

셋, 산식을 놓고 봅시다

p값 = P(X ≥ k), X ~ Binomial(n, p₀) P(X = j) = C(n, j) · p₀ʲ · (1 − p₀)ⁿ⁻ʲ

책에는 보통 이렇게 적혀 있습니다.

귀무가설이 참일 때 관측된 성공 횟수 이상의 값이 나타날 확률을, 이항분포의 확률밀도함수를 직접 합산해 구한 값.

역시 한 번에 안 읽힙니다. 조각을 내서 우리 숫자에 적용해 보겠습니다.

n 시행 횟수. 우리 경우 100건입니다.

p₀ 귀무가설이 말하는 성공 확률. 찍는 것과 같다고 했으니 0.5.

k 실제로 관측한 성공 횟수. 62건입니다.

C(n, j) n번 중 j번을 고르는 경우의 수입니다. 앞면이 첫 번째에 나오든 마지막에 나오든 j번은 j번이니, 그 순서를 전부 세어 곱해 줍니다.

P(X = j) 정확히 j번 맞을 확률. 위의 경우의 수 × 맞을 확률 j번 × 틀릴 확률 (n−j)번.

P(X ≥ k) k번 이상 맞을 확률. 62, 63, 64 … 100까지 전부 더한 값입니다.

왜 62번만이 아니라 62 이상을 다 더하나

여기가 처음 볼 때 좀 이상한 지점입니다. 우리가 관측한 건 62인데 왜 63, 64도 더할까요. 정확히 62번일 확률만 구하면 0.7%가 나옵니다. 그런데 이 숫자는 쓸모가 없습니다. 정확히 50번일 확률도 8%밖에 안 되거든요. 어떤 특정 숫자든 확률은 작게 나옵니다.

예를 들면, 친구가 "나 시험에서 62점 받았어"라고 합니다. 잘한 건가요? 62점만으로는 모릅니다. 그래서 물어보죠. "반에서 몇 등인데?" 여기서 등수를 어떻게 세나요. 62점보다 잘한 애들이 몇 명인지를 셉니다. 62점 딱 그 점수를 받은 사람만 세지 않죠. 그건 등수가 아니니까요.

우리 상황도 똑같습니다. 모델이 62개를 맞혔습니다. 잘한 건지 알려면, 찍었을 때 62개보다 잘 맞히는 경우가 얼마나 되는지를 세야 합니다. 그래서 62, 63, 64 … 100을 전부 더합니다. 더해보니 1.05%입니다. 찍어서 62개 이상 맞는 일이 백 번에 한 번이라는 뜻이고, 상위 1%라는 소리입니다.

★ p값은 "이 결과가 나올 확률"이 아니라 "이만큼 이상 극단적인 결과가 나올 확률"입니다.
용어

이항분포 성공/실패 둘 중 하나인 시행을 n번 했을 때, 성공 횟수가 따르는 분포.

확률질량함수 각 값이 나올 확률을 알려주는 함수. 위 그림의 막대 하나하나가 이 값입니다.

단측검정 한쪽 방향만 보는 검정. "모델이 더 낫다"만 궁금하면 위쪽 꼬리만 봅니다.

양측검정 양쪽을 다 보는 검정. "찍는 것과 다르다"가 궁금하면 62 이상과 38 이하를 함께 봅니다.

넷, 이름에 "정확"이 붙은 이유

앞에서 미뤄 둔 이야기입니다. 이 계산은 어림잡지 않습니다. 62부터 100까지 서른아홉 개의 확률을 하나하나 구해서 그대로 더합니다. 그래서 정확입니다.

보통은 이렇게까지 안 해도 됩니다. 표본이 크면 이항분포가 정규분포에 가까워지기 때문입니다. 그러면 정규분포 공식으로 어림잡아도 답이 비슷하게 나옵니다. 실제로 우리 문제에서는 거의 같습니다.

100건 중 62건, 기준 50 % 정확 계산 p = 0.0105 정규 근사 p = 0.0107 거의 같음

그런데 항상 그런 건 아닙니다. 조건이 나빠지면 또 추정이 어긋나게 됩니다.

근사가 결론을 뒤집는 경우

스타트업에 20건 투자해서 6건이 성공했다고 해봅시다. 업계 평균 성공률은 15%입니다. 우리가 잘한 걸까요.

20건 중 6건 성공, 업계 평균 15 % 정확 계산 p = 0.067 → 기각 못 함 정규 근사 p = 0.030 → 기각 같은 데이터인데 결론이 반대입니다

근사를 믿으면 "우리 투자 실력이 업계 평균보다 낫다"고 발표하게 됩니다. 정확히 계산하면 그렇게 말할 근거가 없습니다. 20건은 아직 판단하기에 적은 표본이거든요.

왜 하필 꼬리에서 어긋나나

정규분포에서 근사값이 가장 잘 맞는 곳은 분포의 가운데입니다. 그리고 우리가 알고 싶은 곳은 언제나 꼬리죠. 하필 근사값이 제일 부실한 위치를 가리키고 있는 셈입니다.

꼬리가 어긋나는 이유는 두 가지입니다. 하나, 이항분포는 0에서 막혀 있습니다. 마이너스 1건 이런건 없으니까요. 성공 확률이 15%처럼 한쪽으로 치우쳐 있으면 왼쪽으로 갈 자리가 없어 분포가 비뚤어집니다. 정규분포는 좌우 대칭이라 이걸 못 담습니다. 둘, 이항분포는 띄엄띄엄한 값만 가집니다. 6건 아니면 7건이지 6.5건은 없죠. 정규분포는 매끄럽게 이어진 곡선이라 그 계단을 뭉개 버립니다.

그리하여 계산이 무겁지도 않으니 그냥 정확한 쪽을 쓰면 됩니다. 요즘은 계산기가 좋으니, 해석만 잘 이해하면 좋겠다는 생각으로 접근하고 있습니다.

다섯, 기준선을 50%로 두면 안 되는 경우

여기서 실무 함정이 하나 나옵니다. p₀를 뭘로 놓을 것인가입니다. 동전이라면 당연히 0.5입니다. 그런데 주가 방향을 맞히는 모델이라면 얘기가 다릅니다. 지난 20년 코스피에서 오른 날의 비율이 정확히 50%가 아니기 때문입니다. 주식시장은 장기적으로 우상향해 왔습니다. 그래서 오른 날이 내린 날보다 아주 조금 많습니다.

이 플랫폼이 쓰는 구간에서 코스피 상승일 비율을 세어 보니 50.3%였습니다.

실제 상승일 비율 50.3 % "항상 오른다"고만 답하는 모델 50.3 % 적중 기준을 50.0 % 로 두면 0.3 %p 를 공짜로 얻고 시작합니다

"무조건 상승"이라고만 답하는 모델도 50.3%를 맞힙니다. 아무 정보가 없는데도요. 즉, 상승론자와 하락론자가 매번 주구장창 본인의 의견을 얘기해도 어짜피 그 확률은 절반입니다. 그러니 통계에서는 엄밀하게 기준선은 50%가 아니라 50.3%여야 합니다. 이걸 놓치면 적중률 50.2%짜리 모델을 두고 "찍는 것보다 낫다"고 발표하게 됩니다.

★ 귀무가설의 p₀는 "아무것도 안 했을 때의 성적"이어야 합니다. 그게 50%가 아닌 경우가 실무에는 흔합니다.

여섯, 여기서 미끄러집니다

① n은 관측이 서로 독립일 때만 n입니다

이게 가장 크고 가장 자주 빠지는 함정입니다. 산식의 n은 "서로 무관한 시행이 몇 번이냐"인데, 실무 데이터는 대체로 무관하지 않습니다. 주가 방향 예측 5,000건이 있다고 해봅시다. 같은 달의 예측들은 함께 맞고 함께 틀립니다. 그달 시장이 어떻게 움직였느냐에 다 같이 묶여 있으니까요. 그렇다면 실질적인 표본 수는 5,000이 아니라 그 기간의 개월 수에 가깝습니다. n을 부풀려 쓰면 p값이 실제보다 훨씬 작게 나옵니다. 그리고 이 실수는 언제나 나에게 유리한 쪽으로 틀립니다.

② 단측인지 양측인지 먼저 정해야 합니다

저울이 고장 났는지 확인하고 싶습니다. 5kg짜리 추를 올렸는데 5.3kg이 나왔다면? 이상하죠. 그런데 4.7kg이 나와도 이상합니다. 많이 나와도 고장, 적게 나와도 고장. 이게 양측입니다. 이번엔 다이어트 약을 팝니다. 광고에 "살이 빠집니다"라고 썼어요. 이 광고가 참인지 확인할 때, 살이 빠졌는지만 봅니다. 한쪽만 봅니다. 이게 단측입니다. 문제는 결과를 보고 나서 정하는 것입니다. 양측으로 계산했더니 0.06이 나와서 "사실 나는 처음부터 낫다는 걸 보려던 거야" 하고 단측으로 바꿔 0.03을 만드는 식이죠. 그건 검정이 아니라 자기설득입니다. 계산하기 전에 정해 두고 적어 두세요.

③ 적중률이 높다고 수익이 나는 건 아닙니다

이건 통계가 아니라 해석의 함정인데, 실무에서 훨씬 중요합니다. 적중률 62%여도 맞을 때 조금 벌고 틀릴 때 크게 잃으면 결과는 마이너스입니다. 이항검정은 "맞았다/틀렸다"만 셉니다. 얼마나 맞았는지는 보지 않아요. 손익은 따로 재야 합니다.

일곱, 플랫폼에서 실제로 대 봤습니다

방향을 맞히는 SVM 분류기를 이 자로 심사했습니다. SVM이 뭔지 한 줄만 소개하겠습니다. 머신러닝 모델이구요, Support Vector Machine, 서포트 벡터 머신입니다. 데이터를 두 무리로 갈라놓는 경계선을 긋는 방법이에요. 여러 지표를 넣으면 "내일은 오르는 쪽"이라고 한 표를 던집니다. 오늘 검정에서 필요한 건 딱 여기까지입니다. 우리가 세는 건 그 답이 맞았나 틀렸나, 둘뿐이거든요.

★ 앞의 두 자는 모델 안에서 해석해야 했습니다. t검정은 회귀계수가, 카이제곱은 표가 있어야 했죠. 이항검정은 답만 있으면 됩니다. 그래서 회귀든 부스팅이든 SVM이든, 심지어 사람이 감으로 찍은 것이든 맞음/틀림만 나오면 전부 같은 자로 잽니다. 모델은 도구고 검정은 자라는 말이 가장 잘 드러나는 자리예요.
예측 5,000 건 적중률 54.5 % 기준선 50.3 % ← 상승일 비율 이항검정 p = 2.13e-09 = 0.00000000213

숫자만 보면 압도적입니다. 우연으로 보기 어렵죠. 그런데 여기서 멈추면 안 됩니다. 위의 함정 ①이 그대로 걸려 있거든요. 5,000건의 예측이 서로 독립일 리가 없습니다. 같은 달 예측들이 함께 움직이니까요. 2월에 시장이 계속 올랐다고 해봅시다. 모델이 "오른다"는 쪽으로 답하는 성향이 조금이라도 있으면, 그 달 20일치 예측이 거의 다 맞습니다. 모델이 잘해서가 아니라 그 달이 그런 달이었기 때문이에요.

월 단위로 뭉친다는 게 뭔가

그래서 예측 5,000건을 한 줄로 세워 놓고 세는 대신, 달마다 묶어서 그 달이 잘한 달인지 못한 달인지를 하나로 판정합니다. 그리고 "잘한 달"이 몇 개인지를 셉니다.

건별로 세면 ○ × ○ ○ × ○ × ○ ○ ○ ... 5,000 개 월별로 뭉치면 2월 잘함 3월 못함 4월 잘함 5월 잘함 ... 표본은 개월 수만큼으로 줄어듭니다

표본 수가 확 줄어드니 검정이 훨씬 깐깐해집니다. 대신 남은 관측들은 서로 독립에 가깝습니다. 2월 시장과 5월 시장은 같이 움직일 이유가 없으니까요. 이렇게 관측을 묶어서 다루는 것을 클러스터라고 부릅니다. 여기서는 달이 클러스터고요. 기업 데이터라면 같은 기업의 여러 해 관측이 한 클러스터가 됩니다. 이 이야기는 다섯째 편(표준오차 보정)에서 본격적으로 다룹니다.

건별 검정 p = 2.13e-09 표본 5,000, 독립 아님 월별 검정 p = 0.002 표본 훨씬 작음, 독립에 가까움 두 번 다 통과

p값이 2.13e-09에서 0.002로 올라갔습니다. 이 지나치게 작은 숫자보다 훨씬 겸손해진 숫자입니다. 그리고 이쪽이 믿을 만한 값이고요.

유리한 가정을 하나 걷어낼 때마다 p값은 커집니다. 그 커진 값을 가지고 통과하면, 그때 아 이 결과를 믿을 수 있습니다.

정리하면

점점 우리의 측정도구가 늘어납니다. 할 수 있는 일들이 늘어나고 있군요. 지금까지 셋을 한 표에 넣으면 이렇게 됩니다.

재는 대상 모델 안을 확신 크기 열어야 하나 t검정 연속형 값 하나 예 t 계수 카이제곱 여러 칸의 빈도 예 χ² V 이항검정 맞음 / 틀림 둘 아니오 p 적중률−기준

어느 자를 쓰든 "우연이 아닌가"와 "그래서 얼마나 큰가"는 항상 따로 물어야 합니다. t는 계수로, χ²는 V로, 이항검정은 적중률에서 기준선을 뺀 값으로요.

세 자의 공통 구조 ① "아무 일도 없다" 를 가정하고 시작한다 ② 그 가정이 맞다면 나왔어야 할 값을 계산한다 ③ 실제와 얼마나 벌어졌는지 잰다 ④ 우연으로 설명 안 되면 ① 을 버린다 이항검정만의 특징 ③ 에서 근사하지 않고 확률을 직접 다 더한다 그래서 표본이 작거나 확률이 치우쳐도 쓸 수 있다

다음 편은 다중검정 보정입니다. 오늘까지는 검정을 한 번씩만 했는데, 실무에서는 여러 개를 동시에 돌리죠. 그때 무슨 일이 벌어지는지, 그리고 왜 스무 번 검정하면 세 번 중 두 번꼴로 헛것이 하나 걸리는지를 다룹니다. 제가 팩터 여섯 개를 검정했다가 전원 기각당한 이야기도 같이 하겠습니다.

https://k-valuechain.com/lab

작성: 2026. 8. 이알렉산드로

댓글

가장 많이 본 글