Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import numpy as np
- from scipy.special import gamma
- def factorial(n):
- if n <= 0:
- return 1
- return n*factorial(n-1)
- def Poisson(k,avg):
- sum=0
- for i in range(0,7):
- sum = sum + (np.power(avg,i)*np.exp(-avg) / gamma(i+1))
- return (np.power(avg,k)*np.exp(-avg)) / gamma(k+1) / sum
- """
- #Intento de utilizar clases para definir los equipos. Necesario a futuro.
- class Team(object):
- def __init__(self, name=None, P=0., W=0., D=0., L=0., GF=0., GA=0.):
- self.name = name
- self.P = P
- self.W = W
- self.D = D
- self.L = L
- self.GF = GF
- self.GA = GA
- self.GD = GA - GF
- Teams Premier League:
- Chelsea
- Man Utd
- Arsenal
- Man Cty
- Tottenham
- Liverpool
- Aston Villa
- Everton
- Birmingham
- Stoke City
- Blackburn
- Fullham
- Sunderland
- Wolves
- Bolton
- West Ham Utd
- Wigan Athletic
- Burnley
- Hull City
- Porstmounth
- Chelsea = Team('Chelsea', 33,23,05,05,84,30)
- ManUtd = Team('Manchester United',34,23,04,07,77,27)
- Arsenal = Team('Arsenal', 33,22,05,06,75,34)
- ManCty = Team('Manchester City', 33,17,11,05,69,41)
- Tottenham = Team('Tottenham', 32,17,07,8,58,32)
- Liverpool = Team('Liverpool', 34,16,8,10,54,33)
- Aston = Team('Aston Villa', 32,14,12,06,44,32)
- Everton = Team('Everton', 33,13,11,9,52,44)
- Birmingham= Team('Birmingham', 34,12,10,12,35,43)
- Stoke = Team('Stoke City', 33,10,13,10,32,35)
- Blackburn= Team('Blackburn', 34,11,10,13,35,50)
- Fulham = Team('Fulham', 33,11,9,13,35,37)
- Sunderland= Team('Sunderland', 34,9,11,14,44,52)
- Wolves = Team('Wolves', 34,8,9,17,28,51)
- Bolton = Team('Bolton', 33,8,8,17,36,61)
- WestHam = Team('West Ham United', 34,7,10,17,41,57)
- Wigan = Team('Wigan Athletic', 33,8,7,18,30,64)
- Burnley = Team('Burnley', 34,7,6,21,36,72)
- Hull = Team('Hull City', 33,6,9,18,32,70)
- Portsmouth= Team('Portsmouth', 33,6,5,22,28,60)
- """
- #f=0.3
- #avg1=Chelsea.GF*1. / Chelsea.P + f*(Chelsea.GF-Chelsea.GA)/Chelsea.P
- #avg2=Bolton.GF*1. / Bolton.P + f*(Bolton.GF-Bolton.GA)/Bolton.P
- #promedio corregido por un factor de diferencia de goles.
- #Interaccion con el usuario. Mucha paja.
- #gf1=input("[Local] Ingrese goles: ")
- #ga1=input("[Local] Ingrese goles en contra: ")
- #p1 =input("[Local] Ingrese partidos jugados: ")
- #gf2=input("[Visita] Ingrese goles: ")
- #ga2=input("[Visita] Ingrese goles en contra: ")
- #p2 =input("[Visita] Ingrese partidos jugados: ")
- #PARAMETROS DE LOS EQUIPOS
- gf1=90 #goles a favor del equipo local
- ga1=30 #goles en contra del equipo local
- p1=34. +0. #partidos jugados del local
- gf2=30 # goles favor visitante
- ga2=90 # goles en contra visitante
- p2=34 +0. #partidos jugados del visitante
- #PARAMETROS DE LAS CASAS DE APUESTAS
- #back
- CL=2.8 #cuota local
- CE=3.25 #cuota empate
- CV=2.6 #cuota visita
- #lay (back efectivo) b=1/(l-1) + 1
- layL=2.98 #cuota lay (no gana local)
- layE=3.7 #cuota lay (no hay empate)
- layV=2.58 #cuota lay (no gana visita)
- CnL=1+1/(layL-1.) #cuota efectiva, tratada como back
- CnE=1+1/(layE-1.) #idem
- CnV=1+1/(layV-1.) #idem
- CnL=1.4
- CnE=1.30
- CnV=1.44
- #ESTIMACION DE LA PROBABILIDAD
- avg1F=gf1/p1 #promedio de goles ekipo local
- avg2F=gf2/p2 #promedio de goles ekipo visita
- avg1A=ga1/p1 #promedio de goles ekipo local
- avg2A=ga2/p2 #promedio de goles ekipo visita
- print '[Goles Local] <favor> =', gf1/p1 + 0., ' <against>=',avg1A
- print '[Goles Visita] <favor> =', gf2/p2 + 0., ' <against>=',avg2A
- Pago=1/CL + 1/ CE + 1/ CV # 1/Pago es el factor de pago de la casa de apuesta. Si Pago = 1 la casa no gana nada.
- Local =0. #probabilidad que gane local
- Visita =0. #probabilidad que gane visita
- Empate = 0.#probabilidad de empate
- if 1/Pago > 1:
- print '\t WARNING! Surebet Detected' #Surebeat significa que la casa paga mas de lo que debe y se puede ganar dinero apostandole a los 3 con diferentes montos
- print '\t Pago =',1/Pago
- else:
- print '\t Pago=',1/Pago
- for i in range(0,7):
- for j in range(0,7):
- prob = Poisson(i,avg1F)*Poisson(i,avg2A)*Poisson(j,avg2F)*Poisson(j,avg1A) / Poisson(avg2A, avg2A) / Poisson(avg1A, avg1A)
- # Probabilidad de que el resultado sea i-j es igual a la
- # probabilidad de que el ekipo local meta i goles dado que el
- # ekipo visita recibe avg2A goles por partido y el ekipo
- # visita meta j goles dado que el equipo local recibe avg1A
- # goles por partido.
- print i,'-',j,'P=',prob
- if i==j:
- Empate = Empate+prob
- if i > j :
- Local = Local + prob
- if i < j :
- Visita= Visita + prob
- Total = Local + Empate + Visita #Como llegamos hasta 7 no mas, la suma no da 1, normalizamos en las siguientes lineas.
- Local = Local /Total
- Empate = Empate / Total
- Visita = Visita / Total
- print ' '
- print 'Local =', Local, ' Casa =',1/CL / Pago # Casa= la probabilidad que la casa estima para cada evento de a cuerdo a las cuotas (a modo de referencia).
- print 'Empate =', Empate,' Casa=', 1/CE / Pago
- print 'Visita =', Visita, ' Casa=',1/CV / Pago
- #CRITERIO DE KELLY
- #Nos dice cuanto porcentaje de nuestro capital debemos apostar en cada
- #caso para maximizar las ganancias y minimizar las perdidas (a largo
- #plazo). Depende de nuestra estimacion de probabilidad y de los
- #precios de las cuotas. Si Kelly es negativo no conviene apostar.
- print ' '
- print 'Kelly L=', (CL*Local - 1)/(CL -1)
- print 'Kelly E=', (CE*Empate - 1)/(CE -1)
- print 'Kelly V=', (CV*Visita - 1)/(CV -1)
- nLocal = 1 - Local
- nEmpate= 1 - Empate
- nVisita= 1 - Visita
- print ' '
- print 'Kelly nL=', (CnL*nLocal - 1)/(CnL -1)
- print 'Kelly nE=', (CnE*nEmpate - 1)/(CnE -1)
- print 'Kelly nV=', (CnV*nVisita - 1)/(CnV -1)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement