""
Mostrando las entradas con la etiqueta reliasoft. Mostrar todas las entradas
Mostrando las entradas con la etiqueta reliasoft. Mostrar todas las entradas

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


Entradas recientes

Prueba este código en Python:

Entradas Populares