""

lunes, 11 de mayo de 2026

Articulo: "Ingeniería de confiabilidad utilizando Python"

 Fuente: https://accendoreliability.com/reliability-engineering-using-python/

Ingeniería de confiabilidad utilizando Python

Las herramientas de software son un pilar fundamental de la ingeniería de confiabilidad moderna, ya que permiten a los profesionales realizar sus análisis sin enredarse en los detalles de los procesos matemáticos subyacentes. Existen numerosas herramientas de software disponibles para la ingeniería de confiabilidad, algunas diseñadas específicamente para esta aplicación, mientras que otras son herramientas estadísticas más generales que pueden adaptarse a las necesidades de los ingenieros de confiabilidad. 

Un rasgo común de estas herramientas es su interfaz gráfica de usuario (GUI). La GUI requiere conocimientos básicos para su funcionamiento, pero con solo pulsar unos pocos botones, la tarea deseada se puede realizar con relativamente poco esfuerzo mental. Es precisamente la facilidad de uso de la GUI lo que atrae a los ingenieros de confiabilidad a elegir estas aplicaciones como sus herramientas preferidas para realizar análisis de ingeniería de confiabilidad.

Los lenguajes de programación como Python, R y Matlab pueden resultar intimidantes para quienes no estén familiarizados con el lenguaje en sí o con la programación en general. Esta falta de familiaridad con la programación puede suponer una barrera de entrada a un mundo de análisis que supera con creces las capacidades de cualquier herramienta de software con interfaz gráfica de usuario (GUI). Todo lo que se puede hacer con una herramienta GUI se puede hacer con un lenguaje de programación. Esto debería ser obvio, ya que todas las herramientas GUI se basan en un lenguaje de programación, pero lo que no resulta tan evidente son las limitaciones de estas herramientas debido a su programación base. Los lenguajes de programación no presentan tales limitaciones, ya que sus capacidades solo están limitadas por la habilidad de programación del usuario.

Lo que muchos usuarios desconocen son las bibliotecas de programación, que ofrecen un punto intermedio entre el software con interfaz gráfica de usuario (GUI) y el código puro. Estas bibliotecas proporcionan una colección de funciones que aceptan entradas y generan salidas, generalmente ejecutadas con una sola línea de código. Los usuarios sin experiencia en programación no necesitan aprender mucho para utilizarlas, sobre todo si están bien documentadas con ejemplos y documentación de la interfaz de programación de aplicaciones (API). Si nunca has utilizado lenguajes de programación o no estás familiarizado con ellos, te recomendamos probar los ejemplos de este artículo para comprobar lo sencillo que puede ser programar con el uso de bibliotecas. Este artículo es el primero de una serie que presenta a los usuarios una de estas bibliotecas en Python llamada reliability .

Pero, ¿por qué molestarse?, te preguntarás. Recuerda que uno desconoce lo que desconoce. Antes de descartar la programación por considerarla demasiado complicada, tómate el tiempo necesario para aprender sobre sus ventajas frente a las aplicaciones con interfaz gráfica. Pronto verás por qué la programación es más accesible que nunca y cómo puede permitirte, como ingeniero de confiabilidad, liberarte de las limitaciones del software preprogramado. La ingeniería de confiabilidad también tiene cierta relación con la ciencia de datos y el aprendizaje automático. Los lenguajes de programación son herramientas extremadamente útiles para los científicos de datos y, como verás en esta serie, también pueden ser de gran utilidad para los ingenieros de confiabilidad.

Antes de comenzar, veamos algunas ventajas de usar Python para la ingeniería de confiabilidad en comparación con otros lenguajes de programación y herramientas de software basadas en interfaz gráfica de usuario (GUI):

  • Gratis
  • Código abierto (puedes ver cómo funciona el código y modificarlo si quieres).
  • Versátil (extremadamente flexible en cuanto a las funciones que puede desempeñar).
  • Programable (fácil de automatizar los análisis si se realizan con regularidad).
  • Gran comunidad en línea dispuesta a ayudar
  • Amplia colección de bibliotecas
  • Ciclo de desarrollo rápido para introducir nuevas funcionalidades.
  • Conjunto de habilidades transversales con aplicaciones en ciencia de datos, aprendizaje automático, simulación , etc.
  • Fácil de aprender en comparación con la mayoría de los demás lenguajes de programación.
  • Habilidades muy demandadas

Primeros pasos con Python

Para instalar Python (si aún no está instalado), necesitarás un ordenador con permisos de administrador. Existen numerosos tutoriales en línea que te guiarán en la instalación. Lo más importante es que necesitas Python (el lenguaje) y un Entorno de Desarrollo Interactivo (IDE). El IDE te permite visualizar y ejecutar el código con mucha más facilidad. Sin el IDE, solo podrías interactuar con Python mediante la línea de comandos, lo cual resulta poco práctico. Recomiendo encarecidamente PyCharm como IDE.

Una vez que tengas Python instalado, tendrás que instalar reliability . La forma más sencilla de hacerlo es abrir tu terminal/línea de comandos y escribir:

En PPI nos gusta trabajar con Google Colab y en este entorno la instrucción para instalar la librería es:

>>!pip install reliability

A partir de aquí, se presupone que tienes instalada la funcionalidad de confiabilidad y que puedes ejecutar código.

Primeros pasos con la biblioteca de confiabilidad de Python

Comencemos con el ejemplo más común para el que probablemente usarías un software: ajustar una distribución de Weibull a ciertos tiempos de falla .

>>from reliability.Fitters import Fit_Weibull_2P >>Fit_Weibull_2P(failures=[5,7,12,15])

>>>

Results from Fit_Weibull_2P (95% CI): Analysis method: Maximum Likelihood Estimation (MLE) Failures / Right censored: 4/0 (0% right censored) Parameter Point Estimate Standard Error Lower CI Upper CI Alpha 11.0171 2.11865 7.55747 16.0605 Beta 2.74572 1.11779 1.23632 6.09791 Goodness of fit Value Log-likelihood -11.0406 AICc 38.0812 BIC 24.8538 AD 2.96746

En este ejemplo se puede observar que la biblioteca de confiabilidad se encarga de todo el trabajo pesado y que solo se requiere un nivel básico de conocimiento para llamar a la función, estructurar los datos en una lista y pasar la lista al argumento correcto dentro de la función.

Aunque la mayoría de las bibliotecas de Python no tienen interfaz gráfica, la biblioteca de gráficos matplotlib sí la tiene, lo que permite interactuar con los gráficos para hacer zoom, desplazarse, guardar la figura, etc. Muchas de las funciones de reliability generan un gráfico. Dependiendo de si se utiliza un cuaderno Jupyter o un IDE convencional como PyCharm , el gráfico puede mostrarse automáticamente o puede ser necesario llamarlo manualmente. Repitamos el ejemplo anterior, pero esta vez con más datos, algunos de los cuales están censurados por la derecha.

>>from reliability.Fitters import Fit_Weibull_2P >>import matplotlib.pyplot as plt >>failures = [37, 32, 41, 18, 41, 24, 25, 27, 62, 42, 68, 29, 22, 49, 14, 37, 31, 23, 15, 16, 12] >>right_censored = [28, 1, 4, 66, 11, 35, 24, 3, 30] >>Fit_Weibull_2P(failures = failures,right_censored=right_censored, print_results=False) >>plt.show()

El resultado de este bloque de código es:

Para obtener el gráfico, tuvimos que importar la biblioteca de gráficos "matplotlib" y mostrarlo con plt.show(). También desactivamos la impresión de los resultados. Muchas funciones de Python funcionan con el operador punto, por lo que verás con frecuencia comandos como "from AB import C" u operaciones como "AB()". Si aún no te has familiarizado con la sintaxis de Python, pronto lo harás.

Veamos esa gráfica de una manera un poco diferente. Si quisiéramos ver la función de supervivencia (a menudo llamada “ función de confiabilidad ” R(t)), haríamos lo siguiente:

>>from reliability.Fitters import Fit_Weibull_2P >>import matplotlib.pyplot as plt >>from reliability.Probability_plotting import plot_points >>failures = [37, 32, 41, 18, 41, 24, 25, 27, 62, 42, 68, 29, 22, 49, 14, 37, 31, 23, 15, 16, 12] >>right_censored = [28, 1, 4, 66, 11, 35, 24, 3, 30] >>results = Fit_Weibull_2P(failures = failures,right_censored=right_censored, print_results=>>>False,show_probability_plot=False) >>results.distribution.SF() >>plot_points(failures=failures,right_censored=right_censored,func='SF') >>plt.show()


