dsyoon 919f2e19bb refactor: apply portfolio cap and align project docs
Keep the fixed 11-number set intact while adding a second-stage portfolio selection that caps final recommendations to the 70,000 KRW budget, and update docs/data/scripts to match the current project structure and runtime flow.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-05-08 10:37:03 +09:00
2026-02-25 18:32:11 +09:00
2026-02-25 18:32:11 +09:00
2026-02-25 18:32:11 +09:00
2026-02-25 18:32:11 +09:00
2026-02-25 18:32:11 +09:00
2026-02-25 18:32:11 +09:00
2026-02-25 18:32:11 +09:00
2026-03-03 08:51:53 +09:00
2026-02-25 18:32:11 +09:00
2026-02-25 18:32:11 +09:00
2026-02-25 18:32:11 +09:00
2026-04-12 10:55:46 +09:00
2026-02-25 18:32:11 +09:00
2026-02-25 18:32:11 +09:00

deeplottery

deeplottery는 로또 번호를 예측하는 프로젝트가 아니라, 전체 조합(45C6)을 규칙 기반으로 필터링해 후보를 줄이는 시스템입니다.
핵심은 BallFilter 엔진이며, 운영 실행(final_practice.py)과 검증(final_FilterTest.py)이 분리되어 있습니다.

목표와 설계 의도

  • 목표: 통계/패턴 기반 규칙으로 비효율 조합을 제거하고 후보군을 관리 가능한 크기로 축소
  • 설계 의도:
    • 필터 규칙은 final_BallFilter.py 한 곳에서 관리
    • 운영 추천 생성과 과거 회차 검증을 분리하여 반복 개선
    • 같은 엔진을 운영/검증에서 공통 사용해 일관성 유지

전체 아키텍처

  1. 데이터 수집/갱신
    • DataCrawler.py가 로또 API를 호출해 resources/lotto_history.json, resources/lotto_history.txt 갱신
  2. 필터 엔진 로딩
    • final_BallFilter.pyBallFilter가 과거 당첨 이력을 메모리로 적재
  3. 운영 후보 생성
    • final_practice.py가 다음 회차 기준 전체 조합을 순회하며 BallFilter.filter()로 통과 조합만 저장
  4. 필터 성능 검증
    • final_FilterTest.py가 과거 당첨번호를 기준으로 어떤 필터가 당첨을 걸렀는지/통과시켰는지 분석

핵심 파일 설명

  • final_BallFilter.py
    • 프로젝트 핵심 엔진
    • extract_final_candidates()에서 규칙 기반 탈락 사유(set)를 생성
    • filter()는 실사용 진입점이며, 반환 set이 비어 있으면 통과
  • final_practice.py
    • 운영 실행 스크립트
    • predict1() 고정 11조합을 유지
    • predict2()는 1차 필터 통과 조합을 만든 뒤, 2차 포트폴리오 선별로 최종 추천 수를 제한
    • 총 추천 개수는 고정수 포함 최대 70게임(70,000원) 상한을 적용
    • 결과를 resources/recommend_ball.biz_25.json에 저장하고 Telegram 전송
  • final_FilterTest.py
    • 검증/분석 스크립트
    • find_filter_method()로 회차별 필터 적중 통계 확인
    • find_final_candidates()로 특정 회차 후보군 재생성
  • DataCrawler.py
    • 과거 이력 파일 수집/보강
    • 네트워크 실패 재시도/백오프 및 누락 회차 보완 처리
  • TelegramBot.py
    • 추천 결과 메시지 전송
  • resources/
    • lotto_history.json: 회차별 원본 JSON 라인 데이터
    • lotto_history.txt: 회차별 CSV 형태 요약 데이터
    • recommend_ball.biz_25.json: 회차별 추천 결과 저장 파일

실행 방법

Python 실행은 Miniconda ncue 환경을 사용합니다.

conda activate ncue
python DataCrawler.py
python final_FilterTest.py
python final_practice.py

동작 방식 상세

  • 입력: 1~45에서 6개 조합 전체
  • 처리:
    • 1차: BallFilter 규칙 필터 적용
    • 2차: 고정 11조합을 유지한 채, 겹침도 기반 포트폴리오 선별로 후보 축소
  • 출력:
    • 탈락 조합: 탈락 사유 집합 반환
    • 최종 추천 조합: 예산 상한(최대 70,000원) 내에서 저장/전송

주요 규칙 범주 예시:

  • 합/평균 및 전주 대비 차이
  • 앞 3개/뒤 3개 합 패턴
  • 고저 비율, 끝자리 패턴, AC 값
  • 배수 개수(3/4/5/6 등)
  • 최근 N주 출현 빈도/중복 관련 규칙
  • 비선호 2개/3개 조합 제거 규칙

디렉터리 현재 상태 (2026-05-08)

최상위 파일/디렉터리 현황

  • 실행/핵심
    • DataCrawler.py
    • final_BallFilter.py
    • final_FilterTest.py
    • final_practice.py
    • final_Practice.py (구버전 스크립트)
    • TelegramBot.py
  • 레거시 참조 파일
    • BallFilter_22.py, BallFilter_25.py
    • 1_FilterTest_22.py, 1_FilterTest_25.py
    • 2_FilterTestReview_22.py, 2_FilterTestReview_25.py
    • 3_Practice_22.py, 3_Practice_25.py
    • fixed10.py
  • 데이터/설정
    • resources/
    • requirements.txt
    • scripts/

Git 작업 트리 상태(요약)

  • 수정됨: DataCrawler.py, README.md, final_BallFilter.py, final_practice.py, resources/lotto_history.json, resources/lotto_history.txt
  • 삭제됨: filter_model.py, final_filter_params.py, train.py, valid.py
  • 신규(미추적): resources/recommend_ball.biz_25.json

주의 사항

  • 이 프로젝트는 통계적 휴리스틱 기반의 후보 축소 도구이며 당첨을 보장하지 않습니다.
  • 필터가 강해질수록 후보 수는 줄지만, 실제 당첨 조합을 배제할 위험도 함께 증가합니다.
Description
No description provided
Readme 717 KiB
Languages
Python 100%