SPORTS BETTING MATH APPLIED PROBABILITY INSTITUTE
ARTÍCULO DE INVESTIGACIÓN

Modelo Dixon-Coles Explicado: Corrección de Marcadores Bajos y Ponderación Temporal en Fútbol

Desglose matemático completo del ajuste bivariado de Dixon-Coles, matriz de corrección tau para marcadores bajos, estimación de parámetros con decaimiento temporal e ineficiencias del mercado.

22 min de lectura Avanzado Última actualización 2026-09-20

Lab de Modelado Estocástico SBM

Equipo de Modelos de Poisson y Optimización de Bankroll

Laboratorio de investigación enfocado en modelado de distribución de Poisson para goles, optimización de apuestas por el Criterio de Kelly y simulaciones de Monte Carlo para riesgo de ruina.

Modelado Bivariado de Resultados por Distribución de Poisson Optimización de Crecimiento Geométrico por Criterio de Kelly Simulaciones de Monte Carlo para Riesgo de Ruina (10M+ corridas)

1. Introducción: La Falla Estructural del Modelo de Poisson Independiente

En el modelado cuantitativo de fútbol profesional, el marco de Poisson independiente —desarrollado formalmente para el análisis deportivo por M. J. Maher en 1982— representa el punto de partida fundamental para calcular probabilidades de goles y matrices de marcadores exactos. La hipótesis axiomática de Maher establece que los goles convertidos por el equipo local ($X$) y el equipo visitante ($Y$) a lo largo de los 90 minutos reglamentarios constituyen dos procesos estocásticos de Poisson independientes, gobernados por las tasas de intensidad esperadas $lambda$ y $mu$:

$$P(X = x, Y = y) = P(X = x) cdot P(Y = y) = rac{lambda^x e^{-lambda}}{x!} cdot rac{mu^y e^{-mu}}{y!}$$

Aunque matemáticamente elegante, computacionalmente ligero y ampliamente implementado en la comunidad recreativa, este supuesto de independencia presenta un defecto empírico invalidante: los goles en el fútbol de élite no son condicionalmente independientes. En las competiciones profesionales, las transiciones defensivas, los ajustes tácticos ante la ventaja en el marcador y la psicología colectiva inducen una correlación estocástica no nula entre los tantos locales y visitantes.

La Anomalía Empírica de Marcadores Bajos en el Fútbol Profesional: En un metaestudio que abarca más de 40.000 encuentros en las grandes ligas europeas (Premier League inglesa, LaLiga española, Serie A italiana y Bundesliga alemana), los resultados reales demuestran una acumulación sistemática en los tanteos reducidos:
  • Empates 0–0: Ocurren con una frecuencia real de entre el 8,2% y el 9,5%, mientras que un modelo de Poisson independiente estándar con intensidades convencionales ($lambda = 1,45, mu = 1,10$) proyecta apenas un 5,9% —lo que representa una subestimación sistemática del 35%.
  • Empates 1–1: Se registran en aproximadamente el 11,5% al 13,2% de los partidos, frente al 9,4% pronosticado por la independencia simple.
  • Victorias por 1–0 y 0–1: Resultan, por el contrario, sobreestimadas por el modelo simple en torno a un 8% y 15%.

Esta distorsión estructural crea un sesgo analítico de enorme gravedad en los mercados de apuestas deportivas. Cualquier fondo de inversión o sindicato cuantitativo que opere basándose en distribuciones de Poisson independientes subestimará severamente el valor real de los empates cerrados, cometerá errores sistemáticos en las líneas de Handicap Asiático y tasará los mercados de Menos de 2,5 Goles con valor esperado destructivo ($ ext{EV} < 0$).

