프로그래밍/AI

[Python] 로또 분석 서비스를 만들어봤다 — 10가지 전략의 알고리즘을 공개합니다 #3

Tiboong 2026. 3. 7. 08:17
728x90

⚠️ 이 글은 통계 분석 교육 목적이며, 로또 당첨을 보장하지 않습니다. 모든 조합의 당첨 확률은 동일하게 1/8,145,060입니다.


시리즈 링크


서비스를 만들었다

작년에 #1, #2를 쓰고 나서... 멈출 수가 없었다.

"조합을 줄이는 필터를 더 만들면 되지 않을까?" "머신러닝 돌리면 뭔가 나오지 않을까?" "이걸 서비스로 만들면 사람들이 쓰지 않을까?"

그래서 진짜로 만들었다.

 

 

LottoLabs — 로또 번호 분석 서비스.

 

Python + FastAPI 백엔드, scikit-learn 기반 추천 엔진, 10가지 분석 전략. 머신러닝도 넣고, Claude API 연동 AI 분석도 넣고, 꽤 그럴듯하게 만들었다.

...그리고 결론부터 말하면,

어떤 분석을 해도 당첨 확률은 1/8,145,060으로 동일하다.

 

이걸 증명하는 데 몇 달이 걸렸다.

근데 그 과정이 재밌었다. 그래서 이 시리즈에서 10가지 전략 각각의 알고리즘을 하나씩 까보려고 한다.


10가지 분석 전략

내가 만든 분석 도구는 이렇게 10개다.

# 전략 설명 신뢰도*

1 🎲 랜덤 생성 완전 무작위 번호 생성 N/A
2 🔥 빈도 균형 Hot/Cold 번호를 조합 78%
3 📊 구간 분산 5구간 균등 분산 전략 72%
4 🔮 패턴 유사성 최근 홀짝 비율 반영 65%
5 🤖 머신러닝 AI 기반 예측 수행 82%
6 🔄 연속 미출현 오래 안 나온 번호 우선 70%
7 🎯 당첨 패턴 과거 당첨 패턴 분석 68%
8 ✨ 황금비율 피보나치 수열 기반 75%
9 🎰 합계 범위 당첨번호 합계 범위 분석 80%
10 ⚡ AI 커스텀 고급 AI 분석 (VIP) 88%

 

*신뢰도라고 써놨지만... 이 수치가 진짜인지는 시리즈 진행하면서 검증할 예정이다. 스포일러: 대부분 랜덤과 차이 없다.

이 시리즈에서 할 일:

  1. 각 전략의 알고리즘을 공개한다
  2. Python 코드를 전부 보여준다
  3. 1,213회 실제 데이터로 검증한다
  4. 솔직하게 "이거 의미 있나 없나" 결론을 낸다

먼저, 데이터부터 보자

분석의 기본은 데이터다. 2002년 12월 7일 1회부터 2026년 최근 1,213회까지, 역대 모든 당첨번호를 가지고 있다.

pandas로 읽어보자.

import pandas as pd
from collections import Counter

df = pd.read_excel('lotto_draws.xlsx')
print(f"총 {len(df)}회차 데이터")
# 총 1213회차 데이터

 

1,213회 × 6개 번호 = 7,278개의 당첨 번호가 뽑혔다.

45개 번호가 완전히 공평하다면, 각 번호는 약 161.7회 나왔어야 한다.

expected = 1213 * 6 / 45
print(f"기대 출현 횟수: {expected:.1f}회")
# 기대 출현 횟수: 161.7회

 

실제로는?


번호별 출현 빈도

all_nums = []
for _, row in df.iterrows():
    for col in ['num1','num2','num3','num4','num5','num6']:
        all_nums.append(int(row[col]))

freq = Counter(all_nums)
sorted_freq = sorted(freq.items(), key=lambda x: x[1], reverse=True)

print(f"1위: {sorted_freq[0][0]}번 ({sorted_freq[0][1]}회)")
print(f"꼴찌: {sorted_freq[-1][0]}번 ({sorted_freq[-1][1]}회)")
# 1위: 34번 (181회)
# 꼴찌: 9번 (133회)

 

34번이 181회로 1위, 9번이 133회로 꼴찌. 차이가 48회나 난다.

"34번이 잘 나오는 번호 아니냐?" 라고 생각할 수 있다.

하지만 빨간 점선(기대값 161.7회)을 보면, 대부분의 번호가 그 근처에 몰려 있다. 1,213번의 추첨에서 48회 차이는 통계적으로 정상 범위 안이다.

 

동전을 1,213번 던져도 앞면이 정확히 606.5번 나오지 않는 것과 같다.


구간별 분포 — 40번대는 왜 적을까?

"40번대가 잘 안 나온다"고 느끼는 사람이 많다. 실제로 그럴까?

구간 번호 개수 실제 비율 기대 비율

1~9 9개 19.5% 20.0%
10~19 10개 23.0% 22.2%
20~29 10개 21.7% 22.2%
30~39 10개 22.5% 22.2%
40~45 6개 13.3% 13.3%

 

40번대가 적게 나오는 건 편향이 아니라 수학이다. 40~45는 번호가 6개뿐이고, 나머지 구간은 9~10개다. 기대 비율 13.3%인데 실제로도 정확히 13.3%.

로또 공은 매우 공평하다.


그래서 이 데이터로 뭘 할 건데?

이 1,213회 데이터를 가지고 다음 편부터 10가지 전략을 하나씩 검증한다.

다음 편 예고:

🔄 #4 "나올 때 됐다" — 연속 미출현 전략의 알고리즘

"오래 안 나온 번호가 나올 확률이 더 높을까?" 서비스에 신뢰도 70%라고 써놨다. 과연 진짜일까? 1,213회 데이터로 백테스트한 결과는... 다음 편에서.


시리즈 전체 목차 (예정)

편 제목 LottoLabs 전략

#3 서비스 소개 + 기본 통계 ← 지금 전체
#4 "나올 때 됐다" 검증 연속 미출현
#5 "또 나온다" 검증 빈도 균형
#6 큰 수의 법칙의 함정 (번외)
#7 번호별 갭 심층 분석 당첨 패턴
#8 40번대의 진실 구간 분산
#9 합계로 얼마나 줄일 수 있나 합계 범위
#10 패턴 유사성 + 황금비율 패턴/황금비율
#11 머신러닝으로 로또 예측? 머신러닝
#12 Claude에게 로또 번호 물어보기 AI 커스텀
#13 전략 종합 실전 조합 종합
#14 결과 검증 -

📊 이 시리즈의 모든 분석은 Python으로 진행되며, 코드 전체를 공개합니다. 🎰 "이것도 되나?" 싶은 분석이 있으면 댓글로 알려주세요.

 

728x90