Modelos·4 min de lectura·por Equipo Otro Level

Dixon-Coles: el modelo estadístico detrás de las predicciones de fútbol

Dixon-Coles es el modelo de referencia para predecir partidos de fútbol. Te explicamos cómo funciona, qué mejora respecto a Poisson simple, y por qué sigue siendo relevante con IA.


title: "Dixon-Coles: el modelo estadístico detrás de las predicciones de fútbol" description: "Dixon-Coles es el modelo de referencia para predecir partidos de fútbol. Te explicamos cómo funciona, qué mejora respecto a Poisson simple, y por qué sigue siendo relevante con IA." publishedAt: "2026-05-24" updatedAt: "2026-05-24" author: "Equipo Otro Level" cluster: "Modelos" tags:

  • dixon-coles
  • modelos
  • poisson
  • probabilidades
  • estadistica coverImage: "/og-default.png"

Antes de los transformers, antes de XGBoost, hubo Dixon-Coles. Publicado en 1997 por Mark Dixon y Stuart Coles en Applied Statistics, sigue siendo la base de la mayoría de los modelos comerciales de predicción de fútbol. Si entendés Dixon-Coles, entendés cómo funciona el 90% del mercado de apuestas cuantitativo.

El problema: Poisson bivariado

El punto de partida es modelar los goles de cada equipo como distribuciones de Poisson independientes. Si el equipo A hace en promedio 1.5 goles y el B 0.8, la probabilidad de cualquier resultado (1-0, 2-1, 0-0, etc.) se calcula multiplicando las probabilidades de Poisson de cada equipo.

Esto ya funciona sorprendentemente bien. El problema: los goles de ambos equipos no son independientes. Partidos que terminan 0-0 y 1-1 ocurren más frecuentemente de lo que Poisson predice. Y partidos 1-0 ocurren menos.

La corrección Dixon-Coles

Dixon y Coles introdujeron un factor de corrección τ (tau) que ajusta las probabilidades de los resultados bajos:

- 0-0: multiplicar por (1 + τ × λ_A × μ_B)
- 1-0: multiplicar por (1 - τ × μ_B)
- 0-1: multiplicar por (1 - τ × λ_A)
- 1-1: multiplicar por (1 + τ)
- Resto: sin corrección

donde λ_A = tasa de goles del equipo A, μ_B = tasa de goles del equipo B, τ ≈ 0.13 (estimado por máxima verosimilitud).

Esta pequeña corrección mejora significativamente la calibración en resultados bajos.

Los parámetros del modelo

Para cada equipo el modelo estima:

  • α_i (ataque): capacidad ofensiva relativa al promedio de la liga.
  • β_j (defensa): capacidad defensiva (mayor β = peor defensa).

La tasa de goles esperada del equipo local i contra visitante j:

λ_ij = exp(α_i - β_j + γ)
μ_ji = exp(α_j - β_i)

donde γ (home advantage) ≈ 0.25–0.30 en la mayoría de las ligas.

Se estiman por máxima verosimilitud sobre la historia de resultados de la temporada.

Ponderación temporal

Un ajuste crítico: los partidos recientes importan más que los de hace 6 meses. Dixon-Coles original usa una función de ponderación exponencial:

w(t) = e^(-ξ × (T - t))

donde T = fecha actual, t = fecha del partido, ξ ≈ 0.0065 (un partido de hace 30 días vale ~82% del más reciente).

Esto hace que el modelo se adapte a cambios de forma del equipo durante la temporada.

Limitaciones

Lo que Dixon-Coles NO captura:

  • Bajas de jugadores (no hay features de equipo, solo resultados históricos).
  • Partidos especiales (Champions vs. liga doméstica).
  • Efectos de cansancio o calendarios apretados.
  • Diferencias dentro de la temporada (enero vs. mayo son contextos distintos).

Por eso los modelos modernos (incluyendo el de Otro Level) usan Dixon-Coles como base y agregan:

  1. Features de partido (xG histórico, stats de cada jugador, valor de mercado).
  2. GNN (Graph Neural Network) sobre las posiciones y conexiones entre jugadores del equipo.
  3. Sequence model (transformer) sobre las últimas N acciones del partido para live.

Por qué sigue siendo relevante

Las apuestas son un mercado eficiente. Las casas de apuestas más sofisticadas (Pinnacle, bet365 closing lines) ya usan modelos con ML pesado. En ese contexto, Dixon-Coles puro ya no da edge sobre el mercado.

Sin embargo:

  1. Es interpretable: podés explicar exactamente de dónde viene cada probabilidad.
  2. Es rápido: corre en millisegundos, útil para re-calcular con cada actualización de cuota.
  3. Es estable: no overfittea con poca data (útil para ligas pequeñas con pocos partidos históricos).
  4. Sirve como baseline de calibración: si tu modelo fancy no supera a Dixon-Coles en log-loss, algo está mal.

Implementación básica en Python

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

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

def dixon_coles_prob(goals_home, goals_away, lambda_, mu_, rho):
    t = tau(goals_home, goals_away, lambda_, mu_, rho)
    return (t * poisson.pmf(goals_home, lambda_) * 
            poisson.pmf(goals_away, mu_))

TL;DR

  1. Dixon-Coles = Poisson bivariado + corrección para resultados bajos (0-0, 1-0, 0-1, 1-1).
  2. Parámetros: ataque y defensa por equipo, home advantage, factor de corrección τ.
  3. Ponderación temporal: partidos recientes pesan más.
  4. Es la base de la mayoría de modelos cuantitativos; en Otro Level lo combinamos con xG + GNN.

Implementamos Dixon-Coles sobre 7 ligas de fútbol con actualización diaria. Mirá las probabilidades actuales en Otro Level.

Apuesta responsablemente. +18.

¿Querés probar lo que leíste en una app real? Entrá a Otro Level.

Seguí leyendo