En su artículo canónico de 1997 publicado en el Journal of the Royal Statistical Society, los estadísticos Mark J. Dixon y Stuart G. Coles resolvieron definitivamente este problema: "Modelling Association Football Scores and Inefficiencies in the Football Betting Market". El modelo Dixon-Coles formuló un factor corrector de correlación bivariada $ au_{x,y}(lambda, mu, ho)$ que ajusta de forma exacta las probabilidades de marcadores reducidos conservando la distribución marginal de Poisson, complementado por un factor de decaimiento temporal exponencial para capturar la evolución de los rendimientos de los clubes en el tiempo.

Este informe técnico expone la deducción matemática exhaustiva del modelo Dixon-Coles, la demostración analítica de la preservación de la probabilidad total, el planteamiento de Máxima Verosimilitud (MLE) con ponderación temporal $\xi$, tablas de distorsión comparativa frente a cuotas de mercado y un script de producción en Python con scipy.optimize.

2. El Factor de Corrección Bivariada de Dixon-Coles

Para corregir la correlación en marcadores bajos sin abandonar las propiedades computacionales de Poisson, Dixon y Coles formularon la distribución bivariada corregida:

$$P(X = x, Y = y mid lambda, mu, ho) = au_{x,y}(lambda, mu, ho) cdot rac{lambda^x e^{-lambda}}{x!} cdot rac{mu^y e^{-mu}}{y!}$$

El factor de ajuste $ au_{x,y}(lambda, mu, ho)$ es un multiplicador escalar discreto aplicado a las cuatro combinaciones de marcadores reducidos ${0, 1} imes {0, 1}$, gobernado por el parámetro de correlación $ ho$:

$$ au_{x,y}(lambda, mu, ho) = egin{cases} 1 - lambda mu ho & ext{para } x = 0, y = 0 \ 1 + lambda ho & ext{para } x = 0, y = 1 \ 1 + mu ho & ext{para } x = 1, y = 0 \ 1 - ho & ext{para } x = 1, y = 1 \ 1 & ext{para } x ge 2 ext{ o } y ge 2 end{cases}$$

Demostración Matemática de la Conservación de la Masa de Probabilidad

Para asegurar la solidez axiomática del modelo, la matriz modificadora $ au_{x,y}$ debe verificar estrictamente la condición de normalización total: $sum_{x=0}^infty sum_{y=0}^infty P(X=x, Y=y) = 1$.

Descomponemos la suma doble en la base no perturbada más la perturbación sobre los cuatro estados modificados:

$$sum_{x=0}^infty sum_{y=0}^infty P(X=x, Y=y) = sum_{x=0}^infty rac{lambda^x e^{-lambda}}{x!} sum_{y=0}^infty rac{mu^y e^{-mu}}{y!} + Delta = 1 cdot 1 + Delta$$

Evaluamos analíticamente la perturbación $Delta$ sobre los estados $(0,0), (0,1), (1,0), (1,1)$:

$$egin{aligned} Delta &= ( au_{0,0} - 1) P_0(lambda) P_0(mu) + ( au_{0,1} - 1) P_0(lambda) P_1(mu) \ &quad + ( au_{1,0} - 1) P_1(lambda) P_0(mu) + ( au_{1,1} - 1) P_1(lambda) P_1(mu) end{aligned}$$

Introduciendo las densidades $P_0(lambda) = e^{-lambda}$, $P_1(lambda) = lambda e^{-lambda}$, $P_0(mu) = e^{-mu}$, $P_1(mu) = mu e^{-mu}$, y factorizando el exponente $e^{-lambda-mu}$:

$$egin{aligned} Delta &= e^{-lambda-mu} Big[ (-lambda mu ho) cdot (1) + (lambda ho) cdot (mu) + (mu ho) cdot (lambda) + (- ho) cdot (lambda mu) Big] \ &= e^{-lambda-mu} ho Big[ -lambda mu + lambda mu + lambda mu - lambda mu Big] \ &= e^{-lambda-mu} ho cdot (0) = mathbf{0} end{aligned}$$

