TOLoNtería de Navidad

Por Kiko Correoso

Voy a empezar con un chiste:

Un vecino del pueblo pregunta: -Oye, ¿a tí por qué te llaman 'el Campanas'?-

'El Campanas' responde: -Tolón, tolón,..., tolonterías del pueblo...-

De ahí, de tolontería, voy a derivar y relacionar tontería y lotería (qué bien hilado..., lo sé).

Sí, lo habéis adivinado, vamos a calcular las estadísticas de la lotería de navidad para ver si es tontería o es una buena oportunidad de ganar un buen dinero.

¿Qué es la lotería de navidad (española)?

Para los que no sean españoles o sean españoles que viven en una cueva y nunca se han comunicado con otro español que no viva en una cueva, la lotería de navidad es un sorteo de lotería que se realiza cada 22 de diciembre desde el año 1811.

En el sorteo de 2018 se van a usar 100.000 números y de cada número se van a sacar 170 series, es decir, que cada número se repetirá 170 veces. Cada número de cada serie es un billete y el billete se divide en 10 décimos. O sea, tenemos:

$$ \begin{align} 100.000 \quad \text{números} \quad \times \quad 170 \quad \text{series} \quad & = \quad 17.000.000 \quad \text{billetes} \end{align} $$$$ \begin{align} 17.000.000 \quad \times \quad 10 \quad \text{décimos} \quad & = \quad 170.000.000 \quad \text{décimos} \end{align} $$

Cada décimo cuesta 20 € por lo que si se vendiera todo se recaudarían 3.400.000.000 €.

Según leo en varios sitios, en los últimos años se vende alrededor del 70% de décimos.

Los premios de la lotería de Navidad (visto en 2018).

Hay muchas posibilidades (ahora lo veremos en detalle) de que te toque algo... pero hay más de que no ganes nada.

premios por serie Total premios Importe en euros Cantidad ganada (por euro jugado)
El Gordo (primer premio) 1 4.000.000 20.000€
Segundo premio 1 1.250.000 6.250€
Tercer premio 1 500.000 2.500€
Cuartos premios 2 200.000 1.000€
Quintos premios 8 60.000 300€
Pedreas de 5 cifras 1.794 1.000 5€
Aproximación primer premio 2 20.000 100€
Aproximación segundo premio 2 12.500 62,5€
Aproximación tercer premio 2 9.600 48€
Centenas del primer premio 99 1.000 5€
Centenas del segundo premio 99 1.000 5€
Centenas del tercer premio 99 1.000 5€
Centenas de dos cuartos premio 198 1.000 5€
Dos últimas del primer premio 999 1.000 6€
Dos últimas del segundo premio 999 1.000 5€
Dos últimas del tercer premio 999 1.000 5€
Reintegros (última cifra Gordo) 9.999 200 1€
TOTALES POR SERIE 15.304   70% en premios

Vamos a empezar a calcular estadísticas

[AVISO: En algunas partes verás código de programación. Este código servirá para hacer los cálculos pero espero que no sea relevante saber programar en Python para que puedas seguir el hilo].

En la tabla anterior los premios son por billete (que son 10 décimos). Lo normal es que la gente compre un décimo y no un billete completo (10 décimos, 200 €).

Viendo la tabla anterior vemos que si compras un décimo tienes 1 entre 100.000 posibilidades de que te toquen 400.000 €, de los cuales la Agencia Tributaria se llevará el 20% de todo lo que sobrepase los 10.000 € (*).

(*) Todos los premios que sobrepasen los 10.000 € (en 2018) pagan el 20% del valor por encima de esos 10.000 € en impuestos. Aunque esto irá cambiando en el futuro.

Por tanto, si te tocan 400.000€ en 2018 pagarás:

In [1]:
print(f"{(400_000 - 10_000) * 0.2} € a Hacienda")
78000.0 € a Hacienda

Por tanto, si pagas 78.000 € a hacienda te quedarán:

In [2]:
print(f"{400_000 - 78_000} € para ti")
322000 € para ti

Como hemos comentado más arriba, tienes una posibilidad entre 100.000 de que salga tu número en el sorteo. Por tanto, tienes las siguientes probabilidades de que te toque un premio tan cuantioso, por encima de 300.000 €:

In [3]:
print(f"{100 * 1 / 100_000}% de que te toque")
0.001% de que te toque

Y las siguientes de que NO te toque.

