Retos finales

17/17

Lectura

Te doy la bienvenida al último paso de este curso de probabilidad para ciencia de datos. Es momento de que pongas a prueba todo lo que has aprendido.

Completa los ejercicios que se proponen en cada una de las notebooks de Colab de diferentes temas cada una. Recuerda compartir tus resultados o dudas en los comentarios para que entre todos podamos apoyarnos.

Tipos de probabilidad

Los diferentes tipos de probabilidades que existen con frecuencia generan algo de confusión, estos ejercicios te permitirán fortalecer el entendimiento de estos conceptos:

https://colab.research.google.com/drive/1yQFCKo2GHtbJui0szPjLhAJSjpivBeun?usp=sharing

Distribuciones de probabilidad

Luego de que entendemos que hay diferentes tipos de probabilidades, el concepto de distribución de probabilidad nos dice que podemos usar funciones matemáticas para mapear cada ocurrencia posible de una variable aleatoria a un número que es la probabilidad de esa ocurrencia.

En este conjunto de retos exploramos más a fondo el cálculo con distribuciones discretas, especialmente la binomial:

https://colab.research.google.com/drive/10xbi88L6alsPC8-cec_6VuUeh7ttFaEF?usp=sharing

Mientras que en este otro conjunto de retos exploramos más a detalle la distribución gaussiana como representante de las distribuciones continuas:

https://colab.research.google.com/drive/1OVQ0fwQ1q1lPFjmjPHyuCkD58SZfm4o9?usp=sharing

Estimación de densidades de probabilidad

Uno de los métodos más importantes para estimar densidades de probabilidad es el MLE (Maximum Likelihood Estimation), del cual podrás profundizar en este reto:

https://colab.research.google.com/drive/19F8F0ID9ErtiHUNbWsOIJ7f22u7jjS0d?usp=sharing

Teorema de Bayes y machine learning

Finalmente, encontrarás en la siguiente notebook un ejemplo donde se profundiza el desarrollo de un clasificador de Naive Bayes. Aquí verás por qué es importante el uso de distribuciones iniciales para ajustar las verosimilitudes con el fin de poder aplicar tus modelos a datos que no estaban en el dataset original de entrenamiento:

https://colab.research.google.com/drive/1XbQ6-5Ax8Pksik2MR2kWB87ay85RMX2b?usp=sharing


Ahora que tienes claros estos conceptos, a través del desarrollo de estos retos, espero que hayas disfrutado del curso y que con esto tengas toda la motivación para continuar con lo que sigue en temas de matemáticas, machine learning y ciencias de datos en general. Nos vemos en la próxima. ¡Nunca pares de aprender! 💚

Aportes 47

Preguntas 1

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad? Crea una cuenta o inicia sesión.

Creo que estaría genial tener un solucionario oficial. Gracias!

Mis Resultados de la primera parte, por favor corregían si me equivoco 😉

Tipos de probabilidad

I) Ejercicios (bloque 1)

  1. P(A|B) = 1/3
  2. P(A|C) = 0/3 = 0
  3. P(B|C) = 0/3 = 0

II) Ejercicios (bloque 2)

  1. P(A|B) = 3/6 = 1/2
  2. P(A|B) = 3/6 = 1/2
  3. P(A|B) = 2/6 = 1/3

III) Ejercicios (bloque 3)

  1. P(m_1=Cara, m_2=Sello) = 1/4
  2. P(m_1 = Cara| m_2 = Sello) = 1/2
  3. P(m_2 = Sello) = 2/4 = 1/2

AAAAAAH hubiera amado tener estos retos durante los bloques y no hasta el final, me desespere porque casi no entendí nada. Pero con estos todo es mucho mas claro solo es repasar brevemente las clases y todo es mas fluido 😃

Con respecto a las lecturas 9-10, en los primeros ejercicios las respuestas son las siguientes:

