Link Search Menu Expand Document
El Libro De Python (24.95 €) 39.95 €

Simulando apuestas con numpy

Veamos como simular una apuesta usando numpy. Simularemos una apuesta con las siguiente características:

  • 🪙 Tenemos una moneda con cara y cruz.
  • 💰 Se empieza con un dinero_inicial.
  • 🎲 Se apuesta un número de veces num_apuestas.
  • 👆🏼 Existe una probabilidad de ganar prob_ganar. Si se gana obtenemos retorno_ganar.
  • 👇🏼 Existe una probabilidad de perder 1-prob_ganar. Si se pierde perdemos retorno_perder.
import numpy as np

def apuesta(dinero_inicial, prob_ganar,
            retorno_ganar, retorno_perder, num_apuestas):
            
    dinero = [dinero_inicial]
    p = [prob_ganar, 1 - prob_ganar]
    
    for _ in range(num_apuestas):
        if np.random.choice(['cara', 'cruz'], p=p) == 'cara':
            dinero.append(dinero[-1] * (1 + retorno_ganar))
        else:
            dinero.append(dinero[-1] * (1 + retorno_perder))
            
    return dinero

Como puedes ver si la probabilidad de ganar es prob_ganar, la de perder es 1-prob_ganar. Esto es así porque ambas tienen que sumar 1.

Por otro lado, usamos choice para generar el evento aleatorio de tirar la moneda. En una moneda normal no sesgada, p=0.5. Es decir, misma probabilidad de cara que de cruz.

Ahora podemos usar la función con los siguientes parámetros. El resultado de la simulación es la evolución del dinero a lo largo de todas las jugadas. Mostramos el dinero tras las 20 apuestas. Dado que se trata de un proceso aleatorio, no obtendrás el mismo valor.

simulacion = apuesta(
    dinero_inicial=1000,
    prob_ganar=0.5,       # 50% probabilidad ganar
    retorno_ganar=0.8,    # +80% si ganas
    retorno_perder=-0.5,  # -50% si pierdes
    num_apuestas=20)
print(f"Dinero final (€): {simulacion[-1]:.0f}")
# Dinero final (€): 349

✏️ Ejercicios:

  • Representa gráficamente (eje-y dinero, eje-x número de apuesta) la evolución de la apuesta.
  • Representa gráficamente (eje-y dinero, eje-x número de apuesta) la evolución de 1000 personas realizando la misma apuesta. Una línea de cada color por persona.
  • Modifica la función apuesta para cambiar la estrategia. En vez de apostar todo cada vez, añade un parámetro no_apostar que indica el porcentaje que no se apuesta. Observa como cambia y explora la relación con el criterio de Kelly.