Skip to content

Lab | Intro probability #214

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 1 commit into
base: main
Choose a base branch
from
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
288 changes: 269 additions & 19 deletions lab-intro-probability.ipynb
Original file line number Diff line number Diff line change
Expand Up @@ -36,13 +36,66 @@
"If the Ironhack Airlines routinely sells 460 tickets, what is the chance that they have a seats for all passenger?"
]
},
{
"cell_type": "code",
"execution_count": 14,
"metadata": {},
"outputs": [],
"source": [
"#code here\n",
"\n",
"from scipy.stats import binom\n",
"from scipy.stats import poisson\n",
"from scipy.stats import expon\n",
"from scipy.stats import norm"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"#code here"
"### Ensayos Independientes: En el modelo, cada pasajero representa un ensayo independiente. \n",
"# La decisión de un pasajero de presentarse al vuelo no afecta la decisión de otro.\n",
"\n",
"### Dos Resultados Posibles: Cada pasajero tiene dos posibles resultados: presentarse o no \n",
"# presentarse al vuelo. Esto se alinea perfectamente con los ensayos Bernoulli, que son la \n",
"# base de las distribuciones binomiales.\n",
"\n",
"### Probabilidad Constante: En la situación dada, la probabilidad de un pasajero específico \n",
"# de presentarse al vuelo es constante al 97% (0.97) para todos los pasajeros. \n",
"# Esto es crucial para usar la distribución binomial, que requiere que cada ensayo tenga la \n",
"# misma probabilidad de éxito.\n",
"\n",
"### Número Fijo de Ensayos: El número total de pasajeros (ensayos) es conocido y fijo, en \n",
"# este caso, 460 tickets vendidos.\n",
"\n",
"# Por ello, la mejor distribución a usar es la binomial de Bernoulli."
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Probability of having a seat for all passengers: 0.8845\n"
]
}
],
"source": [
"# Parámetros para la distribución binomial\n",
"n = 460 # Número de muestras (tickets vendidos)\n",
"p = 0.97 # Probabilidad de que cada pasajero se presente\n",
"\n",
"# Probabilidad de que se presenten 450 pasajeros.\n",
"probability = binom.cdf(450, n, p)\n",
"\n",
"print(f\"Probability of having a seat for all passengers: {probability:.4f}\")"
]
},
{
Expand Down Expand Up @@ -72,11 +125,57 @@
},
{
"cell_type": "code",
"execution_count": 5,
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"#code here"
"#code here\n",
"\n",
"### Éxito/Fracaso en Ensayos: En este escenario, cada intento de resolver la queja del cliente\n",
"# es un ensayo independiente con dos posibles resultados: éxito (resolución de la queja) o fracaso\n",
"# (la queja no se resuelve en ese intento).\n",
"\n",
"### Independencia de Ensayos: Cada intento de resolver la queja no depende del resultado de los \n",
"# intentos previos. Esto es esencial para aplicar la distribución geométrica, que asume que los \n",
"# ensayos son independientes entre sí.\n",
"\n",
"### Probabilidad Constante de Éxito: La probabilidad de resolver una queja en cualquier intento \n",
"# individual es constante en 0.3. Las distribuciones geométricas requieren que esta probabilidad \n",
"# de éxito ( p ) sea la misma en cada ensayo.\n",
"\n",
"### Contar Ensayos hasta el Primer Éxito: La pregunta se refiere explícitamente al número de intentos\n",
"# requeridos hasta que ocurra el primer éxito. Este es el escenario prototípico que maneja la \n",
"# distribución geométrica, donde estamos interesados en contar cuántos intentos son necesarios \n",
"# hasta lograr el primer éxito.\n",
"\n",
"# Por ello, la mejor distribución a usar es la geométrica."
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"The probability that the representative needs at least three attempts is: 0.4900\n"
]
}
],
"source": [
"# Probabilidad de éxito en el primer intento:\n",
"p_success = 0.3\n",
"\n",
"# Calcular probabilidades para el primer y segundo intento:\n",
"p_first_attempt = p_success\n",
"p_second_attempt = (1 - p_success) * p_success\n",
"\n",
"# Probabilidad de necesitar al menos tres intentos:\n",
"p_at_least_three = 1 - (p_first_attempt + p_second_attempt)\n",
"\n",
"print(f\"The probability that the representative needs at least three attempts is: {p_at_least_three:.4f}\")"
]
},
{
Expand Down Expand Up @@ -107,11 +206,55 @@
},
{
"cell_type": "code",
"execution_count": 6,
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"#code here"
"### Eventos Independientes: Los eventos (visitas al sitio web) ocurren de manera independiente. \n",
"# La visita de un usuario no depende de la visita de otro, lo que es una suposición clave para \n",
"# el modelo de Poisson.\n",
"\n",
"### Frecuencia de Eventos en un Intervalo Fijo: La distribución de Poisson se utiliza para modelar \n",
"# el número de eventos en un intervalo de tiempo o espacio fijo. En este caso, nos interesa el \n",
"# número de visitas a una página web en una hora determinada.\n",
"\n",
"### Tasa de Evento Constante: La tasa promedio de visitas es constante en el tiempo; es decir, \n",
"# esperamos aproximadamente 500 visitas por hora. Esta tasa constante es una característica \n",
"# definitoria de los procesos de Poisson.\n",
"\n",
"### Número Teórico Ilimitado de Eventos: La distribución de Poisson se adecua bien para casos \n",
"# donde, aunque no necesariamente ocurran, es teóricamente posible un número grande de eventos. \n",
"# Aquí el número de visitas puede, en teoría, ser cualquier número entero no negativo.\n",
"\n",
"# Por ello, la mejor distribución a usar es la de Poisson."
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"The probability of the server being overwhelmed is: 0.0129\n"
]
}
],
"source": [
"#code here\n",
"\n",
"# Average number of visits per hour\n",
"lambda_visits = 500\n",
"\n",
"# Server's capacity\n",
"capacity = 550\n",
"\n",
"# Calculate the probability that the number of visits is greater than the server's capacity\n",
"probability_overwhelmed = 1 - poisson.cdf(capacity, lambda_visits)\n",
"\n",
"print(f\"The probability of the server being overwhelmed is: {probability_overwhelmed:.4f}\")"
]
},
{
Expand All @@ -123,11 +266,24 @@
},
{
"cell_type": "code",
"execution_count": 7,
"execution_count": 8,
"metadata": {},
"outputs": [],
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"The probability of being overwhelmed at least once during the day is: 0.2677\n"
]
}
],
"source": [
"#code here"
"#code here\n",
"\n",
"# Calculate for 24 hours\n",
"p_overwhelmed_24_hours = 1 - ((1 - probability_overwhelmed) ** 24)\n",
"\n",
"print(f\"The probability of being overwhelmed at least once during the day is: {p_overwhelmed_24_hours:.4f}\")"
]
},
{
Expand Down Expand Up @@ -160,7 +316,49 @@
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
"source": [
"### Modelo de Tiempo entre Eventos en Procesos de Poisson: La distribución exponencial es \n",
"# utilizada para modelar el tiempo entre eventos en un proceso de Poisson. Si los eventos \n",
"# (en este caso, llegadas de clientes) ocurren de manera independiente y a una tasa promedio \n",
"# constante, entonces el tiempo entre estos eventos está bien modelado por una distribución exponencial.\n",
"\n",
"### Eventos Independientes: En nuestro escenario, las llegadas de los clientes son independientes\n",
"# entre sí, lo que significa que la llegada de un cliente no afecta la llegada del siguiente. \n",
"# Esta independencia es una característica clave para aplicar la distribución exponencial.\n",
"\n",
"### Tasa Constante: Tenemos una tasa de llegadas constante, es decir, un cliente llega cada \n",
"# 10 minutos, en promedio. La constancia de esta tasa es otra característica clave que hace \n",
"# a esta situación adecuada para un modelo exponencial.\n",
"\n",
"### Interés en Tiempo Continuo: La distribución exponencial se utiliza cuando estamos interesados\n",
"# en el tiempo continuo entre la ocurrencia de eventos, en lugar de un conteo discreto de eventos\n",
"# en un intervalo de tiempo (que sería modelado con una distribución de Poisson).\n",
"\n",
"# Por ello, la mejor distribución a usar es la exponencial."
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"The probability that the next customer will arrive within the next 5 minutes is: 0.3935\n"
]
}
],
"source": [
"# Rate of customer arrival per minute\n",
"lambda_rate = 1 / 10\n",
"\n",
"# Calculate the probability of a customer arriving within 5 minutes\n",
"probability_within_5 = expon.cdf(5, scale=1/lambda_rate)\n",
"\n",
"print(f\"The probability that the next customer will arrive within the next 5 minutes is: {probability_within_5:.4f}\")"
]
},
{
"cell_type": "markdown",
Expand All @@ -173,10 +371,23 @@
},
{
"cell_type": "code",
"execution_count": null,
"execution_count": 13,
"metadata": {},
"outputs": [],
"source": []
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"The probability that the employees can take a break is: 0.2231\n"
]
}
],
"source": [
"# Calculate the probability of a customer arriving within 15 minutes\n",
"probability_within_15 = expon.cdf(15, scale=1/lambda_rate)\n",
"probability_break = 1 - probability_within_15\n",
"print(f\"The probability that the employees can take a break is: {probability_break:.4f}\")"
]
},
{
"cell_type": "markdown",
Expand All @@ -196,11 +407,34 @@
},
{
"cell_type": "code",
"execution_count": null,
"execution_count": 15,
"metadata": {},
"outputs": [],
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"The probability that a randomly selected bird weighs between 140 and 160 grams is: 0.6827\n"
]
}
],
"source": [
"#code here"
"#code here\n",
"\n",
"# Parametros de la distribución normal\n",
"mu = 150 \n",
"sigma = 10 \n",
"\n",
"# Probabilidad para 160 gr y 140 gr\n",
"probability_less_than_160 = norm.cdf(160, loc=mu, scale=sigma)\n",
"probability_less_than_140 = norm.cdf(140, loc=mu, scale=sigma)\n",
"\n",
"# Probabilidad de peso entre esos dos\n",
"probability_between_140_and_160 = probability_less_than_160 - probability_less_than_140\n",
"\n",
"print(f\"The probability that a randomly selected bird weighs between 140 and 160 grams is: {probability_between_140_and_160:.4f}\")\n",
"\n",
"\n"
]
},
{
Expand All @@ -219,11 +453,27 @@
},
{
"cell_type": "code",
"execution_count": null,
"execution_count": 17,
"metadata": {},
"outputs": [],
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"The probability that the component fails within the first 30 hours is: 0.4512\n"
]
}
],
"source": [
"#code here"
"#code here\n",
"\n",
"# Rate of customer arrival per minute\n",
"lambda_rate = 1 / 50\n",
"\n",
"# Calculate the probability of a customer arriving within 5 minutes\n",
"probability_within_30 = expon.cdf(30, scale=1/lambda_rate)\n",
"\n",
"print(f\"The probability that the component fails within the first 30 hours is: {probability_within_30:.4f}\")"
]
}
],
Expand All @@ -243,7 +493,7 @@
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.10.9"
"version": "3.9.1"
}
},
"nbformat": 4,
Expand Down