Motivación

A lo largo de la historia el deporte ha tenido una gran influencia en la cultura y la construcción de una identidad nacional. Además, tiene un impacto positivo en el desarrollo de un país en temas como la educación, la economía y la salud pública. Dada la atención que tienen ciertas disciplinas deportivas en la sociedad, el deporte se ha convertido en uno de los grandes negocios del mundo y ha demostrado ser una parte importante en el crecimiento económico. De la totalidad de los deportes que existen, muchos coinciden en que el futbol es el más popular del mundo, ya que detona un gran movimiento de dinero en apuestas, patrocinios, asistencia a fiestas, venta de camisetas, accesorios, etcétera. Es por ello que se ha despertado un gran interés en construir modelos predictivos y estadísticos. Además, la gran cantidad de información disponible tales como resultados de partidos, inversiones realizadas, características de los jugadores, etcétera, permiten encontrar mecanismos que proporcionan ventajas competitivas.

Introducción.

El presente proyecto tiene como finalidad poner en práctica los conocimientos adquiridos durante el presente curso de Procesos Estocásticos, en un ejemplo práctico aplicado al Futbol.

Objetivos.

Sobre los datos.

El torneo de la Copa del Mundo con las mejores selecciones nacionales es lo último en el mundo del fútbol. Se realiza cada cuatro años. Rusia patrocino el último torneo. Ese torneo involucró a 32 países, que inicialmente se dividieron en 8 grupos de cuatro. En esta primera etapa, cada país jugó contra cada uno de sus 3 compañeros de grupo. Los 2 primeros países de cada grupo avanzaron luego a una segunda etapa eliminatoria. En Brasil-2014, Sudáfrica 2010, Alemania 2006 y Corea del Sur/Japón 2002, se utilizó el mismo formato de torneo en Rusia. Los datos sobre todos los goles en estos cuatro torneos de la Copa del Mundo están disponibles en el sitio web de la Copa del Mundo de la FIFA.

Se trabajará con los 256 partidos disputados en los campeonatos de la Copa del Mundo 2002-2014. Lo ideal sería considerar los goles marcados en el tiempo reglamentario de 90 minutos. Excluyendo los goles marcados en la prórroga o en la tanda de penaltis. Un partido de fútbol regular consta de dos mitades programadas para 45 minutos. Sin embargo, el tiempo de descuento a menudo se agrega al final de cada mitad para compensar las interrupciones del juego derivadas de las lesiones de los jugadores. Por lo cual trabajaremos con el total de goles por partido ya que lamentablemente, la extensión del tiempo de descuento en cada juego no está disponible. Para mantener la coherencia en el análisis, un gol marcado en el tiempo de descuento, digamos en el minuto 92, se registra como ocurrido en el minuto 90, de igual forma para los goles ocurridos por ejemplo al tiempo 46, se registra como ocurrido en el minuto 45. Esto se debe a que, hasta 1998, los goles marcados en tiempos añadidos siempre se registraban en el minuto 45 o en el 90. Esto puede tener algún efecto sobre el ajuste de las distribuciones de Poisson y exponenciales a los datos.

El primer partido en Corea del sur/Japón 2002 se tuvo a Senegal anotando un solo gol contra Francia en el minuto 30. En el segundo juego, Camerún anotó 1 gol contra Irlanda al minuto 39, e Irlanda anoto 1 gol contra Camerún al minuto 52. Es así como el tiempo entre goles estará dado de la siguiente manera:

\[\begin{eqnarray*} TEG1 &=& (90-30)+39\\ &=& 99\\ TEG2 &=& 52-39\\ &=& 13\\ \end{eqnarray*}\]

Análisis del Tiempo entre goles.

Observación

Los primeros tiempos entre goles se muestran a continuación.

Corea del Sur/Japon 2002 Alemania 2006 Sudafrica 2010 Brasil 2014
99 17 126 19
13 6 24 18
83 5 108 42
2 44 45 19
36 12 44 61
27 14 88 56
5 27 36 17
15 56 129 9
5 13 95 11
24 201 14 8

Representación gráfica del tiempo entre goles.

# Representacio grafica del tiempo entre goles:
Npois <- c(1,replicate(10,1))
Texp <- cumsum(c(0,CSJ2002[1:10]))
qplot(Texp,Npois,geom=c("step","point"), main = 'Tiempo entre Goles', 
      ylab = '', xlab = 'Tiempo entre goles', col='red')

A continuación se muestra el histograma del tiempo entre goles.

