sábado, 3 de octubre de 2026
ReliaWiki -- Ejemplo #1 de la sección 148, resuelto con Reliability en Google Colab.
Ejercicio tomado de: https://help.reliasoft.com/articles/content/hotwire/issue148/hottopics148.htm
Utilicemos un ejemplo simple de Weibull de 2 parámetros para explicar esto. Supongamos que tenemos el siguientes tiempos de falla: 15, 34, 56, 67, 118 y 234. Las soluciones MLE son:
A continuación se muestra el gráfico 3D de los valores de probabilidad.
SOLUCION CON LA LIBRERIA RELIABILITY EN GOOGLE COLAB
1. Instalación de la librería
>>! pip install reliability
Collecting reliability Downloading reliability-0.9.0-py3-none-any.whl.metadata (6.5 kB) Requirement already satisfied: autograd>=1.7.0 in /usr/local/lib/python3.13/dist-packages (from reliability) (1.9.1) Requirement already satisfied: scipy>=1.15.0 in /usr/local/lib/python3.13/dist-packages (from reliability) (1.16.3) Collecting numpy>=2.2.0 (from reliability) Downloading numpy-2.5.3-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.metadata (6.6 kB) Requirement already satisfied: matplotlib>=3.10.0 in /usr/local/lib/python3.13/dist-packages (from reliability) (3.10.0) Requirement already satisfied: pandas>=2.2.0 in /usr/local/lib/python3.13/dist-packages (from reliability) (2.2.3) Collecting autograd-gamma>=0.5.0 (from reliability) Downloading autograd-gamma-0.5.0.tar.gz (4.0 kB) Preparing metadata (setup.py) ... done Collecting mplcursors>=0.6 (from reliability) Downloading mplcursors-0.7.1-py3-none-any.whl.metadata (2.0 kB) Requirement already satisfied: contourpy>=1.0.1 in /usr/local/lib/python3.13/dist-packages (from matplotlib>=3.10.0->reliability) (1.4.0) Requirement already satisfied: cycler>=0.10 in /usr/local/lib/python3.13/dist-packages (from matplotlib>=3.10.0->reliability) (0.12.1) Requirement already satisfied: fonttools>=4.22.0 in /usr/local/lib/python3.13/dist-packages (from matplotlib>=3.10.0->reliability) (4.65.0) Requirement already satisfied: kiwisolver>=1.3.1 in /usr/local/lib/python3.13/dist-packages (from matplotlib>=3.10.0->reliability) (1.5.1) Requirement already satisfied: packaging>=20.0 in /usr/local/lib/python3.13/dist-packages (from matplotlib>=3.10.0->reliability) (26.3) Requirement already satisfied: pillow>=8 in /usr/local/lib/python3.13/dist-packages (from matplotlib>=3.10.0->reliability) (11.3.0) Requirement already satisfied: pyparsing>=2.3.1 in /usr/local/lib/python3.13/dist-packages (from matplotlib>=3.10.0->reliability) (3.3.2) Requirement already satisfied: python-dateutil>=2.7 in /usr/local/lib/python3.13/dist-packages (from matplotlib>=3.10.0->reliability) (2.9.0.post0) Requirement already satisfied: pytz>=2020.1 in /usr/local/lib/python3.13/dist-packages (from pandas>=2.2.0->reliability) (2025.2) Requirement already satisfied: tzdata>=2022.7 in /usr/local/lib/python3.13/dist-packages (from pandas>=2.2.0->reliability) (2026.4) Requirement already satisfied: six>=1.5 in /usr/local/lib/python3.13/dist-packages (from python-dateutil>=2.7->matplotlib>=3.10.0->reliability) (1.17.0) Downloading reliability-0.9.0-py3-none-any.whl (257 kB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 257.2/257.2 kB 4.8 MB/s eta 0:00:00 Downloading mplcursors-0.7.1-py3-none-any.whl (20 kB) Downloading numpy-2.5.3-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (16.7 MB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 16.7/16.7 MB 35.5 MB/s eta 0:00:00 Building wheels for collected packages: autograd-gamma Building wheel for autograd-gamma (setup.py) ... done Created wheel for autograd-gamma: filename=autograd_gamma-0.5.0-py3-none-any.whl size=4120 sha256=63f4f477a5c5c8ffa6ed359be999c33053a7eca80f5e9ed47446fb68a4b7e2e3 Stored in directory: /root/.cache/pip/wheels/7e/16/46/9477f188924292d3bf1fb8fb42844201591abfc19b7ba6d868 Successfully built autograd-gamma Installing collected packages: numpy, autograd-gamma, mplcursors, reliability Attempting uninstall: numpy Found existing installation: numpy 2.1.3 Uninstalling numpy-2.1.3: Successfully uninstalled numpy-2.1.3 ERROR: pip's dependency resolver does not currently take into account all the packages that are installed. This behaviour is the source of the following dependency conflicts. numba 0.61.2 requires numpy<2.3,>=1.24, but you have numpy 2.5.3 which is incompatible. Successfully installed autograd-gamma-0.5.0 mplcursors-0.7.1 numpy-2.5.3 reliability-0.9.0
WARNING: The following packages were previously imported in this runtime:
[numpy]
You must restart the runtime in order to use newly installed versions.2. Ajustamos una distribución de Weibull 2P a los datos de falla para encontrar los parámetros de forma (beta) y de escala (Alpha) por medio del método MLE.
>># Ajustar una distribución de weibull 2P a los datos de falla
>>from reliability.Fitters import Fit_Weibull_2P # importando modulo
>>import matplotlib.pyplot as plt # importanto modulo
>>data = [15, 34, 56, 67, 118, 234]
>>wb = Fit_Weibull_2P(failures=data)
>>plt.show()
Results from Fit_Weibull_2P (95% CI):
Analysis method: Maximum Likelihood Estimation (MLE)
Optimizer: TNC
Failures / Right censored: 6/0 (0% right censored)
Parameter Point Estimate Standard Error Lower CI Upper CI
Alpha 94.3817 32.4688 48.0906 185.232
Beta 1.25698 0.392399 0.681714 2.31768
Goodness of fit Value
Log-likelihood -32.5783
AICc 73.1567
BIC 68.7402
AD 2.12213
El grafico nos muestra la CDF, En la distribución de Weibull, la CDF (Cumulative Distribution Function, o Función de Distribución Acumulada) es la fórmula que calcula la probabilidad de que un componente o producto falle en o antes de un tiempo determinado
3. Trazar la PDF, conociendo alpha y beta.
>>from reliability.Distributions import Weibull_Distribution
>>import matplotlib.pyplot as plt
>>dist = Weibull_Distribution(alpha=94.382, beta=1.257) # this created the distribution object
>>dist.PDF() # this creates the plot of the PDF
>>plt.show()
En el análisis de Weibull, PDF significa Función de Densidad de Probabilidad (Probability Density Function en inglés), Es una fórmula matemática que describe la probabilidad de que una pieza, componente o sistema falle en un momento exacto del tiempo (t). A diferencia de la función acumulada, la PDF muestra la tasa o concentración de fallas en un instante específico.
Además ya teniendo la pdf podemos trazar las demás funciones de probabilidad relacionadas.
4. Trazar las demás funciones de distribución.
>>dist.plot()
SF significa Survival Function (Función de Supervivencia).También se le conoce comúnmente como Función de Fiabilidad (R(t)) y representa la probabilidad de que un elemento u organismo sobreviva más allá de un tiempo determinado (t).
HF suele referirse a la Hazard Function (Función de Riesgo o Tasa de Fallos en español).La función de riesgo h(t) describe la probabilidad instantánea de que un componente falle en un momento exacto t, dado que ha sobrevivido hasta ese momento.
En el contexto del análisis de confiabilidad e ingeniería de mantenimiento, CHF son las siglas en inglés para Cumulative Hazard Function (Función de Riesgo Acumulado o Función de Tasa de Fallas Acumulada). Representa la acumulación del riesgo de falla que experimenta un componente o equipo a lo largo del tiempo hasta un momento determinado.
5. trazar el grafico 3D de los valores de probabilidad.
Gráfico de la Superficie 3D de Log-Verosimilitud (Datos: 15, 34, 56, 67, 118, 234)
Calculamos y graficamos la verosimilitud conjunta para los parámetros de Weibull de este conjunto de datos específico.
>>import matplotlib.pyplot as plt
>>from scipy.stats import weibull_min
>># Datos solicitados por el usuario
>>datos_usuario = [15, 34, 56, 67, 118, 234]
>># Generar un rango de exploración alrededor de los parámetros óptimos (Alpha ~ 94.38, Beta ~ 1.25)
>>alphas_u = np.linspace(40, 180, 100)
>>betas_u = np.linspace(0.4, 2.5, 100)
>>A_u, B_u = np.meshgrid(alphas_u, betas_u)
>># Calcular la Log-Verosimilitud
>>Z_u = np.zeros_like(A_u)
>>for i in range(len(betas_u)):
>> for j in range(len(alphas_u)):
>> Z_u[i, j] = np.sum(weibull_min.logpdf(datos_usuario, c=B_u[i, j], scale=A_u[i, j]))
>># Graficar en 3D
>>fig = plt.figure(figsize=(12, 8))
>>ax = fig.add_subplot(111, projection='3d')
>>surf = ax.plot_surface(A_u, B_u, Z_u, cmap='plasma', edgecolor='none', alpha=0.9)
>># Ajustar etiquetas y diseño
>>ax.set_title('Superficie 3D de Log-Verosimilitud (Datos de Falla)', fontsize=14, fontweight='bold')
>>ax.set_xlabel('Parámetro de Escala (Alpha / η)')
>>ax.set_ylabel('Parámetro de Forma (Beta / β)')
>>ax.set_zlabel('Log-Likelihood')
>>fig.colorbar(surf, ax=ax, shrink=0.5, aspect=10, label='Log-Likelihood')
>># Destacar el punto óptimo (MLE)
>># De los fits anteriores sabemos: Alpha = 94.38, Beta = 1.25, Max Log-Likelihood ~ -32.58
>>ax.scatter(94.38, 1.25, -32.58, color='red', s=100, label='Máximo MLE (94.38, 1.25)', depthshade=False)
>>ax.legend()
>>plt.show()
Suscribirse a:
Entradas (Atom)
Entradas recientes
Prueba este código en Python:
Entradas Populares
-
Fuente: Gemini IA. Sí, existen librerías en Python que permiten estructurar y realizar análisis de criticidad , aunque por lo general no se ...
-
Fuente: Gemini IA. Sí, existen librerías especializadas en Python para realizar análisis de causa raíz (Root Cause Analysis o RCA), especi...
-
Fuente: Gemini IA Sí, existen librerías de Python especializadas para trabajar con FMEA (Análisis de Modo y Efecto de Fallas) y FMECA (Aná...
-
Ejercicio tomado de: https://help.reliasoft.com/articles/content/hotwire/issue148/hottopics148.htm Utilicemos un ejemplo simple de Weibull ...
-
# Ejercicio 1 # Escribir un programa que pregunte al usuario su edad # y muestre por pantalla si es mayor de edad o no. """...
-
Fuente: https://code.visualstudio.com/learn Aprenda a codificar con Visual Studio Code Aprender a codificar es intimidante, así que prepá...
-
Introducción a la programación en Python. Universidad Católica de Chile - Coursera Definiendo el proyecto "Mi Red" Proyecto de re...
-
2.2. Ambiente básico de trabajo Versión borrador / preliminar Este documento es una versión preliminar para uso interno. Si encuentra ...
-
¿Qué es un programa? E l primer concepto que tienes que entender cuando empiezas a programar es qué es un programa. Un programa es un conj...