""

sábado, 3 de octubre de 2026

ReliaWiki -- Ejemplo #2. Weibull 3P, resuelto por medio de Reliability en Google Colab.

Ejemplo original tomado de: https://help.reliasoft.com/articles/content/hotwire/issue148/hottopics148.htm 

Por ejemplo, considere el siguiente conjunto de datos: 100, 218, 334, 556, 867 y 1234.

Cuando no se selecciona Usar MLE 3-P verdadero en Weibull, se calcula Los resultados son:


 γ es 28,5, que se calcula utilizando El método de estimación de mínimos cuadrados.

A continuación se muestra el gráfico de valores de probabilidad 3D.



Cuando se selecciona Usar MLE 3-P verdadero en Weibull, se calcula Los resultados son:




El gráfico de valores de probabilidad 3D es:





Solución al ejemplo #2, en Google Colab. Fuente: PPI

1. Instalación de la librería: >> ! pip install reliabitily

2. 
>># Ajustar una distribucion de weibull 3P a los datos de falla
>>from reliability.Fitters import Fit_Weibull_3P # importando modulo
>>import matplotlib.pyplot as plt # importando modulo
>>data = [100, 218, 334, 556, 867, 1234]
>>wb = Fit_Weibull_3P(failures=data)
>>plt.show()

.....................................................................
Results from Fit_Weibull_3P (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         276.272         316.895   29.1728   2616.36
     Beta        0.363495        0.141473  0.169515  0.779451
    Gamma         99.9999     0.000123239   99.9997       100 

Goodness of fit    Value
 Log-likelihood -37.5803
           AICc  93.1607
            BIC  80.5359
             AD  2.83028 

3. vamos a crear la distribución de Weibull con los 3 parámetros encontrados


>>from reliability.Distributions import Weibull_Distribution
>>import matplotlib.pyplot as plt

>>dist = Weibull_Distribution(alpha=276.272, beta=0.363, gamma=100.0)  # this created the distribution object
>>dist.PDF()  # this creates the plot of the PDF
>>plt.show()

4. Grafiquemos las demás funciones de distribución

>>dist.plot()



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()


lunes, 28 de septiembre de 2026

¿Existen herramientas para RCA (Root Cause Analysis) en Python?

Fuente: Gemini IA. 

Sí, existen librerías especializadas en Python para realizar análisis de causa raíz (Root Cause Analysis o RCA), especialmente enfocadas en aprendizaje automático causal, inferencia y análisis de datos complejos. [1, 2, 3]

Las principales librerías que puedes utilizar son:
  • PyRCA: Una librería de código abierto desarrollada por Salesforce específicamente para el análisis de causa raíz en Inteligencia Artificial y sistemas (AIOps). Soporta múltiples métodos como inferencia bayesiana, paseos aleatorios (Random Walk), pruebas de hipótesis y ε-Diagnóstico. [1, 4, 5]
  • DoWhy: Desarrollada dentro del ecosistema de PyWhy (con fuerte apoyo de Amazon), es una biblioteca enfocada en el aprendizaje automático causal. Permite modelar explícitamente supuestos causales y estimar efectos causales para identificar la raíz de un problema. [2, 6]
  • Causallib: Paquete desarrollado por IBM para el análisis causal que se integra de forma unificada con la API de Scikit-Learn, facilitando la estimación de efectos y el modelado predictivo. [7]
  • PyCelonis: Si trabajas con minería de procesos (process mining), incluye módulos específicos de análisis de causa raíz para detectar comportamientos indeseados en los flujos de datos empresariales. [3]
Si te interesa, dime:
  • ¿Qué tipo de datos o problema quieres analizar (métricas de servidores/AIOps, procesos de negocio o datos clínicos/sociales)?
  • ¿Prefieres un enfoque basado en estadística tradicional/inferencia bayesiana o en machine learning?
Te puedo recomendar la opción más adecuada y un ejemplo básico de código.

¿ Existen herramientas para trabajar análisis de criticidad de activos en Python?

Fuente: Gemini IA.

Sí, existen librerías en Python que permiten estructurar y realizar análisis de criticidad, aunque por lo general no se cuenta con una biblioteca específica y única denominada "análisis de criticidad" (como ocurre en mantenimiento industrial o gestión de riesgos de forma nativa). En su lugar, se utilizan librerías generales del ecosistema de ciencia de datos y análisis numérico para procesar matrices de riesgo, jerarquizar equipos o evaluar la criticidad de procesos. [1]

Principales librerías base para construir modelos de criticidad
  • Pandas: Es la herramienta fundamental. Permite cargar tablas de datos (desde Excel o CSV) con variables de impacto, frecuencia, probabilidad y consecuencias, y facilita el cálculo de índices de criticidad mediante operaciones vectorizadas entre columnas. [1, 2]
  • NumPy: Permite realizar operaciones matemáticas avanzadas y el manejo eficiente de matrices numéricas para evaluar múltiples criterios o ponderaciones en modelos multicriterio. [1]
  • Matplotlib y Seaborn / Plotly: Son esenciales para la visualización de resultados, permitiendo graficar matrices de criticidad o riesgo (mapas de calor o heatmaps de probabilidad vs. impacto). [1, 2]
  • Scikit-Learn: Útil si tu enfoque de criticidad incluye algoritmos de clustering o clasificación para agrupar activos o procesos según su nivel de riesgo de manera automática. [1, 2]
¿Cómo se implementa?
Por lo regular, se diseña un script personalizado donde combinas Pandas para multiplicar factores (por ejemplo: Criticidad = Frecuencia × Consecuencia) y Seaborn para pintar la matriz de priorización resultante.
Si me dices qué tipo de análisis de criticidad quieres hacer (por ejemplo, en mantenimiento industrial de equipos, en ciberseguridad o en gestión de proyectos), puedo darte un ejemplo de código usando estas librerías adaptado a tu caso.

¿Existen librerías especializadas para análisis FMEA y FMECA en Python?

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álisis de Modo, Efecto y Criticidad de Fallas), aunque debido a la naturaleza tabular y procedimental de estas metodologías, muchos ingenieros optan por construir soluciones personalizadas utilizando herramientas de análisis de datos. [1, 2]

