로또 머신 러닝 | 딥러닝이 예측한 로또 번호는 당첨이 잘될까? 답을 믿으세요

당신은 주제를 찾고 있습니까 “로또 머신 러닝 – 딥러닝이 예측한 로또 번호는 당첨이 잘될까?“? 다음 카테고리의 웹사이트 you.charoenmotorcycles.com 에서 귀하의 모든 질문에 답변해 드립니다: https://you.charoenmotorcycles.com/blog. 바로 아래에서 답을 찾을 수 있습니다. 작성자 조코딩 JoCoding 이(가) 작성한 기사에는 조회수 562,279회 및 좋아요 7,992개 개의 좋아요가 있습니다.

로또 머신 러닝 주제에 대한 동영상 보기

여기에서 이 주제에 대한 비디오를 시청하십시오. 주의 깊게 살펴보고 읽고 있는 내용에 대한 피드백을 제공하세요!

d여기에서 딥러닝이 예측한 로또 번호는 당첨이 잘될까? – 로또 머신 러닝 주제에 대한 세부정보를 참조하세요

로또 번호 데이터를 딥러닝(LSTM)으로 학습시키고 다음 회차를 예측해보면 당첨이 잘되는지 검증을 해보고 직접 나온 번호로 로또를 구매해보는 영상입니다.
조코딩 멤버십 가입(멤버십 전용 강의 월별 무제한 수강)
▶https://www.youtube.com/channel/UCQNE2JmbasNYbjGAcuBiRRg/join
조코딩 채널 강사 지원
▶https://forms.gle/LsbgU8xFL9gtzRSt6
디스코드 조코딩의 코딩 커뮤니티
▶https://discord.gg/zny87VeSaX
결론적으로 로또는 독립시행이라 예측 모델이 의미 없지만 유료 로또 서비스 쓸바에는 공짜로 이거 쓰세요!
딥러닝 로또 예측 사이트: https://animalface.site/lotto
완성 코드: https://github.com/youtube-jocoding/lotto-deeplearning
동행복권: https://dhlottery.co.kr/
목차
00:00 미리보기
00:09 인트로
00:22 수 많은 유료 로또 번호 예측 사이트
01:04 강의 목차
01:29 경고
01:45 참고 문헌
02:04 인공지능, 딥러닝 개념
03:08 딥러닝 로또 번호 예측 소개
03:43 로또 번호 데이터 수집
07:22 데이터 전처리
07:26 데이터의 종류 – 수치형, 범주형
08:14 원핫인코딩
09:33 Colab 개발 환경 소개
09:47 완성 코드 github
10:04 Colab 연결 및 데이터 불러오기
10:29 라이브러리 설치 및 데이터 전처리 준비
11:44 모델 구성 및 학습
11:50 LSTM 설명
12:27 지도학습 설명
13:41 코드로 학습 수행
14:30 학습된 모델 성능 검증
16:15 여러개의 로또 예측 번호 생성 방법
18:29 모델 평가 방법
19:05 모델 평가
20:38 실제 로또 구매 결과
22:10 딥러닝 로또 번호 예측 사이트 무료 공개
22:49 구독, 좋아요, 알림설정 부탁드립니다
23:01 아웃트로

[참고 문헌]김태영님 블로그: https://tykimos.github.io/2020/01/25/keras_lstm_lotto_v895
김태영님 유튜브 채널:
https://youtube.com/channel/UCG9LWKvg0zADFS_JvVktILg
인공지능 퀀트 코리아
https://www.facebook.com/groups/aiquantkorea/
#인공지능 #딥러닝 #로또

로또 머신 러닝 주제에 대한 자세한 내용은 여기를 참조하세요.

조코딩 인공지능 딥러닝 로또 번호 예측 – 동물상 테스트

딥러닝 1005회차 결과 – 5등 1번 당첨 · [1, 3, 7, 9, 34, 44] · [19, 26, 30, 31, 33, 34] · [7, 14, 29, 34, 35, 45] · [13, 15, 17, 23, 24, 30] · [5, 12, 16, 17, 39, 42] …

+ 여기에 표시

Source: animalface.site

Date Published: 9/19/2021

View: 3390

[딥러닝] 로또 번호 예측하기 – 쓸데없는 개발일지

오늘은 오로지 재미로 접근한 주제 : 딥러닝으로 로또 번호 예측하기입니다. 본론에 앞서, 로또 번호 1등에 … Study & Document/Machine Learning …

+ 여기에 자세히 보기

Source: codingspooning.tistory.com

Date Published: 8/22/2022

View: 4407

딥러닝으로 로또 당첨 번호를 예측할 수 있을까? > 학습

요즘은 파이썬과 텐서플로우로 인해 많은 개발자가 빠르고 쉽게 머신 러닝을 테스트하고 평가해볼 수 있는 환경이 되었습니다. 엔지엠소프트웨어에서도 이런 딥러닝 …

+ 여기에 더 보기

Source: ngmsoftware.com

Date Published: 4/29/2022

View: 3450

Python Machine Learning을 이용한 Lotto 번호 생성 프로그램

그러나 여기서는 Machine Learning 중 XGBoost 알고리즘을 이용하고 그동안의 Lotto 번호 통계를 바탕으로 6개의 숫자를 뽑는 프로그램을 구현해 보았다.

+ 여기에 보기

Source: superhky.tistory.com

Date Published: 2/14/2022

View: 9123

딥로또 895회 – 김태영의 케라스 블로그

딥러닝 세미나를 하다보면 (특히 RNN이나 LSTM 등 시계열 예측 모델을 설명하다보면) 로또나 주식에 관해 질문을 많이 하십니다.

+ 더 읽기

Source: tykimos.github.io

Date Published: 5/29/2021

View: 395

딥러닝이 예측한 로또 번호는 당첨이 잘될까? 검증 해봤습니다

로또 번호 데이터를 RNN 계열의 딥러닝 알고리즘 LSTM으로 학습시키고 다음 회차를 예측해보면 당첨이 잘되는지 검증을 해보고 직접 나온 번호로 로또 …

