Quebrando a Banca! Prevendo Resultados em apostar no brasileirao Sites de Apostas com Inteligência Artificial
Como podemos nos aproveitar de técnicas de Inteligência Artificial para prever resultados de jogos de futebol e — quem sabe — ganhar dinheiro apostando! Arthur Oliveira · Follow 7 min read · Mar 1, 2024 -- 3 Share
Recentemente, enquanto pensava em apostar no brasileirao alternativas para ganhar dinheiro rápido, me lembrei que costumava apostar há alguns anos em apostar no brasileirao sites como Bet365 e SportingBet.
No entanto, meus ganhos em apostar no brasileirao dinheiro, que podiam ser até expressivos em apostar no brasileirao um primeiro momento, descambavam para uma série de apostas feitas com a emoção assim que eu começava a perder. Logo eu zerava minha conta e começava tudo de novo. Ou desistia alegando que aquilo não era pra mim.
e… perdeu!
Como recentemente tenho realizado incursões sobre o estudo de Data Science, pensei:
Porque não aplicar meus conhecimentos em apostar no brasileirao Data Science a jogos de futebol para tentar fazer uma grana fácil?
Como me senti quando ganhei uma aposta 10 para 1… e perdi tudo no jogo seguinte.
Neste artigo você irá aprender:
Como fazer seleção, limpeza e filtragem de dados. Como plotar um gráfico com a biblioteca MatPlotLib. O algoritmo de Aprendizado de Máquina Naive Bayes. Como usar Python para fazer previsões de jogos de futebol.
Escolhendo os Dados
O que eu quero analisar mesmo?
O primeiro ponto a pensar é: o que quero analisar? Em apostar no brasileirao primeiro lugar, pensei em apostar no brasileirao analisar jogador por jogador dos times. Teríamos muitos dados, estatísticas detalhadas de cada jogador ao longo da carreira, números de gols, assistências, desarmes, etc. Uma outra possibilidade seria aproveitar de atributos que jogos de futebol como FIFA e PES já calculam. No entanto, a extração desses dados seria custosa e demorada para um experimento rápido como esse.
Então, pensei em apostar no brasileirao uma alternativa: analisar o histórico de jogos e tentar identificar padrões neles. Isso significa que o resultado do próximo jogo de um time de futebol represente um reflexo do que foi no passado, digamos há 10 anos atrás? Não! Significa apenas que iremos tentar achar tendências de acordo com os jogos do time ao longo de apostar no brasileirao história. Por exemplo: se um time vem ganhando há 3 jogos, espera-se que apostar no brasileirao equipe esteja motivada e que exista uma tendência de vitória no próximo jogo. Está confuso? Isso ficará mais claro à frente.
Navegando pela internet despretensiosamente, encontrei nesse site o histórico de todos os jogos da história do Corinthians em apostar no brasileirao uma planilha de Excel. Um trabalho e tanto! Decidi, portanto, usar essa planilha nesse experimento (não tem nada a ver com eu ser torcedor do timão, ok?). Detalhe: tudo o que eu fizer aqui é aplicável a qualquer outro time que você deseje analisar. Basta trocar o arquivo de dados.
Analise isso!
Limpando e Filtrando Dados
A primeira coisa a se realizar nesse experimento é a limpeza e filtro dos dados. No nosso caso, a planilha fornecida vem com abas, colunas e linhas desnecessárias , sendo preciso cortar bastante coisa para ficarmos unicamente com o que interessa: o valor de uma partida e apostar no brasileirao data. Também excluí toda partida de futebol antes da década de 60.
Fiz esse processo à mão pelo Excel mesmo. Por fim, cheguei a um arquivo CSV que você pode baixar aqui.
Vamos carregá-lo com Python para entender apostar no brasileirao estrutura? Para isso, vamos usar o Pandas, uma biblioteca que é voltada para análise de dados. Ela irá facilitar muito o nosso trabalho.
import pandas as pd csv = pd.read_csv('Jogos_Corinthians.csv', encoding = 'utf8') print(csv.head())
A saída está apresentada a seguir e nos mostra os seguintes valores: data do jogo, o time do Corinthians, resultado do jogo e o adversário. O comando head mostra as 10 primeiras linhas de um conjunto de dados. Por simplicidade e para facilitar a visualização, coloquei apenas a duas primeiras.
>>>
DATA CORINTHIANS PLACARCOR PLACARADV ADVERSARIO
17-01-60 CORINTHIANS 2 2 LONDRINA (FR)
20-01-60 CORINTHIANS 1 1 CORINTHIANS (PRUDENTE)
Preparando os Dados
Agora que já temos os nossos dados, precisamos prepará-los. Para esse experimento, vamos tentar prever Vitória, Empate ou Derrota de acordo com o resultado do jogo.
Portanto, vamos transformá-los aqui com uma lógica bem simples: para cada jogo, verificamos qual time tem maior número de gols — ou se esse número é igual — e determinamos se o Corinthians ganhou, perdeu ou empatou. Como o computador apenas entende números, vamos colocar 2 para representar vitória, 0 para derrota e 1 para empate.
dados = [] for _, d in csv.iterrows(): data = d['DATA'] golsCorinthians = d['PLACARCOR'] golsAdversario = d['PLACARADV'] if golsCorinthians > golsAdversario: dados.append('2') #Vitória elif golsCorinthians < golsAdversario: dados.append('0') #Derrota else: dados.append('1') #Empate
Se exibirmos o vetor de dados, teremos um resultado mais ou menos assim:
>>> [1, 1, 2, 2, 0, 1, 2, 1, 0, 0, 1, 2, 2, 2, 2, 1, 2, 1, 0, 1,...]
Vamos ver também qual o tamanho do nosso conjunto de dados.
print(len(dados))
>>> 4078
É bastante jogo para nossa base!
Para visualizar melhor, vamos fazer um gráfico dos primeiros 50 jogos do Corinthians desde 1960. Daí poderemos ver a evolução dos resultados do Corinthians ao longo dos anos. Para isso, vamos usar a biblioteca MatPlotLib.
import matplotlib.pyplot as plt plt.plot(csv['DATA'][0:50],dados[0:50]) plt.show()
Evolução do Corinthians nos primeiros 50 jogos da década de 60. Legenda: 1: Vitória, 0: Empate, -1: Derrota.
Agora, estamos prontos para alimentar nosso algoritmo de Aprendizado de Máquina: Naive Bayes.
Naive Bayes
Como o objetivo deste artigo não é explicar o algoritmo Naive Bayes em apostar no brasileirao detalhes, mas utilizá-lo na previsão de jogos, serei extremamente sucinto.
Naive Bayes é um algoritmo de Aprendizado de Máquina que utiliza de probabilidade condicional para calcular a chance de um recurso pertencer a uma determinada classe.
No nosso caso, queremos saber a probabilidade do próximo jogo ser Vitória, Empate ou Derrota com base em apostar no brasileirao jogos passados.
E aquela aula de probabilidade que você matou?
Para saber mais, aqui tem uma ótima referência.
Prevendo Jogos com o Aprendizado de Máquina
Dando continuidade à nossa implementação, vamos por a mão na massa e implementar em apostar no brasileirao Python o algoritmo Naive Bayes.
Mas antes, devemos preparar os nossos dados para o algoritmo. A primeira decisão que devemos tomar é de quanto será nossa “janela”, ou seja, qual o intervalo de jogos iremos analisar. Por exemplo, considere que os últimos 5 resultados do time foram: V V E D V. Se nossa janela vale 2, então iremos treinar o algoritmo com:
Entrada: V, V; saída: E
Entrada: V, E; Saída: D
Entrada: E, D; Saída: V
E assim por diante por todo o nosso conjunto de dados.
Não existe um valor de janela correto aqui. Devemos realizar muitos testes e escolher qual nos traz melhores resultados de previsão.
Considerando uma janela de 2 jogos, temos a implementação apresentada a seguir. Nesse caso, usamos a biblioteca numpy para lidar com matrizes de forma simplificada.
janela = 2 import numpy as np entrada = np.zeros((len(dados)-janela,janela)) saida = np.zeros((len(dados)-janela)) for i in range(len(dados)-janela): entrada[i] = dados[i:i+janela] saida[i] = dados[i+janela]
Nossa última etapa antes de iniciar o algoritmo de fato é dividir nosso conjunto de dados entre teste e treinamento respeitando a divisão 80%/20%. Com isso, treinaremos nosso algoritmo com 80% dos nossos dados e utilizaremos 20% para testar seus resultados de previsão. A biblioteca SciKit-Learn é indicada nesse processo, fazendo a divisão com apenas uma função: train_test_split. Nesse caso, usamos shuffle = false para não randomizarem nosso conjunto de dados.
from sklearn.model_selection import train_test_split train_x, test_x, train_y, test_y = train_test_split(entrada,saida,test_size=0.2, shuffle=False)
Por fim, vamos novamente usar a biblioteca SciKit-Learn para testar o algoritmo Naive Bayes, fazer previsões e imprimir seu resultado.
from sklearn.naive_bayes import MultinomialNB clf_nayve = MultinomialNB().fit(train_x, train_y) pred_naive = clf_nayve.predict(test_x) print(np.mean(test_y == pred_naive))
O que nos resulta em:
>>>0.4963235294117647
E o que isso significa? Significa que em apostar no brasileirao 49% dos jogos nosso algoritmo foi capaz de acertar as previsões. Mas isso é um número aceitável? Basta lembrar que temos 3 possibilidades aqui: vitória, empate, derrota, ou seja 1/3 para cada em apostar no brasileirao um chute aleatório. Isso nos dá 33% de possibilidade de acerto. Nosso algoritmo já ganhou do aleatório, o que quer dizer que conseguiríamos lucrar usando essa abordagem que fizemos aqui em apostar no brasileirao menos de 30 linhas de código.
Considerando que subimos de 33% para 49%, isso nos dá uma alta de 48% se considerarmos o jogo puramente aleatório ((49–33)/33)). Nada mal, ham?
não estou entendendo p**ra nenhuma
Isso nos dá muitas possibilidades de incremento no futuro: usar mais dados, considerar outros times, forças e estatísticas dos jogadores e assim por diante. Ainda, poderíamos usar Redes Neurais Artificiais, o que provavelmente daria um salto de qualidade em apostar no brasileirao nossas previsões.
Segue o código completo:
import pandas as pd
from numpy.random.mtrand import shuffle csv = pd.read_csv('Jogos_Corinthians.csv', encoding = 'utf8') dados = []
data = []
for _, d in csv.iterrows():
golsCorinthians = d['PLACARCOR']
golsAdversario = d['PLACARADV']
if golsCorinthians > golsAdversario:
dados.append(2)
elif golsCorinthians < golsAdversario:
dados.append(0)
else:
dados.append(1) janela = 2
import numpy as np
entrada = np.zeros((len(dados)-janela,janela))
saida = np.zeros((len(dados)-janela))
for i in range(len(dados)-janela):
entrada[i] = dados[i:i+janela]
saida[i] = dados[i+janela] from sklearn.model_selection import train_test_split
train_x, test_x, train_y, test_y = train_test_split(entrada,saida,test_size=0.2, shuffle=False) from sklearn.naive_bayes import MultinomialNB
clf_nayve = MultinomialNB().fit(train_x, train_y)
pred_naive = clf_nayve.predict(test_x)
print(np.mean(test_y == pred_naive))
Conclusão
Neste artigo mostramos como é possível realizar a previsão de jogos de futebol com Python em apostar no brasileirao menos de 30 linhas de código. Apesar das limitações, aqui abre-se um leque de possibilidades de trabalhos futuros e investigações para aprimorar ainda mais a previsão.
Espero que este artigo ajude a conseguir muitos ganhos em apostar no brasileirao sites de apostas. Só não esqueça de mandar meus 10%, ok?
Um abraço a todos que chegaram até aqui!