- Introducción a cómo implementar control estadístico de procesos (SPC) en Python para identificar la variación temporal de la calidad del producto y los momentos de intervención
- Uso de
pandas, plotnine y scipy para procesamiento de datos, visualización y cálculos estadísticos
- Con datos de aguas termales de la prefectura de Kagoshima, Japón, se analizan temperatura, pH y contenido de azufre como indicadores de control de calidad
- Uso de estadísticas de subgrupos y gráficos de control (X-bar, S y rango móvil) para evaluar la estabilidad del proceso y detectar valores atípicos
- Se presenta un procedimiento para diagnosticar visualmente el estado del proceso y apoyar decisiones de mejora basadas en datos
Resumen del control estadístico de procesos con Python
- El control estadístico de procesos (SPC) es un enfoque estadístico para medir la variación de la calidad del producto y decidir cuándo intervenir
- En Python, se usa
plotnine para visualización, pandas para manipulación de datos y scipy para cálculos estadísticos
- En la práctica, se aplican los conceptos de SPC mediante un caso de control de calidad de aguas termales
- Se establecen como principales indicadores de calidad la temperatura, el pH y el contenido de azufre de las aguas termales
Paquetes y funciones definidas por el usuario
- Paquetes necesarios:
pandas, plotnine, scipy
- Las funciones definidas por el usuario se importan desde el directorio
functions/ del repositorio de GitHub
functions_distributions.py: funciones de confiabilidad y distribuciones
functions_process_control.py: funciones para control de procesos
- Se agrega el directorio de funciones a la ruta de Python con
sys.path.append('functions') y luego se hace import
Caso: control de calidad de aguas termales en Japón
- Los onsen de Japón son un recurso turístico clave para la economía regional, y la temperatura, el pH y el contenido de azufre son criterios de calidad
- Criterio de temperatura: Extra Hot(>42°C), Hot(41~34°C), Warm(33~25°C)
- Criterio de pH: Acidic(pH<3) ~ Alkaline(pH>8.5)
- Criterio de azufre: se clasifica como aguas termales sulfurosas cuando es de 1mg/kg o más
- Se analizan variaciones de calidad con datos de aguas termales de la prefectura de Kagoshima muestreados 20 veces al mes durante 15 meses
Carga de datos y estadísticas básicas
- Se carga el archivo
onsen.csv para revisar los datos de temperatura, pH y contenido de azufre
- Con la función
describe() se calculan la media (mean) y la desviación estándar (sd)
- Resultado de ejemplo: media de 44.85°C, desviación estándar de 1.99°C
- Estos valores estadísticos son indicadores básicos para entender el centro y la variabilidad del proceso
Visualización general del proceso
- Con
plotnine se visualiza la distribución de temperatura en el tiempo mediante diagramas de caja (boxplot) y distribución de puntos
- La línea central representa la media total y permite comparar la distribución en cada momento
- Un histograma muestra la distribución total de la temperatura para verificar el centro del proceso y el rango de variación
Cálculo de estadísticas de subgrupos
- Agrupando cada momento (time) como subgrupo, se calculan la media (xbar), el rango (r) y la desviación estándar (sd)
- Ejemplo: media del primer grupo de 44.635°C, rango de 4.2°C
- Se calculan σₛ (desviación estándar dentro del subgrupo) y el error estándar (se) para establecer límites superior e inferior (±3σ)
- Con ello se evalúa la estabilidad temporal del proceso
Estadísticas del proceso completo
- Integrando todos los grupos, se calculan la media total (xbbar), el rango promedio (rbar) y la desviación estándar promedio (sdbar)
- Ejemplo: xbbar 44.85, rbar 7.26, sdbar 1.94
- Comparándolo con σₜ (desviación estándar total), se puede identificar la variabilidad dentro y entre procesos
Gráficos de control (X-bar y S)
- Gráfico X-bar: muestra la media de cada subgrupo sobre el eje temporal
- Línea central: media total; límites superior e inferior: ±3σ
- El área sombreada representa el rango de límites de control
- Si se superan los límites de control o aparecen patrones no aleatorios, existe posibilidad de anomalías en el proceso
Revisión de aprendizaje: visualización del proceso de pH
- Con la misma función
ggprocess() se genera un gráfico general del proceso para los datos de pH
- Se comparan visualmente la línea de la media y la distribución en cada momento
Gráfico de rango móvil (n=1)
- Cuando solo hay mediciones individuales, se usa el rango móvil (Moving Range)
- Se calcula la diferencia absoluta entre mediciones consecutivas para estimar la variabilidad
- Se calculan el rango móvil promedio (
mrbar), el límite superior (upper) y el límite inferior (lower=0)
- El gráfico de rango móvil es útil para monitorear la variación del proceso con base en datos individuales
Conclusión
- Con Python se generan una vista general del proceso, estadísticas de subgrupos y gráficos de rango móvil
- Con herramientas de SPC es posible diagnosticar visualmente la estabilidad y la presencia de anomalías del proceso
- Este tipo de análisis puede aprovecharse para la mejora de la calidad y la toma de decisiones basada en datos
1 comentarios
Opiniones en Hacker News
Me recordó a un proyecto anterior
En una empresa FANG, reemplazamos con éxito miles de detectores de anomalías de series temporales basados en deep learning por modelos de control estadístico de procesos (no paramétricos y semiparamétricos)
El nuevo modelo tenía entre 3 y 4 órdenes de magnitud menos parámetros de entrenamiento, y era lo bastante simple como para que un equipo de 3 o 4 personas pudiera administrar miles de flujos
Los modelos de deep learning eran opacos para depurar e interpretar, así que eran demasiado difíciles de mantener
Si tienes un equipo pequeño, sigo recomendando fuertemente un enfoque basado en estadística
Eso sí, por razones políticas, quizá no sea una buena decisión para tu carrera. A quienes hicieron apuestas enormes no les gusta que aparezca evidencia en contra
Por eso soy escéptico con el actual ambiente de hype por la IA
En muchos casos, los métodos clásicos existentes son mucho más estables y eficientes, así que no entiendo por qué las empresas eligen a propósito métodos complejos e inestables
La empresa presumía modelos de ML muy vistosos para conferencias, pero los operadores reales se quejaban mucho por la falta de precisión e interpretabilidad
Así que reescribí el código basándome en las reglas matemáticas simples que los operadores usaban de verdad, y obtuvimos resultados mucho mejores
Funciona bien para OCR, pero es menos efectivo para tareas de clasificación
Muchas veces se obtienen mejores resultados si te enfocas en buena iluminación y en técnicas tradicionales de visión por computadora
También me identifico con el problema político de adoptar tecnología. Por eso suelo proponer un enfoque híbrido que combine deep learning con visión tradicional
Supongo que la mayoría de los parámetros serán inestables o estarán correlacionados entre sí
Hace tiempo obtuve la certificación Lean Six Sigma Green Belt e hice un proyecto de control estadístico de procesos con Minitab para procesos de back office en banca de inversión
Hoy parece que nadie se acuerda de Minitab. Todos usan Python
Todavía se sigue actualizando y también tiene interfaz para Python → paquete mtbpy
Las herramientas open source solo llegaban hasta x-bar/S/R, y les faltaban funciones avanzadas como análisis multivariado
Hace unos años escribí una guía práctica para principiantes de SPC
Puede servir de referencia → Statistical Process Control: A Practitioner’s Guide
En conjuntos de datos pequeños, como los datos clínicos, la estadística clásica sigue siendo fundamental
Es difícil recolectar y alinear metadatos, y en estudios de enfermedades raras muchas veces incluso el machine learning o la regresión resultan complicados
Los datos del mundo real nunca están limpios
La mayor parte del tiempo se va en gestión de calidad de datos
Los valores atípicos pueden deberse a errores de medición o a cambios en el proceso, y para entenderlos hace falta intuición sobre el proceso mismo
Por eso son importantes las herramientas maduras que permiten visualización y exploración rápidas
Hacer directamente en código gráficos SPC de Cpk es ineficiente
SPC es una herramienta realmente excelente
Es mucho más simple y funciona mejor que otros conjuntos de herramientas más complejos
Hay muchos errores tipográficos
Me gusta muchísimo el diseño y la atmósfera de la página