A continuación se detallan las principales herramientas y enfoques disponibles en Python:
1. Librerías especializadas en FMEA/FMECA y Resiliencia
  • fmdtools (Failure Modes and Effects Analysis Toolkit): Desarrollada originalmente por investigadores del Centro de Investigación Ames de la NASA, es una de las librerías de código abierto más potentes. Permite modelar de forma explícita la estructura y comportamiento de sistemas dinámicos, simular escenarios de fallas complejos y generar métricas cuantitativas de riesgo y resiliencia. [1]
  • open-fmea: Es una aplicación local de código abierto basada en Django que combina una capa de dominio en Python con herramientas estructuradas para construir, revisar y mantener registros de FMEA. Incluye flujos de trabajo específicos para la evaluación de riesgos e ingeniería de calidad (como análisis de causa raíz de Ishikawa). [1]
  • pyFMEA: Un paquete pequeño de código abierto en GitHub enfocado en estructurar tablas iterativas de FMEA dividiendo funciones en fallas, causas y efectos específicos de forma programática. [1]
2. El enfoque estándar de la industria: Manipulación de Datos
Dado que un FMEA/FMECA tradicional se basa en matrices y el cálculo del NPR (Número de Prioridad de Riesgo) o índices de Criticidad, la inmensa mayoría de los analistas de fiabilidad estructuran sus flujos con el stack científico de Python: [1, 2, 3, 4]
  • pandas: Ideal para construir la matriz del FMEA. Permite automatizar operaciones matemáticas complejas (como multiplicar matrices de Severidad × Ocurrencia × Detección para obtener el NPR), filtrar modos de falla críticos o fusionar listados de componentes (BOM).
  • scipy / numpy: Útiles en FMECA para modelar distribuciones estadísticas de tasas de falla y calcular la probabilidad cuantitativa de criticidad. [1, 2, 3, 4, 5, 6]
3. Integración con Software Comercial y de Ingeniería
  • reliability: Aunque está orientada principalmente al análisis de vida de datos (Weibull, diagramas de bloques de confiabilidad), su documentación sirve como puente de mejores prácticas de codificación en Python para ingenieros de confiabilidad. [1, 2]
  • Scripts de automatización (APIs): Existen scripts en Python diseñados para interactuar directamente con suites comerciales de fiabilidad (como Relyence o Item Toolkit) para extraer datos de tasas de falla de componentes físicos y alimentar automáticamente las hojas de cálculo del FMECA. [1, 2, 3]
¿Qué tipo de análisis deseas implementar prioritariamente? Te puedo ayudar recomendándote el enfoque ideal si me comentas:
  • Si necesitas una evaluación cualitativa tradicional en tablas (con puntuaciones NPR del 1 al 10) o una simulación cuantitativa de sistemas dinámicos.
  • Si buscas integrar datos de tasas de fallas reales/frecuencias estadísticas de componentes o hardware.

Entradas recientes

ReliaWiki -- Ejemplo #2. Weibull 3P, resuelto por medio de Reliability en Google Colab.

Ejemplo original tomado de:  https://help.reliasoft.com/articles/content/hotwire/issue148/hottopics148.htm   Por ejemplo, considere el sigui...

Entradas Populares