1.P(x=4)=0, muchos creerán que la respuesta sería el output de la función norm(4,0.1).pdf(4), la cual es 3.98, lo cual es falso, ya que ninguna probabilidad puede ser mayor a 1, lo que nos da esta función es el valor que toma la función de densidad, y al tratarse de una distribución de probabilidad continua, cuando se usa un número específico, la probabilidad es 0, dada la siguiente explicación los resultados siguientes son:

2.P(x=-10)=0

3.P(x=10)

4.P(x<=4)=0.5, esta al contrario de las anteriores, sí se resuelve con la función de distribución acumulada, la cual es norm(4,0.1).cdf(4)

5.P(x>=4)=0.5 y se resuelve de la siguiente forma: 1-norm(4,0.1).cdf(4)

Con respecto al siguiente ejercicio, es un poco más complicado.
La forma en que yo lo resolví, es editando la función generate_binomial_trials para que nos retorne el arreglo, que utiliza para generar el histograma, de la siguiente forma:

def generate_binomial_trials(trials=1000, coin_toss=100):
  arr = []
  for _ in range(trials):
    arr.append(binomial(coin_toss, 0.5))
  values, dist = np.unique(arr, return_counts=True)

  return values, dist,arr

values, dist, arr= generate_binomial_trials(100000)

Posteriormente, esta lista la convierto a un arreglo de numpy para poder extraer la media y desviación estándar con el atributo .mean() y .std():

arr = np.array(arr)
mu = arr.mean()
sigma = arr.std()

dist = norm(mu, sigma)
x = np.arange(25,75,0.1)
y = [dist.pdf(value) for value in x]


#distribución teórica
plt.plot(x, y)

# datos
values, dist = np.unique(arr, return_counts=True)
plt.bar(values, dist/len(arr))
plt.show()

Bloque 2

  1. P(A|B) sabiendo que el jugador 2 elige B = {$2,4,6,8,10,12$}
  • Primero delimitamos el espacio marcado por B ya que esta es la condición. {2,4,6,8,10,12} (6 elementos)
  • Luego consideramos los puntos de intersección entre ambos jugadores. Tenemos 3 números de intersección {2,4,6}. Por lo tanto:
    P(A|B)= 3/6 = 1/2
  1. P(A|B) sabiendo que el jugador 2 elige B = {1,3,5,7,9,11}
  • El espacio se delimita por B y tenemos 6 elementos.
  • Los puntos de intersección son: {1,3,5}
    P(A|B)= 3/6 = 1/2
  1. P(A|B) sabiendo que el jugador 2 elige B = {5,6,7,8,9,10}
  • El espacio se delimita por B con 6 elementos.
  • Los puntos de intersección son : {5,6}. Solo 2. Por lo tanto
    P(A|B)= 2/6 = 1/3

Ejercicios (bloque 1)
P(A|B)= 1/3
P(A|C)= 0
P(B|C)= 0
Ejercicios (bloque 2)
P(A|B) sabiendo que el jugador 2 elige B = { 2,4,6,8,10,12 } = 1/2
P(A|B) sabiendo que el jugador 2 elige B = { 1,3,5,7,9,11 } = 1/2
P(A|B) sabiendo que el jugador 2 elige B = { 5,6,7,8,9,10 } = 1/3
Ejercicios (bloque 3)
P(m1=cara,m2=sello) = 1/4
P(m1=cara|m2=sello) = 1/2
P(m2=sello) = 1/2

Ejercicios (bloque 1)
Probabilidad de obtener 3 caras a partir de 12 lanzamientos de moneda. 0.053 , 0.2397
Probabilidad de obtener 5 o menos caras a partir de 10 lanzamientos de moneda. 0.387 , 0.882
Probabilidad de obtener menos de 6 caras a partir de 10 lanzamientos de moneda. 0.387 , 0.882

