Árbol Bayesiano de Decisión — TechParts S.A.

Introducción

Cuando una empresa debe tomar decisiones importantes sin conocer con certeza cómo será el futuro, es fundamental apoyarse en métodos que permitan evaluar riesgos y beneficios de manera estructurada. En este ejemplo se analiza el caso de TechParts S.A., una empresa que debe decidir cuál estrategia seguir dependiendo del comportamiento futuro del mercado. Para resolver este problema se utiliza un árbol de decisión bayesiano de dos etapas, que combina:

Objetivo

Metodología

1. Carga de librerías

El análisis comienza cargando las librerías necesarias para manejar los datos y generar visualizaciones. Estas herramientas permiten organizar la información y presentar los resultados de manera clara.

# ====================================================
# ÁRBOL BAYESIANO COMPLETO — TechParts S.A.
# Bayes integrado en árbol de decisión de 2 etapas
# ====================================================
library(ggplot2); library(tidyr); library(dplyr)

2. Definición de los datos del problema

A continuación, se definen los datos del problema. Se construye una matriz de pagos que representa las ganancias o pérdidas económicas asociadas a cada alternativa de la empresa bajo distintos escenarios de mercado. Cada fila corresponde a una estrategia (por ejemplo, apuntar a un mercado grande, mediano o pequeño).

# ---- Datos ----
pagos <- matrix(c(
  -200000, 100000, 500000,
   -50000, 200000, 300000,
   100000, 150000, 180000
), nrow=3, byrow=TRUE)
rownames(pagos) <- c("Grande","Mediana","Pequeña")

Luego se establecen las probabilidades iniciales (previas) de cada escenario de mercado y las probabilidades de que una consultora entregue una señal favorable o desfavorable dependiendo del estado real del mercado.

3. Probabilidades iniciales (sin información extra)

prior   <- c(0.20, 0.45, 0.35)

4. Calidad de la información (consultora)

Aquí se modela el comportamiento de una consultora que emite un informe:

  • likel_F: probabilidad de que el informe sea favorable según el tipo de mercado real.
  • likel_D: probabilidad de que el informe sea desfavorable.

Esto refleja que la consultora no es perfecta, pero aporta información útil.

likel_F <- c(0.10, 0.40, 0.90)
likel_D <- 1 - likel_F

5. Aplicación del Teorema de Bayes

Para actualizar estas probabilidades cuando se recibe información, se implementa una función basada en el Teorema de Bayes. Esta función aplica el Teorema de Bayes, que permite actualizar probabilidades cuando aparece nueva información. Lo que hace es:

  • Combinar lo que se creía antes con la información recibida.
  • Calcular nuevas probabilidades (posteriores).
  • Calcular cuán probable es que ocurra el evento observado.

Es decir, responde preguntas como:Si el informe fue favorable, ¿qué tan probable es ahora que el mercado sea grande?”

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

6. Escenarios con información favorable y desfavorable

Con esta función se obtienen las probabilidades posteriores para los casos en que la consultora da una señal favorable o desfavorable.

bF <- actualizar(prior, likel_F)
bD <- actualizar(prior, likel_D)

7. Cálculo del Valor Monetario Esperado (VME)

Una vez actualizadas las probabilidades, se calcula el Valor Monetario Esperado (VME) de cada alternativa. Para ello se define una función que combina los pagos económicos con las probabilidades correspondientes y selecciona la mejor opción.

# ---- VME por escenario ----
vme_all <- function(p) {
  v <- pagos %*% p
  list(vme=as.vector(v), mejor=rownames(pagos)[which.max(v)],
       max_vme=max(v))
}

8. Evaluación de decisiones

Esta evaluación se realiza para tres situaciones: sin información adicional, con señal favorable y con señal desfavorable..

Esto permite ver cómo cambia la mejor decisión según la información disponible.

r_prior <- vme_all(prior)
r_F     <- vme_all(bF$post)
r_D     <- vme_all(bD$post)

9. Valor de la información

Posteriormente se calcula el Valor Monetario Esperado con información imperfecta y el Valor Esperado de la Información Imperfecta (VEII), que indica cuánto vale económicamente recibir la información de la consultora.

vme_con_info <- bF$P_E*r_F$max_vme + bD$P_E*r_D$max_vme
veii         <- vme_con_info - r_prior$max_vme

10. Presentación de resultados numéricos

Los resultados numéricos se muestran en la consola para facilitar su interpretación.

cat("===== ÁRBOL BAYESIANO — TECHPARTS =====\n")
## ===== ÁRBOL BAYESIANO — TECHPARTS =====
cat(sprintf("Sin consultora → %s: $%s\n",
    r_prior$mejor, format(round(r_prior$max_vme), big.mark=",")))
## Sin consultora → Mediana: $185,000
cat(sprintf("Si Favorable   → %s: $%s\n",
    r_F$mejor, format(round(r_F$max_vme), big.mark=",")))
## Si Favorable   → Grande: $333,010
cat(sprintf("Si Desfavor.   → %s: $%s\n",
    r_D$mejor, format(round(r_D$max_vme), big.mark=",")))
## Si Desfavor.   → 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("VEII = $%s (máx a pagar por la consultora)\n",
    format(round(veii), big.mark=",")))
## VEII = $51,300 (máx a pagar por la consultora)

11. Visualización gráfica

Finalmente, se construye un gráfico que muestra el VME de cada alternativa bajo los distintos escenarios de información, permitiendo una comparación visual clara.

# ---- Gráfico: VME por alternativa en cada escenario ----
df_vme <- data.frame(
  Alternativa  = rownames(pagos),
  Sin_info     = r_prior$vme,
  Favorable    = r_F$vme,
  Desfavorable = r_D$vme
)
df_long <- pivot_longer(df_vme, -Alternativa,
                          names_to="Escenario", values_to="VME")
df_long$Escenario <- factor(df_long$Escenario,
    levels=c("Sin_info","Favorable","Desfavorable"),
    labels=c("Sin info","Favorable","Desfavorable"))

ggplot(df_long, aes(x=Alternativa, y=VME/1000, fill=Escenario)) +
  geom_col(position="dodge", width=0.65) +
  geom_hline(yintercept=0, color="gray50") +
  geom_text(aes(label=paste0("$",round(VME/1000),"k"),
                y=VME/1000+ifelse(VME>0,7,-15)),
            position=position_dodge(0.65), size=2.8, fontface="bold") +
  scale_fill_manual(values=c("Sin info"="#3a7fbd",
                              Favorable="#0f7a52",
                              Desfavorable="#b0305a")) +
  labs(title="VME por Alternativa según Escenario de Información — TechParts",
       subtitle="La información bayesiana cambia cuál alternativa es óptima",
       x="Alternativa", y="VME (miles $)", fill="Escenario") +
  theme_minimal() + theme(legend.position="top")

Resultados

El análisis muestra que la alternativa óptima depende fuertemente de la información disponible. Sin consultoría, la empresa elige la estrategia con mayor VME basado únicamente en las probabilidades iniciales. Sin embargo, cuando se incorpora información bayesiana, la decisión óptima puede cambiar según si la señal recibida es favorable o desfavorable. El cálculo del VEII demuestra que la información tiene un valor económico positivo, lo que justifica pagar por la consultoría hasta un cierto límite.

Conclusión

Este ejemplo ilustra cómo los árboles de decisión bayesianos permiten estructurar problemas complejos de forma clara y cuantitativa. Al integrar probabilidades, pagos económicos y actualización bayesiana, la empresa puede tomar decisiones más informadas y reducir el riesgo. Desde una perspectiva educativa, el código demuestra cómo R puede utilizarse para aplicar conceptos teóricos de probabilidad y decisión en un contexto práctico y comprensible para todo tipo de público.