hist(c(CSJ2002,A2006,SA2010,B2014),border = 'Blue', 
     main = 'Histograma del tiempo entre goles',
     col = 'darkgreen',xlab = 'Tiempo entre goles', ylab = 'Frecuencia')

Notamos que el tiempo entre goles para los mundiales entre 2002 y 2014 presenta una tendencia exponencial. La idoneidad de un ajuste exponencial a los 607 intervalos de tiempo entre goles se puede demostrar de muchas formas. Por ejemplo, una propiedad especial de la distribución exponencial es que su media es igual a su desviación estándar.

## Media=  37.7084
## Desviacion Estandar=  39.18795

Dado que este resultado no es suficiente para demostrar que el tiempo entre goles en un partido sigue un ajuste exponencial, se plantea a continuacón la pruea Chi-Cuadrado para el eajuste exponencial.

Test Chi-Cuadrado para el ajuste Exponencial

Una validación más completa es comparar las distribuciones empíricas de los tiempos entre goles contra una distribución exponencial con la media estimada. Por ejemplo, la probabilidad teórica de observar un intervalo de tiempo entre goles entre 0 y 10 minutos es: \[\begin{eqnarray*} 1-\exp\left(-\lambda * \frac{10}{90}\right) &=& 0.2319411 \end{eqnarray*}\]

Esto implica que entre 607 intervalos entre goles, esperaríamos que \(140 \approx 607 ∗ 0.2319411\) se encuentren entre 0 y 10 minutos.

Duracion.entre.goles Actual Probabilidad.Enpirica Probabilidad.Teorica Esperado
0-10 151 0.2487644 0.2319411 140
10-20 105 0.1746293 0.1781444 108
20-30 87 0.1433278 0.1368254 83
30-40 65 0.1070840 0.1050900 63
40-50 37 0.0626030 0.0807153 48
50-60 40 0.0658979 0.0619941 37
60-70 26 0.0444811 0.0476151 28
70-80 22 0.0362438 0.0365712 22
80-90 22 0.0362438 0.0280888 17
90-100 10 0.0181219 0.0215739 13
100-110 5 0.0082372 0.0165700 10
110-120 4 0.0082372 0.0127267 7
120-130 7 0.0115321 0.0097749 5
Mayor que 130 20 0.0345964 0.0323690 19

Se observa que los resultados teóricos se ajustan a los empíricos

A continuación se muestra una representacion gráfica del número de intervalos entre goles actual comparado con el esperado teórico.

Se realiza la prueba chi-cuadrado para un ajuste exponencial, obteniendo los siguientes resultados:

## 
##  Pearson's Chi-squared test
## 
## data:  tabla_1$Actual and tabla_1$Esperado
## X-squared = 168, df = 156, p-value = 0.2419

Dado que el p-valor es de \(0.2419\). aceptamos la hipótesis de que nuestros datos de los tiempos entre goles siguen una distribución exponencial con parámetro \(\lambda = \frac{2.375}{90}\).

Independencia del tiempos entre goles.

Se estudiará la independencia de los tiempos entre goles. Esto, se puede visualizar mediante un gráfico de dispersión de tiempos consecutivos entre goles, como se muestra a continuación.

# Grafico de Dispersion
plot(c(CSJ2002,A2006,SA2010,B2014)[1:606], c(CSJ2002,A2006,SA2010,B2014)[2:607], 
     xlab = 'Tiempo entre goles', ylab = 'Tiempo entre goles + 1',
     main = 'Diagrama de dispersion', col='deepskyblue4')

Notamos que no existe ninguna patrón, es decir, los tiempos entre goles son independientes.

Proceso de Poisson

Tenemos que los tiempos entre goles se distribuyen exponencialmente con parámetro \(\lambda = \frac{2.375}{90}\), además de ser independientes. Consideremos el siguiente proceso de Poisson con parámetro \(\lambda\) a tiempo continuo \(t\).

\[\begin{eqnarray*} \{X_{t}: \quad t \geq 0 \} \end{eqnarray*}\]

Se tiene que \(X_{t}\) representa el número de goles hasta el tiempo t. Se considera \(t=90\) (Duración estándar de un encuentro), entonces se tiene:

\[\begin{eqnarray*} P(X_{90} = n) &=& \frac{e^{-\lambda t} (\lambda t)^n}{n!}\\ &=& \frac{e^{-2.375} (2.375)^{n}}{n!}\\ \end{eqnarray*}\]

Es decir el número de goles dentro de un período fijo de tiempo de \(90\) minutos sigue una distribución de Poisson con parámetro \(\lambda = 2.375\).