Ejercicios (bloque 1)
P(X=4) = 3.989
P(X=−10) = 0
P(X=10) = 0
P(X<=4) = 0.5
P(X>=4) = 0.5

Les dejo los apuntes que fui tomando en Notion a lo largo del curso 😄
Apuntes del Curso de Matemáticas para Data Science: Probabilidad

Tipos de probabilidad





Segunda parte 😄

<h1>Distribuciones de probabilidad</h1>

I) Ejercicios (bloque 1)

  1. P(3,12;0.5) = 220*0.5^12 = 0.054
  2. C(5, 10; 0.5) = 0.6221
  3. C(5, 10; 0.5) = 0.6221

Bloque 1

  1. $P(A|B) = ?$
  • Tomamos en cuenta los posibles resultados de un dado que son {1,2,3,4,5,6}. O sea que si preguntamos ¿Cual es la probabilidad de que caiga 6? P(A)=1/6

  • Ya que dentro de los 6 posibles resultados solo tenemos 1 seis. Pero la condicion B restinge el espacio muestral a solo los numero pares que son: {2,4,6}. Asi que si preguntamos ¿Cual es la probabilidad de que caiga un 6 dado que tenemos numeros pares?.

P(A|B)= 1/3

  • Ya que con la nueva delimitacion del espacio muestral por la nueva condición, restringimos nuestros posibles resultados a 3 y dentro de estos resultados solo tenemos 1 seis. El hecho de que ocurriera B aumentó las probabilidades de que ocurriera A. Por lo tanto estos eventos estan positivamente correlacionados.
  1. P(A|C) = ?
  • En este caso tenemo una probabilidad de que caiga 6 en un espacio muesstral delimitado solo por impares, asi que la probabilidad de que caiga un 6 es nula
  1. $P(B|C) = ?$
  • Aqui pasa lo mismo que en el anterior. Estos dos ultimos ejemplos son eventos excluyentes pero no independientes, y estan negativamente correlacionados ya que la ocurrencia de C disminuyó la de A.

En las distribuciones (bloque 2) he resuelto de la siguiente forma:


import numpy as np
from numpy.random import binomial
import matplotlib.pyplot as plt


def generate_binomial_trials(trials=1000, coin_toss=100):
  '''
  el resultado de esta funcion es generar un conjuntos 
  de experimentos binomiales (trials) y de cada uno obtener 
  las cantidades de exitos en cada secuencia (e.j. lanzar monedas).

  * trial: es una secuencia de <coin_toss> lanzamientos de moneda

  * coin_toss: es el numero de monedas lanzadas en cada trial
  '''
  arr = []
  for _ in range(trials):
    arr.append(binomial(coin_toss, 0.5))
  values, dist = np.unique(arr, return_counts=True)

  return values, dist, arr #retornamos también arr

values, dist, arr = generate_binomial_trials(100000) #generamos arr con la función
plt.bar(values, dist)


#Para estimar la distibucion normal

arr = np.array(arr)

mu = arr.mean()
sigma = arr.std()

#distinguimos esta distibucion de la generada en la funcion inicial
distr_estim = norm(mu, sigma)

x = np.arange(25,75,0.1)
y = [distr_estim.pdf(value) for value in x]  #generamos el eje y sobre la distibucion estimada (dist_estim), no sobre la original (dist)

#representamos la distibucion normal estimada
plt.plot(x,y,'g')