+ 여기에 표시

Source: developerdk.tistory.com

Date Published: 3/30/2022

View: 2601

로또번호 분석기(머신러닝) cho máy tính PC Windows

Ghi chú của nhà phát triển: 머신러닝을 이용한 로또번호 예측 앱. 그레고리력의 양의 기운, 음의 기운을 합쳐 최대 800개의 데이터를 받아 분석한 뒤, 미래의 번호를 …

+ 여기에 더 보기

Source: appchopc.com

Date Published: 3/10/2021

View: 9439

주제와 관련된 이미지 로또 머신 러닝

주제와 관련된 더 많은 사진을 참조하십시오 딥러닝이 예측한 로또 번호는 당첨이 잘될까?. 댓글에서 더 많은 관련 이미지를 보거나 필요한 경우 더 많은 관련 기사를 볼 수 있습니다.

딥러닝이 예측한 로또 번호는 당첨이 잘될까?
딥러닝이 예측한 로또 번호는 당첨이 잘될까?

주제에 대한 기사 평가 로또 머신 러닝

  • Author: 조코딩 JoCoding
  • Views: 조회수 562,279회
  • Likes: 좋아요 7,992개
  • Date Published: 2021. 6. 19.
  • Video Url link: https://www.youtube.com/watch?v=3G3zExNItj0

조코딩 인공지능 딥러닝 로또 번호 예측

조코딩 인공지능 딥러닝 로또 번호 예측

딥러닝(LSTM)을 활용하여 로또 번호를 예측합니다.

원리는 아래 유튜브 영상을 참고해주세요!

* 로또는 독립시행 확률이라 예측 모델이 의미 없지만 유료 로또 서비스 쓸바에는 공짜로 이거 쓰세요

[딥러닝] 로또 번호 예측하기 – 쓸데없는 개발일지

반응형

안녕하세요.

오늘은 오로지 재미로 접근한 주제 : 딥러닝으로 로또 번호 예측하기입니다.

본론에 앞서, 로또 번호 1등에 당첨될 확률은 동전을 23번 던져 모든 면을 맞추는 확률과 거의 동일합니다.

(814,5060분의 1 ≒ 2의 23제곱 분의 1)

또한, 로또 번호는 동전 던지기와 똑같이 독립시행이므로 예측 불가의 영역입니다.

( 독립시행 : 같은 조건에서 반복 가능하며, 매번 결과가 달라질 수 있는 사건들을 말한다.

일어나는 하나의 사건이 다음 사건의 시행 결과에 영향을 주지 않는 것)

즉, 스팸 문자나 이메일로 유료 로또 예측 서비스를 광고하는 업체들이 말하는 1등 당첨번호는 분명한 사기입니다.

하면, 로또 명당이나 해당 사이트에서 광고하는 많은 1등 당첨자의 근거는 무엇일까? (Why?)

이유는 간단합니다. 시행하는 횟수가 많기 때문입니다. 다시 말해서, 해당 사이트나 로또 명당을 이용하는 사람들이 많아서 당첨자도 자연스레 많아진 것입니다.

Q. 동전을 10번 던질 때 앞면이 많이 나올까요? 1000번 던질 때 앞면이 많이 나올까요?

-> 당연히 후자입니다. 표본수(N)가 커지면, 당연히 확률은 올라가는건 산수입니다.

※ 해당 주제는 유료 서비스에 대한 상업적 광고 목적이 아닌 공부에 목적이 있음을 밝힙니다.

프로젝트 순서

데이터 수집 > 전처리 및 가공 > 딥러닝 모델 구성 및 학습 > 모델 평가 > 실제 로또 구매

1. 데이터 수집 및 전처리

아래의 사이트에서 972회차까지의 로또 당첨 번호와 상금을 다운로드해줍니다.

동행복권 사이트 : https://dhlottery.co.kr/gameResult.do?method=byWin

▣ 데이터 확인

필요한 Column : 회차, 당첨번호, 등수별 당첨금액

당첨금액은 오로지 숫자로만 수정 (원 빼고 특성 숫자로 변경)

▣ 필요 데이터 추출

수정된 파일(csv)

▣ 원핫인코딩벡터로 변환 for 딥러닝

# 데이터 다운로드 import numpy as np rows = np.loadtxt(“./lottery.csv”, delimiter=”,”) row_count = len(rows) # 당첨번호를 원핫인코딩벡터(ohbin)으로 변환 def numbers2ohbin(numbers): ohbin = np.zeros(45) #45개의 빈 칸을 만듬 for i in range(6): #여섯개의 당첨번호에 대해서 반복함 ohbin[int(numbers[i])-1] = 1 #로또번호가 1부터 시작하지만 벡터의 인덱스 시작은 0부터 시작하므로 1을 뺌 return ohbin # 원핫인코딩벡터(ohbin)를 번호로 변환 def ohbin2numbers(ohbin): numbers = [] for i in range(len(ohbin)): if ohbin[i] == 1.0: # 1.0으로 설정되어 있으면 해당 번호를 반환값에 추가한다. numbers.append(i+1) return numbers numbers = rows[:, 1:7] ohbins = list(map(numbers2ohbin, numbers)) x_samples = ohbins[0:row_count-1] y_samples = ohbins[1:row_count]

2. 딥러닝 구성 및 학습

– 데이터 나누기

Train : 1 ~ 800회 / Validation : 801 ~ 900회 / Test : 901 ~ 972회

# 데이터 나누기 train_idx = (0, 800) val_idx = (801, 900) test_idx = (901, len(x_samples))

딥러닝 모델 LSTM을 사용하겠습니다.

LSTM은 기존의 RNN을 개선한 모델로, 간단하게 로또에 적용해본다면 이전의 당첨번호가 다음의 당첨번호에 영향을 준다는 가정을 바탕으로 모델을 만들어줍니다. (주로, 주가예측이나 부동산 매매가격 예측에 사용됨)