In [4]:
print(f"{100 * 99_999 / 100_000}% de que NO te toque")
99.999% de que NO te toque

Por otro lado, vemos que hay premios en hasta 15.304 combinaciones, que no números, diferentes de los 100.000 en juego. Por simplificar un poco en este punto vamos a considerar que son 15.304 números los que pueden resultar premiados (serán menos, luego lo veremos), por tanto, bajo este supuesto la probabilidad de que al menos recuperemos la inversión inicial (los 20 € del décimo) sería:

In [5]:
print(f"{100 * 15_304 / 100_000}% de que al menos recuperes lo invertido")
15.304% de que al menos recuperes lo invertido

Por otro lado, la probabilidad de perder tus 20 € sería:

In [6]:
print(f"{100 - 100 * 15_304 / 100_000}% de perderlo todo")
84.696% de perderlo todo

Vamos a seguir calculando estadísticas

¿Cual sería la probabilidad de ganar algo? Si cobras el reintegro, simplificando nuevamente, no estás ganando nada, solo te quedas como estabas, con tus 20 € en el bolsillo, por lo que es lo mismo que no jugar.

Repito, simplificando un poco, vemos que de los 15.304 posibles premios, 9.999 son reintegros por lo que no ganas nada. Por tanto, nos quedan 15.304 - 9.999 posibilidades, es decir:

In [7]:
print(f"{15_304 - 9_999} números con premio real")
5305 números con premio real

La probabilidad de que realmente ganemos algo, después de tener esto en cuenta, sería:

In [8]:
print(f"{100 * 5_305 / 100_000}% de que salgas ganando algo")
5.305% de que salgas ganando algo

Y la probabilidad de que nos quedemos como estábamos o peor sería:

In [9]:
print(f"{100 - 100 * 5_305 / 100_000}% de que estemos igual o peor")
94.695% de que estemos igual o peor

Por tanto, vemos que, más o menos, tenemos 1 posibilidad entre 20 de salir ganando algo. Para los que lo ven con el vaso medio vacío, tenemos, aproximadamente, 19 posibilidades de 20 de quedarnos igual o peor que estábamos.

Si comprásemos 20 décimos (400 €) con números diferentes se podría esperar que te tocase algo. Pero vemos que la inmensa mayoría de los premios son de 100 € al décimo (1.000 € al billete).

premios por serie Total premios Importe en euros Cantidad ganada (por euro jugado)
Pedreas de 5 cifras 1.794 1.000 5€
Centenas del primer premio 99 1.000 5€
Centenas del segundo premio 99 1.000 5€
Centenas del tercer premio 99 1.000 5€
Centenas de dos cuartos premio 198 1.000 5€
Dos últimas del primer premio 999 1.000 6€
Dos últimas del segundo premio 999 1.000 5€
Dos últimas del tercer premio 999 1.000 5€
TOTALES POR SERIE 5.286    

Por tanto, la probabilidad de que, habiéndote tocado un premio, el premio sea de 100 € sería:

In [10]:
print(f"{100 * 5_286 / 5_305}% de que tu premio sea de 100 €")
99.64184731385485% de que tu premio sea de 100 €

Por tanto, en el caso de que te tocase un premio, comprando 20 décimos, la probabilidad de que este premio fuera menor (100 € al décimo) sería muy alta. Por tanto, es probable que el premio fuese de 100 € y, en esta hipotética situación, estaríamos perdiendo 300 €. O sea que, aunque ganemos, perdemos...

Los premios en detalle

Hasta ahora he comentado que estaba simplificando un poco el tema. En realidad, los premios son un poco más complejos puesto que hay combinaciones entre ellos ya que no todos los premios salen del bombo y el número de números premiados es menor debido a estas combinaciones.

  • Por ejemplo, el primer premio (el Gordo) sale el 55.555. Vemos que el reintegro (cualquier número que acabe en 5) serían 9.999. Pero también hay premio para los números con las dos últimas cifras iguales al primer premio. Por tanto, si yo tengo el 65.355 tendría premio por el reintegro y por las dos últimas cifras. Siendo el mismo número tendría dos premios distintos.
  • Otro ejemplo, el primer premio (el Gordo) sale el 15.000. El número anterior y posterior, 14.999 y 15.001, respectivamente, tendrían premio, pero se podría dar el caso que el segundo premio saliera el 15.001. Si yo poseo el 15.001 tendría el segundo premio y el premio del número posterior al primer premio.

