Matlab

Calculadora de probabilidades de ganar a la lotería

En una entrada anterior explique como se pueden calcular las posibilidades de ganar en el juego de los Euromillones y en otra la Bonoloto o Lotería Primitiva. Un juego de azar popular en algunos países europeos. Para ello primero se explicó cómo calcular el número total de combinaciones que existen en el juego y la posibilidad de conseguir una cantidad de aciertos de la combinación ganadora. Aplicando el proceso de cálculo solamente a Euromillones. Para obtener la probabilidad de ganar a otro juego, con diferente número reglas, en esta entrada vamos a crear una calculadora de probabilidades de ganar a la lotería en Matlab.

Actualización: Esta herramienta ya se puede utilizar directamente en línea a través del laboratorio de Analytics Lane. Accede a la versión web para calcular tus probabilidades de ganar en distintos juegos de azar.

Implementación del proceso de cálculo

La semana pasada se mostró cómo calcular el número de combinaciones que existe en un juego de azar donde se selecciona k bolas de un conjunto de n. Para lo que es necesario usar el coeficiente binomial. El cual se encuentra disponible en Matlab mediante la función nchoosek. Así el número de combinaciones totales se puede calcular usando la expresión

nchoosek(numeros_1, aciertos_1) * nchoosek(numeros_2, aciertos_2)

donde numeros_1 son los números del primer conjunto, aciertos_1 son los números que se extraen de primer conjunto, numeros_2 son los números de segundo conjunto y aciertos_2 son los números que se extraen de segundo conjunto.

Por otro lado, las combinaciones con una cantidad dada de fallos en el primer y segundo conjunto se pueden obtener con la siguiente expresión:

nchoosek(aciertos_1, aciertos_1 - fallos_1) * ...
nchoosek(numeros_1 - aciertos_1, fallos_1) * ...
nchoosek(aciertos_2, aciertos_2 - fallos_2) * ...
nchoosek(numeros_2 - aciertos_2, fallos_2)

donde fallos_1 son los fallos en primer conjunto y fallos_1 en el segundo.

Creación de una aplicación

Con esto se puede crear una aplicación gráfica en Matlab, para lo que se puede escribir el siguiente código.

function h = loteria_()

% Posción del monitor
monitor = get(0, 'MonitorPositions');
position_h = monitor(3) / 2 - 536 / 2;
position_w = monitor(4) / 2 - 536 / 2;

% Figura base
h = uifigure('Name', 'Calculadora probabilidades lotería', ... 
    'Resize', 'Off', ...
    'Position', [position_h, position_w, 536, 482]);

% Objetos
uilabel(h, ...
    'Position', [41, 438, 124, 22], ...
    'Text', 'Combinación primaria');
combinacinPrimaria = uieditfield(h, 'numeric', ...
    'Position', [180, 438, 100, 22], ...
    'Value', 50);
uilabel(h, ...
    'Position', [315, 438, 96, 22], ...
    'Text', 'Aciertos primaria');
aciertosPrimaria = uieditfield(h, 'numeric', ...
    'Position', [426, 438, 100, 22], ...
    'Value', 5);

uilabel(h, ...
    'Position', [26, 406, 139, 22], ...
    'Text', 'Combinación secundaria');
combinacinSecundaria = uieditfield(h, 'numeric', ...
    'Position', [180, 406, 100, 22], ...
    'Value', 12);
uilabel(h, ...
    'Position', [299, 406, 112, 22], ...
    'Text', 'Aciertos secundaria');
aciertosSecundaria = uieditfield(h, 'numeric', ...
    'Position', [426, 406, 100, 22], ...
    'Value', 5);

uilabel(h, ...
    'Position', [15, 373, 150, 22], ...
    'Text', 'Número de combinaciones');
numeroCombinaciones = uieditfield(h, 'numeric', ...
    'Editable', 'Off', ...
    'Enable', 'Off', ...
    'Position', [180, 373, 100, 22]);

uibutton(h, ...
    'Position', [427, 373, 100, 22], ...
    'ButtonPushedFcn', @calcular, ...
    'Text', 'Calcular');

resultsTable = uitable(h, 'Position', [11, 10, 515, 339]);

    function calcular(~, ~)        
        resutls = zeros(((aciertosPrimaria.Value + 1) * ...
            (aciertosSecundaria.Value + 1)), 4);
        combinaciones = nchoosek(combinacinPrimaria.Value,  aciertosPrimaria.Value) * ...
            nchoosek(combinacinSecundaria.Value, aciertosSecundaria.Value);
        
        for fallos_1 = 0:aciertosPrimaria.Value
            for fallos_2 = 0:aciertosSecundaria.Value
                row = fallos_1 * (aciertosSecundaria.Value + 1) + fallos_2 + 1;
                resutls(row, 1) =  aciertosPrimaria.Value - fallos_1;
                resutls(row, 2) =  aciertosSecundaria.Value - fallos_2;
                resutls(row, 3) =  ...
                    nchoosek(aciertosPrimaria.Value, aciertosPrimaria.Value - fallos_1) * ...
                    nchoosek(combinacinPrimaria.Value - aciertosPrimaria.Value, fallos_1) * ...
                    nchoosek(aciertosSecundaria.Value, aciertosSecundaria.Value - fallos_2) * ...
                    nchoosek(combinacinSecundaria.Value - aciertosSecundaria.Value, fallos_2);
                resutls(row, 4) = 100 * resutls(row, 3) / combinaciones;
            end
        end
        
        numeroCombinaciones.Value = combinaciones;
        resultsTable.ColumnName = {'Aciertos 1', 'Aciertos 2', 'Combinaciones', 'Probabilidad (%)'};
        resultsTable.Data = resutls;
    end
end

La cual una vez lanzada tiene la siguiente forma:

Calculadora de probabilidades de ganar a la lotería

Al pulsar el botón calcular se pueden obtener los resultados para el juego.

Calculadora de probabilidades de ganar a la lotería con los resultados para el juego de Euromillones

Conclusiones

En esta entrada se ha creado una calculadora de probabilidades de ganar a la lotería en Matlab. Así podemos comprobar lo poco probable que es ganar a uno de estos juegos. Y lo fácil que es no acertar ningún número, aunque intuitivamente pueda parecer lo contrario.

¿Te ha parecido de utilidad el contenido?

Daniel Rodríguez

Share
Published by
Daniel Rodríguez

Recent Posts

De la Regresión Logística al Scorecard: La Transformación Matemática

En un entrada previa explicamos qué son el WOE y el IV y por qué…

1 día ago

Analytics Lane lanza la versión 1.1 del laboratorio con nuevas suites de CLV y Scoring

Seguimos evolucionando el laboratorio de Analytics Lane y hoy lanzamos la versión 1.1, disponible en:…

2 días ago

Interés compuesto: la fuerza que multiplica tu dinero (y los errores que la anulan)

“El interés compuesto es la octava maravilla del mundo. El que lo entiende lo gana…

6 días ago

Cómo comparar datos con barras en Matplotlib: agrupadas, apiladas y porcentuales

Tienes los datos de ventas de tres productos en dos años distintos y quieres saber…

1 semana ago

Costes hundidos en ciencia de datos: cuándo mantener un modelo y cuándo migrar

Imagina la situación. Tu equipo lleva tres años con un modelo en producción. No es…

2 semanas ago

WOE e IV: La Base Matemática del Credit Scoring

Cuando un banco evalúa una solicitud de crédito necesita responder a una pregunta aparentemente simple:…

2 semanas ago

This website uses cookies.