import tensorflow as tf from tensorflow import keras from tensorflow.keras import layers from tensorflow.keras import models # 모델을 정의합니다. model = keras.Sequential([ keras.layers.LSTM(128, batch_input_shape=(1, 1, 45), return_sequences=False, stateful=True), keras.layers.Dense(45, activation=’sigmoid’) ]) # 모델을 컴파일합니다. model.compile(loss=’binary_crossentropy’, optimizer=’adam’, metrics=[‘accuracy’]) # 매 에포크마다 훈련과 검증의 손실 및 정확도를 기록하기 위한 변수 train_loss = [] train_acc = [] val_loss = [] val_acc = [] # 최대 100번 에포크까지 수행 for epoch in range(100): model.reset_states() # 중요! 매 에포크마다 1회부터 다시 훈련하므로 상태 초기화 필요 batch_train_loss = [] batch_train_acc = [] for i in range(train_idx[0], train_idx[1]): xs = x_samples[i].reshape(1, 1, 45) ys = y_samples[i].reshape(1, 45) loss, acc = model.train_on_batch(xs, ys) #배치만큼 모델에 학습시킴 batch_train_loss.append(loss) batch_train_acc.append(acc) train_loss.append(np.mean(batch_train_loss)) train_acc.append(np.mean(batch_train_acc)) batch_val_loss = [] batch_val_acc = [] for i in range(val_idx[0], val_idx[1]): xs = x_samples[i].reshape(1, 1, 45) ys = y_samples[i].reshape(1, 45) loss, acc = model.test_on_batch(xs, ys) #배치만큼 모델에 입력하여 나온 답을 정답과 비교함 batch_val_loss.append(loss) batch_val_acc.append(acc) val_loss.append(np.mean(batch_val_loss)) val_acc.append(np.mean(batch_val_acc)) print(‘epoch {0:4d} train acc {1:0.3f} loss {2:0.3f} val acc {3:0.3f} loss {4:0.3f}’.format(epoch, np.mean(batch_train_acc), np.mean(batch_train_loss), np.mean(batch_val_acc), np.mean(batch_val_loss)))

3. 모델 평가

epoch이 늘어날 때마다 train의 accuracy는 높아지고 loss는 낮아지는 걸 볼 수 있으나 validation(검증 데이터)는 그와 반대로 움직임.

즉, 학습 데이터에서는 정확성이 계속 올라가지만, 새로운 데이터에서는 모델의 효용성이 많이 떨어짐을 알 수 있음.

∴ 딥러닝 모델이 로또 데이터에서는 크게 의미가 없다.. ㅋㅋㅋ

4. 실제 로또 구매

딥러닝 모델을 바탕으로 번호를 뽑아주는 함수를 만들어주고 실제로 5번 번호를 뽑아봤습니다.

# 번호 뽑기 def gen_numbers_from_probability(nums_prob): ball_box = [] for n in range(45): ball_count = int(nums_prob[n] * 100 + 1) ball = np.full((ball_count), n+1) #1부터 시작 ball_box += list(ball) selected_balls = [] while True: if len(selected_balls) == 6: break ball_index = np.random.randint(len(ball_box), size=1)[0] ball = ball_box[ball_index] if ball not in selected_balls: selected_balls.append(ball) return selected_balls print(‘receive numbers’) xs = x_samples[-1].reshape(1, 1, 45) ys_pred = model.predict_on_batch(xs) list_numbers = [] for n in range(5): numbers = gen_numbers_from_probability(ys_pred[0]) numbers.sort() print(‘{0} : {1}’.format(n, numbers)) list_numbers.append(numbers)

receive numbers

0 : [1, 3, 7, 8, 33, 44]

1 : [15, 17, 24, 33, 35, 37]

2 : [1, 14, 15, 20, 26, 35]

3 : [6, 10, 16, 30, 33, 40]

4 : [16, 17, 21, 37, 39, 43]

재밋는 비교를 위해 파이썬 random 함수를 이용하여 간단하게 로또 번호 자동생성기를 만들어보았습니다.

import random for i in range(5): lotto = random.sample(range(1,46),6) lotto.sort() print(“자동 로또 번호는 “, lotto)

자동 로또 번호는 [7, 14, 17, 25, 33, 40]

자동 로또 번호는 [2, 3, 12, 28, 32, 43]

자동 로또 번호는 [1, 6, 10, 19, 28, 33]

자동 로또 번호는 [12, 25, 36, 39, 43, 45]

자동 로또 번호는 [1, 7, 21, 29, 31, 38]

당첨결과를 보시면… 5천원도 당첨이 안된 것을 확인할 수 있습니다.

이렇게 재미로만 접근하시는 걸 추천드리고 포스팅을 마치겠습니다.

References

반응형

딥러닝으로 로또 당첨 번호를 예측할 수 있을까? > 학습

안녕하세요. 엔지엠소프트웨어입니다. 여러분들도 일정 금액을 받고 매주 로또 당첨 번호를 보내주는 광고를 접한 경험이 있을겁니다. 사실 저처럼 제조 환경에서 수율을 개선하고, 통계쪽 개발하는 개발자는 로또 당첨 번호를 예측한다는게 얼마나 말이 안되는것인지 잘 알고 있을겁니다. 하지만~ 많은 사람들이 유료로 결제해서 이런 서비스를 이용하고 있다는걸 알게 되었습니다. 물론, 이런 업체들이 내세우는 알고리즘 또는 인공지능 기술이 어떤것인지는 모르겠지만 로또와 같은 인과 관계가 없는 연속된 데이타를 예측한다는건 불가능합니다. 로또 번호와 같이 독립적 사건은 언제나 한 번호가 뽑힐 확률은 45/1이기 때문입니다. 저번주에 나온 번호와 이번주에 나올 번호와는 그 어떠한 인과 관계가 존재하지 않는다는 뜻입니다. 만약, 통계적으로 예측이 가능하다면 세계의 모든 수학자들은 이미 부자가 되어 있어야 합니다. 실상은 그렇지 않죠^^;

