[python] 로또 다음 회차에 나올 확률이 높은 숫자? (파이썬 히스토그램)
이 글은 지극히 비전문적이며, 실험에 의한 주관적인 생각에 근거한 내용임을 알려드립니다.
우선 로또의 현재까지 당첨내역은 동행복권 사이트에서 엑셀 형태로 받을 수 있습니다. 엑셀파일에서 당첨번호만 CVS 파일로 추출하였습니다. 해당 CSV 파일에서 번호별 발현빈도는 아래와 같은 파이썬 코드로 구해보았습니다.
import csv
import json
import numpy as np
import matplotlib.pyplot as plt
###############################################################################
def convertLottoCSVFileToList(filepath):
rows = []
try:
with open(filepath) as f:
reader = csv.reader(f)
for row in reader:
cols = []
for number in row:
cols.append(number)
rows.append(cols)
except csv.Error as e:
print(f"Error reading CSV file at line {reader.line}: {e}")
exit(-1)
return rows
###############################################################################
originList = convertLottoCSVFileToList("./lotto.csv")
originArray = np.array(originList, dtype=np.ubyte)
originVector = np.reshape(originArray, originArray.size)
print(originVector)
plt.hist(originVector, bins=45, label='bins=45', histtype='step')
결과적으로 아래와 같은 히스토그램 그래프를 얻을 수 있습니다.
이론적으로 각 숫자가 나타날 확률은 동일하지만, 실제 나타나는 빈도수는 숫자마다 눈에 띌 정도의 차이를 보여주고 있습니다.
여기서 저는 한가지 실험을 해 보았습니다. 1~45 사이의 숫자를 무작위로 N번씩 뽑아서 각 숫자가 나타나는 빈도수를 시뮬레이션 해보았습니다. 아래는 실험에 사용된 파이썬 코드입니다.
import numpy as np
import matplotlib.pyplot as plt
a = np.random.randint(1, 45, 1000)
b = np.random.randint(1, 45, 10000)
c = np.random.randint(1, 45, 100000)
figure, axis = plt.subplots(3, constrained_layout = True)
axis[0].hist(a, bins=44, color="red", histtype='step')
axis[0].set_title("N=1000")
axis[1].hist(b, bins=44, color="blue", histtype='step')
axis[1].set_title("N=10000")
axis[2].hist(c, bins=44, color="green", histtype='step')
axis[2].set_title("N=100000")
plt.show()
아래는 결과 그래프입니다.
위 그래프로 무엇을 추론할 수 있을까요? 숫자를 뽑는 회수가 많아질 수록, 숫자의 빈도수 차이는 점점 줄어들고 있습니다. 이 결과를 로또에 대입하면, 누적 빈도수가 적은 숫자일 수록 다음 회차에 나타날 확률이 높을 수 있다는 것입니다.
끝.
댓글
댓글 쓰기