Data-writing

인생 대박을 위한 로또 번호 추천하기

JAY-GO 2022. 10. 22. 20:00
반응형

한동안 데이터를 개인의 생활에 어떻게 활용할 것인가에 대한 고민과, 데이터 분석 결과 활용의 효과성에 의문을 갖으며 상당기간 데이터 분석과 거리를 두어 왔습니다. 한 6개월 지나니 배운 게 도둑질이라고 다시금 데이터 분석에 대한 흥미가 조금씩 살아나기 시작하네요. 이전까지는 데이터 활용을 기술적인 관점에서 바라봤었다면, 앞으로는 흥미를 잃지 않고 개인의 일상에서 어떻게 활용할 수 있는지를 바탕으로 직접 활용하는 데이터 분석들을 포스팅해보고자 합니다.

배경

 최근 로또 당첨 예측 서비스를 제공하며 거짓 당첨 후기 등을 동원해 10년간 사기 행각을 벌인 일당이 적발된 사건이 있었습니다. 기사를 보면 데이터 분석을 통해 로또번호 예측 서비스를 제공하면서 자신들이 제공한 번호에서 다수의 1등이 나온 것처럼 속여 유료 회원을 모집한 혐의 입니다. 정말 당첨 가능성이 높은 번호를 예측하는 것이 가능할까요?

 

 기본적인 통계만 배웠어도 당첨 예측은 말이 안 된다는 것을 알 수 있을 것입니다. 그럼에도 불구하고 많은 사람들은 특정한 번호에 소원을 빌며 로또 번호를 고르곤 합니다. 로또라는 것은 단순히 당첨을 위한 것이 아닌 일종의 놀이 이기도 하고 희망 이기도 하며 사회 시스템의 일부로 기능하고 있습니다. 저 또한 주기적으로 로또를 합니다. 매번 자동 5천 원어치 5게임을 하고 있으며 유의미한 당첨 이력은 없습니다. 그럼에도 불구하고 매주 거행하는 일종의 의식이자 놀이로서, 혹시나 올지 모르는 미래를 꿈꾸는 상징으로 로또를 사곤 합니다.

 

 로또 관련 사기 기사를 보면서 데이터 분석을 로또에 적용할 방법이 없을까 고민을 해봤습니다. 로또는 데이터 분석에 있어 참 재밌는 부분이 있습니다. 첫째, 완전한 무작위로 결과가 결정되기에 누구도 정답이 없습니다. 둘째, 매주 반복되기에 반복적으로 예측하고 그 결과를 확인할 수 있습니다. 셋째, 본인이 직접 분석 결과를 적용하여 그 결과의 혜택을 볼 수 있습니다. 이와 같은 특성은 데이터 분석 결과물에 대한 부담을 줄일 수 있고 과정의 논리성에 집중할 수 있도록 해줄 수 있다는 생각이 들어 즐기는 데이터 분석이 될 수 있다는 생각으로 로또 데이터 분석을 시행하게 되었습니다.

 

무엇을 추론할것인가?

 로또는 기본적으로 회차별 당첨번호 데이터를 제공하고 있습니다. 지금까지 1,000번이 넘는 로또의 당첨 번호 데이터가 있으니 이를 바탕으로 당첨 확률이 높은 번호 조합을 추론할 수 있을 것으로 기대할 수도 있습니다. 하지만 저는 로또의 무작위성을 신뢰하는 사람이기 때문에 당첨될 번호를 예측하는 행위는 시간낭비라고 봅니다.

 

 대신에 저는 로또의 기댓값(당첨확률 × 당첨금액)을 높이기 위해 당첨금액을 높이는 방법을 찾는 것이 그나마 합리적이라고 생각합니다. 당첨금액을 높이는 방법은 당첨확률이 같다고 했을 때, 당첨자의 숫자를 줄이는 방법이며 이는 남들이 선택하지 않는 숫자의 조합을 찾아내는 방법으로 달성할 수 있습니다.

 

 로또를 구매함에 있어 자동 구매의 경우 무작위 번호 선택임으로 편향된 선택이 없겠지만, 수동으로 구매하는 사람들은 다양한 이유로 구매 패턴이 고착화되거나 경향성을 띌 수 있습니다.(관습, 계절, 연도, 월, 일, 미디어 등등) 그 경향성을 찾을 수 있다면 사람들의 선택이 적은 숫자 조합을 추론할 수 있을 것으로 기대합니다.

추론 방식 결정

 로또의 데이터를 보면 회차별 당첨 번호가 있고 추가로 당첨자 수와 총판매금액이 있습니다. 로또의 1게임 판매금액은 1,000원 임으로 총판매금액 으로부터 총 판매 수량을 알 수 있으며, 결국 우리는 로또 당첨 데이터로부터 해당 회차의 로또를 구매한 사람이 당첨번호의 조합을 선택했을 확률을 알 수 있습니다.

 

 결국 우리는 지금까지의 당첨 번호와 구매자의 해당 번호 선택 확률 데이터로부터 패턴을 인식하여, 특정 번호 조합을 선택했을 확률을 계산하는 것입니다. 정확한 표현은 아니지만 수식으로 나타내면 45개의 변수를 갖고 이중 5개는 1이 되며 나머지는 0이 되는 선형 방정식과 같은 모양으로 표현해 볼 수도 있을 것입니다. 

 위 식은 이해를 돕기 위한 것일 뿐 계수의 조합이라던가 기타 외생변수들 그리고 변수가 연속이 아닌 제한적 선택이라는 점에서 선형 방정식을 푸는 형태로는 답을 도출할 수 없을 것입니다. 뛰어난 수학자라면 수학적 방법론으로 위 상황을 풀이할 수 있을지도 모르겠습니다. 하지만 저와 같은 사람은 위와 같은 상황의 풀이는 미지의 영역입니다. 이를 해결하기 위해 input과 output의 정의를 알고리즘에 제공하고 이로부터 학습된 모델을 이용하여 결과를 추론하는 기계학습을 활용하고자 합니다.

 위 상황은 특정한 input(5개의 숫자 조합)에 대한 구매자의 선택 확률을 찾고자 하는 것이기 때문에 회귀분석을 통한 예측 기법이 적합할 것입니다.