Se calculo la varianza del número de goles por partido a partir de los datos históricos y se obtuvo 2.628704. Esto está en estrecha conformidad con el resultado teórico de que la media y la varianza de una distribución de Poisson coinciden. El ajuste de la distribución de Poisson se puede evaluar más a fondo comparando una distribución de frecuencia teórica de goles por partido con las frecuencias reales.

Test chi-cuadrada para el ajuste de Poisson.

Se tiene que el numero de goles en un encuentro sigue una Poisson(\(\lambda\)) con \(\lambda = 2.375\), entonces se calcula las probabilidades teóricas talque:

\[\begin{eqnarray*} P(X_{90} = 0) &=& \frac{e^{-2.375} (2.375)^{0}}{0!}\\ &=& 0.093015 \end{eqnarray*}\]

Numero.de.Goles N.juegos.actuales Probabilidad.Empirica Probabilidad.teorica N.juegos.esperado
0 24 0.0955882 0.0930145 23
1 57 0.2242647 0.2209094 56
2 59 0.2316176 0.2623299 67
3 58 0.2279412 0.2076779 53
4 32 0.1250000 0.1233087 31
5 14 0.0551471 0.0585716 14
6 o mas 10 0.0404412 0.0341880 8

Se observa que los resultados teóricos se ajustan a los empíricos

Se realiza la prueba chis-cuadrado para un ajuste de Poisson, a continuación se muestran los resultados:

chisq.test(Ppois$N.juegos.actuales,Ppois$N.juegos.esperado)
## 
##  Pearson's Chi-squared test
## 
## data:  Ppois$N.juegos.actuales and Ppois$N.juegos.esperado
## X-squared = 42, df = 36, p-value = 0.227

Dado que el p-valor es \(0,227\). aceptamos la hipótesis de que nuestros datos de número de goles dentro de un período fijo siguen una distribución Poisson con parámetro \(\lambda = 2,375\).

El número esperado de juegos con \(n\) goles se obtiene multiplicando la probabilidad de Poisson de \(n\) goles por 256, el número total de partidos.

Representación gráfica del Proceso

#Representacion grafica del proceso de estudio.
Npois <- c(0:5)
Texp <- cumsum(c(0,CSJ2002[1:5]))
qplot(Texp,Npois,geom=c("step","point"),xlab = 'Tiempo entre goles',
      ylab = 'Numero de goles')

Aplicaciones

Dado un equipo A y un equipo B, nos interesa saber cuántos goles anotara el equipo A en un partido y de igual forma para el equipo B, teniendo así un posible resultado. De los datos históricos correspondientes a los torneos mundiales del 2002 al 2014, logramos encontrar que el número de goles en 90 minutos es un proceso de Poisson homogéneo con parámetro lambda 2.375.

Se propone el siguiente algoritmo para simular el número total de goles del encuentro. En el cual se simulará N veces un resultado del total de número de goles, y se tomará como representante a la moda de los resultados.

#Algoritmo 1.
#Simulacion del numero de goles de un encuentro del campeonato mundial.
nsim = 100
nresultado <- function (nsim){
  lambda <- 2.375
  Ng <- numeric(nsim)
  for (i in 1:nsim){
    Ng[i] <- rpois(1,lambda)
  }
  moda <- mfv(Ng)
  s <- 0
  for (i in 1:nsim){
    if(Ng[i]==moda){
      s <- s+1
    }
  }
  p <- s*100/nsim
  res <- data.frame(moda,p)
  return (res)
}
nres <- nresultado(nsim)

Se obtiene el siguiente resultado:

Numero Total de Goles en el encuentro A vs B
Numero Total de Goles Probabilidad
1 34

Lamentablemente este resultado no provee una idea acerca sobre la victoria del Equipo A, contra el equipo B o viceversa.

Para abordar este nuevo problema se considerará lo siguiente.

\[\begin{eqnarray*} \lambda_A &=& \frac{\text{Numero de Goles marcados por el equipo A}}{\text{Numero de partidos jugados por el equipo A}}\\ \end{eqnarray*}\]

Ejemplo Sean A y B dos equipos para los cuales se tiene:

\[\begin{eqnarray*} \lambda_{A} &=& \lambda_{B} = 2.375\\ \end{eqnarray*}\]

Se propone el siguiente algoritmo para estimar el resultado de un partido.