El término perturbativo se anula de forma exacta e idéntica. Por lo tanto, la probabilidad total acumulada suma siempre el $100%$ sin necesidad de renormalizaciones artificiales.

Interpretación Física del Parámetro de Correlación $ ho$

En el análisis de ligas profesionales, la estimación por Máxima Verosimilitud converge de manera invariable hacia un valor negativo de $ ho$, generalmente comprendido en el rango:

$$ ho in [-0,15, -0,05]$$

El comportamiento de un valor negativo (por ejemplo, $ ho = -0,11$) modela con fidelidad la táctica de juego:

  • Para el marcador $(0,0)$: $ au_{0,0} = 1 - lambda mu ho$. Al ser $ ho < 0$, el producto $-lambda mu ho > 0$, con lo cual $ au_{0,0} > 1$. La probabilidad del 0–0 se incrementa directamente.
  • Para el marcador $(1,1)$: $ au_{1,1} = 1 - ho$. Como $ ho < 0$, $1 - ho = 1 + | ho| > 1$. La frecuencia de empates con un gol por bando aumenta de forma proporcional.
  • Para los marcadores $(0,1)$ y $(1,0)$: $ au_{0,1} = 1 + lambda ho < 1$ y $ au_{1,0} = 1 + mu ho < 1$. Las victorias mínimas por 1–0 se corrigen a la baja, garantizando el equilibrio global.

3. Modelado de Fuerzas de Equipo: Ataque, Defensa y Ventaja Local

Las intensidades esperadas de goles $lambda_{i,j}$ (local $i$ frente a visitante $j$) y $mu_{i,j}$ (visitante $j$ frente a local $i$) se parametrizan multiplicativamente:

$$lambda_{i,j} = alpha_i cdot eta_j cdot gamma, qquad mu_{i,j} = alpha_j cdot eta_i$$

Donde:

  • $alpha_i > 0$: Coeficiente ofensivo (potencia de ataque) del equipo $i$. Un valor $alpha_i = 1,25$ implica una producción goleadora un 25% superior al promedio de la liga.
  • $eta_j > 0$: Coeficiente defensivo (concesión de goles) del equipo $j$. Un valor $eta_j = 0,85$ indica que el equipo recibe un 15% menos de goles que la media.
  • $gamma > 0$: Factor macro de ventaja de campo. En las ligas europeas de primer orden, $gamma$ oscila habitualmente entre $1,20$ y $1,35$.

La Restricción de Identificabilidad

Para evitar la indeterminación de escala entre parámetros de ataque y defensa, Dixon y Coles impusieron la restricción canónica sobre el conjunto de los $N$ equipos participantes:

$$ rac{1}{N} sum_{k=1}^N alpha_k = 1,00$$

Esta normalización fija la fuerza ofensiva promedio en la unidad absoluta, permitiendo comparar los índices entre temporadas y competiciones.

4. Ponderación Temporal Exponencial: El Parámetro de Memoria $\xi$

Los resultados de hace dos temporadas no pueden tener la misma trascendencia analítica que los partidos disputados hace tres semanas. Dixon y Coles introdujeron una ponderación de decaimiento temporal continuo $w_k(\xi)$ para cada partido histórico $k$ jugado en la fecha $t_k$, respecto al día de análisis $t$:

$$w_k(\xi) = expleft( -\xi cdot (t - t_k) ight)$$

Donde $(t - t_k)$ es el intervalo transcurrido en días y $\xi > 0$ es el coeficiente de olvido estocástico.

La Vida Media de la Información Táctica: El periodo de semivida temporal $t_{1/2}$, que define los días requeridos para que una observación pierda el 50% de su peso probabilístico, se calcula como: $$t_{1/2} = rac{ln(2)}{\xi}$$ En las calibraciones empíricas con líneas de cierre de la Premier League, el valor óptimo out-of-sample se sitúa típicamente en: $$\xi approx 0,0065 ext{ días}^{-1} implies t_{1/2} approx rac{0,69315}{0,0065} approx 106,6 ext{ días}$$ Esto demuestra que los partidos jugados hace aproximadamente 3 meses y medio conservan la mitad de su valor analítico, mientras que los registros de más de 2 años de antigüedad influyen en menos del 1% en la estimación presente.

