John Kim H의 톡
avatar
John Kim H
2025.12.30

지난번에 봤던 로또 관련 자동 추첨기 직접 만들어 왔습니다.


매주 토요일 저녁 10시에 자동으로 기존 예상 번호 평가하고, 새로운 예측 자동으로 업로드하는 웹앱 하나 만들어 보았습니다.

3주 정도 돌려봤는데, 결과는 형편 없네요 ; 문제는 이거 만든 뒤로 반 강제로 매주 5천원씩 로또 사게 된 사실... 혹시나 당첨 됐는데 안 샀으면 배아파서 못 살까봐..


사이트 : https://rexpawpurposemg.web.app/lotto.html

avatar
John Kim H
2025.12.08

로또 자동 추첨기 만들기(의견 댓글 바람)

1. 로또가 사기라고 가정했을 때 로또가 조작이라고 가정하고, 운영자 입장에서 "당첨금 지급을 최소화하여 수익 극대화"하는 문제를 푼다면, 이는 전형적인 최적화 문제가 됨. 데이터 통계 분석의 관점에서, 사람들이 구매한 수천만 건의 데이터를 기반으로 가장 이득이 되는 번호를 뽑아내는 알고리즘을 찾을 수 있음 1) 문제 정의 : 단순히 1등 당첨자를 0명으로 만드는 것이 아니라, 4등(5만 원), 5등(5천 원) 당첨자도 줄어야함. 배당금이 고정되어 있어 손실이 커질 수 있기때문, 따라서 총 지급액을 최소화해야 함. 적용 가능한 알고리즘 및 접근법 로또 6/45의 경우의 수는 8,145,060개, 이 정도 경우의 수는 실시간 전수조사가 가능함. 따라서 복잡한 AI보다는 고속 연산 알고리즘이 쓰일 것 전수 조사 - 가장 확실한 방법 판매 마감 직후, 가능한 814만 개의 모든 번호 조합에 대해 가상으로 당첨금을 계산 로직: 판매된 모든 티켓 데이터를 메모리에 로드한다 (행렬 형태). 가능한 당첨 번호 조합(1번~8,145,060번)을 하나씩 대입한다. 각 조합별 예상 지급액(Payout)을 계산한다. 지급액이 가장 적은 조합을 선정한다. 장점 : 근사치가 아닌 완벽한 최적해를 찾을 수 있음 단점 : 답이 정해져 있다는 것은 리스크가 있음. 향 후 감사를 받을때도 전, 후 관계가 정확한 데이터가 있으면 사기가 증명 되니 사용하지 않을 것으로 보임. 결론 : 해당 방법은 사용하지 않을 것으로 보임, 사용하더라도, 어느 정도 랜덤한 풀에서 임의 선택할것으로 추정됨. 문제는 일개 개인이, 전체 사람들이 구매한 데이터를 실시간으로 볼 수 없을 뿐더러, 마감 이후에 살 수도 없음. 그렇다면 다른 방법으로 기댓값이 가장 높은 번호를 선발해서 넣는 방법이 최선. 2) 내가 할 수 있는 것(대중의 심리를 이용한 기댓값 높이기) (1) 역 빈발 패턴 마이닝 사람들이 가장 싫어하는 숫자들만 골라냄 사람들이 피하는 패턴(예: 연속된 숫자 3개 이상, 특정 구간 몰림 등 심리적으로 '안 나올 것 같다'고 생각하는 조합)을 조합 예시: 사람들이 생일(1~31)을 많이 찍으므로, 32~45 사이의 숫자로만 구성된 조합을 우선 후보군으로 둡니다. (2) 심리적 편향 회피 회피해야 할 패턴 (사람들이 많이 찍는 번호): 대각선/직선 패턴: 용지 마킹 시 긋기 편한 줄. 달력 숫자: 1~31 (생일, 기념일). 이전 회차 당첨 번호: 바로 지난주 번호는 안 나올 거라 생각해서 빼거나, 혹은 그대로 찍는 사람 등 패턴이 쏠림. 행운의 숫자 7: 7, 17, 27 등. 조작범이 선택할 패턴 (사람들이 안 찍는 번호): 극단적 몰림: 1, 2, 3, 4, 5, 6 (하지만 이건 장난으로 찍는 사람이 은근히 많아서 위험). 비인기 번호 조합: 4, 29, 39, 43, 44, 45 등 시각적으로 불규칙하고 의미 부여가 힘든 조합. 40번대 다수 포함: 40번대는 40~45로 숫자가 적어 사람들이 덜 찍는 경향 2. 로또가 사기가 아니라 완전 무작위성인 경우 1) 실제 데이터 검증 현재 데이터가 무작위가 아닐 확률 계산. 이를 통해 간접적으로 조작 가능성을 의심해볼 수는 있음 1. 카이제곱 검정 모든 공(1~45)이 공평하게 나오고 있는가?"를 확인 가정: 로또가 공정하다면, 시행 횟수가 무한대로 갈수록 각 번호의 출현 빈도는 균등해야 함 P-value(유의확률)를 계산했을 때, 0.05(5%) 미만이라면 "우연이라고 보기 힘들 정도로 특정 번호가 많이(혹은 적게) 나왔다"고 판단 결과 : 놀랍게도(?) P-value는 대부분 유의수준(0.05) 이상으로 나옴. 즉, "통계적으로 매우 무작위하다"는 결론 확률 상으로는, 사기가 아닐 확률이 높고, 사기라고 하더라도 어느정도 통계적 유의 수준을 지키면서 사기를 치고 있다는 결론 2) 안 나온 번호로 찍을 때 통계적 유의성 통계적 팩트 : 주사위에는 기억력이 없음. 안 나왔다고 해서 나올 확률이 높아지지는 않음(도박사의 오류). 게임 이론적 가치: 하지만 "사람 심리"에는 영향을 줌. 대다수 초보 분석가들은 "최근 잘 나오는 번호"를 찍는 경향이 있음. 따라서 안 나온 번호를 고르면 남들이 덜 찍은 번호일 확률이 높아져 독식 가능성이 커짐. 적어도, 사기꾼들이 로또의 통계적 유의성을 감안해서 번호를 조작하고 있다고 하면, 안 나온 번호로 찍는 것이 어느정도 효과가 있을 것으로 볼 수 있음. 3. 결론 1) 로또는 일단 기댓값이 낮기 때문에 사는 순간 손해일 수 밖에 없음. 처음부터 분석할 가치가 없긴 함. 2) 하지만, 옆에서 사고 있으면 혹시나 하는 마음에 살 수 밖에 없음. 그런데, 기본적인 기댓값 이외에도, 이 것이 사기 일 수 있다는 사실이 더욱 기댓값을 낮추면서 기분을 더럽게함. 3) 그럼에도 불구하고, 일단 사자라고 생각했다면, 위의 가정들을 봤을 때, 지금까지 안 나온 번호 중에, 역 반발 패턴 마이닝과 심리적 편향을 피한 번호로 추첨을 한다면 다른 사람보다는 아주 약간 높은 기댓값을 가질 것으로 보임. 구체적인 추출 알고리즘(코드 구현) ① Cold Number 우선 추출 (역추세 매매) 최근 5년(개인 판단) 동안 한 번도 안 나왔거나, 출현 빈도가 하위 20%인 번호들을 후보군으로 설정 사람들은 본능적으로 '잘 나오는 번호'에 손이 가므로, 우리는 그 반대로 간다. ② 생일수 배제 사람들은 자신의 생일, 가족 생일 등으로 번호를 조합함. 즉, 1~31번에 마킹이 집중. 전략: 번호 6개 중 4개 이상을 32~45번 구간(고번호대)에서 선택 ③ 용지 시각적 패턴 제거 로또 용지(7x7 배열 등)에서 일직선, 대각선, 혹은 예쁜 모양(십자가 등)을 그리는 조합을 제거 뇌피셜로 이것저것 생각해서 알고리즘을 만들 계획서를 작성해 보았습니다. 여기 계신 확률적 우위의 선도주자 여러분들의 추가적인 첨언을 주시면 그것도 반영해서 알고리즘 만들어서 배포하겠습니다.
댓글 0