프로그래밍/AI로 통계공부

[Python] 로또 분석 서비스를 만들어봤다 #8 - 로또 합계는 정규분포다

Tiboong 2026. 4. 28. 23:15
728x90

그리고 그게 뭘 의미하는가

로또 분석 12주차. 처음으로 통계가 "통과"하는 검정을 만났다.


12주째 매주 같은 일을 반복하고 있다. 데이터를 들여다보고, 가설을 세우고, 검정을 돌리고, "역시 아무 의미 없다"는 결론으로 끝난다. 그런데 이번 주에 검정 결과가 통과했을 때, 나는 코드를 다시 확인할 수밖에 없었다. 뭐가 잘못됐나?

코드는 멀쩡했다. 결과도 진짜였다.


익숙한 결론들

지난 편에서 "번호마다 성격이 있다"고 했지만, 사실 거의 없었다. 12주 동안의 분석은 매번 같은 결론으로 끝났다 — 로또에 패턴은 없다.

  • 갭 패턴? 자기상관 거의 0
  • "이제 쉰다"? p값 0.38, 의미 없음
  • 큰 수의 법칙? 차이가 오히려 벌어짐
  • 6회 쉰 번호 복귀? 출현율 13.3%로 랜덤(13.3%)과 정확히 같음

매번 다른 가설을 세워도 결과는 한결같이 "통계적으로 무의미"였다. 어찌나 자주 봤는지, 이번에도 검정을 돌리면서 "또 의미 없겠지" 하고 결과 창을 열었다.

 

이번엔 결과가 달랐다.


동전 6개를 던져보자

본격적으로 들어가기 전에 비유 하나만 짚고 가자.

동전 6개를 동시에 던지면 앞면이 몇 개 나올까?

  • 3개: 가장 흔하다 (약 31%)
  • 2개나 4개: 그 다음 (각각 약 23%)
  • 0개나 6개: 드물다 (각각 1.5%)

수만 번 던져서 그래프로 그리면 가운데가 높고 양 끝으로 갈수록 낮아지는, 종 모양이 나온다.

재밌는 건, 매번 던지는 결과는 무작위지만 모인 결과는 항상 같은 모양이 된다는 점이다. 한 번의 결과는 예측할 수 없어도, 만 번을 모으면 미리 그릴 수 있다. 무작위 안에 숨은 질서.

 

이게 정규분포다. 사람 키도, 시험 점수도, 자연 현상 대부분이 이 모양을 따른다. 통계학에서 가장 유명한 분포.

이 그래프에는 두 가지 숫자만 있으면 된다.

  • 평균(Mean): 가운데가 어디인가. 동전 6개의 경우 평균 3개.
  • 표준편차(Standard Deviation): 평균에서 얼마나 흩어져 있는가. 흩어짐이 작으면 날씬한 종, 크면 펑퍼짐한 종.

이 두 숫자만 알면, 어떤 결과가 얼마나 자주 나올지 예측할 수 있다.


로또에 적용해보면?

로또는 1~45 중 6개를 뽑는다. 그 6개를 더한 합계는 얼마쯤 나올까?

  • 최솟값: 1+2+3+4+5+6 = 21
  • 최댓값: 40+41+42+43+44+45 = 255
  • 이 사이 어딘가일 것 같은데, 어디일까?

1~1221회의 답을 모아봤다.

실제 평균: 138.24
실제 표준편차: 30.79

이론 평균 (1~45에서 6개 뽑기): 138.00
이론 표준편차: 29.95

 

소수점 두 자리까지 거의 일치한다.

정규분포에는 외울 만한 규칙이 있다.

  • 평균 ± 1 표준편차: 약 68%가 들어감 → 실제 67%
  • 평균 ± 2 표준편차: 약 95% → 실제 94%
  • 평균 ± 3 표준편차: 약 99.7% → 실제 99.8%

너무 잘 맞는다.

 

파란 막대는 실제 1,221회 데이터, 빨간 곡선은 수학 교과서에 나오는 이론 정규분포다. 곡선이 막대 위를 그대로 따라간다.

이론 평균 138, 이론 표준편차 29.95. 그 곡선을 그대로 그려놓고 33년치 실제 데이터를 그 위에 겹쳐도 거의 어긋나지 않는다.


검정 3종 통과