#con lo siguiente representamos la distibucion inicial del experimento
plt.bar(values, dist/len(arr))```

Comparto my Collab de las lecturas 6,7y8. Con resolución a mano y código. Ojalas les sirva y cualquier mejora es bienvenida 🤠

https://colab.research.google.com/drive/19KZpqd6MaoJabqDREIIUZ1ArihxUc6BT?usp=sharing

¿Como se resuelve esto?. ¿Como específicas que X sea mayor o igual que 4?

#𝑃(𝑋>=4) 
norm(4,0.1).cdf()

En las distribuciones (bloque 2) sin alterar el codigo escrito por el profesor el incoveniente es obtener los datos originales para ello lo resolvi de esta manera:

from scipy.stats import norm 
# obtener los valores originales 
arr = np.repeat(values,dist)

# distribucion teorica
mu = arr.mean()

sigma = arr.std()

dist_t = norm(mu, sigma)

x = np.arange(30,70,0.1)
y = [dist_t.pdf(value) for value in x]

plt.plot(x, y)

# datos
plt.bar(values, dist/len(arr))
plt.show()

Tengo una duda con
Distribuciones continuas
Ejercicio (Bloque 1)
Como es posible calcular P(X>=4)??

El código de ejemplo en el segundo reto, en el ciclo for toca cambiar la i por una n, al llamar la función

Distribuciones de probabilidad en el primer ejercicio (y/o link), encontré la solución del problema de Python de la siguiente forma, acepto recomendaciones y/o sugerencias:

from math import factorial

def my_binomial(k, n, p):
  return factorial(n)/(factorial(k)*(factorial(n-k)))*pow(p,k)*pow(1-p, n-k)

total = 0

for n in range(1,6):
  total += my_binomial(n, 10 , 0.3)
  print(total, n)
   
print(total) ```

Ejercicios de distribución de probabilidad discreta
Mi solución al bloque 1, con p = 0.5:

  1. Probabilidad de obtener 3 caras a partir de 12 lanzamientos de moneda = 0.053

  2. Probabilidad de obtener 5 o menos caras a partir de 10 lanzamientos de moneda = 0.387

  3. Probabilidad de obtener menos de 6 caras a partir de 10 lanzamientos de moneda = 0.387 (es el mismo problema 2)

Les comparto la solución de distribuciones de probabilidad donde hice los cálculos de combinaciones y factoriales con recursividad https://colab.research.google.com/drive/1-L3lWny1z-j_jx9rTFjL4D4wvlvFGlVI?usp=sharing

Graciasss

Hola, dejo aquí unos videos que hice como ejemplos sobre Distribución Binomial, por si sirven a alguien:
Ejemplo 1
Ejemplo 2

Agradecido con tan excelente curso, gracias Francisco por compartir tus conocimientos.

Les comparto mis apuntes del curso en GitHub

Curso Probabilidad

Hola dejo el solucionario de los problemas por si los quieren checar en Deepnote. link

RESULTADOS BLOQUE 1

  1. (A|B) = 1/6
  2. P(A|B) = 0/6
  3. P(A|B) = 0/6

RESULTADOS BLOQUE 2

  1. P(A|B) = 3/6 = 1/2
  2. P(A|B) = 3/6 = 1/2
  3. P(A|B) = 2/6 = 1/3

RESULTADOS BLOQUE 3

  1. P(m1 = cara, m2 = sello) = 1/4
  2. P(m1 = cara|m2 = sello) = 1/2
  3. P(m2 = sello) = 2/4 = 1/2

Sé que el profe es excelente pero me voy entendiendo solo la mitad del curso jaja

Respuesta bloque 3:

Espacio Muestral del lanzamiento de dos monedas

m1 m2

c s

c c

s c

s s

P(m1=cara,m2=sello) = 1 posibilidad de 4 o sea 1/4

P(m1=cara|m2=sello) = si se da m2 sello la probabilidad de que m1 sea cara solo se da en un evento entonces la probabilidad condicionada es 1/4

P(m2=sello) = el espacio muestral da dos posibilidades de las 4 o sea que la probabilidad es 2/4 = 1/2

Respuesta Bloque 2:

P(A|B) sabiendo que el jugador 2 elige B = {2,4,6,8,10,12}

A = { 1,2,3,4,5,6 } y B = { 2,4,6,8,10,12 } AᴖB = {2,4,6} entonces P(A|B) sabiendo que el jugador 2 elige B = {2,4,6,8,10,12} es igual a 3/6 = 1/2.