※ 로또 보다는 카지노에 가서 덱(보통 6덱 사용)에서 빠진 카드를 계산하는게 돈 버는 확률은 더 높습니다. 카드 카운팅이 불법은 아니기 때문이죠. 머리가 좋아야 가능한 부분이다보니 누구나 다 적용되는건 아닙니다. 6덱에서 카드 카운팅 후 확률을 계산해서 베팅해야 하기 때문에 암기와 암산 능력이 탁월한 또는 훈련된 사람만 가능합니다. CRM이라는 카지노 운영 시스템을 개발 및 관리한 경험 때문에 알고 있는 내용입니다-_-;

유튜브에 검색해보면 수많은 자료를 볼 수 있을겁니다. 요즘은 파이썬과 텐서플로우로 인해 많은 개발자가 빠르고 쉽게 머신 러닝을 테스트하고 평가해볼 수 있는 환경이 되었습니다. 엔지엠소프트웨어에서도 이런 딥러닝으로 학습한 모델을 이용하여 그동안 매크로로 할 수 없었던 많은 것들을 처리할 수 있게 되었습니다. 요즘은 RPA라는 용어로 자동화를 진행하고 있습니다. 이 내용은 재미로만 봐주시고, 문제점에 대해서는 언제든지 피드백을 주시면 수정하도록 하겠습니다.

※ 이 글은 유튜버 조코딩님의 강좌를 참고했습니다.

딥러닝을 하기 위해서는 학습할 데이타셋(그동안 1등 당첨된 번호들)이 필요하고, 이 데이타셋을 어떻게 학습시킬건지 설정해야 합니다. 그리고, 데이타셋을 기반으로 학습된 모델을 이용해서 다음 회차에 어떤 번호가 1등으로 당첨될지 예측하는 순서로 진행됩니다. 자~ 첫번째로 해야할 일은 그동안 누적된 1등 당첨 번호를 알아내야 합니다. 다행스럽게도 로또645에서는 그동안 1등 번호들을 정리해서 제공하고 있습니다. 아래 링크를 클릭하여 로또645 페이지로 이동하세요.

[ 로또645 ]

마지막으로 스크롤을 내려보면 회차별로 엑셀 파일을 다운로드 받을 수 있습니다. 아래 그림과같이 1부터 마지막 회차까지 선택하고, “엑셀다운로드”를 클릭하세요.

다운로드 받은 엑셀 파일을 열어보면 1회차부터 선택한 마지막 회차까지 모든 정보가 정리되어 있는걸 확인할 수 있습니다.

이 데이타를 직접 사용할수는 없습니다. 프로그래밍으로 데이타를 정리하고 파싱해서 사용해도 되지만, 이런 코딩까지 작성하려면 많은 시간과 노력이 필요합니다. 데이타 정제에 대한 내용이 아니므로 이 부분은 수동으로 진행해야 합니다. 엑셀에서 불필요한 데이타를 모두 삭제하고 CSV로 만들어서 첨부해두었으니 여러분들은 첨부된 파일을 다운로드해서 테스트 해보세요. “로또645.csv” 파일이 다운로드 되었으면 Visual Stduio Code에서 열어보세요. 쉼표(Comma)로 구분된 데이타셋을 확인할 수 있습니다.

데이타셋을 보면 당첨 금액쪽에 쉼표 사이에 공백이 있는걸 알 수 있습니다. 이 공백들도 모두 제거해줘야 합니다. 아래 동영상처럼 공백을 하나 선택하고 Ctrl+H를 눌러서 모두 바꾸기를 클릭하세요. 여러분들도 모든 공백이 사라졌을겁니다. 만약, 단축키로 동작하지 않으면 메뉴의 편집 > 바꾸기를 이용하셔도 됩니다.

범주형 데이타를 딥러닝에서 이용하기 위해 원핫인코딩으로 변형해서 진행해야 합니다. 원핫인코딩은 단어 집합의 크기를 벡터의 차원으로 하고, 표현하고 싶은 단어의 인덱스에 1의 값을 부여하고, 다른 인덱스에는 0을 부여하는 단어의 벡터 표현 방식입니다. 이렇게 표현된 벡터를 원핫 벡터(One Hot Vector)라고 합니다. 사실 어떤 데이타를 어떻게 전처리할지는 분석하려는 대상에 따라 달라질 수 있다는걸 알아야 합니다. 우리가 분석할 데이타는 야구에서 보면 출루율, 타율, 방어율과 같은 수치형 데이타와 지역, 성씨, 정세등과 같은 범주형 데이타로 나눌 수 있습니다. 로또 당첨 번호는 숫자지만 연속된 인과 관계가 없으므로 매번 출현하는 번호는 범주형으로 분류할 수 있습니다. Visual Studio Code를 실행하고, “lotto645.py” 파일을 추가합니다.

첨부되어 있는 “로또645.csv” 파일을 워크스페이스의 dataset에 복사해줍니다.

아래 코드를 붙여넣기하고, 저장(Ctrl+S) 후 실행(F5) 해보세요.

※ 출처는 [ 조코딩님 깃헙 ]입니다. 보통은 내용을 보고 직접 타이핑하지만… 이건 내용이 길어서 복붙 후 로컬 환경에서 동작하도록 약간 수정했습니다.

