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

Analytics Lane lanza ScoreFlow, un SaaS para construir y desplegar scorecards de crédito

En Analytics Lane seguimos evolucionando nuestras herramientas y damos un paso más con el lanzamiento…

3 días ago

DBSCAN y la selección de ε: teoría, intuición y aplicación práctica

Cuando hablamos de clustering, lo primero que viene a la mente suele ser k-means. Pero…

4 días ago

El bestiario de los indicadores económicos absurdos: El zoo patrio

Cualquier país desarrollado tiene sus propios indicadores folclóricos. España, por motivos que tienen mucho que…

1 semana ago

Por qué el banco te ofrece un 3% TAE y no es lo que parece

Entras a la web de tu banco. En la página principal, un banner llamativo: “Depósito…

2 semanas ago

Analytics Lane lanza la versión 1.3 del laboratorio con nuevas herramientas de evaluación de modelos y utilidades prácticas

Seguimos ampliando el laboratorio de Analytics Lane con el lanzamiento de la versión 1.3, disponible…

2 semanas ago

This website uses cookies.