P(A|B) sabiendo que el jugador 2 elige B = {1,3,5,7,9,11}

A = { 1,2,3,4,5,6 } y B = { 1,3,5,7,9,11 } AᴖB = {1,3,5} entonces P(A|B) sabiendo que el jugador 2 elige B = {1,3,5,7,9,11} es igual a 3/6 = 1/2

P(A|B) sabiendo que el jugador 2 elige B = { 5,6,7,8,9,10 }

A = { 1,2,3,4,5,6 } y B = { 5,6,7,8,9,10 } AᴖB = {5,6} entonces P(A|B) sabiendo que el jugador 2 elige B = {5,6,7,8,9,10} es igual a 2/6 = 1/3

Respuesta ejercicios Bloque 1:

Considerando un lanzamiento de un dado y considerando los siguientes eventos aleatorios:

A = {el resultado del lanzamiento de un dado es 6}

B = {el resultado del lanzamiento de un dado es par}

C = {el resultado del lanzamiento de un dado es impar}

calcula las siguientes probabilidades:

P(A|B)=?
P(A|C)=?
P(B|C)=?
Desarrollo

P(A) = 1/6 (Ya que solo hay una posibilidad de las 6 que al lanzarse salga el 6)
P (A|B) = Si se da la condición B tenemos cómo espacio {2,4,6}, entonces obtener el 6 dado que el lanzamiento es par nos lleva a que hay una posibilidad en 3 opciones. Lo que lleva a que P(A|B) = 1/3.

P(A|C) = ?
C = {1,3,5}, A = {6}, AᴖC = 0, entonces P(A|C) = 0/3 = 0

P(B|C) = ?
C = {1,3,5}, B = {2,4,6} , BᴖC = 0 , entonces P(B|C) = 0/3 = 0

++Codigo sencillo para las funciones promedio y varianza - Lectura 11 -12
++

## parámetros optimos a partir del cálculo con MLE
## completa con tu código aquí:

def optimal_mu(arr):
  sumatoria = 0
  for i in arr:
    sumatoria =sumatoria + i
  mu = sumatoria/ len(arr)
  print(f"El promedio de la lista es: {mu}")
  return mu
  

def optimal_sigma(arr):
  promedio = optimal_mu(arr)
  desvios = 0
  for i in arr:
    desvios = desvios + (i - promedio)**2
  varianza = desvios/len(arr)
  print(f"La varianza de la lista es: {varianza}")

lista = [1,3,5,10]
optimal_sigma(lista)

Ejercicios (bloque 1)

  1. $P(A|B) =1/6
  2. $P(A|C) =1/3
  3. $P(B|C) = 1/3

Ejercicios (bloque 2)

P(A|B) sabiendo que el jugador 2 elige B = { 2,4,6,8,10,12 } = 3/6 = 1/2
P(A|B) sabiendo que el jugador 2 elige B = { 1,3,5,7,9,11 } = 3/6 = 1/2
P(A|B) sabiendo que el jugador 2 elige B = { 5,6,7,8,9,10 } = 2/6 = 1/3

Ejercicios (bloque 3)

P(m1=cara,m2=sello) = 1/4
P(m1=cara|m2=sello) = 1/2
P(m2=sello) =1/2

Aqui estamos, esperando a dar el salto 😅

Estas son las funciones que cree para las Lecturas 11-12, Máxima Verosimilitud (MLE):

## parámetros optimos a partir del cálculo con MLE
## completa con tu código aquí:

def optimal_mu(arr=arr):
  return np.sum(arr)/len(arr)