그래프만 보고 끝낼 수는 없다. 통계적으로 검증해야 한다. 정규분포 검정 3종을 돌렸다.

  • Anderson-Darling: 통계량 0.44 < 임계값 0.75 → 정규분포 유지 ✓
  • D'Agostino-Pearson: p = 0.17 → 정규분포 유지 ✓
  • Kolmogorov-Smirnov: p = 0.45 → 정규분포 유지 ✓

세 검정 모두 "정규분포가 아니다"라는 가설을 기각하지 못했다.

지난 12주 동안 우리가 본 검정들은 다 의미 없거나 음의 결과였다. p값이 0.38, 0.95, 0.96처럼 "랜덤과 다를 바 없다"는 결론들. 이번엔 처음으로 분포 자체가 통계적으로 의미 있는 모양을 가진다는 결과를 만났다.


1221회 검증

지난 토요일 1221회 당첨번호: 6, 13, 18, 28, 30, 36

합계는 131. 평균(138)에서 -7. z-score -0.24. 정규분포의 정중앙 근처, 완전히 평범한 회차다.

그래프 위에 표시한 초록 점선이 1221회 위치인데, 종 모양 한가운데에 자연스럽게 자리잡고 있다. 우리가 메인 30조합에서 5등을 만든 #24 [13, 15, 18, 25, 28, 38]도 합계 137. 평균과 거의 정확히 같았다.


그래서 이게 뭘 의미하는가

여기서 솔직해져야 한다.

정규분포라는 발견은 실용적으로는 거의 도움이 안 된다. 평균 138 근처 ±10 회차는 전체의 27%뿐. 합계 필터를 너무 좁히면 1221회 같은 평범한 회차도 놓친다. 너무 넓히면 필터의 의미가 없어진다.

그러니까 "138 근처로만 사세요"는 잘못된 결론이다.

12주 만에 처음 의미 있는 발견을 했는데, 결국 또 도움이 안 된다는 건가?


처음부터 잘못된 질문이었다

이상하다. 갭도 균등, 빈도도 균등, 모든 패턴 분석이 실패였다. 그런데 합계만큼은 정규분포를 따랐다.

어떻게 이게 가능할까?

 

답은 명료하다. 로또가 너무 무작위라서, 무작위의 수학이 그대로 나타난 것이다.

중심극한정리(Central Limit Theorem)라는 법칙이 있다. 어떤 분포에서든 N개를 뽑아 합치면, N이 충분히 크면 정규분포에 수렴한다. 동전 6개 던지기도, 로또 6개 합계도 같은 원리다.

 

이 법칙이 1,221회 분량의 데이터에서 정확하게 작동했다.

그러니까 우리가 12주 동안 찾던 건 처음부터 잘못된 질문이었다. "패턴이 있을까?"가 아니라, "왜 이렇게 정확하게 무작위인가?"가 진짜 질문이었다.

 

그리고 정규분포는 그 답이다. 로또는 무작위를 흉내내는 것이 아니다. 수학이 정한 무작위의 모양을 그대로 보여주고 있다.

동전 하나를 던지면 앞면이 나올 확률은 1/2. 한 번 던져선 알 수 없다. 열 번 던져도 7:3 같은 비율이 나올 수 있다. 그런데 천 번을 던지면, 만 번을 던지면, 정확히 50%로 수렴한다. 무작위의 깊은 곳에 질서가 숨어 있다는 뜻이다.

로또도 같다. 한 회차의 결과는 예측 불가능하다. 두 회차도, 열 회차도. 하지만 1,221회를 모으면 정규분포가 정확히 나타난다. 평균 138, 표준편차 30. 수학 교과서 그대로.

 

이건 로또를 정복하는 길이 아니다. 하지만 수학이 우리 눈앞에서 작동하는 모습을 보는 일이다. 추첨기에 들어가는 공 하나하나에는 의도가 없다. 그런데 그 의도 없는 것들이 1,221번 모이면, 그래프 한 장으로 정리된다.

 

이것이 통계라는 마법인가? 그리고 12주간 뭔가 비밀이 있을 거라며 요리조리 분석을 멈추지 않은 사람이 만난 새로운 풍경이다.


다음 편에서는 "AI도 못 맞춘다, 로또 당첨번호" 편을 진행합니다.

PyTorch로 직접 트랜스포머를 학습시켜서 1221회를 예측하게 한 결과를 공개합니다.

(스포일러: 트랜스포머가 랜덤보다 못했다.)

728x90