Files
DeepLottery/final_filter_params.py
dsyoon 52e8495148 Add final BallFilter, train/valid scripts, train-derived sum filters
- final_BallFilter: CSV history loader, TRAIN_ALLOW for 6-sum and week diff,
  fix filterOneDigitPattern ball overwrite bug, drop socket call
- final_filter_params: build sum6 and abs_sum_diff from rounds 1-800
- filter_model re-exports BallFilter; train/valid evaluate pass-through counts
- final_filterTest aligned with 1_FilterTest_25 plus optional MC survivors
- README and scripts/run_with_ncue.sh for ncue workflow

Made-with: Cursor
2026-04-08 19:29:10 +09:00

40 lines
1.2 KiB
Python

"""
학습 구간(회차 1~800) 당첨번호로부터 6개 합 및 전주 합 차이 허용 집합만 계산합니다.
`final_BallFilter`의 나머지 필터는 `BallFilter_25`와 동일한 고정 임계값을 유지합니다.
"""
from __future__ import annotations
import os
from dataclasses import dataclass
import pandas as pd
@dataclass(frozen=True)
class TrainAllow:
sum6: frozenset
abs_sum_diff: frozenset
def build_train_allow(max_no: int = 800) -> TrainAllow:
base = os.path.dirname(__file__)
path = os.path.join(base, "resources", "lotto_history.txt")
df = pd.read_csv(path, header=None)
df.columns = ["no", "b1", "b2", "b3", "b4", "b5", "b6", "bn"]
df = df[df["no"] <= max_no].sort_values("no")
rows = []
for _, r in df.iterrows():
b = sorted(int(r[f"b{i}"]) for i in range(1, 7))
rows.append((int(r["no"]), b))
sum6 = {sum(b) for _, b in rows}
abs_sum_diff = set()
for i in range(1, len(rows)):
s = sum(rows[i][1])
ps = sum(rows[i - 1][1])
abs_sum_diff.add(abs(s - ps))
return TrainAllow(sum6=frozenset(sum6), abs_sum_diff=frozenset(abs_sum_diff))
TRAIN_ALLOW = build_train_allow(800)