def optimal_sigma(arr=arr):
  sum_difference = 0
  for x in arr:
    y = pow(x-optimal_mu(arr), 2)
    sum_difference = sum_difference + y

  return math.sqrt(sum_difference/len(arr))```

Les comparto el código para hacer los ejercicios de las lecturas-6-7-8:

from numpy import power
# función factorial
def fact(x):
  factorial = 1
  if int(x) >= 1:
    for i in range (1,int(x)+1):
      factorial = factorial * i
  return factorial
  
# distribución binomial 
def my_binomial(k, n, p):
  return fact(n)/(fact(k)*(fact(n-k)))*power(p,k)*power(1-p, n-k)

# distribución binomial acumulada:
def binom_acum(k,n,p):
  def my_binomial(k, n, p):
    return fact(n)/(fact(k)*(fact(n-k)))*power(p,k)*power(1-p, n-k)
  acum = 0
  for i in range(k+1):
    acum += my_binomial(i,6,0.5)
  return acum

Hola a todos

Yo tengo una discrepancia con la mayoría de los aportes que he visto acá respecto al bloque 1 de Tipos de probabilidad.

En el caso de la primera pregunta de cuánto es la probabilidad de que un dado saque 6, dado que el otro dado es par. Esto último implica que el espacio muestral está dado por el resultado del dado B, que fue 2, 4 y 6 pero con todas las combinaciones posibles del dado A, o sea, el espacio muestral es 18. Ahora, tenemos que calcular la probabilidad de que el dado A sea 6, con todas las posibles combinaciones de que el dado B sea par, o sea, 3 (6 y2, 6 y 4, 6 y 6). Por ende la P(A|B) = 3/18 = 1/6

Siguiendo la misma lógica, P(A|C) = 1/6 y P(B|C) = 1/2

Esto se ve mejor utilizando un diagrama como el que hizo Francisco en la clase, pero no supe como hacerlo 😦

Dejo abierta la discusión.

Saludos

Los últimos retos siento que se debieron de ver en clase, no dejar así

Reto 4, comprobación numérica

def optimal_mu(arr=arr):
  mu = 0
  for i in arr:
    mu = mu + i
  return mu/len(arr)

def optimal_sigma(arr, mu):
  sigma = 0
  for i in arr:
    sigma +=  (i - mu)**2
  return (sigma/len(arr))**(1/2)

mu = optimal_mu()
sigma = optimal_sigma(arr,mu)
print(mu, sigma)

Reto 3, bloque 2

import numpy as np
from numpy.random import binomial
import matplotlib.pyplot as plt
import pandas as pd
import statistics

def generate_binomial_trials(trials=1000, coin_toss=100):
  arr = []
  for _ in range(trials):
    arr.append(binomial(coin_toss, 0.5))
  return arr

arr = generate_binomial_trials(100000)
#promedio, desvest
mu = statistics.mean(arr)
sigma = np.std(arr)
#distribucion normal
dist = norm(mu,sigma)
x = np.arange(35,68,0.1)
y = [dist.pdf(value) for value in x]
#grafica de la gaussiana
plt.plot(x,y)
#grafica del histograma
values, dist = np.unique(arr, return_counts=True)
plt.bar(values, dist/len(arr)) 

para el reto 3, cuando X=> 4

norm(4,.1).sf(4)

0.5

Mi solución del primer reto:
Bloque I:

  1. P(A|B)=1/3
  2. P(A|C)=0
  3. P(B|C)=0

Bloque II

  1. P(A|B)=1/2
  2. P(A|B)=1/2
  3. P(A|B)=1/3

Bloque III

  1. P(m1=cara,m2=sello) = (1/2)*(1/2) = 1/4
  2. P(m1=cara|m2=sello) = 1/2 (eventos excluyentes)
  3. P(m2=sello) = 1/2
  1. P(m_1 = \text{cara}, m_2 = \text{sello})$

      m1 C|CC  CS
            S|SC  SS
                 C  S
                  m2
    
  • En este caso tenemos una probabilidad de que m1 caiga cara© y m2 caiga sello(S).
  • La respuesta es de 1/4.
  1. $P(m_1 = \text{cara} | m_2 = \text{sello})$
  • Aqui restringimos el espacio porque tenemos una condición dada por la moneda 2. Así que solo tenemos 2 posibles resultados (CS y SS).
  • Y solo tenemos 1 posible resultado de que m1 sea C y m2 sea S. Por lo tanto la respuesta es de 1/2
  1. $P(m_2 = \text{sello})$
  • Se toma en cuenta todo el espacio ya que no hay una condición dada.
  • Los posibles casos de que la m2 sea sello son 2 del total de 4 en el espacio.
  • por lo tanto la respuesta es 1/2

Aquí algunas de mis respuestas. Pero antes, si ven algo mal, porfavor corríjanme, estoy también aprendiendo. 😃

Lecturas 3-4-5
Ejercicio 1

  1. 𝑃(𝐴|𝐵)=1/3
  2. 𝑃(𝐴|𝐶)=0/3
    3.𝑃(𝐵|𝐶)=0/3

Ejercicio 2

  1. 𝑃(𝐴|𝐵) = 3/6 = 1/2 con B = { 2,4,6,8,10,12 }
  2. 𝑃(𝐴|𝐵) = 3/6 = 1/2 con B = { 1,3,5,7,9,11 }
  3. 𝑃(𝐴|𝐵) = 2/6 = 1/3 con B = { 5,6,7,8,9,10 }

Ejercicio 3
Espacio Muestral (m1=cara, m2=cara ; m1=cara, m2=sello ; m1=sello, m2=cara ; m1=sello m2=sello) = 4 posibilidades de combinación

  1. 𝑃(𝑚1=cara,𝑚2=sello) = 1/4
  2. 𝑃(𝑚1=cara|𝑚2=sello) = 1/2
  3. 𝑃(𝑚2=sello) = 2/4 = 1/2

Lecturas 6-7-8

Ejercicio 1

  1. Probabilidad de obtener 3 caras a partir de 12 lanzamientos de moneda. = 0.0537
  2. Probabilidad de obtener 5 o menos caras a partir de 10 lanzamientos de moneda. = 0.6221
  3. Probabilidad de obtener menos de 6 caras a partir de 10 lanzamientos de moneda. = 0.6221

Hecho con el código que nos dan en la guía:

import numpy as np
from numpy.random import binomial
from scipy.stats import binom
from math import factorial

# definición de la distribución binomial 
def my_binomial(k, n, p):
  return factorial(n)/(factorial(k)*(factorial(n-k)))*pow(p,k)*pow(1-p, n-k)

# Probabilidad de obtener 3 caras a partir de 12 lanzamientos de moneda. 
print(f' probabilidad de 3 caras con 12 lanzamientos y 0.5 es {my_binomial(3, 12, 0.5)}')
print(f' probabilidad de 3 caras con 12 lanzamientos y 0.3 es {my_binomial(3, 12, 0.3)}')

# Probabilidad de obtener 5 o menos caras a partir de 10 lanzamientos de moneda. 
total = 0
for n in range (6):
  total += my_binomial(n, 10, 0.5)

print(f'La probabilidad de 5 caras o menos con 10 lanzamientos es {total}') 

total1 = 0
for n in range (6):
  total1 += my_binomial(n, 10, 0.3)

print(f'La probabilidad de 5 caras o menos con 0.3 y 10 lanzamientos es y {total1}') 


# Probabilidad de obtener menos de 6 caras a partir de 10 lanzamientos de moneda.
total = 0
for n in range (6):
  total += my_binomial(n, 10, 0.5)

print(f'La probabilidad de menos de 6 caras con 10 lanzamientos es {total}')  
total1 = 0

for n in range (6):
  total1 += my_binomial(n, 10, 0.3)

print(f'La probabilidad de menos de 6 caras con 0.3 y 10 lanzamientos es {total1}') 

Como puedo entrar a hacer los ejercicios si están bloqueados y mi usuario de sesión es outlook ???