El Sorteo Extraordinario de Navidad de la Lotería Nacional es una tradición que se celebra en España desde hace más de dos siglos. Un sorteo que se celebra todos los años el 22 de diciembre y, para mucha gente, representa el comienzo de las celebraciones de Navidad. Al acercarse las fechas de Navidad, un amigo me preguntó si sería posible predecir el premio en la Lotería de Navidad mediante alguno de esos modelos que se usan para predecir cosas. Obviamente la respuesta fue no. Aunque ante su insistencia me he visto obligado a crear un modelo para confirmar que no es posible.
Analizando el histórico de premios
Para predecir el valor de una serie de números lo primero es conseguir los valores históricos. Algo que en el caso de los premios de la lotería es algo fácil. Una vez hecho esto se puede ver la forma que tiene la serie a lo largo de la historia.
En la gráfica se puede ver que con el tiempo cada vez tocan premios más altos, pero esto solo tiene que ver con la cantidad de número que se juegan en cada sorteo. No siempre se han jugado 100.000 números como en la actualidad. Algo que también indica que cada vez es más complicado ganar el premio, no es lo mismo una probabilidad entre 100.000, como sucede en la actualidad, que una entre 60.000, como sucedía a finales del siglo XX.
Antes de continuar se puede comprobar si existe autocorrelación entre los valores de la serie. Algo que se puede ver con una gráfica de autocorrelación.
En este caso se puede apreciar la existencia de una tendencia, pero es debido a los cambios en cantidad de número jugados. Lo que se puede confirmar analizando la evolución de la terminación.
Análisis de la terminación
A diferencia de los números la probabilidad de la terminación siempre se ha mantenido constante. Algo que se puede ver en la siguiente gráfica
Lo que parece una señal alegatoria. Pudiéndose confirmar con la siguiente gráfica que no existe autocorrelación en este caso.
Simulado los resultados obtenidos a lo largo de los años
Una vez analizados los datos se puede crear un modelo basado en series temporales para intentar predecir el número premiado y la terminación. Por ejemplo, un modelo ARIMA(12, 1, 0). La mejor manera de comprobar su validez es comprobar cómo hubiese funcionado de usarlo con los datos históricos. Como es de esperar, el modelo nunca predice el premio en los últimos 179 sorteos. Mientras que en el caso de la terminación si que aceptaría en 23 ocasiones, un valor que se encuentra ligeramente por encima de las 18 ocasiones que se esperaría simplemente por azar.
La mejora frente al azar no se debe considerar como un indicador que el modelo es válido, ya que la probabilidad de obtener 23 reintegros en 179 ocasiones es de 4.2%. Por lo que el resultado es posible que se deba únicamente al azar.
Predicción para 2021
El modelo que se ha implementado predice que en el año 2021 el premio recaerá en el 72.850 y el reintegro en 0. Aunque lo más probable es que no sea así, como se ha visto en el análisis anterior.
Conclusiones
En esta ocasión se ha visto que no es posible predecir una serie de números aleatorios, como los premios de un sorteo, mediante el uso de una serie temporal. Algo que no debería sorprendernos. No es posible predecir el premio en la Lotería de Navidad con series temporales, ni con cualquier otro método ya que es una serie de número aleatoria sin ningún patrón.
Apéndice
A continuación se incluye el código con el que se ha implementado el modelo
import pandas as pd import numpy as np from matplotlib import pyplot from statsmodels.tsa.arima.model import ARIMA from scipy.stats import binom navidad = pd.read_excel('LoteriaNavidad.xlsx', parse_dates=[0], index_col=0) navidad.index = navidad.index.to_period('Y') # Serie temporal navidad.plot() pyplot.show() # Grafica de autocorrelación pd.plotting.autocorrelation_plot(navidad) pyplot.show() # Serie temporal con la terminación terminacion = pd.DataFrame(navidad.premio.values % 10, index=navidad.index) terminacion.plot() pyplot.show() # Grafica de autocorrelación para la terminación pd.plotting.autocorrelation_plot(terminacion) pyplot.show() # Simulación de resultados con un modelo AR premio = list() reintegro = list() for i in range(30, navidad.premio.shape[0]): model_premio = ARIMA(navidad[0:i], order=(12, 1, 0)).fit() premio.append(round(model_premio.forecast()[0]) == navidad.premio[i]) model_reintegro = ARIMA(terminacion[0:i], order=(12, 1, 0)).fit() reintegro.append(round(model_reintegro.forecast()[0]) == terminacion[0][i]) print(f'Premios: {np.sum(premio)} de {len(premio)} ({np.mean(premio) * 100 :.2f})%') print(f'Reintegros: {np.sum(reintegro)} de {len(reintegro)} ({np.mean(reintegro) * 100 :.2f})%') # Probabilidad de conseguir reintegros de forma aleatoria print(f'Probabilidad de conseguir reintegros de forma aleatoria: {binom.pmf(np.sum(reintegro), len(reintegro), 0.1) * 100:.2f}%') # Predicción para el año actual print(f'Premio: {round(ARIMA(navidad, order=(12, 1, 0)).fit().forecast()[0]):.0f}') print(f'Reintegro: {round(ARIMA(reintegro, order=(12, 1, 0)).fit().forecast()[0]):.0f}')
Descargo de responsabilidad
El objetivo detrás de esta publicación es únicamente divulgativo para intentar explicar la imposibilidad de predecir el resultado de un sorteo aleatorio como es el de la Lotería de Navidad. Realizándose con la convicción de que el número predicho no será el ganador del sorteo (dicho con una certeza de 99.999 entre 100.000). Por lo que los resultados no deberían considerarse como una recomendación para comprar el número predicho, más bien todo lo contrario.
Imagen de Carabo Spain en Pixabay