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:
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)
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.
prior <- c(0.20, 0.45, 0.35)
Aquí se modela el comportamiento de una consultora que emite un informe:
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
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:
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))
}
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)
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))
}
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)
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
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)
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")
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.
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.