AI 엔진 4개로 로또 번호를 분석시켜봤더니 — 각각 다른 답이 나왔다

이런 것도 됩니다··20분 읽기·
4가지 AI 엔진으로 로또 번호를 분석하는 과정 — Monte Carlo, LSTM, 빅데이터, 연관규칙 마이닝

"분석해줘" 한마디로는 빈도 카운터밖에 안 나온다

로또 분석 앱을 만들면서 AI한테 "로또 번호 분석해줘"라고 했더니, 각 번호가 몇 번 나왔는지 세는 카운터가 나왔습니다. 1번은 189회, 34번은 175회... 이런 건 동행복권 사이트에서도 볼 수 있거든요.

그래서 질문을 바꿨습니다. 같은 1,187회 데이터를 4가지 다른 관점으로 보면 어떤 차이가 나올까?

당신은 통계학 교수이자 AI 알고리즘 전문가입니다.

[맥락]
- 로또 6/45 데이터 1,187회분이 있습니다
- 단순 빈도 분석은 동행복권 사이트에서도 제공하므로 차별화 안 됨
- "같은 데이터를 다른 렌즈로 보면 다른 답이 나온다"는 경험을 주고 싶습니다

[제약조건]
- TensorFlow.js로 브라우저에서 실행 (서버 없이)
- 각 엔진은 "왜 이 번호를 추천했는지" 근거를 수치로 설명해야 함
- 모든 메트릭은 실제 데이터 기반 (Math.random() 금지)

[요청]
4가지 서로 다른 분석 관점의 AI 엔진을 설계해주세요.
각 엔진의: 분석 철학, 핵심 알고리즘, 입력→출력 흐름, 한계점을 정리해주세요.

엔진 1: Monte Carlo — 5,000번 가상 추첨을 돌린다

알파고에서 영감을 받은 엔진입니다. 실제 구현에서는 TensorFlow.js 신경망과 Monte Carlo Tree Search를 결합했거든요.

당신은 Monte Carlo 시뮬레이션 + TensorFlow.js 전문가입니다.

[구현 요청]
1. 입력 특징 135개를 받는 신경망을 설계해주세요
   - 구조: 135 → 256 → 128 → 64 → 45 뉴런
   - 활성화: ReLU → ReLU → ReLU → Softmax
2. 이 신경망으로 5,000회 시뮬레이션을 실행해서
   - 홀짝 비율 필터 (2:4 ~ 4:2)
   - 고저 비율 필터 (1~22번 vs 23~45번)
   - 총합 범위 필터 (100~170)
   - 연속번호 2개까지만 허용
3. 필터를 통과한 조합 중 "수렴도" 상위 조합을 선별

[핵심]
수렴도는 이전 시뮬레이션 결과와의 overlap 비율로 계산.
Math.random() 기반 가짜 메트릭 절대 금지.

135개 특징이라는 게 뭐냐면, 각 번호의 출현 빈도, 최근 트렌드, 간격, 동반 출현 등을 모두 수치화한 거예요. 45개 번호 × 3가지 특징(빈도/트렌드/간격) = 135개. 이걸 4층 신경망에 넣어서 각 번호의 추천 확률을 뽑아내는 방식입니다.

이 엔진의 철학은 "많이 시도해보면 안정적인 조합이 보인다". 극단적인 조합(올 홀수, 올 고번호 등)은 필터에서 걸러지고, 통계적으로 가장 현실적인 조합이 남습니다.

엔진 2: LSTM — 스마트폰 성능에 따라 분석 깊이가 달라진다

두 번째는 시계열 딥러닝입니다. 최근 20회차의 패턴을 학습해서 다음 회차를 예측하는 건데, 여기서 재미있는 문제가 하나 있었거든요. TensorFlow.js가 브라우저에서 돌아가니까, 사용자 기기 성능에 따라 분석 가능한 깊이가 달라지는 겁니다.

당신은 TensorFlow.js 딥러닝 + 모바일 최적화 전문가입니다.