#Algoritmo 2. 
get_score <- function (){
  # Simulacion de los resultados de un partido. 
  h_scored = rpois(1, 2.375)
  a_scored = rpois(1, 2.375)
  return (data.frame('Equipo A='=h_scored,'Equipo B='= a_scored))
}
Ejemplo1 <- get_score()
kable(Ejemplo1,caption = 'Resultado')
Resultado
Equipo.A. Equipo.B.
0 2

Se obtiene el resultado de un encuentro genérico.

Observaciones

Se considera el primer encuentro en el campeonato mundial RUSIA2018, donde Rusia se impuso 5-0 ante Arabia Saudita.

Para pronosticar el resultado de ese encuentro se hará uso de las observaciones mencionadas anteriormente para la estimación de \(\lambda_A\). Se utilizaran los datos históricos correspondientes a los campeonatos mundiales del 2002 al 2014, mostrados a continuación:

AÑO EQUIPO PARTIDOS JUGADOS GOLES MARCADOS
2002 BRA 7 18
2002 GER 7 14
2002 ESP 5 10
2002 TUR 7 10
2002 KOR 7 8

Los cuales cuentan con las estadísticas por equipo, mismas que se usaran para el cálculo del parámetro \(\lambda_{A}\).

Observación Existe la posibilidad de que uno o varios equipos participantes del mundial Rusia 2018, no tengan datos históricos en la base con la cual estamos trabajando, para esos casos, usaremos \(\lambda \approx \frac{2.375}{2}\)

A continuación se muestran los equipos participantes en el campeonato mundial RUSIA 2018:

##  [1] "Russia"       "Egypt"        "Morocco"      "Portugal"     "France"      
##  [6] "Argentina"    "Peru"         "Croatia"      "Costa Rica"   "Germany"     
## [11] "Brazil"       "Sweden"       "Belgium"      "Tunisia"      "Poland"      
## [16] "Columbia"     "Uruguay"      "Iran"         "Denmark"      "Nigeria"     
## [21] "Serbia"       "South Korea"  "England"      "Japan"        "Saudi Arabia"
## [26] "Spain"        "Australia"    "Iceland"      "Mexico"       "Switzerland" 
## [31] "Senegal"      "Panama"

Para los países de los cuales se tiene datos históricos, se procede a calcular su correspondiente \(\lambda_{A}\), así se tiene el siguiente algoritmo:

#Estimacion de lambda por equipos. 
Estlambda <- function(x,y){
  return(sum(x)/sum(y))
}

#Filtramos los datos para aquellos que paises participantes en el 
#Mundial Rusia 2018
LambdaEquipos <- Estequipos %>%group_by(EQUIPO) %>%
  summarize('lambda'=Estlambda(`GOLES MARCADOS`,`PARTIDOS JUGADOS`)) %>%
  filter (EQUIPO %in% equipos) 

Se muestran los primeros países con su correspondiente \(\lambda\) estimado:

EQUIPO lambda
Argentina 1.450000
Australia 1.100000
Belgium 1.333333
Brazil 2.000000
Columbia 2.400000

Se presenta el siguiente algoritmo para estimar los resultados en los encuentros de la copa del mundo RUSIA18:

#Algoritmo 3.
#Simulacion de resultados, dado datos historicos por paises.
nsim = 100
resultado <- function (eqA, eqB, nsim){
  subset <- LambdaEquipos[which( LambdaEquipos$EQUIPO==eqA | LambdaEquipos$EQUIPO==eqB),]
  lambda_a <- subset$lambda[1]
  lambda_b <- subset$lambda[2]
  lambda_aux <- (2.375/2)
  score_line = character(length(nsim))
  # simulation idea similar to that of sim.R
  for (i in 1:nsim){
    if (!is.na(lambda_a)){
      Resultado_a = rpois(1, lambda_a)
    }
    else{
      Resultado_a = rpois(1, lambda_aux)
    }
    # if we have no historical result of the match
    if (!is.na(lambda_b)){
      Resultado_b = rpois(1, lambda_b)
    }
    else{
      Resultado_b = rpois(1, lambda_aux)
    } 
    score_line[i] = paste0(Resultado_a, '-', Resultado_b)
  }
  return (list(names(which.max(table(score_line))), max(table(score_line))))
}

Ejemplo. Se comenzara simulando los resultados de la primera Fase del torneo, recordemos que el campeonato mundial se divide en 4 fases cada una con 16 encuentros.

Se tiene que los 16 encuentros de la primera fase son:

Equipo A Equipo B
Russia Saudi Arabia
Egypt Uruguay
Morocco Iran
Portugal Spain
France Australia
Argentina Iceland
Peru Denmark
Croatia Nigeria
Costa Rica Serbia
Germany Mexico
Brazil Switzerland
Sweden South Korea
Belgium Panama
Tunisia England
Poland Senegal
Columbia Japan