Por tanto, algunas de las estadísticas anteriores, basadas en el número total de números premiados serían incluso más desfavorables para vosotros.

¿Cómo funciona cuando estamos en una situación como las anteriores? No lo sé muy bien puesto que no he encontrado el reglamento detallado en ningún sitio. Leyendo el último párrafo aquí parece que los premios se acumulan. Aquí no he sido capaz de encontrar nada.

En el gráfico inferior podéis ver lo que sale del bombo y es totalmente aleatorio (cajas verdes) y lo que sale condicionado, números que no salen directamente del bombo (cajas negras).

Combinaciones para premios

Simulaciones aleatorias para ver distintas situaciones

Como la casuística es muy grande vamos a lanzar una serie de simulaciones aleatorias para hacernos idea de nuestras posibilidades en distintas situaciones:

  • Comprando un único décimo
  • comprando varios décimos del mismo número
  • Comprando varios décimos de números distintos
  • ...

Algunas condiciones que vamos a imponer:

  • Suponemos que la venta total de décimos varia entre el 60% y el 75% para saber lo total recaudado por el estado (la lotería nacional depende del estado español).
  • Para simplificar suponemos que compramos décimos enteros. En España es muy habitual comprar partes de décimos que repartes, por ejemplo, entre compañeros de trabajo, familia, amigos,..., de tal forma que una persona juega por una parte del décimo.
  • Consideramos que 2/3 partes de las veces compramos décimos con números distintos y 1/3 parte de las veces compramos décimos del mismo número.
  • Vamos a comprar desde 1 hasta 10 décimos para no hacerlo mucho más complicado (ni costoso para tu bolsillo).
  • Como es un sorteo totalmente aleatorio consideramos que cualquier número tiene la misma probabilidad de salir premiado.
  • Como puede haber muchas combinaciones en las que no tengo ni idea de lo que pasa voy a considerar siempre la situación más favorable para el jugador, el jugador se lleva el premio acumulado de todas las combinaciones posibles (ver sección anterior).

Un poco de código para hacer los cálculos y enseñar los resultados:

In [1]:
import numpy as np
import matplotlib.pyplot as plt
plt.style.use("ggplot")
import pandas as pd
%matplotlib inline

Usamos una semilla para que los números sean reproducibles.

In [2]:
np.random.seed(1234)

Un poco de funcionalidad para obtener los números de un sorteo de forma aleatoria.

In [3]:
def hundreds(n):
    top = 100 * np.ceil((n + 1) / 100)
    bottom = top - 100
    hundred = set(np.arange(bottom, top))
    hundred.remove(n)
    hundred = np.array(list(hundred))
    return hundred

def latest2(n):
    last2 = n % 100
    numbers = set(np.arange(0, 100_000, 100) + last2)
    numbers.remove(n)
    numbers = np.array(list(numbers))
    return numbers

def refund(n):
    last = n % 10
    numbers = set(np.arange(0, 100_000, 10) + last)
    numbers.remove(n)
    numbers = np.array(list(numbers))
    return numbers

def get_lucky_numbers():
    numbers = {}
    _numbers = set(np.random.choice(np.arange(100_000, dtype=np.int), 
                                    size=1807, #1st + 2nd + 3rd + 4th + 5th + pedrea 
                                    replace=False))
    # from first to fifth prizes
    numbers["first"] = np.array([_numbers.pop()])
    numbers["second"] = np.array([_numbers.pop()])
    numbers["third"] = np.array([_numbers.pop()])
    numbers["fourth"] = np.array([_numbers.pop() for i in range(2)])
    numbers["fifth"] = np.array([_numbers.pop() for i in range(8)])
    # pedrea
    numbers["pedrea"] = np.array(list(_numbers))
    # Numbers close to the first prize
    numbers["aprox1st"] = np.array([numbers["first"] - 1,
                                    numbers["first"] + 1])
    # Numbers close to the second prize
    numbers["aprox2nd"] = np.array([numbers["second"] - 1,
                                    numbers["second"] + 1])
    # Numbers close to the third prize
    numbers["aprox3rd"] = np.array([numbers["third"] - 1,
                                    numbers["third"] + 1])
    # Hundred close to the first prize
    numbers["hundred1st"] = hundreds(numbers["first"][0])
    # Hundred close to the second prize
    numbers["hundred2nd"] = hundreds(numbers["second"][0])
    # Hundred close to the third prize
    numbers["hundred3rd"] = hundreds(numbers["third"][0])
    # Hundred close to the fourth prize
    h100 = np.append(
        hundreds(numbers["fourth"][0]),
        hundreds(numbers["fourth"][1])
    )
    numbers["hundred4th"] = h100
    # latest two digits of the first prize
    numbers["two1st"] = latest2(numbers["first"][0])
    # latest two digits of the second prize
    numbers["two2nd"] = latest2(numbers["second"][0])
    # latest two digits of the third prize
    numbers["two3rd"] = latest2(numbers["third"][0])
    # Refund (reintegro)
    numbers["refund"] = refund(numbers["first"][0])
    
    return numbers

Diccionario con los premios a asignar a cada categoría.

In [4]:
prizes = { # after taxes
    "first": 322_000,
    "second": 115_000,
    "third": 42_000,
    "fourth": 18_000, 
    "fifth": 6_000,
    "pedrea": 100,
    "aprox1st": 2_000,
    "aprox2nd": 1_250,
    "aprox3rd": 960,
    "hundred1st": 100,
    "hundred2nd": 100,
    "hundred3rd": 100,
    "hundred4th": 100,
    "two1st": 100,
    "two2nd": 100,
    "two3rd": 100,
    "refund": 20
}

La siguiente clase nos valdrá para un sorteo

In [5]:
class Raffle:
    def __init__(self):
        self.raffle_numbers = get_lucky_numbers()
        self.raffle_prizes = prizes
        self.number_of_tickets = np.random.choice(range(1, 11))
        self.repeated = np.random.choice((True, False, False))
        if self.repeated:
            self.my_numbers = np.repeat(np.random.choice(range(100_000)), 
                                        self.number_of_tickets)
        else:
            self.my_numbers = np.random.choice(range(100_000), 
                                               size=self.number_of_tickets)
        self.my_expenses = 20 * self.number_of_tickets
        self.my_earnings = self._get_earnings()
    
    def _get_earnings(self):
        earnings = 0
        for n in self.my_numbers:
            for key in self.raffle_numbers.keys():
                if n in self.raffle_numbers[key]:
                    earnings += self.raffle_prizes[key]
        return earnings

Vamos a suponer que somos seres que vivimos muuuuuuchos años. En este ejemplo voy a considerar que asistimos a 10.000 sorteos (10.000 años jugando a la lotería de navidad sin fallar ningún año comprando entre uno y 10 décimos).

In [6]:
# No es muy eficiente pero espero que se entienda lo que hacemos:
# Tarda un poco...
sorteos = 10_000
results = pd.DataFrame(index=range(sorteos),
                       columns=["#tickets", "Repeated", "Expense", "Earning"])
for i in range(sorteos):
    r = Raffle()
    results.iloc[i] = (r.number_of_tickets, 
                       r.repeated, 
                       r.my_expenses, 
                       r.my_earnings)

Hemos guardado los resultados en un DataFrame. Vamos a hacernos una serie de preguntas y vamos a ver las respuestas:

  • Después de 10.000 años jugando, en global, ¿he salido ganando?
In [7]:
results.loc[:, ["Expense", "Earning"]].sum().plot.barh()
Out[7]:
<matplotlib.axes._subplots.AxesSubplot at 0x7f69079426d8>

Pues parece que no, he perdido bastante más de lo que he ganado.

  • ¿He ganado el gordo alguna vez?
In [8]:
(results.loc[:, "Earning"] > 300_000).sum()
Out[8]:
0