Las únicas diferencias aquí son que desactivamos el gráfico de probabilidad, almacenamos los resultados del ajustador en una variable llamada "resultados", llamamos a la función de supervivencia a partir del objeto de distribución que se genera con los resultados y llamamos a una función llamada plot_points para generar el diagrama de dispersión de los fallos. A primera vista, esto puede parecer complicado, pero en realidad solo son unos pocos pasos adicionales con respecto al ejemplo anterior.

Trabajar con objetos en Python

Un objeto es una estructura de datos que puede tener ciertas propiedades y contener subfunciones. Dentro de la confiabilidad, podemos crear un objeto de distribución de Weibull y realizar rápidamente algunas tareas comunes utilizando dicho objeto.

>>from reliability.Distributions import Weibull_Distribution >>import matplotlib.pyplot as plt >>dist = Weibull_Distribution(alpha=5,beta=2) >>print("The mean is:", dist.mean) >>dist.PDF() >>plt.show()

Esto produce el siguiente resultado:

The mean is: 4.4311346272637895

En el bloque de código anterior, creamos un objeto de distribución de Weibull al que asignamos la variable "dist". Para crear la distribución de Weibull, solo necesitamos especificar dos parámetros: alfa (el parámetro de escala) y beta (el parámetro de forma). El objeto de distribución calcula automáticamente varias propiedades, como la media, la mediana, la moda, la varianza, la asimetría, la curtosis, etc. Estas propiedades se pueden obtener mediante el operador punto, como se muestra con "dist.mean".

El objeto de distribución cuenta con varias funciones internas. Una de ellas es la función PDF, que genera un gráfico. Esta función también devuelve los valores Y del gráfico, aunque el ejemplo anterior no los muestra. Otras funciones importantes dentro de cada objeto de distribución incluyen CDF , SF, HF, CHF, quantile, random_samples y muchas más. Consulte la documentación de la API para obtener una lista completa.

Algo más avanzado

Hasta ahora hemos visto cómo Python puede usarse para replicar algunas de las funcionalidades que probablemente haya visto en programas con interfaz gráfica de usuario (GUI). Veamos ahora un ejemplo más complejo donde la naturaleza programable de Python lo convierte en la herramienta ideal para este tipo de análisis. 

En el siguiente ejemplo, generaremos datos aleatorios a partir de una distribución, ajustaremos las 12 distribuciones a los datos y tomaremos la mejor. Los gráficos resultantes del ajuste están desactivados para este ejemplo. Luego, usaremos esa distribución que mejor se ajusta como nuestra distribución de resistencia. Repetiremos el proceso con otro conjunto de datos para obtener nuestra distribución de resistencia. A continuación, realizaremos un análisis de interferencia tensión-resistencia para determinar la probabilidad de falla. La salida del siguiente bloque de código proporciona algunos textos y el gráfico de interferencia tensión-resistencia. Si bien es posible realizar esto en un programa con GUI, sería mucho más laborioso y difícil lograr que la información fluya entre las funciones sin tener que transcribirla manualmente.

>>from reliability.Distributions import Gamma_Distribution, Lognormal_Distribution >>from reliability.Fitters import Fit_Everything >>from reliability.Other_functions import stress_strength >>import matplotlib.pyplot as plt >>strength_data = Gamma_Distribution(alpha=50, beta=8).random_samples(20, seed=1) >>stress_data = Lognormal_Distribution(mu=5,sigma=0.8) .random_samples(30, seed=2) >>strength_fit = Fit_Everything(failures = strength_data, show_best_distribution_probability_plot=False,show_probability_plot=False, show_PP_plot=False, show_histogram_plot=False) >>stress_fit = Fit_Everything(failures = stress_data, show_best_distribution_probability_plot=False,show_probability_plot=False, show_PP_plot=False, show_histogram_plot=False) >>stress_strength(stress = stress_fit.best_distribution, strength=strength_fit.best_distribution) >>plt.show()

El bloque de código anterior produce la siguiente salida:

>>>