5. Optimización por Máxima Verosimilitud (MLE)

Dado un conjunto histórico de $M$ encuentros, la función de verosimilitud logarítmica ponderada se define como:

$$ln L(Theta) = sum_{k=1}^M w_k(\xi) cdot lnleft[ au_{x_k, y_k}(lambda_k, mu_k, ho) cdot rac{lambda_k^{x_k} e^{-lambda_k}}{x_k!} cdot rac{mu_k^{y_k} e^{-mu_k}}{y_k!} ight]$$

Omitiendo los factores factoriales constantes, el algoritmo minimiza la log-verosimilitud negativa ponderada:

$$min_{Theta} mathcal{NLL}(Theta) = -sum_{k=1}^M w_k(\xi) left[ ln au_{x_k, y_k}(lambda_k, mu_k, ho) + x_k ln lambda_k - lambda_k + y_k ln mu_k - mu_k ight]$$

Esta optimización multivariable se ejecuta de forma rápida y convergente empleando algoritmos cuasi-Newton como L-BFGS-B con cotas inferiores y superiores definidas.

6. Tabla de Discrepancia Empírica: Poisson Simple vs. Dixon-Coles

Ilustramos la discrepancia real con un partido estelar: Arsenal vs. Chelsea ($lambda = 1,65, mu = 1,15, ho = -0,12$):

Mercado / Marcador Prob. Poisson Simple Cuota Justa Poisson Prob. Dixon-Coles Cuota Justa Dixon-Coles Benchmark de Cierre Pinnacle Desviación / Ventaja Cuantitativa
0 – 0 (Sin Goles) $6,06%$ $16,50$ $7,44%$ $13,44$ $13,60$ +22,8% Subestimación en Poisson Simple
1 – 1 (Empate con Goles) $11,51%$ $8,69$ $12,89%$ $7,76$ $7,85$ +12,0% Subestimación en Poisson Simple
1 – 0 (Victoria Local Mínima) $10,00%$ $10,00$ $8,62%$ $11,60$ $11,45$ -13,8% Sobreestimación en Poisson Simple
0 – 1 (Victoria Visitante Mínima) $6,97%$ $14,35$ $6,08%$ $16,45$ $16,20$ -12,8% Sobreestimación en Poisson Simple
Victoria Local (1X2) $50,21%$ $1,99$ $48,63%$ $2,06$ $2,05$ Ajuste de $-3,1%$
Empate (1X2) $24,78%$ $4,04$ $27,56%$ $3,63$ $3,65$ +11,2% Subestimación del Empate
Victoria Visitante (1X2) $25,01%$ $4,00$ $23,81%$ $4,20$ $4,18$ Ajuste de $-4,8%$
Menos de 2,5 Goles $48,06%$ $2,08$ $51,52%$ $1,94$ $1,95$ +7,2% Corrección en Totales de Goles

Los datos demuestran con claridad meridiana cómo los modelos no corregidos regalan valor en el Empate y en el Menos de 2,5 Goles, mientras que sobreestiman las probabilidades de victorias por 1 a 0.

7. Implementación en Python: DixonColesModel

import numpy as np
from scipy.optimize import minimize
from scipy.stats import poisson

