daily pastebin goal
32%
SHARE
TWEET

Untitled

a guest May 19th, 2017 49 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. import numpy as np
  2. from scipy.special import gamma
  3.  
  4. def factorial(n):
  5.     if n <= 0:
  6.         return 1
  7.     return n*factorial(n-1)
  8.  
  9.  
  10. def Poisson(k,avg):
  11.  
  12.     sum=0
  13.     for i in range(0,7):
  14.      
  15.         sum = sum + (np.power(avg,i)*np.exp(-avg) / gamma(i+1))
  16.  
  17.    
  18.     return (np.power(avg,k)*np.exp(-avg)) / gamma(k+1) / sum
  19.  
  20.  
  21.  
  22.  
  23.  
  24.  
  25. """
  26. #Intento de utilizar clases para definir los equipos. Necesario a futuro.
  27.  
  28. class Team(object):
  29.     def __init__(self, name=None, P=0., W=0., D=0., L=0., GF=0., GA=0.):
  30.         self.name = name
  31.         self.P = P                  
  32.         self.W = W                  
  33.         self.D = D                  
  34.         self.L = L
  35.         self.GF = GF
  36.         self.GA = GA
  37.  
  38.         self.GD = GA - GF
  39.  
  40.  
  41. Teams Premier League:
  42.  
  43. Chelsea
  44. Man Utd
  45. Arsenal
  46. Man Cty
  47. Tottenham
  48. Liverpool
  49. Aston Villa
  50. Everton
  51. Birmingham
  52. Stoke City
  53. Blackburn
  54. Fullham
  55. Sunderland
  56. Wolves
  57. Bolton
  58. West Ham Utd
  59. Wigan Athletic
  60. Burnley
  61. Hull City
  62. Porstmounth
  63.  
  64.  
  65. Chelsea = Team('Chelsea',          33,23,05,05,84,30)
  66. ManUtd  = Team('Manchester United',34,23,04,07,77,27)        
  67. Arsenal = Team('Arsenal',          33,22,05,06,75,34)        
  68. ManCty  = Team('Manchester City',  33,17,11,05,69,41)        
  69. Tottenham = Team('Tottenham',      32,17,07,8,58,32)         
  70. Liverpool = Team('Liverpool',      34,16,8,10,54,33)         
  71. Aston  = Team('Aston Villa',       32,14,12,06,44,32)        
  72. Everton  = Team('Everton',         33,13,11,9,52,44)         
  73. Birmingham= Team('Birmingham',     34,12,10,12,35,43)        
  74. Stoke = Team('Stoke City',         33,10,13,10,32,35)        
  75. Blackburn= Team('Blackburn',       34,11,10,13,35,50)        
  76. Fulham  = Team('Fulham',           33,11,9,13,35,37)         
  77. Sunderland= Team('Sunderland',     34,9,11,14,44,52)         
  78. Wolves  = Team('Wolves',           34,8,9,17,28,51)      
  79. Bolton  = Team('Bolton',           33,8,8,17,36,61)      
  80. WestHam = Team('West Ham United',  34,7,10,17,41,57)         
  81. Wigan = Team('Wigan Athletic',     33,8,7,18,30,64)      
  82. Burnley = Team('Burnley',          34,7,6,21,36,72)      
  83. Hull = Team('Hull City',       33,6,9,18,32,70)      
  84. Portsmouth= Team('Portsmouth',     33,6,5,22,28,60)
  85.  
  86. """
  87.  
  88. #f=0.3
  89. #avg1=Chelsea.GF*1. / Chelsea.P + f*(Chelsea.GF-Chelsea.GA)/Chelsea.P
  90. #avg2=Bolton.GF*1. / Bolton.P + f*(Bolton.GF-Bolton.GA)/Bolton.P
  91. #promedio corregido por un factor de diferencia de goles.
  92.  
  93.  
  94.  
  95. #Interaccion con el usuario. Mucha paja.
  96. #gf1=input("[Local] Ingrese goles: ")
  97. #ga1=input("[Local] Ingrese goles en contra: ")
  98. #p1 =input("[Local] Ingrese partidos jugados: ")
  99.  
  100. #gf2=input("[Visita] Ingrese goles: ")
  101. #ga2=input("[Visita] Ingrese goles en contra: ")
  102. #p2 =input("[Visita] Ingrese partidos jugados: ")
  103.  
  104.  
  105. #PARAMETROS DE LOS EQUIPOS
  106. gf1=90  #goles a favor del equipo local
  107. ga1=30  #goles en contra del equipo local
  108. p1=34. +0. #partidos jugados del local
  109.  
  110. gf2=30  # goles favor visitante
  111. ga2=90  # goles en contra visitante
  112. p2=34 +0. #partidos jugados del visitante
  113.  
  114.  
  115.  
  116. #PARAMETROS DE LAS CASAS DE APUESTAS
  117. #back
  118. CL=2.8  #cuota local
  119. CE=3.25  #cuota empate
  120. CV=2.6 #cuota visita
  121.  
  122. #lay (back efectivo)  b=1/(l-1) + 1
  123. layL=2.98       #cuota lay (no gana local)
  124. layE=3.7        #cuota lay (no hay empate)
  125. layV=2.58       #cuota lay (no gana visita)
  126. CnL=1+1/(layL-1.)   #cuota efectiva, tratada como back
  127. CnE=1+1/(layE-1.)   #idem
  128. CnV=1+1/(layV-1.)   #idem
  129.  
  130. CnL=1.4
  131. CnE=1.30
  132. CnV=1.44
  133.  
  134.  
  135. #ESTIMACION DE LA PROBABILIDAD
  136.  
  137. avg1F=gf1/p1 #promedio de goles ekipo local
  138. avg2F=gf2/p2 #promedio de goles ekipo visita
  139.  
  140. avg1A=ga1/p1 #promedio de goles ekipo local
  141. avg2A=ga2/p2 #promedio de goles ekipo visita
  142.  
  143.  
  144. print '[Goles Local]  <favor> =', gf1/p1 + 0., ' <against>=',avg1A
  145. print '[Goles Visita] <favor> =', gf2/p2 + 0., ' <against>=',avg2A
  146.  
  147.  
  148.  
  149. 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.
  150.  
  151.  
  152. Local =0.  #probabilidad que gane local
  153. Visita =0. #probabilidad que gane visita
  154. Empate = 0.#probabilidad de empate
  155.  
  156. if 1/Pago > 1:
  157.     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
  158.     print '\t Pago =',1/Pago
  159. else:
  160.     print '\t Pago=',1/Pago  
  161.  
  162.  
  163. for i in range(0,7):
  164.     for j in range(0,7):
  165.  
  166.         prob = Poisson(i,avg1F)*Poisson(i,avg2A)*Poisson(j,avg2F)*Poisson(j,avg1A) / Poisson(avg2A, avg2A) / Poisson(avg1A, avg1A)
  167.  
  168.         # Probabilidad de que el resultado sea i-j es igual a la
  169.         # probabilidad de que el ekipo local meta i goles dado que el
  170.         # ekipo visita recibe avg2A goles por partido y el ekipo
  171.         # visita meta j goles dado que el equipo local recibe avg1A
  172.         # goles por partido.
  173.        
  174.         print i,'-',j,'P=',prob
  175.  
  176.         if i==j:
  177.        
  178.             Empate = Empate+prob
  179.        
  180.         if i > j :
  181.             Local = Local + prob
  182.        
  183.        
  184.         if i < j :
  185.             Visita= Visita + prob
  186.  
  187.  
  188. Total = Local + Empate + Visita #Como llegamos hasta 7 no mas, la suma no da 1, normalizamos en las siguientes lineas.
  189.  
  190. Local = Local /Total
  191. Empate = Empate / Total
  192. Visita = Visita / Total
  193. print ' '
  194. 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).
  195. print 'Empate =', Empate,' Casa=', 1/CE / Pago
  196. print 'Visita =', Visita, ' Casa=',1/CV / Pago
  197.  
  198.  
  199.  
  200. #CRITERIO DE KELLY
  201.  
  202. #Nos dice cuanto porcentaje de nuestro capital debemos apostar en cada
  203. #caso para maximizar las ganancias y minimizar las perdidas (a largo
  204. #plazo). Depende de nuestra estimacion de probabilidad y de los
  205. #precios de las cuotas.  Si Kelly es negativo no conviene apostar.
  206. print ' '
  207. print 'Kelly L=', (CL*Local - 1)/(CL -1)
  208. print 'Kelly E=', (CE*Empate - 1)/(CE -1)
  209. print 'Kelly V=', (CV*Visita - 1)/(CV -1)
  210.  
  211. nLocal =  1 - Local
  212. nEmpate=  1 - Empate
  213. nVisita=  1 - Visita
  214. print ' '
  215. print 'Kelly nL=', (CnL*nLocal - 1)/(CnL -1)
  216. print 'Kelly nE=', (CnE*nEmpate - 1)/(CnE -1)
  217. print 'Kelly nV=', (CnV*nVisita - 1)/(CnV -1)
RAW Paste Data
Top