Análisis Bayesiano en Control de Calidad

Actualización secuencial con múltiples inspecciones

Introducción

En el control de calidad es común trabajar con información incompleta. Muchas veces se reciben piezas de distintos proveedores y, a partir de inspecciones sucesivas, se intenta identificar cuál de ellos presenta mayores problemas. En este tipo de situaciones no basta con observar un solo resultado, sino que es necesario actualizar nuestras conclusiones conforme aparece nueva evidencia. El Teorema de Bayes permite realizar este proceso de manera ordenada. A partir de una creencia inicial, el modelo ajusta las probabilidades cada vez que se observa un nuevo resultado. En este ejemplo se muestra cómo aplicar Bayes de forma secuencial para evaluar la confiabilidad de tres proveedores a partir de varias inspecciones de calidad.

Función bayesiana

El código define una función que aplica el Teorema de Bayes de manera estructurada. Esta función:

Este procedimiento hace transparente el razonamiento detrás de cada actualización y evita interpretaciones subjetivas.

# ====================================================
# BAYES — Caso 2: Control de Calidad + Actualización
# Secuencial (múltiples inspecciones)
# ====================================================

bayes_tabla <- function(prior, likel, estados) {
  conjunta  <- prior * likel
  P_E       <- sum(conjunta)
  posterior <- conjunta / P_E
  df <- data.frame(
    Estado    = estados,
    Prior     = round(prior,      4),
    Likel     = round(likel,      4),
    Conjunta  = round(conjunta,   4),
    P_E       = round(P_E,        4),
    Posterior = round(posterior,  4)
  )
  list(tabla = df, posterior = posterior, P_E = P_E)
}

Escenario del problema

Se analizan tres posibles proveedores:

Antes de realizar cualquier inspección, se asignan probabilidades iniciales que representan el grado de confianza en cada proveedor. Estas probabilidades indican que el Proveedor A es el más confiable, seguido del Proveedor B, mientras que el Proveedor C tiene la menor participación.
Además, se conoce la probabilidad de que cada proveedor entregue una pieza defectuosa o conforme. Estas tasas reflejan la calidad histórica de su producción y sirven como base para evaluar los resultados de las inspecciones.

# Datos iniciales
estados  <- c("Proveedor A", "Proveedor B", "Proveedor C")
prior    <- c(0.60, 0.30, 0.10)
p_defecto <- c(0.01, 0.04, 0.12)   # P(Defecto | Proveedor)
p_conforme <- c(0.99, 0.96, 0.88) # P(Conforme | Proveedor)

Inspección 1: Pieza defectuosa

En la primera inspección se observa una pieza defectuosa. El modelo actualiza las probabilidades iniciales y muestra que la responsabilidad se desplaza hacia los proveedores con mayor tasa de defectos. Como resultado, disminuye la probabilidad del proveedor más confiable y aumentan las de aquellos con menor calidad.

# Inspección 1: pieza DEFECTUOSA
cat("=== INSPECCIÓN 1: DEFECTUOSA ===\n")
## === INSPECCIÓN 1: DEFECTUOSA ===
res1 <- bayes_tabla(prior, p_defecto, estados)
print(res1$tabla[, c("Estado","Prior","Likel","Conjunta","Posterior")])
##        Estado Prior Likel Conjunta Posterior
## 1 Proveedor A   0.6  0.01    0.006       0.2
## 2 Proveedor B   0.3  0.04    0.012       0.4
## 3 Proveedor C   0.1  0.12    0.012       0.4

Inspección 2: Nueva pieza defectuosa

La segunda inspección vuelve a mostrar un defecto. En este punto, el análisis utiliza las probabilidades obtenidas en la inspección anterior como punto de partida. Esta actualización secuencial refuerza la evidencia acumulada y acentúa el cambio en la confianza hacia los proveedores con mayor propensión a fallos. El proceso ilustra cómo Bayes no evalúa cada inspección de forma aislada, sino como parte de un conjunto coherente de información.