import os os.add_dll_directory(‘C:\\Program Files\\NVIDIA GPU Computing Toolkit\\CUDA\\v11.0\\bin’) import numpy as np import tensorflow as tf from tensorflow import keras from tensorflow.keras import layers from tensorflow.keras import models import matplotlib.pyplot as plt from matplotlib.ticker import MaxNLocator rows = np.loadtxt(“./dataset/로또645.csv”, delimiter=”,”) row_count = len(rows) # 당첨번호를 원핫인코딩벡터(ohbin)으로 변환 def numbers2ohbin(numbers): ohbin = np.zeros(45) #45개의 빈 칸을 만듬 for i in range(6): #여섯개의 당첨번호에 대해서 반복함 ohbin[int(numbers[i])-1] = 1 #로또번호가 1부터 시작하지만 벡터의 인덱스 시작은 0부터 시작하므로 1을 뺌 return ohbin # 원핫인코딩벡터(ohbin)를 번호로 변환 def ohbin2numbers(ohbin): numbers = [] for i in range(len(ohbin)): if ohbin[i] == 1.0: # 1.0으로 설정되어 있으면 해당 번호를 반환값에 추가한다. numbers.append(i+1) return numbers numbers = rows[:, 1:7] ohbins = list(map(numbers2ohbin, numbers)) x_samples = ohbins[0:row_count-1] y_samples = ohbins[1:row_count] #원핫인코딩으로 표시 print(“ohbins”) print(“X[0]: ” + str(x_samples[0])) print(“Y[0]: ” + str(y_samples[0])) #번호로 표시 print(“numbers”) print(“X[0]: ” + str(ohbin2numbers(x_samples[0]))) print(“Y[0]: ” + str(ohbin2numbers(y_samples[0]))) train_idx = (0, 800) val_idx = (801, 900) test_idx = (901, len(x_samples)) print(“train: {0}, val: {1}, test: {2}”.format(train_idx, val_idx, test_idx)) # 모델을 정의합니다. model = keras.Sequential([ keras.layers.LSTM(128, batch_input_shape=(1, 1, 45), return_sequences=False, stateful=True), keras.layers.Dense(45, activation=’sigmoid’) ]) # 모델을 컴파일합니다. model.compile(loss=’binary_crossentropy’, optimizer=’adam’, metrics=[‘accuracy’]) # 매 에포크마다 훈련과 검증의 손실 및 정확도를 기록하기 위한 변수 train_loss = [] train_acc = [] val_loss = [] val_acc = [] # 최대 100번 에포크까지 수행 for epoch in range(100): model.reset_states() # 중요! 매 에포크마다 1회부터 다시 훈련하므로 상태 초기화 필요 batch_train_loss = [] batch_train_acc = [] for i in range(train_idx[0], train_idx[1]): xs = x_samples[i].reshape(1, 1, 45) ys = y_samples[i].reshape(1, 45) loss, acc = model.train_on_batch(xs, ys) #배치만큼 모델에 학습시킴 batch_train_loss.append(loss) batch_train_acc.append(acc) train_loss.append(np.mean(batch_train_loss)) train_acc.append(np.mean(batch_train_acc)) batch_val_loss = [] batch_val_acc = [] for i in range(val_idx[0], val_idx[1]): xs = x_samples[i].reshape(1, 1, 45) ys = y_samples[i].reshape(1, 45) loss, acc = model.test_on_batch(xs, ys) #배치만큼 모델에 입력하여 나온 답을 정답과 비교함 batch_val_loss.append(loss) batch_val_acc.append(acc) val_loss.append(np.mean(batch_val_loss)) val_acc.append(np.mean(batch_val_acc)) print(‘epoch {0:4d} train acc {1:0.3f} loss {2:0.3f} val acc {3:0.3f} loss {4:0.3f}’.format(epoch, np.mean(batch_train_acc), np.mean(batch_train_loss), np.mean(batch_val_acc), np.mean(batch_val_loss))) fig, loss_ax = plt.subplots() acc_ax = loss_ax.twinx() loss_ax.plot(train_loss, ‘y’, label=’train loss’) loss_ax.plot(val_loss, ‘r’, label=’val loss’) acc_ax.plot(train_acc, ‘b’, label=’train acc’) acc_ax.plot(val_acc, ‘g’, label=’val acc’) loss_ax.set_xlabel(‘epoch’) loss_ax.set_ylabel(‘loss’) acc_ax.set_ylabel(‘accuray’) loss_ax.legend(loc=’upper left’) acc_ax.legend(loc=’lower left’) plt.show() # 88회부터 지금까지 1등부터 5등까지 상금의 평균낸다. mean_prize = [ np.mean(rows[87:, 8]), np.mean(rows[87:, 9]), np.mean(rows[87:, 10]), np.mean(rows[87:, 11]), np.mean(rows[87:, 12])] print(mean_prize) # 등수와 상금을 반환함 # 순위에 오르지 못한 경우에는 등수가 0으로 반환함 def calc_reward(true_numbers, true_bonus, pred_numbers): count = 0 for ps in pred_numbers: if ps in true_numbers: count += 1 if count == 6: return 0, mean_prize[0] elif count == 5 and true_bonus in pred_numbers: return 1, mean_prize[1] elif count == 5: return 2, mean_prize[2] elif count == 4: return 3, mean_prize[3] elif count == 3: return 4, mean_prize[4] return 5, 0 def gen_numbers_from_probability(nums_prob): ball_box = [] for n in range(45): ball_count = int(nums_prob[n] * 100 + 1) ball = np.full((ball_count), n+1) #1부터 시작 ball_box += list(ball) selected_balls = [] while True: if len(selected_balls) == 6: break ball_index = np.random.randint(len(ball_box), size=1)[0] ball = ball_box[ball_index] if ball not in selected_balls: selected_balls.append(ball) return selected_balls train_total_reward = [] train_total_grade = np.zeros(6, dtype=int) val_total_reward = [] val_total_grade = np.zeros(6, dtype=int) test_total_reward = [] test_total_grade = np.zeros(6, dtype=int) model.reset_states() print(‘[No. ] 1st 2nd 3rd 4th 5th 6th Rewards’) for i in range(len(x_samples)): xs = x_samples[i].reshape(1, 1, 45) ys_pred = model.predict_on_batch(xs) # 모델의 출력값을 얻음 sum_reward = 0 sum_grade = np.zeros(6, dtype=int) # 6등까지 변수 for n in range(10): # 10판 수행 numbers = gen_numbers_from_probability(ys_pred[0]) #i회차 입력 후 나온 출력을 i+1회차와 비교함 grade, reward = calc_reward(rows[i+1,1:7], rows[i+1,7], numbers) sum_reward += reward sum_grade[grade] += 1 if i >= train_idx[0] and i < train_idx[1]: train_total_grade[grade] += 1 elif i >= val_idx[0] and i < val_idx[1]: val_total_grade[grade] += 1 elif i >= test_idx[0] and i < test_idx[1]: val_total_grade[grade] += 1 if i >= train_idx[0] and i < train_idx[1]: train_total_reward.append(sum_reward) elif i >= val_idx[0] and i < val_idx[1]: val_total_reward.append(sum_reward) elif i >= test_idx[0] and i < test_idx[1]: test_total_reward.append(sum_reward) print('[{0:4d}] {1:3d} {2:3d} {3:3d} {4:3d} {5:3d} {6:3d} {7:15,d}'.format(i+1, sum_grade[0], sum_grade[1], sum_grade[2], sum_grade[3], sum_grade[4], sum_grade[5], int(sum_reward))) print('Total') print('==========') print('Train {0:5d} {1:5d} {2:5d} {3:5d} {4:5d} {5:5d} {6:15,d}'.format(train_total_grade[0], train_total_grade[1], train_total_grade[2], train_total_grade[3], train_total_grade[4], train_total_grade[5], int(sum(train_total_reward)))) print('Val {0:5d} {1:5d} {2:5d} {3:5d} {4:5d} {5:5d} {6:15,d}'.format(val_total_grade[0], val_total_grade[1], val_total_grade[2], val_total_grade[3], val_total_grade[4], val_total_grade[5], int(sum(val_total_reward)))) print('Test {0:5d} {1:5d} {2:5d} {3:5d} {4:5d} {5:5d} {6:15,d}'.format(test_total_grade[0], test_total_grade[1], test_total_grade[2], test_total_grade[3], test_total_grade[4], test_total_grade[5], int(sum(test_total_reward)))) print('==========') total_reward = train_total_reward + val_total_reward + test_total_reward plt.plot(total_reward) plt.ylabel('rewards') plt.show() ax = plt.figure().gca() ax.xaxis.set_major_locator(MaxNLocator(integer=True)) rewards = [sum(train_total_reward), sum(val_total_reward), sum(test_total_reward)] class_color=['green', 'blue', 'red'] plt.bar(['train', 'val', 'test'], rewards, color=class_color) plt.ylabel('rewards') plt.show() # 최대 100번 에포크까지 수행 for epoch in range(100): model.reset_states() # 중요! 매 에포크마다 1회부터 다시 훈련하므로 상태 초기화 필요 for i in range(len(x_samples)): xs = x_samples[i].reshape(1, 1, 45) ys = y_samples[i].reshape(1, 45) loss, acc = model.train_on_batch(xs, ys) #배치만큼 모델에 학습시킴 batch_train_loss.append(loss) batch_train_acc.append(acc) train_loss.append(np.mean(batch_train_loss)) train_acc.append(np.mean(batch_train_acc)) print('epoch {0:4d} train acc {1:0.3f} loss {2:0.3f}'.format(epoch, np.mean(batch_train_acc), np.mean(batch_train_loss))) # 마지막 회차까지 학습한 모델로 다음 회차 추론 print('receive numbers') xs = x_samples[-1].reshape(1, 1, 45) ys_pred = model.predict_on_batch(xs) list_numbers = [] for n in range(10): numbers = gen_numbers_from_probability(ys_pred[0]) numbers.sort() print('{0} : {1}'.format(n, numbers)) list_numbers.append(numbers) 훈련셋(train loss)에 대해서는 에포크¹가 늘어날수록 정확도가 올라가고 손실은 떨어지는것을 확인할 수 있습니다. 하지만, 검증셋은 일반적인 학습 모델과는 다른 양상을 보여줍니다. 1) 에포크란? CNN과 같은 딥러닝 모델을 훈련시키다보면 꼭 만나게 되는 것이 배치(batch), 에포크(epoch)라는 단어입니다. 이 두 단어가 무엇을 지칭하는 것인지를 알아야 모델을 제대로 훈련시킬 수 있습니다. 먼저 batch의 사전적 의미에는 "집단, 무리, 한 회분, (일괄 처리를 위해) 함께 묶다" 등이 있습니다. 딥러닝에서 배치는 모델의 가중치를 한번 업데이트 시킬 때 사용되는 샘플들의 묶음을 의미합니다. 만약에 총 1000개의 훈련 샘플이 있는데, 배치 사이즈가 20이라면 20개의 샘플 단위마다 모델의 가중치를 한번씩 업데이트 시킵니다. 그러니까 총 50번(=1000/20) 가중치가 업데이트 되겠죠. 하나의 데이터셋을 총 50개의 배치로 나눠서 훈련을 진행한겁니다. epoch의 사전적 의미는 "시대(중요한 사건, 변화들이 일어난)"입니다. 딥러닝에서 에포크는 학습의 횟수를 의미합니다. 만약 에포크가 10이고 배치 사이즈가 20이면, 가중치를 50번 업데이트하는 것을 총 10번 반복합니다. 각 데이터 샘플이 총 10번씩 사용되는 것입니다. 결과적으로 가중치가 총 500번 업데이트 됩니다. 학습 데이타로 훈련한 구간이 아닌 800회부터는 당첨이 안되는걸 알 수 있습니다. 다른 그래프로 확인해봐도 동일한 결과가 나오는 것을 알 수 있습니다. 딥러닝으로 학습한 후 예측한 결과 값은 아래와 같습니다. 오늘이 토요일이라서 저 결과로 로또를 사보겠습니다-_-; 사실 로또는 운입니다. 기대하면 안됩니다. 반도체 공정쪽에서 수율을 증가시키기 위한 여러가지 활동들이 있습니다. 장비의 상태나 날씨, PM, 재료, RMS, 시간, 두께, 습도등등... 많은 변수를 y값으로 통계적으로 계산합니다. 그래도~ 예측이 어렵습니다. 이전 Raw data가 상관 관계를 가지고 있을것이라고 생각하고 여러가지 방법으로 전처리를 한 후 가우스 분석, 변량 분석, 아노바 분석, 페르마나 프랙탈, 회귀, 분산분포등등... 이런 분석에는 다양한 외부 환경 요인도 가중치를 계산해서 넣어줘야 합니다. 다시 로또 당첨 번호 예측을 하려면 단순히 1등 번호만으로는 불가능하다는걸 여러분들도 이제 알게 되었을겁니다. 여기서, 로또 번호를 추첨할 당시에 기상 상황, 스테이지의 컨디션, 추첨 기계의 노후나 정비 상태, 건물의 떨림 척도를 계측할 수 있는 진동 스펙트럼등등... 수많은 변수를 대입해서 처리하면 될수도 있지 않을까 하는 생각을 해봅니다. 1번 공이 나올때와 100프로 일치하는 시공간적 환경을 만들어준다면 똑같이 1이 나오지 않을까요? 하지만, 저런 환경을 만든다는것 자체가 불가능하기 때문에 즐거운 상상으로만 만족하시길 바랍니다^^ 개발자에게 후원하기 추천, 구독, 홍보 꼭~ 부탁드립니다. 여러분의 후원이 빠른 귀농을 가능하게 해줍니다~ 답답한 도시를 벗어나 귀농하고 싶은 개발자~ 감사합니다~

Python Machine Learning을 이용한 Lotto 번호 생성 프로그램 – (1)

반응형

이번에 파이썬을 이용하여 Lotto 번호 6자리를 뽑아내는 프로그램을 만들어 보았다.

많은 사람들이 Lotto 번호를 만드는 프로그램을 만들었으며 대부분은 random() 함수를 이용하여 난수를 생성한다.

그러나 여기서는 Machine Learning 중 XGBoost 알고리즘을 이용하고 그동안의 Lotto 번호 통계를 바탕으로 6개의 숫자를 뽑는 프로그램을 구현해 보았다.

Lotto 는 45개의 숫자 중 순서에 상관없이 6개의 숫자가 모두 맞아야 하기 때문에 그 확률은 1/8,145,060 이 된다.

또한, 이전 차수까지 많이 나온 숫자가 앞으로도 많이 나온다거나 아니면 앞으로는 적게 나온다거나 하지 않으므로 Lotto 1등 번호를 예측하기란 사실상 불가하다고 볼 수 있다. (어떻게 보면 다른 사람들이 많이들 했던 random() 함수를 이용한 난수 생성이 더 확률이 높을지도 모르겠다.)

그러나 쉽게 번호를 추출하기 보다는 Machine Learning도 이용하고 무언가 분석을 통해 찾은 것 같은 뿌듯함(?)이 있을 것 같아 해 보게 되었다.

그리고 무엇보다 개인의 Python 공부가 목적이고 이렇게 무언가를 만들어 보는 것이 가장 큰 도움이 되기에 해보게 되었다.

그렇기 때문에 앞으로 나오는 내용에 대해서는 그냥 재미로 봐주었으면 한다.

그럼 본격적으로 설명해 보도록 하겠다.

먼저 프로그램은 아래의 그림과 같은 구성으로 되어 있다.

(Lotto 번호 추출 프로그램 구성 )

Lotto 당첨번호를 다운로드하여서 각 1등 당첨 번호 6개의 합들을 구한다. 그리고 Machine Learning 중 XGBoost 알고리즘을 통해 다음 차수의 번호 합을 예측한다.

예측된 합을 구성하는 6개의 번호 조합을 만드는 것은 다운로드한 데이터에서 가장 많이 나온 숫자들을 바탕으로 조합을 만들고 또한, 가장 적게 나온 숫자를 바탕으로 조합을 만든다.

가장 많이 나온 숫자 순으로 조합을 만드는 이유는 아무래도 또 나오지 않을까 하는 기대 심리에서 한 것이고 가장 적게 나온 순으로 조합을 만드는 이유는 이제까지 안 나왔으니 이제는 나올 거라는 기대 심리에서 하게 되었다. 그 외에 이유는 없다.

[1. 로또 당첨번호 다운로드]

(Lotto 데이터 다운로드 코드 )

위의 코드는 인터넷 상에서 구한 것으로 이 코드를 통해 Lotto 사이트에서 당첨 번호와 당첨 금액 등이 포함된 데이터를 다운로드할 수 있다.

위 코드의 마지막에 보면 “940”는940 차수까지의 데이터를 다운로드하는 것을 의미하며 다운로드한 데이터는 “lotto_df”에 저장한다.

저장된 데이터는 “lotto_df.to_csv(“lotto_940.csv”, index=False)” 코드를 통해 “lotto_940”이란 이름의 CSV파일로 저장할 수 있다.

“Index=False” 는 index를 추가하지 않고 저장한다는 의미이다.

다음의 코드는 google drive에 저장한 Lotto 데이터를 읽어온다.

전체 작업을 google colab에서 했고 사이트에서 다운로드하여로 저장한 파일을 google drive에 넣어두고 필요할 때 불러와서 사용하면 편리하다.

(Google Drive 에 있는 파일을 여는 코드 )

위 코드를 실행하면 Lotto의 데이터는 아래처럼 구성되어 있다.

(Lotto 데이터 )

[2. 각 1등 당첨번호의 합 구하기]

각 1등이 된 6개 번호의 합은 위의 그림에서 Num1 ~ Num6까지를 더하면 되며 아래의 코드와 같다.

(1 등 번호들 간의 합을 구하는 코드 )

각각 더해진 값에서 index를 빼고 실제 값만을 “. values”기능을 통해 뽑아서 “values”에 저장하고 결과를 보면 다음과 같다.

( 각 1 등 번호들의 합 )

[3. XGBoost를 통한 다음 차수의 합 예측하기]

다음의 코드를 통해 XGBoost를 이용하여 다음 차수의 1등 번호 6개 숫자의 합을 예측한다.

XGBoost를 적용한 이유는 이전에 주식 종가 예측 프로그램을 만들 때에 이용했던 알고리즘이고 무엇보다 유일하게 알고 있는 것이며 바로 적용할 수 있기 때문이었다.

실제로 여기서도 거의 그대로 적용하였다.

(XGBoost 를 이용한 다음 차수의 1 등 숫자 합을 구하는 코드 )

