Spaces:
Runtime error
Runtime error
File size: 1,921 Bytes
c40ab65 be8a75d c40ab65 be8a75d c40ab65 be8a75d |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 |
import numpy as np
import pandas as pd
from scipy.stats import poisson
def lambda_(df, team1, team2):
#forca1 = df.loc[team1]['forca']
#forca2 = df.loc[team2]['forca']
forca1 = df.loc[team1]['forca']
forca2 = df.loc[team2]['forca']
if forca1 >= 0.8:
forca1 = forca1
else:
forca1 += 0.15*forca1
#forca1 += 0.20
m = 2.25
lambda1 = m*forca1/(forca2 + forca1)
lambda2 = m - lambda1
return [lambda1, lambda2]
def resultado_vde(gols1, gols2):
if gols1 > gols2:
resultado = 'V'
elif gols1 < gols2:
resultado = 'D'
else:
resultado = 'E'
return resultado
def pontos_time(gols1, gols2):
resultado = resultado_vde(gols1, gols2)
if resultado == 'V':
pontos1, pontos2 = 3, 0
elif resultado == 'D':
pontos1, pontos2 = 0, 3
else:
pontos1, pontos2 = 0, 0
return [pontos1, pontos2, resultado]
def dist_poisson(media):
probs = [poisson.pmf(i, media) for i in range(0, 6, 1)] # calcula a probabilidade de sair i gols quando a média = media
probs.append(1-sum(probs)) # probabilidade de sair mais que 5 gols
return pd.Series(probs, index = ['0', '1', '2', '3', '4', '5', '6+'])
def probabilidades_partidas(df, team1, team2):
lambda1, lambda2 = lambda_(df, team1, team2)
dist1, dist2 = dist_poisson(lambda1), dist_poisson(lambda2)
matriz_resultados = np.outer(dist1, dist2) # outer produto dos valores de dist1 e dist2
# empates
empates = np.trace(matriz_resultados)
# soma dos triangulos inferiores
vitoria_team1 = np.tril(matriz_resultados).sum() - empates
# soma dos triangulos superiores
vitoria_team2 = np.triu(matriz_resultados).sum() - empates
vde = np.around([vitoria_team1, empates, vitoria_team2], 3)
probabilidades = [f'{100*i:.2f}%' for i in vde]
return probabilidades, 100*matriz_resultados |