# ACTUALIZACIÓN SECUENCIAL:
# La posterior de hoy es el prior de mañana.
# Inspección 2: segunda pieza DEFECTUOSA
cat("\n=== INSPECCIÓN 2: DEFECTUOSA (prior actualizado) ===\n")
## 
## === INSPECCIÓN 2: DEFECTUOSA (prior actualizado) ===
res2 <- bayes_tabla(res1$posterior, p_defecto, estados)
print(res2$tabla[, c("Estado","Prior","Likel","Posterior")])
##        Estado Prior Likel Posterior
## 1 Proveedor A   0.2  0.01    0.0303
## 2 Proveedor B   0.4  0.04    0.2424
## 3 Proveedor C   0.4  0.12    0.7273

Inspección 3: Pieza conforme

En la tercera inspección, la pieza resulta conforme. Este nuevo dato introduce un cambio importante en el análisis, ya que favorece a los proveedores con mayor probabilidad de producir piezas sin defectos. El modelo ajusta nuevamente las probabilidades, equilibrando la información negativa previa con esta evidencia positiva.

# Inspección 3: pieza CONFORME
cat("\n=== INSPECCIÓN 3: CONFORME ===\n")
## 
## === INSPECCIÓN 3: CONFORME ===
res3 <- bayes_tabla(res2$posterior, p_conforme, estados)
print(res3$tabla[, c("Estado","Prior","Likel","Posterior")])
##        Estado  Prior Likel Posterior
## 1 Proveedor A 0.0303  0.99    0.0332
## 2 Proveedor B 0.2424  0.96    0.2578
## 3 Proveedor C 0.7273  0.88    0.7090

Visualización de la evolución

El gráfico final muestra de manera clara cómo evolucionan las probabilidades asociadas a cada proveedor a lo largo del proceso. Cada línea representa a un proveedor y permite observar cómo la confianza inicial se modifica tras cada inspección.
Esta visualización facilita la interpretación del análisis y muestra de forma intuitiva que las decisiones se vuelven más sólidas cuando se acumula información.

# Visualización de la evolución de posteriors
library(ggplot2); library(tidyr)
evolución <- data.frame(
  Inspección = c("Prior", "Tras Def1", "Tras Def2", "Tras Conf"),
  A = c(prior[1], res1$posterior[1], res2$posterior[1], res3$posterior[1]),
  B = c(prior[2], res1$posterior[2], res2$posterior[2], res3$posterior[2]),
  C = c(prior[3], res1$posterior[3], res2$posterior[3], res3$posterior[3])
)
df_long <- pivot_longer(evolución, -Inspección,
                         names_to = "Proveedor", values_to = "Probabilidad")
df_long$Inspección <- factor(df_long$Inspección,
                               levels = c("Prior","Tras Def1","Tras Def2","Tras Conf"))
ggplot(df_long, aes(x = Inspección, y = Probabilidad, 
                     color = Proveedor, group = Proveedor)) +
  geom_line(linewidth = 1.2) +
  geom_point(size = 3.5) +
  geom_label(aes(label = paste0(round(Probabilidad * 100, 1), "%")),
             size = 3, show.legend = FALSE) +
  scale_color_manual(values = c(A="#3a7fbd", B="#d97706", C="#b0305a")) +
  scale_y_continuous(labels = function(x) paste0(round(x*100,0),"%"), limits=c(0,1)) +
  labs(title = "Actualización Secuencial Bayesiana — Control de Calidad",
       subtitle = "La posterior de cada inspección es el prior de la siguiente",
       y = "P(Proveedor | Evidencia acumulada)") +
  theme_minimal()

Conclusión

Este ejemplo demuestra cómo el Teorema de Bayes puede aplicarse de manera práctica en el control de calidad. A través de inspecciones sucesivas, es posible actualizar de forma sistemática la confianza en cada proveedor, sin depender de suposiciones fijas o evaluaciones subjetivas.
La actualización secuencial permite que cada nuevo dato influya en la decisión final, manteniendo siempre consistencia con la información previa. De esta forma, Bayes se convierte en una herramienta poderosa para apoyar decisiones basadas en evidencia, especialmente en contextos donde la incertidumbre es inevitable y la información se obtiene de manera gradual.