#노답로또 #고민된다 #어느것을고를까요
로또 분석을 이어가는 와중에 한가지 문제가 발생했다.
우선 지난번 코드를 살짝 고쳐봤다.
import numpy as np
# all_combinations # 총 조합 개수: 8145060, 모든 조합의 리스트
# history_data # 1129회차 까지의 1등 당첨번호 리스트
history_data = df_final.select(pl.col('당첨번호')).to_numpy()
history_data = history_data.reshape(-1, len(history_data))[0]
history_data = [i[:-1] for i in history_data] # 6자리 당첨번호만 추출
history_data_list = [tuple(row) for row in history_data]
history_data_set = set(history_data_list)
class Lotto:
def __init__(self, i, v):
self.lotto_all_combi = i
self.lotto_all_history = v
def __repr__(self):
return f"Lotto({self.lotto_all_combi} : {self.lotto_all_history})"
matching_indices = []
for i, row in enumerate(all_combinations):
if tuple(row) in history_data_set:
matching_index_in_history = history_data_list.index(tuple(row)) + 1
# matching_indices.append((i, matching_index_in_history))
matching_indices.append(Lotto(i, matching_index_in_history))
matching_indices.sort(key=lambda x: (x.lotto_all_history, x.lotto_all_combi))
repr(matching_indices)
플로팅을 위한 코드는,
import numpy as np
import matplotlib.pyplot as plt
np.random.seed(0)
x_val = np.array([i.lotto_all_history for i in matching_indices][-20:])
y_val = np.array([i.lotto_all_combi for i in matching_indices][-20:])
x = np.arange(1, len(x_val) + 1)
# 그래프 생성
plt.figure(figsize=(15, 10))
plt.scatter(x, y_val, linewidth=1)
plt.title('Distribution of Values')
plt.xlabel('seq')
plt.ylabel('idx')
plt.xlim(1, len(x_val) + 1)
plt.ylim(0, len(all_combinations))
plt.yticks(
y_val,
[f'{i/1000000:.1f}M' for i in y_val]
)
# 그리드 추가
plt.grid(True, linestyle='-', alpha=0.7)
plt.tight_layout()
plt.show()
결과는!
최근 20개의 당첨번호 분포를 보았다.
오케이! 여기까진 그래도 눈에 뭔가 좀 보이는 것 같은데...
최근 50개로 늘려서 보면,
뭐... 대중이 없다... 막무가네(?) 느낌이다.
저기 3,100,000 ~ 4,100,000 index 사이에서 좀 공백이 보이긴 하는데 이 또한 단순한 시각적 정보일 뿐이고, 크게 보았을 땐 규칙따위는 없다. 당연하게도.
또 하나 발견한 사실은 실제로 로또 당첨번호는 한 번도 같은 Index 위치의 값이 나온적이 아직은 없다!
그렇다면,
다음 당첨번호는 어떤 index를 골라야 가능성이 높을까?
아직 안나온 나머지 8,145,060 - 1,129 = 8,143,931 개에서 고르면 될까?
확률은 조금 줄여줬지만 불확실성 계수가 존재함으로 이 또한 완벽하지 못하다!
지금까지 쓴 내용을 보면 로또에 진심같아 보이겠지만 아니다!!
진지한 컨셉으로 글을 쓰고 있는 것 뿐이다...
통계는 확률로 이야기한다.
불확실을 줄이고 이길 수 있는 방향에 배팅을 해야한다.
그래서!
두가지 전략을 준비했다.
첫째,
가장 많은 당첨번호가 선택된 index 범위에서 아직 선택되지 못한 index 번호를 고른다!
예를 들어, 6,000,000 ~ 7,000,000 번대의 index 가 선택된 분포가 크다면
그 안에서 아직 선택되지 못한 번호를 5개 정도 뽑아서 한게임 걸어보는 것이다.
두번째,
위에 언급한 내용과 비슷하게 아직 선택되지 못한 미지의 영역에서 5개 정도 뽑고 배팅한다.
뭐 사실 막(!) 신기하고 기발한 아이디어가 떠오르진 않는다...
다음번에는
random seed 값의 분포를 무작위성으로 바꿔서 뽑아보고!
당첨번호 Index 의 위치와 가장 유사한 random seed 가 무엇이 있을지 알아보려고 한다.
이것도 안되면 바로 GPT 모델을 소환해야겠다!