Skip to content
Snippets Groups Projects
Commit b6fde56b authored by Camila Rangel Smith's avatar Camila Rangel Smith
Browse files

Update Practica1_Probabilidad.ipynb

parent 717517da
No related branches found
No related tags found
No related merge requests found
%% Cell type:markdown id:preliminary-split tags:
# Introducción a la probabilidad
**Autora**: Camila Rangel Smith (@crangelsmith en Github).
**Nota**: Este notebook está basado en [esta página](https://www.dataquest.io/blog/basic-statistics-in-python-probability/) con modificaciones específicas para esta práctica.
%% Cell type:markdown id:hindu-introduction tags:
## Probabilidad usando monedas
La representación por excelencia de la probabilidad es el lanzamiento de una moneda. En un lanzamiento de moneda los únicos eventos que pueden ocurrir son:
- Lanzar una cara
- Lanzar una cruz
Estos dos sucesos forman el espacio muestral, el conjunto de todos los sucesos posibles que pueden ocurrir.
Para calcular la probabilidad de que ocurra un suceso, contamos cuántas veces puede ocurrir el suceso que nos interesa (por ejemplo, que salga cara) y lo dividimos entre el espacio muestral.
Así, la probabilidad nos dirá que una moneda ideal tendrá una probabilidad de 1 entre 2 de salir cara o cruz.
Al observar los sucesos que pueden ocurrir, la probabilidad nos da un marco para hacer predicciones sobre la frecuencia con la que ocurrirán los sucesos.
Sin embargo, aunque parezca obvio, si realmente intentamos lanzar algunas monedas, es probable que de vez en cuando obtengamos un número anormalmente alto o bajo de caras.
Si no queremos hacer la suposición de que la moneda es justa, ¿qué podemos hacer? Podemos recopilar datos. Podemos utilizar la estadística para calcular las probabilidades a
partir de las observaciones del mundo real y comprobar cómo se comparan con el ideal.
## De la estadística a la probabilidad
Generaremos datos lanzando una moneda 10 veces y contando cuántas veces sale cara. Llamaremos ensayo a un conjunto de n lanzamientos de moneda (donde n es una variable que daremos). Nuestro dato será el número de caras que observemos. Puede que no obtengamos las 5 caras "ideales", pero no nos preocuparemos demasiado, ya que un ensayo es sólo un punto de datos. Si realizamos muchos, muchos ensayos, esperamos que el número medio de cabezas en todos nuestros ensayos se acerque al 50%. El código siguiente simula 10, 100, 1000 y 1000000 ensayos, y luego calcula la proporción media de cabezas observada. Nuestro proceso se resume también en la imagen de abajo.
%% Cell type:code id:administrative-black tags:
``` python
import random
def lanzar_moneda(n):
cara = 0
for i in range(n):
if random.random() <= 0.5:
cara +=1
return cara/n
```
%% Cell type:markdown id:acknowledged-toddler tags:
La función `lanzar_moneda` es la que representa una simulación de 'n' lanzamientos de moneda.
Utiliza la función random() para generar un flotador entre 0 y 1, e incrementa nuestra cuenta de cabezas si está dentro de la mitad de ese rango.
La función regresa la división entre el numero de caras que ha obtenido, y el numero de veces que lanzamos la moneda.
%% Cell type:code id:inappropriate-cleanup tags:
``` python
print ('Al lanzar la moneda 10 veces, la proporcion de vece que obtuvimos cara: ',lanzar_moneda(10))
print()
print ('Al lanzar la moneda 100 veces, la proporcion de vece que obtuvimos cara: ',lanzar_moneda(100))
print()
print ('Al lanzar la moneda 1000 veces, la proporcion de vece que obtuvimos cara: ',lanzar_moneda(1000))
print()
print ('Al lanzar la moneda 1000000 veces, la proporcion de vece que obtuvimos cara: ',lanzar_moneda(1000000))
```
%% Output
Al lanzar la moneda 10 veces, la proporcion de vece que obtuvimos cara: 0.4
Al lanzar la moneda 100 veces, la proporcion de vece que obtuvimos cara: 0.57
Al lanzar la moneda 1000 veces, la proporcion de vece que obtuvimos cara: 0.497
Al lanzar la moneda 1000000 veces, la proporcion de vece que obtuvimos cara: 0.500076
%% Cell type:markdown id:directed-longitude tags:
A continuación, la funcion `experimentos` repite estos ensayos de lanzar la moneda unas 100 veces el número de veces que queramos, devolviendo el número medio de cabezas en cada ensayo.
%% Cell type:code id:metric-lemon tags:
``` python
def experimentos(n,n_lanzamientos):
experimento = []
for i in range(n):
experimento.append(lanzar_moneda(n_lanzamientos))
return (experimento)
```
%% Cell type:markdown id:motivated-insight tags:
Las simulaciones de lanzamiento de monedas nos dan algunos resultados interesantes.
En primer lugar, los datos confirman que nuestro número medio de caras se aproxima a lo que la probabilidad sugiere que debería ser. Además, esta media mejora con más ensayos. En este ejemplo cada ensayo produce una única estimación de lo que la probabilidad sugiere que debería ocurrir. La llamamos estimación porque sabemos que no será perfecta (es decir, no obtendremos 50% caras todas las veces).
%% Cell type:code id:resident-small tags:
``` python
import matplotlib.pyplot as plt
from statistics import mean, stdev
n_lanzamientos = 10
ex_10 = experimentos(10, n_lanzamientos)
ex_100 = experimentos(100, n_lanzamientos)
ex_1000 = experimentos(1000, n_lanzamientos)
ex_100000 = experimentos(100000, n_lanzamientos)
n_bins = 100
fig, axs = plt.subplots(2, 2, tight_layout=True)
axs[0,0].hist(ex_10, bins=n_bins, range=[0.1,0.9] )
axs[0,1].hist(ex_100, bins=n_bins, range=[0.1,0.9])
axs[1,0].hist(ex_1000, bins=n_bins, range=[0.1,0.9])
axs[1,1].hist(ex_100000, bins=n_bins, range=[0.1,0.9])
print ('Con 10 experimentos, valor medio:',mean(ex_10), 'desviación estandar:', stdev(ex_10))
print()
print ('Con 100 experimentos, valor medio:',mean(ex_100), 'desviación estandar:', stdev(ex_100))
print()
print ('Con 1000 experimentos, valor medio:',mean(ex_1000), 'desviación estandar:', stdev(ex_1000))
print()
print ('Con 100000 experimentos, valor medio:',mean(ex_100000), 'desviación estandar:', stdev(ex_100000))
```
%% Output
Con 10 experimentos, valor medio: 0.49 desviación estandar: 0.15238839267549947
Con 100 experimentos, valor medio: 0.498 desviación estandar: 0.16328694455658804
Con 1000 experimentos, valor medio: 0.4959 desviación estandar: 0.16012129411427084
Con 100000 experimentos, valor medio: 0.499687 desviación estandar: 0.15796471618534183
%% Cell type:markdown id:organic-aside tags:
En 10 ensayos, hay un ligero error, pero este error desaparece casi por completo con 1.000.000 experimentos.
A medida que tenemos más ensayos, la desviación de la media disminuye. Seguro que podríamos haber lanzado la moneda nosotros mismos, pero Python nos ahorra mucho tiempo al permitirnos modelar este proceso en código. A medida que obtenemos más y más datos, el mundo real empieza a parecerse al ideal.
%% Cell type:markdown id:bound-citizenship tags:
## Preguntas
- ¿Qué distribución obserbamos en las estimaciones de estos experimentos? ¿Cual es la razón de que todos sigan esta distribución?
- A medida que tenemos más ensayos, la desviación de la media con respecto al valor real disminuye. ¿Qué pasa con la desviación estandar?
- ¿Cómo se veria una figura que grafique el valor medio y desviación estandar como función del numero de ensayos?
- ¿Como simulamos una monda trucada?
- ¿Como simulamos el resultado de lanzar dos monedas? E.g probabilidad de tener dos caras.
%% Cell type:markdown id:square-entry tags:
## Ejercicios
%% Cell type:markdown id:addressed-compiler tags:
Los siguientes ejercicios deben ser realizados durante la sesión practica. Lo ideal seria hacer el calculo de la probabilidad, simular los experimentos y comparar los resultados. Para las simulaciones podemos usar las funciones definidas antes e implementar algunas modificaciones.
Los ejercicios están basados en el siguiente escenario:
*Tenemos 3 monedas en una bolsa, una moneda está trucada (99% de probabilidad de salir sello al lanzarse), las otras dos son monedas normales.*
%% Cell type:markdown id:familiar-ancient tags:
1. El experimento consiste en alatoreamente sacar una moneda de la bolsa, lanzarla, anotar el resultado y volver a introducir la moneda en la bolsa. Repites esta acción hasta haber lanzado monedas unas 21 veces. Preguntas:
- Calcular la probabilidad de obtener caras al terminar el experimento.
- Simular 100 experimentos para estimar cuantas caras esperas obtener en un experimento.
- Estimar qué desviación esperas entre experimento y experimento.
%% Cell type:markdown id:concerned-lending tags:
2. El experimento consiste en alatoreamente sacar una moneda de la bolsa, lanzarla, y luego sacar las dos monedas que quedan en la bolsa, lanzarlas y anotar los resultado
Repites esta acción hasta haber lanzado monedas unas 21 veces. Preguntas:
- ¿En qué sentido este ejemplo es distinto a 1?
- Simular 100 experimentos para estimar cuantas caras esperas obtener en un experimento.
- Estimar qué desviación esperas entre experimento y experimento.
%% Cell type:markdown id:acoustic-society tags:
3. Sacamos la primera moneda.
- ¿Cual es la probabilidad que sea una moneda truncada?
- Ahora la lanzamos y nos sale sello. Con esta información, ¿cual es la probabilidad que sea una moneda truncada?
%% Cell type:code id:tender-spell tags:
``` python
```
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment