Análisis de decisiones con Bayes y valor de la información

Caso TechParts S.A.

Introducción

Cuando una empresa debe tomar decisiones importantes, muchas veces no conoce con certeza qué ocurrirá en el futuro. Sin embargo, sí puede usar la información disponible para reducir la incertidumbre y elegir la mejor alternativa posible. En estos casos, herramientas como el Teorema de Bayes y el análisis del valor de la información ayudan a tomar decisiones mejor fundamentadas.
En este informe se analiza una situación de la empresa TechParts S.A., que evalúa distintas opciones de inversión frente a varios escenarios del mercado. El objetivo es comparar qué decisión conviene más con y sin información adicional, y cuánto valdría pagar por obtener esa información.

Instalación de paquetes

# ====================================================
# BAYES + VEII — TechParts S.A. (Análisis Completo)
# ====================================================
library(ggplot2); library(dplyr); library(tidyr)
## 
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
## 
##     filter, lag
## The following objects are masked from 'package:base':
## 
##     intersect, setdiff, setequal, union

Creación de tabla pagos

Primero, el código crea una tabla de pagos. Esta tabla muestra cuánto dinero ganaría o perdería la empresa si elige una determinada alternativa (construcción grande, mediana, pequeña o no construir) y ocurre un tipo de mercado específico (bajo, medio o alto).
Esta tabla representa las consecuencias económicas de cada decisión según el escenario que se presente.

# Tabla de pagos
pagos <- matrix(c(
  -200000, 100000, 500000,
   -50000, 200000, 300000,
   100000, 150000, 180000,
    50000,  50000,  50000
), nrow=4, byrow=TRUE)
rownames(pagos) <- c("Grande","Mediana","Pequeña","NoConstr")
colnames(pagos) <- c("Baja","Media","Alta")

Probabilidades iniciales y nueva información

Luego, se definen las probabilidades previas, que indican qué tan probable es cada escenario del mercado antes de contar con información adicional. También se incluyen las probabilidades de recibir una señal favorable o desfavorable desde una consultora externa, dependiendo del estado real del mercado.
Estas probabilidades permiten modelar una fuente de información que no es perfecta, pero que puede ayudar a tomar mejores decisiones.

# Probabilidades previas y verosimilitudes
prior     <- c(0.20, 0.45, 0.35)
likel_F   <- c(0.10, 0.40, 0.90)  # P(Fav | S)
likel_D   <- 1 - likel_F            # P(Desf | S)

Aplicación del Teorema de Bayes

El código utiliza el Teorema de Bayes para actualizar las probabilidades del mercado cuando se recibe información de la consultora.

De esta manera, la empresa puede adaptar sus decisiones según el tipo de información que reciba.

# Función Bayesiana
actualizar <- function(prior, likel) {
  conj <- prior * likel
  list(post = conj/sum(conj), P_E = sum(conj))
}

# Actualización
bayes_F <- actualizar(prior, likel_F)
bayes_D <- actualizar(prior, likel_D)

cat("Posterior si FAVORABLE:    ", round(bayes_F$post, 3), "\n")
## Posterior si FAVORABLE:     0.039 0.35 0.612
cat("Posterior si DESFAVORABLE: ", round(bayes_D$post, 3), "\n")
## Posterior si DESFAVORABLE:  0.371 0.557 0.072

Cálculo del Valor Monetario Esperado (VME)

Después, se calcula el Valor Monetario Esperado para cada alternativa. Este valor representa el promedio de ganancia o pérdida que se espera obtener al elegir una decisión, considerando las probabilidades de cada escenario.
El código compara:

También se obtiene el valor esperado total cuando se utiliza información imperfecta.

# Función de mejor VME
mejor_vme <- function(prob) {
  vme <- pagos %*% prob
  idx <- which.max(vme)
  list(alternativa = rownames(pagos)[idx], valor = vme[idx], todos = vme)
}

# VME sin información
opt_sin_info  <- mejor_vme(prior)
# VME con info imperfecta
opt_fav       <- mejor_vme(bayes_F$post)
opt_desf      <- mejor_vme(bayes_D$post)

vme_con_info <- bayes_F$P_E * opt_fav$valor +
               bayes_D$P_E * opt_desf$valor

#Valor de la información
El análisis no termina ahí. El código también calcula:

Este último valor indica cuánto dinero como máximo convendría pagar por la información, ya que pagar más haría que la decisión deje de ser conveniente.

# VECP y VEIP
vecp <- sum(apply(pagos, 2, max) * prior)
veip <- vecp - opt_sin_info$valor
veii <- vme_con_info - opt_sin_info$valor

cat("\n===== RESUMEN DECISIONAL =====\n")
## 
## ===== RESUMEN DECISIONAL =====
cat(sprintf("Sin info → %s: $%s\n",
            opt_sin_info$alternativa, format(round(opt_sin_info$valor), big.mark=",")))
## Sin info → Mediana: $185,000
cat(sprintf("Si Fav   → %s: $%s\n",
            opt_fav$alternativa, format(round(opt_fav$valor), big.mark=",")))
## Si Fav   → Grande: $333,010
cat(sprintf("Si Desf  → %s: $%s\n",
            opt_desf$alternativa, format(round(opt_desf$valor), big.mark=",")))
## Si Desf  → Pequeña: $133,608
cat(sprintf("VME con info imperfecta:  $%s\n", format(round(vme_con_info), big.mark=",")))
## VME con info imperfecta:  $236,300
cat(sprintf("VECP:  $%s\n", format(round(vecp), big.mark=",")))
## VECP:  $285,000
cat(sprintf("VEIP:  $%s\n", format(round(veip), big.mark=",")))
## VEIP:  $1e+05
cat(sprintf("VEII:  $%s  (max a pagar por la consultora)\n",
            format(round(veii), big.mark=",")))
## VEII:  $51,300  (max a pagar por la consultora)

Gráfico comparativo

Finalmente, el código genera un gráfico que compara visualmente los valores monetarios esperados en cada situación: sin información, con información favorable, con información desfavorable, con información imperfecta y con información perfecta.
El gráfico facilita la comprensión y muestra claramente el beneficio de contar con más información antes de decidir.

# Gráfico: comparación VME bajo distintos escenarios
df_vme <- data.frame(
  Escenario = c("Sin info\n(A₂ Mediana)",
                "Si Favorable\n(A₁ Grande)",
                "Si Desfav.\n(A₃ Pequeña)",
                "Con info\n(esperado)",
                "Cert. Perfecta\n(VECP)"),
  VME = c(opt_sin_info$valor, opt_fav$valor,
           opt_desf$valor, vme_con_info, vecp),
  Tipo = c("Base","Info","Info","Esperado","Perfecto")
)
df_vme$Escenario <- factor(df_vme$Escenario, levels=df_vme$Escenario)

ggplot(df_vme, aes(x=Escenario, y=VME/1000, fill=Tipo)) +
  geom_col(width=0.6, show.legend=FALSE) +
  geom_text(aes(label=paste0("$",round(VME/1000,0),"k")),
            vjust=-0.4, size=3.8, fontface="bold") +
  scale_fill_manual(values=c(Base="#3a7fbd",Info="#d97706",
                              Esperado="#0f7a52",Perfecto="#b0305a")) +
  labs(title="Comparación de VME por Nivel de Información",
       subtitle="TechParts S.A. — VEII = VME(con info) − VME(sin info)",
       x=NULL, y="VME (miles de $)") +
  theme_minimal() +
  annotate("segment", x=1, xend=4,
           y=opt_sin_info$valor/1000, yend=opt_sin_info$valor/1000,
           linetype="dashed", color="#3a7fbd", linewidth=0.7) +
  annotate("label", x=2.5, y=opt_sin_info$valor/1000,
           label=paste0("VEII = $",round(veii/1000,1),"k"),
           fill="#edf2f7", color="#3a7fbd", size=3.5)

Conclusión

Este análisis demuestra que contar con información adicional puede mejorar de forma significativa la calidad de las decisiones empresariales, incluso cuando dicha información no es perfecta. El Teorema de Bayes permite ajustar las probabilidades de manera lógica y el Valor Monetario Esperado traduce esas probabilidades en resultados económicos claros. Además, el cálculo del valor de la información ayuda a determinar cuánto conviene invertir para reducir la incertidumbre. En conjunto, estas herramientas permiten a la empresa tomar decisiones más informadas, racionales y alineadas con sus objetivos económicos.