학습 및 번호 추론

1. 학습 데이터 확보

 공식 로또 사이트에서는 1회부터 지금까지 회차별 당첨 번호와 당첨자수, 당첨금액을 제공하고 있습니다. 

 위 데이터 이외에 우리는 회차별 총 구매 수량을 알아야 합니다. 이를 위해 로또의 당첨금 배분 구조를 활용하여 총 당첨 금액을 계산할 수 있고, 이를 1회당 구매금액으로 나누어 회차별 총 구매 수량을 알 수 있습니다.

 이를 모델 학습에 활용 가능하도록 엑셀로 정리하면 아래와 같은 모습으로 나타낼 수 있으며 이 테이블을 기초로 다음 작업을 진행하도록 합니다.

2. 전처리

 학습을 위해서는 각 번호의 출현을 2진 변수로 하여 학습시켜야 합니다. 또한 학습 라벨을 출현 확률로 정했으므로 1등 당첨자 수를 총 구매 수량으로 나누어 구매자가 해당 번호를 선택할 확률로 나타내야 합니다. 이를 반영하면 아래와 같은 형태의 학습 데이터 세트가 만들어집니다.

3. 학습 및 확인

  서두에도 이야기했던 것처럼 더 나은 추론을 위해서는 다양한 변수들을 추가해 주는 것이 맞을 것입니다. 하지만 사람의 행동을 완벽히 추론할 수는 없기에 위에서 만든 기본 테이블 만으로 학습시켜 보았습니다. 대부분의 레퍼런스로 적합한 렌덤 포레스트를 활용하였고 R2 score로 평가하여 모델의 설명력을 평가하였습니다. 0.83의 점수면 제공된 데이터를 어느 정도 학습하였다고 볼 수 있습니다.

 더 높은 학습률을 얻기 위해 Hyper-Parameter를 조정하거나 모델링 기법을 변경할 수도 있고 딥러닝을 활용할 수도 있습니다. 하지만 애초에 정답을 찾고자 하는 게 아니기에 일반화 능력을 확보한 적당한 수준의 학습 율도 나쁘지 않을 것입니다.

4. 예측

 위 모델을 활용하여 구매자가 어떤 숫자 조합을 선택할 확률을 추론해 보도록 하겠습니다. 이를 위해 45개중 5개의 번호를 선택할 수 있는 모든 경우의수 8,145,060개를 모두 모델에 적용하여 그 확율을 뽑아보았습니다. 이를 오름차순으로 나열하여 상위 5개가 낮은 확율을 나타내도록 표한하면 아래와 같습니다.

 저는 이 결과를 가지고 그대로 로또를 구매해 보았습니다.

실제 결과

 당연히 추론하여 선택한 번호는 당첨되지 않았습니다. 애초에 목표는 당첨 가능성이 높은 번호가 아닌, 구매 가능성이 낮은 번호를 추론하는 데 있음을 잊으면 안 됩니다.

 

 그렇다면 만들어진 모델의 성능은 어떻게 검증할 수 있을까요? 앞의 모델링 및 추론 과정에서 모든 번호 조합에 대하여 선택 확률을 계산했습니다. 그렇다면 이번 차수의 당첨 번호에 대하여 추론된 확률에 총 구매 건수를 곱하여 산출된 값과 당첨 게임 수 를 비교해 보면 됩니다.

 추론된 확률로 계산한 당첨자 수는 13.6 게임이고 실제 당첨자 수는 15게임입니다. 상당히 그럴듯하죠?

하지만 상당히 오류가 많은 검증입니다. 일단 이번 회차만 운 좋게 맞았을 가능성이 크고, 다른 번호들의 확률 분포를 확인하여 이번 차수에 당첨된 번호의 추론 확률 주변의 분포도 확인해야 합니다.

 

 그럼에도 분구하고. 우리는 답이 없는 복권에서 나름대로의 논리와 첨단? 기법으로 답을 도출해 본데 의의가 있을 것입니다.

앞으로의 활용

 당분간 위 방식으로 로또를 구매해 보고자 합니다. 과거 기록을 바탕으로 모델을 검증할 수 도 있지만, 심각하게 만든 모델이 아님으로 실제로 구매 해 보면서 지속 검증해보는 재미가 있을 것 같습니다.

 

 개인적인 욕심이긴 합니다만, 위 시스템을 바탕으로 웹 서비스를 만들어 보고 싶습니다. 이미 다수의 로또번호 추천기들이 있어서 비즈니스적으로 유효하지는 않지만 웹 서비스 구축을 완성시켜 보고 싶은 입장에서는 다양한 기술들을 적용해 볼 수 있는 좋은 기회가 될 것 같습니다.

 

 언젠가 서비스가 만들어진다면 공개 토록 하겠습니다.

 

 

 

 

반응형