Results from Fit_Everything: Analysis method: MLE Failures / Right censored: 20/0 (0% right censored) Distribution Alpha Beta Gamma Mu Sigma Lambda Log-likelihood AICc BIC AD Lognormal_2P 5.88324 0.387089 -127.061 258.828 260.114 1.41411 Gamma_2P 57.1622 6.77347 -127.406 259.517 260.803 1.53574 Loglogistic_2P 351.37 4.33532 -127.754 260.213 261.499 1.47015 Weibull_3P 262.946 1.56249 150.803 -126.711 260.921 262.408 1.35448 Exponential_2P 163.008 0.00446074 -128.249 261.203 262.489 2.14135 Gamma_3P 98.6681 2.56781 133.825 -126.787 261.073 262.561 1.32766 Weibull_2P 437.325 2.73022 -128.316 261.337 262.623 1.62373 Lognormal_3P 51.9464 5.71166 0.456422 -126.925 261.35 262.837 1.34482 Loglogistic_3P 227.688 2.85063 116.652 -127.294 262.089 263.576 1.26601 Normal_2P 387.186 153.338 -129.032 262.769 264.055 1.82908 Gumbel_2P 468.019 157.61 -131.46 267.625 268.911 1.95383 Exponential_1P 0.00286052 -139.286 280.794 281.568 5.0292 Results from Fit_Everything: Analysis method: MLE Failures / Right censored: 30/0 (0% right censored) Distribution Alpha Beta Gamma Mu Sigma Lambda Log-likelihood AICc BIC AD Loglogistic_2P 108.276 2.3906 -176.01 356.464 358.821 0.774241 Lognormal_2P 4.73531 0.760156 -176.398 357.241 359.599 0.83567 Gamma_3P 202.783 0.659162 26.8708 -174.816 356.556 359.836 1.72922 Loglogistic_3P 83.8322 1.82108 21.2611 -175.068 357.059 360.34 0.596265 Exponential_2P 26.8708 0.00748136 -176.86 358.165 360.523 1.24987 Weibull_3P 118.706 0.79152 26.8708 -175.273 357.469 360.749 1.57376 Lognormal_3P 17.6694 4.49486 0.938032 -175.495 357.913 361.193 0.688376 Gamma_2P 100.155 1.6029 -180.597 365.638 367.996 1.59745 Exponential_1P 0.00622908 -182.356 366.854 368.113 2.06219 Weibull_2P 170.586 1.1525 -181.767 367.979 370.337 1.77386 Normal_2P 160.537 177.812 -197.99 400.425 402.783 4.12004 Gumbel_2P 269.578 284.701 -211.034 426.512 428.87 5.70553 Stress - Strength Interference Stress Distribution: Loglogistic Distribution (α=108.276,β=2.3906) Strength Distribution: Lognormal Distribution (μ=5.8832,σ=0.3871) Probability of failure (stress > strength): 8.93989 %


El ejemplo anterior muestra cómo los datos pueden fluir entre funciones con mucha más facilidad que la que suele ser posible con una herramienta basada en interfaz gráfica de usuario (GUI). Además, con la adición de una importación de datos para reemplazar el muestreo aleatorio, este código podría formar parte de un proceso automatizado que una planta de fabricación ejecuta a diario como parte de sus procesos de control de calidad.

Conclusión

La biblioteca `reliability` de Python cierra la brecha entre los programas tradicionales con interfaz gráfica y el código puro. Las funciones de la biblioteca proporcionan a los ingenieros de confiabilidad un conjunto de herramientas que pueden realizar análisis equivalentes a la mayoría de las herramientas de software con interfaz gráfica. Si nunca has programado o no sabías que existía una herramienta así en Python, te animo a que la pruebes. Al principio requiere algo de aprendizaje, pero la naturaleza programable de los lenguajes de programación te permite liberarte de las limitaciones del software con código fijo, automatizar análisis comunes y aprovechar el flujo de datos entre funciones. ¡Nada mal para ser algo totalmente gratuito!

Este artículo es el primero de una serie sobre fiabilidad que explicará conceptos clave y le proporcionará el código para repetir los análisis. Esta serie no pretende enseñarle Python ni ser una guía práctica sobre el uso de la fiabilidad (para ello, consulte la documentación en línea ). Su objetivo es utilizar la fiabilidad como herramienta para realizar análisis que quizás no haya visto antes debido a la dificultad de llevarlos a cabo con software con interfaz gráfica.

NOTA de PPI, pythonparaingenieros@gmail.com:

Para profundizar en el aprendizaje de Python los invito a visitar el sitio de google:

https://sites.google.com/view/aprendepythonportucuenta

En el cual encontraran recursos gratuitos para el aprendizaje de este lenguaje de programación.


No hay comentarios.:

Publicar un comentario

Entradas recientes

Articulo: "Ingeniería de confiabilidad utilizando Python"

 Fuente:  https://accendoreliability.com/reliability-engineering-using-python/ Ingeniería de confiabilidad utilizando Python Las herramienta...

Entradas Populares