Me sale un cero patatero :-(

¿Cuánto es lo máximo que he ganado en un único sorteo?

In [9]:
results.loc[:, "Earning"].max()
Out[9]:
115100

¿Cuántos años no he ganado nada o he acabado perdiendo dinero?

In [10]:
((results.loc[:, "Earning"] - results.loc[:, "Expense"]) <= 0).sum()
Out[10]:
9137

El 91.37% de las veces no gano nada o pierdo dinero.

¿Cuál es la distribución de mis premios en 10.000 años?

In [11]:
bins = np.arange(0, 120_000, 1000)
ax = results.loc[:, "Earning"].plot.hist(bins=bins, figsize=(15, 5))
ax.semilogy();

¿Cómo están mis premios ordenados de mayor a menor?

In [18]:
premios = results.loc[:, "Earning"] - results.loc[:, "Expense"]
fig, ax = plt.subplots(figsize=(15, 5))
ax.bar(range(0, 900),
       premios.sort_values(ascending=False)[0:900].values)
ax.semilogy();

Vemos que las ganancias por debajo de 100€ son la mayoría.

Mis diez mejores ganancias han sido:

In [20]:
(
    results.loc[:, "Earning"] - 
    results.loc[:, "Expense"]
).sort_values(ascending=False)[0:10]
Out[20]:
2524    115040
7604      5880
1585      5860
8826      5860
3918      2000
5783      1960
3905      1620
5609      1370
8704      1000
9194      1000
dtype: object

En 10.000 años solo he conseguido 8 premios por encima de los 1.000 €.

En promedio, ¿gano más si repito el mismo número, es decir, si compro varios décimos del mismo número, o si compro números diferentes?

In [23]:
(
    results.loc[results.Repeated == True, "Earning"] -
    results.loc[results.Repeated == True, "Expense"]
).mean()
Out[23]:
-69.03603326147213
In [24]:
(
    results.loc[results.Repeated == False, "Earning"] -
    results.loc[results.Repeated == False, "Expense"]
).mean()
Out[24]:
-47.69583888642085

Pues parece que la estrategia de no repetir el número es mejor ya que, en promedio, pierdo menos dinero.

¿Los mejores premios los consigo cuando repito números o cuando compro números diferentes?

In [25]:
((
    results.loc[results.Repeated == True, "Earning"] -
    results.loc[results.Repeated == True, "Expense"]
) > 100).sum()
Out[25]:
155
In [26]:
((
    results.loc[results.Repeated == False, "Earning"] -
    results.loc[results.Repeated == False, "Expense"]
) > 100).sum()
Out[26]:
76

Si repito números tiendo a obtener premios más altos, como es de esperar. Si compro 10 décimos del mismo número y me toca el gordo ganaré más de 3.000.000 € pero, claro, mis probabilidades de pillar el gordo se reducen si lo comparo a comprar 10 décimos con números diferentes.

Os podéis seguir haciendo preguntas ya que podéis descargar el notebook de aquí e introducir vuestros propios cálculos.

Notas

Si juegas y no ganas en realidad estás ganando ya que parte del dinero se va a destinar a generar empleo, al Tesoro del Estado,... El que no se consuela es porque no quiere.

Muchas buenas causas (o no tan buenas) se financian usando participaciones de la lotería por lo que, además de jugar, puedes aportar a la causa/proyecto/... que consideres. Para el que no lo sepa, una participación es que compras un boleto donde parte se destina al sorteo y parte se destina a lo que considere el que organiza esa participación (comedores sociales, pagar parte de viajes de estudios de estudiantes,...).

Ya, pensando un poco más egoistamente, en general parece poco probable que te lleves un gran premio (excepto si te apellidas Fabra). Es algo más probable, aunque no mucho más, que te lleves un premio menor y es altamente probable que no ganes nada o pierdas dinero. Si quieres ganar algo es mejor que compres números diferentes, como sería de esperar.

De las loterías a las que puedes jugar en España esta es la que más probabilidades ofrece de ganar algo. Si juegas a cualquier otra lotería pública (El Niño, lotería primitiva, BonoLoto, la Quiniela,...) mejor lo enfocas como que estás haciendo una labor social de pagar impuestos voluntariamente, que estás generando empleo, la propia ilusión que te puede generar el participar en el sorteo,..., pero no pienses que vas a dejar de trabajar porque estarías cometiendo un error. Tus probabilidades disminuyen drásticamente. Además, el dinero no da la felicidad.

Si gastas una media de 50 € cada año durante 50 años te estarás dejando 2.500 €.

Personalmente, hace años que dejé de comprar lotería de navidad y hace años que la gente me mira raro, me llaman el 'Grinch', me dicen que soy un cenizo,...

Independientemente de todo lo que has leído hasta aquí, si vas a jugar, ¡te deseo toda la suerte del mundo y me alegraré enormemente si te toca!

;-)


photo

Kiko es doctor en ciencias físicas y esta especializado en física de la atmósfera, meteorología y climatología. Además de estar en las nubes es especialista en temas de energías renovables en Iberdrola. Ávido de seguir mejorando siempre está abierto a participar en nuevos proyectos y retos por lo que no dudes en contactarle si necesitas servicios especializados de Python o meteorología.

Comentarios