로또 연구를 한지 벌써 12년째되었지만 그렇다할 로또 성적은 이루지 못하고 있다. 로또번호를 연구한다라는건 정말 미래를 예측한다와 같기 때문에 미래는 아무도 예측할 수 없지만 좀더 나은 미래는 만들어갈 수 있다는 희망으로 계속해서 로또를 연구 하고 있다.
이번에는 지금까지 내가 연구했던 로또 결과물과 알고리즘 방식 일부 공개해볼까 한다. 뭐 다들 한번쯤은 연구해봤을법한 알고리즘이겠지만 내가 연구한 최종 알고리즘인 패널티 부가 방식을 잘 활용한다면 좋은 번호를 추첨할 수 있기때문에 로또 연구에 관심이 있다면 패널티 알고리즘을 같이 연구했으면 한다.
로또연구를 시작하게된 이유는 바로 옆 동네에 로또 1등된 아저씨 소문 때문이다. 내가 살던 시골 동네에는 지금도 부모님이 살고 계시는데 어느날 들리는 소문으로 옆동네 아저씨가 로또 1등이 되었다는 소문이 돌기 시작했다. 처음엔 그냥 넘겨들었는데 나중에 보니 진짜 1등이 되었고 그 아저씨는 전에 술 때문에 부인과 이별까지 하게되었는데 로또 1등이 된 후 현재는 180도 다른 사람이 되어 집을 떠났던 부인과도 지금은 같이 화목하게 잘 살고 있다.
머나먼 소문으로만 들었던 1등이 실제 주변에서 된게 너무나 신기했고 그 후 로또 연구를 본격적으로 시작하게 되었다. 물론 그 전에도 로또 프로그램은 C언어를 통해 만든게 있었지만 아무런 기능없이 랜덤한 번호를 추첨해주는 프로그램이였기에 그건 나의 오래된 유물로만 저장하고 있다. <아래 이미지 참고>
아래는 내가 로또를 분석하면서 만들어갔던 알고리즘 방식으로 현재까지 와서는 패널티 방식만 연구하고 있으니 참고 바란다.
처음 로또연구시 사용했던 알고리즘은 당첨횟수 알고리즘이다. 당첨횟수는 회차를 거듭할 수록 쌓여지는 데이터이기에 모으기도 쉽고 분석하기도 좋았다. 당첨횟수를 이용하여 확률을 그대로 주고 추첨을 통해 분석을 시작하였는데 역시나 다음번에 어떠한 번호가 나오는지는 알 수 없기에 단순히 당첨률만 높이는건 아무 의미가 없었다.
두번째로 시도했던 방법은 당첨과 제외번호를 연구하는 방식이였다. 당시에는 당첨/제외 번호를 AI 처럼 분석하지는 못하였고 직접 이것저것 수기로 연구해서 프로그램에 실제 추가했던 방식이였는데 당첨률이 왔다갔다 하는것도 있고 다른 사람들은 내가 만든 알고리즘 덕에 손해를 많이 보게 되어 추후에는 이를 수동으로도 직접 할 수 있게 만들어 주었다. 이건 지금도 내 로또 추첨 프로그램에도 있지만 추첨모드 기능을 통해 조정이 가능하다.
모든 번호의 당첨확률은 동일하다는 가정하에 번호 45개에다가 점수를 동일하게 주고 연구한 번호에 따라 패널티를 주는 방식으로 접근을 해보았다. 이러한 방법은 개발 자체는 쉬우나 패널티를 주기 위해선 각 번호별로 분석을 해야하기 때문에 패널티계산하는 알고리즘을 만드는게 가장 복잡하다.
처음 패널티 번호를 뽑는 알고리즘에 사용된 방식은 1~5주차에 대한 번호를 약 앞선 회차의 5회차까지 분석하여 다음번에 나왔을 경우에는 패널티에서 제외했고 계속 안나왔던 번호들은 패널티를 부가했었다. 이방법은 지금도 사용하고 있고 가장 안정적으로 작동되는 방식중 하나다. 하지만 최근 설계된 알고리즘을 잘못 수정해서 지금은 다시 제작하고 있는 중이다.
아무튼 로또 연구중 가장 적합한 방식은 로또 번호별 패널티 부여 방식이라는것을 알 게 되었고 이방법은 내 로또 연구의 꽃이 되었다.
역시나 모든 번호는 동일하겠지만 그래도 번호에 따라 10회차 이상 당첨이 안되는 번호들도 있다. 이러한 번호를 과감하게 다음회차 추첨시 패털티 100을 주어 버릴것이냐 아니면 버리진 않고 패널티를 다른것보다 조금더 주는 방식으로 추첨될 확률을 줄일것이냐에 대한 알고리즘을 작성하였다.
놀랍게도 패널티 100을 주었을 경우에는 대부분 당첨률이 높아졌고 패널티를 단순히 더 주게되면 당첨률이 더 낮아지는 하락세를 보였다. 따라서 버릴땐 과감하게 버리는 알고리즘이 필요했다. 하지만 이를 해결하는 알고리즘은 프로그램 리소스를 상당히 많이 잡아먹게 되었다. 예를 들면 현재 회차를 기준으로 이를 선택하는 알고리즘의 계산식을 구한다면 아래와 같다.
번호(1~45) * ( (현재회차 당첨번호)의 통계 + (현재회차-1 의 당첨번호)의 통계 + (현재회차-2 의 당첨번호)의 통계 + (현재회차-3 의 당첨번호)의 통계 ) .... 계속
위의 계산식은 그냥 봐서는 어떤건지 잘 모를것이다. 그냥 위와 같이 상당히 많은 리소스가 필요하다는 정도만 알면된다. 이러한 방식은 회차가 거듭될 수 록 부하만 발생되고 결국 죽을 수 밖에 없다. 그래서 프로그램 돌리는건 가끔 해보고 수동으로 번호를 선택했던것같다.
리소스 문제를 해결하기 위해서 각 회차별로 분석 결과를 따로 DB화 하였다. 물론 현재까지 회차 번호는 저장되어있어서 추출이 가능하지만 분석을 위해서는 이전 회차 기준으로도 분석을 해야하기 때문에 필요한 알고리즘 자원을 미리 DB 화하여 최종 프로그램은 DB화된 알고리즘 결과물을 가지고 계산만 하는 방식으로 적용하게 되었다.
로또는 단순 당첨번호별 패턴분석은 아니지만 각 번호별로 다음회차 전회차에 따른 미 출현 번호등이 확연하게 나왔고 출현률이 낮은 번호가 어느정도 패턴으로 나오기 때문에 이러한 번호들을 분석하여 패널티를 1~50까지 주는 방식으로 진행하였다. 역시나 패널티에 따라 당첨률 차이가 많이 나는것이 보였다.
참고로 테스트시 로또가 추첨되는 매주 토요일까지 매번 기다릴 수는 없기 때문에 특정 회차 기준으로 추첨이 되지 않았다는 가정하에 이전 회차까지의 분석 알고리즘을 DB 화하여 추첨 해보는 방식으로 진행을 하면된다. 이렇게 패널티 방식을 사용하다보면 회차별로 정말 정확하게 나올때가 많다 하지만 언제나 그렇듯 패널티가 과감해지면 대박 아니면 쪽박의 결과물이 나오게 된다.
따라서 두가지 형태로 100% 패널티 와 1~50% 패널티를 기준으로 해보는게 좋다. 여기서 내가 100%가 아닐 시 1~50% 의 패널티를 기준으로 잡은건 50%의 패널티가 어중간하게 커지면 당첨확률이 그만큼 변동이 심하게 된다. 실제 10만번씩 총 1000만번 추첨해본 결과 패널티를 100%을 주었을 시 1등 당첨률이 높았고 그다음이 1~50% 확률이였는데 어중간하게 60~90% 까지의 패널티를 주게되면 당첨률이 평균적이지 않고 왔다갔다 하는 경향이 있었다. 이럴바엔 차라리 100%를 주는게 낫다는 결론이 나왔기때문이다.
패널티 방식 알고리즘의 마지막 단계라면 역시나 패널티 100% 번호를 구하는 알고리즘이다. 역시나 이건 DB화 하기엔 내 머리가 역부족이라서 그런지 아직까진 프로그램 + 수동으로 적용을 하고 있다. 주로 내가 패널티 100%를 주는 번호들은 1,2,8,24번 번과 같은 번호들인데 솔직히 이번호를 제외하는건 손해를 보더라도 최소한의 번호를 유지하기 위해서 이다.
패널티 번호들을 분석하다 보면 패널티 부여된 번호들이 최대 10% 미만으로 나올때가 있는데 이럴때는 거의 랜덤 번호추첨하듯이 번호가 나오게 되어 이럴땐 과감하게하게 번호를 버려야 하기에 패널티 100%가 필요하다. 따라서 패널티 100%를 연구하는게 최종 목적이기도 하고 현재까지 진행단계에 있다.
내가 최종 적으로 이러한 패널티 방식을 선호하게 된건 바로 주식과 같다 물론 주식은 로또와 다르게 특정 사람들에 의해 조작도 가능하고 환경에 따른 영향이 많기 때문에 성질이 다르긴 하나 로또 번호 한개를 주식으로 보고 각 번호들은 매주 달라 질 수 있다는 가정하에 과감하게 번호별 패널티를 주어 이 패널티 알고리즘이 정교해지는게 최종 목표이고 지속적으로 로또를 하다보면 패널티 환경에 맞는 회차가 나올 수 있기때문이다.
로또 패널티 방식에 대해 소개하였는데 한번쯤은 제외 번호들을 선정하여 추첨하는 방식을 시도해보았을 것이다. 이때 과감하게 버리거나 번호별로 당첨률을 조정하였겠지만 패널티 방식은 당첨률 조정도 있지만 지속적으로 알고리즘을 쌓아서 패털티 환경에 맞는 번호들을 추첨해 내는게 목표이다. 마지막에도 이야기했다시피 다음회차가 패널티 환경과 맞을때까지 계속해서 시도하는것이다.
마지막으로 자신만의 로또 연구 결과가 있거나 로또 연구에 관심이 있다면 패널티 방식을 만들어서 번호를 같이 연구했으면 한다.
혹시나 연구한 번호들이 있다면 이 번호를 내가 만든 패널티 알고리즘 프로그램에 추가하여 번호들을 자동추첨할 수 있도록 지원해줄테니 관심있으면 lcy@redinfo.co.kr 이메일로 각 번호별 패널티 확률 또는 자신만의 분석 방식을 보내주면 이를 패널티 환경으로 변경 후 적용하여 로또를 추첨할 수 있는 url을 제공해 줄테니 관심있으면 이메일로 문의주기를 바란다.