[문제]
LSTM 모델이 고사양 PC에서는 잘 돌아가는데,
저사양 스마트폰에서 5초 이상 걸리면 사용자가 이탈합니다.

[요청]
사용자 기기 성능을 감지해서 4단계 티어로 분석 깊이를 조절해주세요:
- basic: 최소 연산 (저사양 스마트폰)
- medium: 중간 연산
- high: 고연산 (데스크톱)
- premium: 최대 연산 (고사양 GPU)

각 티어별 LSTM 레이어 수, 시퀀스 길이, 에폭 수를 정의해주세요.

실제 구현된 모델 구조는 LSTM 3층 + Dense 2층입니다. 입력은 [sequence_length, 45] 형태의 시계열 데이터인데, basic 티어에서는 시퀀스를 5회차로 줄이고 레이어를 1층으로 낮추는 거예요. 이렇게 하면 2017년식 스마트폰에서도 3초 내에 결과가 나옵니다.

Monte Carlo가 "수만 번 시도"라면, LSTM은 "최근 흐름에서 다음을 예측"하는 관점입니다. 5회 연속 안 나온 번호가 있다면 나올 확률을 올리고, 3회 연속 나온 번호는 확률을 낮추는 식이죠.

엔진 3: 빅데이터 가중치 — 4가지 요소를 배합한다

세 번째 엔진은 가장 직관적입니다. 45개 번호 각각에 가중치를 매기는 건데, 단순 빈도가 아니라 4가지 요소를 배합한 거예요.

당신은 통계 분석 + 가중치 시스템 전문가입니다.

[요청]
45개 번호에 대해 4가지 요소 기반 종합 가중치를 계산해주세요:

1. 출현 빈도 (30%) — 1,187회 전체에서 각 번호가 몇 번 나왔는지
2. 최근 트렌드 (40%) — 최근 50회차 출현 빈도 (장기와 단기 차이 반영)
3. 출현 간격 (20%) — 마지막 출현 이후 경과 회차 수
4. 계절성 (10%) — 같은 월/분기에 출현 경향

[핵심]
- 최종 선택 시 구간별 균등 선택 (1~10, 11~20, 21~30, 31~45에서 골고루)
- 랜덤 노이즈 추가 금지, 랜덤 셔플 금지

여기서 "최근 트렌드 40%"가 가장 큰 비중인 이유는, 사용자 대부분이 "요즘 잘 나오는 번호"에 관심이 있기 때문입니다. 장기 빈도(30%)만으로는 "지난달부터 갑자기 자주 나오는 번호"를 포착 못 하거든요.

처음에 AI가 만든 버전에서는 15% 랜덤 노이즈를 추가하고 있었습니다. "자연스럽게 보이려고" 넣은 건데, 실제로는 분석 결과를 오염시키는 거였죠. 피드백으로 제거했습니다.

엔진 4: 연관규칙 마이닝 — "같이 나오는 번호"를 찾는다

네 번째는 장바구니 분석(Market Basket Analysis)에서 쓰는 Apriori 알고리즘입니다. "7번을 사는 사람이 23번도 산다" 같은 패턴을 찾는 건데, 이걸 로또에 적용하면 "7번이 나올 때 23번도 같이 나오는 빈도가 우연보다 높은가?"를 계산하는 거예요.

당신은 데이터 마이닝 + 연관규칙 분석 전문가입니다.

[요청]
1,187회 로또 데이터에 Apriori 알고리즘을 적용해서:
1. support(지지도): 두 번호가 함께 출현한 비율
2. confidence(신뢰도): A가 나왔을 때 B도 나올 확률
3. lift(향상도): 독립적 출현 대비 실제 동반 출현 비율

[필터 조건]
- lift > 1.0인 쌍만 의미 있는 연관성으로 판단
- 최소 support 임계값: 전체 회차의 5% 이상
- 결과에서 가장 강한 연관성을 가진 번호 쌍 상위 20개를 근거로 사용

[주의]
신뢰도에 ±20% 랜덤 분산 추가 금지. 계산된 값 그대로 사용.

이 엔진은 다른 3개와 근본적으로 다릅니다. 다른 엔진들이 "어떤 번호가 나올까?"를 보는 반면, 이건 "어떤 번호끼리 같이 나올까?"를 보거든요. 개별 번호의 확률이 아니라 조합의 궁합을 분석하는 겁니다.

4개 엔진의 실제 차이

같은 1,187회 데이터를 넣었을 때 각 엔진이 내놓는 결과의 성격이 확연히 다릅니다.

| 엔진 | 분석 관점 | 선호하는 번호 | 싫어하는 번호 |
|------|----------|-------------|-------------|
| Monte Carlo | 안정성 | 중간 빈도, 고저 균형 | 극단적 고/저빈도 |
| LSTM | 최근 흐름 | 최근 5회 미출현 번호 | 3회 연속 출현 번호 |
| 빅데이터 | 종합 통계 | 장기+단기 모두 상위 | 계절성 낮은 번호 |
| 연관규칙 | 조합 궁합 | lift 높은 쌍 | 독립적으로만 출현하는 번호 |

LSTM이 "이 번호 오랫동안 안 나왔으니 나올 차례"라고 추천한 번호를, Monte Carlo는 "극단적 간격이라 불안정"이라고 제외하는 경우가 실제로 생기거든요. 사용자는 이 차이를 보면서 "어떤 관점이 나한테 맞는지" 선택할 수 있습니다.

가짜 메트릭 청소 — AI가 몰래 넣은 Math.random()

4개 엔진을 구현한 뒤, 한 가지 심각한 문제를 발견했습니다. AI가 만든 초기 코드에서 신뢰도 점수가 Math.random()이었거든요.

  • Monte Carlo: 수렴도 점수 → 랜덤값
  • 빅데이터: 가중치에 15% 랜덤 노이즈 삽입
  • 연관규칙: 신뢰도에 ±20% 랜덤 분산
  • Enhanced: 정확도 65% 고정값
[피드백]
4개 엔진에서 Math.random() 기반 가짜 메트릭을 발견했습니다.
사용자에게 "신뢰도 82%"를 보여주고 있는데 실제로는 랜덤값입니다.

[요청]
각 엔진의 메트릭을 실제 데이터 기반으로 교체해주세요:
- Monte Carlo 수렴도 → 이전 결과와의 overlap 비율
- 빅데이터 랜덤 노이즈 → 완전 제거
- 연관규칙 분산 → 완전 제거
- Enhanced 정확도 → 최근 20회차 매칭률 기반 (40~75% 범위)

4개 파일에서 250줄을 수정했습니다. 이 경험에서 배운 건, AI가 "그럴듯하게 보이는 숫자"를 만들어내는 데 아주 능숙하다는 거예요. 코드 리뷰 없이 넘어갔다면 사용자한테 가짜 신뢰도를 계속 보여줬을 겁니다.

4가지 관점으로 보니까 보이는 것

AI가 로또를 맞출 수 있냐고요? 없습니다. 8,145,060분의 1 확률을 바꿀 수 있는 AI는 없거든요.

하지만 이 프로젝트에서 얻은 건 "분석해줘"와 "4가지 관점으로 분석해줘"의 차이입니다. AI한테 관점을 지정해주면 같은 데이터에서 완전히 다른 인사이트가 나옵니다. Monte Carlo의 안정성, LSTM의 시계열, 빅데이터의 종합 통계, Apriori의 조합 분석... 이건 로또가 아니라 매출 데이터든, 사용자 행동 데이터든 적용할 수 있는 프레임워크이기도 합니다.

현재 pick6.kr에서 4개 엔진 모두 실시간으로 돌아가고 있고, 각 엔진이 "왜 이 번호를 추천했는지" 근거를 수치로 보여줍니다.

공유

댓글