class DixonColesModel:
    def __init__(self, xi=0.0065):
        self.xi = xi
        self.teams = []
        self.team_indices = {}
        self.params = None
        self.gamma = 1.25
        self.rho = -0.11

    @staticmethod
    def tau(x, y, lambda_, mu, rho):
        if x == 0 and y == 0:
            return 1.0 - lambda_ * mu * rho
        elif x == 0 and y == 1:
            return 1.0 + lambda_ * rho
        elif x == 1 and y == 0:
            return 1.0 + mu * rho
        elif x == 1 and y == 1:
            return 1.0 - rho
        else:
            return 1.0

    def bivariate_prob(self, x, y, lambda_, mu, rho):
        p_indep = poisson.pmf(x, lambda_) * poisson.pmf(y, mu)
        tau_val = self.tau(x, y, lambda_, mu, rho)
        return max(0.0, tau_val * p_indep)

    def _unpack_params(self, params, n_teams):
        alpha = params[0:n_teams]
        beta = params[n_teams:2*n_teams]
        gamma = params[2*n_teams]
        rho = params[2*n_teams + 1]
        return alpha, beta, gamma, rho

    def fit(self, matches):
        unique_teams = sorted(list(set([m['home'] for m in matches] + [m['away'] for m in matches])))
        self.teams = unique_teams
        self.team_indices = {team: i for i, team in enumerate(self.teams)}
        n_teams = len(self.teams)

        init_params = np.concatenate([np.ones(n_teams), np.ones(n_teams), [1.25, -0.10]])

        def loss_fn(params):
            alpha, beta, gamma, rho = self._unpack_params(params, n_teams)
            nll = 0.0
            for m in matches:
                h_idx = self.team_indices[m['home']]
                a_idx = self.team_indices[m['away']]
                x, y = m['home_goals'], m['away_goals']
                weight = np.exp(-self.xi * m.get('days_ago', 0.0))
                lambda_ = max(alpha[h_idx] * beta[a_idx] * gamma, 1e-4)
                mu = max(alpha[a_idx] * beta[h_idx], 1e-4)
                prob = max(self.bivariate_prob(x, y, lambda_, mu, rho), 1e-12)
                nll -= weight * np.log(prob)
            penalty = 1000.0 * (np.mean(alpha) - 1.0) ** 2
            return nll + penalty

        bounds = [(0.05, 3.5)] * (2 * n_teams) + [(1.0, 1.8), (-0.35, 0.0)]
        res = minimize(loss_fn, init_params, method='L-BFGS-B', bounds=bounds)
        self.params = res.x
        _, _, self.gamma, self.rho = self._unpack_params(self.params, n_teams)
        return res

    def predict_score_matrix(self, home_team, away_team, max_goals=7):
        n_teams = len(self.teams)
        alpha, beta, gamma, rho = self._unpack_params(self.params, n_teams)
        h_idx, a_idx = self.team_indices[home_team], self.team_indices[away_team]
        lambda_ = alpha[h_idx] * beta[a_idx] * gamma
        mu = alpha[a_idx] * beta[h_idx]
        matrix = np.zeros((max_goals + 1, max_goals + 1))
        for x in range(max_goals + 1):
            for y in range(max_goals + 1):
                matrix[x, y] = self.bivariate_prob(x, y, lambda_, mu, rho)
        matrix /= np.sum(matrix)
        return matrix, lambda_, mu

    def predict_1x2(self, home_team, away_team):
        matrix, lambda_, mu = self.predict_score_matrix(home_team, away_team)
        return {
            'home_win': np.sum(np.tril(matrix, -1)),
            'draw': np.sum(np.diag(matrix)),
            'away_win': np.sum(np.triu(matrix, 1))
        }

8. Conclusiones Cuantitativas

La formulación de Dixon-Coles constituye una piedra angular indispensable en las apuestas de valor y el arbitraje estadístico de fútbol. Eliminar la suposición errónea de independencia en tanteos cerrados permite descubrir ineficiencias monetizables sistemáticas en los mercados de cuotas de partido, hándicaps asiáticos y totales de goles.

Preguntas Frecuentes

INVESTIGACIÓN RELACIONADA

Estudios con Referencia Cruzada

AVISO 18+ DE RIESGO