Un ejercicio de probabilidad basico en python

Ejercicio Probabilidad: Si hacemos x = la suma del numero de puntos en las caras de arriba de dos dados, entonces

a) Encuentre la probabilidad de cada resultado en el espacio (Todos los valores diferentes de x posibles al lanzar 2 dados)

b) Verifique que la suma de estas probabilidades es 1


Usaremos la librería itertools para realizar el producto cartesiano o generar las combinaciones del espacio solicitado.

Primero generaremos el espacio de todos los resultados posibles (36 resultados posibles), después generaremos un espacio definido a partir de este espacio S1={{1,1},{1,2}....{6,6}}, al cual llamaremos S2 = {2,3,4,5,6,7,8,9,10,11,12},

Como cada resultado del espacio S1 es equiprobable implica que la probabilidad de cada par del espacio S1 es 1/36, obteniendo la suma de cada par de S1, calcularemos cuantas ocurrencias de de cada valor de suma existen, para calcular la probabilidad asignando la probabilidad de cada elementos suma de S2 igual a:

P(x) = cuenta(suma) / 36

In [1]: import itertools as itt

In [2]: list(itt.product([1,2,3,4,5,6],[1,2,3,4,5,6]))  
Out[2]:  
[(1, 1),
 (1, 2),
 (1, 3),
 (1, 4),
 (1, 5),
 (1, 6),
 (2, 1),
 (2, 2),
 (2, 3),
 (2, 4),
 (2, 5),
 (2, 6),
 (3, 1),
 (3, 2),
 (3, 3),
 (3, 4),
 (3, 5),
 (3, 6),
 (4, 1),
 (4, 2),
 (4, 3),
 (4, 4),
 (4, 5),
 (4, 6),
 (5, 1),
 (5, 2),
 (5, 3),
 (5, 4),
 (5, 5),
 (5, 6),
 (6, 1),
 (6, 2),
 (6, 3),
 (6, 4),
 (6, 5),
 (6, 6)]

Las combinaciones tambien se pueden lograr con esta sentencia
list(itt.combinations([1,2,3,4,5,6],2))

In [6]: S1 = list(itt.product([1,2,3,4,5,6],[1,2,3,4,5,6]))

In [7]: suma = list()


In [16]: for i in S1:  
    ...:     suma.append(i[0] + i[1])


In [17]: suma  
Out[17]:  
[2,
 3,
 4,
 5,
 6,
 7,
 3,
 4,
 5,
 6,
 7,
 8,
 4,
 5,
 6,
 7,
 8,
 9,
 5,
 6,
 7,
 8,
 9,
 10,
 6,
 7,
 8,
 9,
 10,
 11,
 7,
 8,
 9,
 10,
 11,
 12]

a) Mostrar las probabilidades para los puntos x del espacio S2

Para recorrer todos los valores posibles que puede tomar la variable aleatoria x y obtener la probabilidad usando la cuenta de aparición de cada valor de suma, usamos la estructura de datos set de python

In [27]: for i in set(suma):  
    ...:     print(i,suma.count(i)/36)
    ...:     
    ...:     
2 0.027777777777777776  
3 0.05555555555555555  
4 0.08333333333333333  
5 0.1111111111111111  
6 0.1388888888888889  
7 0.16666666666666666  
8 0.1388888888888889  
9 0.1111111111111111  
10 0.08333333333333333  
11 0.05555555555555555  
12 0.027777777777777776  

b) Validar que la suma de las probabilidades para todos los valores de x posibles sume 1

In [29]: acumulado_probabilidad=0

In [30]: for i in set(suma):  
    ...:     acumulado_probabilidad = acumulado_probabilidad + suma.count(i)/36
    ...:     print(i,suma.count(i)/36,acumulado_probabilidad)
    ...:     
2 0.027777777777777776 0.027777777777777776  
3 0.05555555555555555 0.08333333333333333  
4 0.08333333333333333 0.16666666666666666  
5 0.1111111111111111 0.2777777777777778  
6 0.1388888888888889 0.4166666666666667  
7 0.16666666666666666 0.5833333333333334  
8 0.1388888888888889 0.7222222222222223  
9 0.1111111111111111 0.8333333333333335  
10 0.08333333333333333 0.9166666666666669  
11 0.05555555555555555 0.9722222222222224  
12 0.027777777777777776 1.0000000000000002

Usando la librería itertools, podemos hacer cálculos de probabilidades discretas de una manera sencilla.

Referencias:

https://docs.python.org/2/library/itertools.html
https://stackoverflow.com/questions/2600191/how-can-i-count-the-occurrences-of-a-list-item-in-python