XGBoost를 이용하는 코드에 대한 설명은 이전 글인 “XGBoost를 이용한 주식 예측”을 참고하고 여기서는 다루지 않겠다.

이전 주식 종가 예측에서는 XGBoost의 파라미터를 최적화하는 부분이 없었는데, 이번에는 “GridSearchCV”를 통해 파라미터 최적화 코드를 추가하였다.

이러한 부분은 인터넷을 통해 참고하여 넣었으며 내용을 잘 모르기 때문에 설명을 할 수는 없다.

(실제 최적화가 되었는지도 미지수다.)

다만, Lotto 데이터에서 가장 최신 날짜의 데이터를 삭제하고 예측을 수행하여 삭제했던 최신 날짜의 데이터와 거의 동일하게 될 때까지 변수를 수정하려는 노력은 하였다.

(쓸데없는 짓이지만 유일하게 해 볼 수 있는 일이기도 했다.)

이렇게 해서 예측된 합은142.719이며 결과의 소수점이 있는 경우에 반올림을 통해 정수로 만들어 주면 143이 된다.

1부는 여기서 끝내고 2부에서는 예측된 합이 되기 위한 6개 숫자의 조합을 찾도록 하겠다.

반응형

딥로또 895회

WARNING:tensorflow:From /usr/local/lib/python3.6/dist-packages/tensorflow_core/python/ops/math_grad.py:1394: where (from tensorflow.python.ops.array_ops) is deprecated and will be removed in a future version. Instructions for updating: Use tf.where in 2.0, which has the same broadcast rule as np.where epoch 0 train acc 0.862 loss 0.410 val acc 0.867 loss 0.397 epoch 1 train acc 0.867 loss 0.396 val acc 0.867 loss 0.397 epoch 2 train acc 0.867 loss 0.394 val acc 0.867 loss 0.396 epoch 3 train acc 0.867 loss 0.392 val acc 0.867 loss 0.397 epoch 4 train acc 0.867 loss 0.388 val acc 0.867 loss 0.398 … epoch 91 train acc 0.999 loss 0.011 val acc 0.811 loss 1.203 epoch 92 train acc 0.999 loss 0.009 val acc 0.817 loss 1.189 epoch 93 train acc 1.000 loss 0.007 val acc 0.811 loss 1.178 epoch 94 train acc 1.000 loss 0.007 val acc 0.811 loss 1.198 epoch 95 train acc 0.996 loss 0.016 val acc 0.805 loss 1.174 epoch 96 train acc 0.993 loss 0.026 val acc 0.807 loss 1.204 epoch 97 train acc 0.998 loss 0.014 val acc 0.813 loss 1.231 epoch 98 train acc 0.998 loss 0.011 val acc 0.814 loss 1.216

딥러닝이 예측한 로또 번호는 당첨이 잘될까? 검증 해봤습니다

로또 번호 데이터를 RNN 계열의 딥러닝 알고리즘 LSTM으로 학습시키고 다음 회차를 예측해보면 당첨이 잘되는지 검증을 해보고 직접 나온 번호로 로또를 구매해보는 영상입니다. 결론적으로 로또는 독립시행이라 예측 모델이 의미 없지만 유료 로또 서비스 쓸바에는 공짜로 이거 쓰세요!

딥러닝 로또 예측 사이트: https://animalface.site/lotto

완성 코드: https://github.com/youtube-jocoding/lotto-deeplearning

동행복권: https://dhlottery.co.kr/

목차

00:00 미리보기

00:09 인트로

00:22 수 많은 유료 로또 번호 예측 사이트

01:04 강의 목차

01:29 경고

01:45 참고 문헌

02:04 인공지능, 딥러닝 개념

03:08 딥러닝 로또 번호 예측 소개

03:43 로또 번호 데이터 수집

07:22 데이터 전처리

07:26 데이터의 종류 – 수치형, 범주형

08:14 원핫인코딩

09:33 Colab 개발 환경 소개

09:47 완성 코드 github

10:04 Colab 연결 및 데이터 불러오기

10:29 라이브러리 설치 및 데이터 전처리 준비

11:44 모델 구성 및 학습

11:50 LSTM 설명

12:27 지도학습 설명

13:41 코드로 학습 수행

14:30 학습된 모델 성능 검증

16:15 여러개의 로또 예측 번호 생성 방법

18:29 모델 평가 방법

19:05 모델 평가

20:38 실제 로또 구매 결과

22:10 딥러닝 로또 번호 예측 사이트 무료 공개

22:49 구독, 좋아요, 알림설정 부탁드립니다

23:01 아웃트로

[참고 문헌]

김태영님 블로그: https://tykimos.github.io/2020/01/25/keras_lstm_lotto_v895

김태영님 유튜브 채널: https://youtube.com/channel/UCG9LWKvg0zADFS_JvVktILg

인공지능 퀀트 코리아 https://www.facebook.com/groups/aiquantkorea/

키워드에 대한 정보 로또 머신 러닝

다음은 Bing에서 로또 머신 러닝 주제에 대한 검색 결과입니다. 필요한 경우 더 읽을 수 있습니다.

이 기사는 인터넷의 다양한 출처에서 편집되었습니다. 이 기사가 유용했기를 바랍니다. 이 기사가 유용하다고 생각되면 공유하십시오. 매우 감사합니다!

사람들이 주제에 대해 자주 검색하는 키워드 딥러닝이 예측한 로또 번호는 당첨이 잘될까?

  • 로또
  • 인공지능
  • 딥러닝
  • 예측

딥러닝이 #예측한 #로또 #번호는 #당첨이 #잘될까?


YouTube에서 로또 머신 러닝 주제의 다른 동영상 보기

주제에 대한 기사를 시청해 주셔서 감사합니다 딥러닝이 예측한 로또 번호는 당첨이 잘될까? | 로또 머신 러닝, 이 기사가 유용하다고 생각되면 공유하십시오, 매우 감사합니다.

See also  카 할라 | 하와이 카할라 호텔 최근 모습(2021년 4월) 상위 113개 답변

Leave a Comment