Se usará el Algoritmo 3 para pronosticar los resultados de la primera fase.

Se presentan los resultados pronosticados junto a lo reales de los encuentros de la primera fase.

Equipo A Equipo B Pronostico Resultado Real Probabilidad
Russia Saudi Arabia 1-0 5-0 28
Egypt Uruguay 1-1 0-1 15
Morocco Iran 0-1 0-1 21
Portugal Spain 1-1 3-3 11
France Australia 1-0 2-1 18
Argentina Iceland 1-1 1-1 16
Peru Denmark 1-1 0-1 20
Croatia Nigeria 1-0 2-0 25
Costa Rica Serbia 0-1 0-1 21
Germany Mexico 1-1 0-1 14
Brazil Switzerland 2-1 1-1 17
Sweden South Korea 1-1 1-0 15
Belgium Panama 1-0 3-0 16
Tunisia England 1-1 1-2 20
Poland Senegal 0-1 1-2 14
Columbia Japan 1-0 1-2 11

Pronostico de Victorias

En el ejemplo anterior se realizaron predicciones de los resultados de los encuentros de la primera fase, una adaptación del ejemplo anterior es pronosticar al equipo ganador, para ello se muestra el siguiente algoritmo:

#Algoritmo 4.
#Simulacion del equipo ganador.
#Nos basaremos en el Algoritmo 3
nsim = 100
resultado <- function (eqA, eqB, nsim){
  subset <- LambdaEquipos[which( LambdaEquipos$EQUIPO==eqA|LambdaEquipos$EQUIPO==eqB),]
  lambda_a <- subset$lambda[1]
  lambda_b <- subset$lambda[2]
  lambda_aux <- (2.375/2)
  Goles_eqA <- numeric(nsim)
  Goles_eqB <- numeric(nsim)
  #Simulacion de los resultados
  for (i in 1:nsim){
    ifelse(!is.na(lambda_a),Goles_eqA[i] <- rpois(1, lambda_a),
           Goles_eqA[i] <- rpois(1, lambda_aux))
    ifelse(!is.na(lambda_b),Goles_eqB[i] <- rpois(1, lambda_b),
           Goles_eqB[i] <- rpois(1, lambda_aux))
    }
  #score_sim <- data.frame(Goles_eqA,Goles_eqB)
  #return(score_sim)
  #Eleccion del ganador. 
  Sa <- 0
  Sb <- 0
  for (i in 1:nsim) {
    ifelse(Goles_eqA[i] > Goles_eqB[i],Sa <- Sa +1,
           Sb <- Sb +1)
  }
  p <- 0
  Ganador <- 'Equipo'
  ifelse(Sa > Sb,Ganador <- eqA,Ganador <- eqB)
  ifelse(Sa > Sb,p <- (Sa*100/nsim),p <- (Sb*100/nsim))
  ResN <- data.frame('Equipo Ganador'=Ganador,'Probabilidad'=p)
  return(ResN)
}

Para el primer partido de la primera fase, pronosticaremos el equipo ganador. Se tiene:

Equipo A Equipo B Resultado Real Ganador Pronosticado Probabilidad
Russia Saudi Arabia 5-0 Russia 62

Conclusiones

  • El fútbol es difícil de predecir no porque sea aleatorio, sino todo lo contrario, porque tiene una estructura hermosa. Son muchos los factores que influyen en el resultado de un partido, hemos logrado comprobar que las distribuciones de Poisson y exponenciales se pueden ilustrar de manera convincente utilizando una aplicación de interés para muchos fanáticos del fútbol en todo el mundo, como lo es el número de goles del encuentro. Aun así, los pronósticos no son ni cercanos a la realidad, tomando como ejemplo el primer partido de la fase 1, obtuvimos un resultado de 1 gol a favor de Rusia lo cual es muy lejano a los 5 goles reales, pero también de los 100 diferentes resultados que simulamos en 62 de ellos Rusia gano, tal y como paso realmente.

  • Operacionalmente los modelos planteados presentan una gran dificultad, la cual es la selección del representante entre las simulaciones.

  • La mayoría de los modelos matemáticos para determinar los resultados se basan en aspectos cualitativos, ya que son objetivos y más fáciles de incorporar a un cálculo; pero al haber tantos otros factores no controlables, lo único que los modelos pueden hacer es estimaciones de probabilidades, nunca garantizar un resultado concreto.

Referencias