Introducción

La toma de decisiones bajo incertidumbre es un problema frecuente en numerosos ámbitos, particularmente en la industria petrolera, donde las decisiones iniciales implican altos costos y beneficios potenciales significativos. En este tipo de contextos, la incertidumbre sobre la existencia de recursos obliga a evaluar cuidadosamente las alternativas disponibles antes de comprometer grandes inversiones. En esta página se presenta el análisis de un árbol de decisión aplicado a un proyecto de exploración petrolera, utilizando el lenguaje de programación R. El objetivo es comparar distintas estrategias económicas considerando probabilidades, costos e ingresos, y determinar cuál de ellas maximiza el beneficio esperado. Para ello, se emplean herramientas fundamentales como el Teorema de Bayes, el Valor Monetario Esperado (VME) y el análisis de sensibilidad, apoyados con visualizaciones que facilitan la interpretación de los resultados. El contenido está orientado a estudiantes que están aprendiendo R y análisis de decisiones, y busca mostrar cómo un problema real puede modelarse y resolverse mediante programación y razonamiento probabilístico.

Objetivo

El objetivo de este análisis es mostrar cómo tomar decisiones bajo incertidumbre utilizando un árbol de decisión. También se busca aplicar el Teorema de Bayes para actualizar probabilidades con nueva información y usar el Valor Monetario Esperado para comparar alternativas. Finalmente, se pretende que el estudiante entienda cómo realizar este análisis en R y cómo interpretar los resultados obtenidos.

Metodología

El análisis se implementa en RStudio y comienza con la carga de las librerías necesarias para el desarrollo del modelo. En particular, se utiliza la librería data.tree para construir la estructura del árbol de decisión y ggplot2 para la visualización del análisis de sensibilidad, como se muestra en el siguiente fragmento de código:

Carga de librerías

# ====================================================
# ÁRBOL DE DECISIÓN — Exploración Petrolera
# ====================================================
library(data.tree)
library(ggplot2)

2.2 Definición de parámetros del problema

A continuación, se definen los parámetros básicos del problema. Estos incluyen la probabilidad inicial de encontrar petróleo, los costos e ingresos asociados a la perforación, el precio de venta del terreno y el costo del estudio sísmico. También se especifica la calidad del estudio sísmico mediante probabilidades condicionales que describen su precisión. Estas variables representan los supuestos sobre los cuales se construye todo el modelo:

# Parámetros
p_petrol      <- 0.45
ingreso       <- 600000
costo_perf    <- 100000
precio_venta  <-  90000
costo_sismico <-  30000
p_pos_si      <-   0.80   # P(Sísmico+ | hay petróleo)
p_pos_no      <-   0.25   # P(Sísmico+ | no petróleo)

# ---- Bayes ----
p_no    <- 1 - p_petrol
p_s_pos <- p_pos_si*p_petrol + p_pos_no*p_no
p_s_neg <- 1 - p_s_pos

2.3 Actualización de probabilidades (Teorema de Bayes)

Una vez definidos los parámetros, el código aplica el Teorema de Bayes para actualizar la probabilidad de encontrar petróleo después de observar el resultado del estudio sísmico. Para ello, se calculan primero las probabilidades de obtener un resultado positivo o negativo en el estudio, y posteriormente las probabilidades posteriores de que exista petróleo bajo cada uno de esos escenarios:

post_si_pos <- (p_pos_si * p_petrol) / p_s_pos
post_no_pos <- 1 - post_si_pos
post_si_neg <- ((1-p_pos_si) * p_petrol) / p_s_neg
post_no_neg <- 1 - post_si_neg

Se utilizan las reglas de Bayes para calcular:

  • Probabilidad real de encontrar petróleo dado un resultado sísmico positivo.
  • Probabilidad real de encontrar petróleo dado un resultado sísmico negativo.

Esto permite tomar decisiones mejor informadas después del estudio.

2.4 Cálculo del Valor Monetario Esperado (VME)

Con esta herramienta se calculan los valores esperados de perforar directamente, de perforar tras un resultado positivo del estudio y de perforar tras un resultado negativo. A partir de estos valores, se identifica la mejor decisión en cada caso y se calcula el VME total de la alternativa que incluye el estudio sísmico, considerando también su costo.

# ---- VME ----
vme_perf <- function(p_si)
  p_si*(ingreso-costo_perf) + (1-p_si)*(-costo_perf)

vme_directo   <- vme_perf(p_petrol)
vme_perf_pos  <- vme_perf(post_si_pos)
vme_perf_neg  <- vme_perf(post_si_neg)

dec_pos <- max(vme_perf_pos, precio_venta)
dec_neg <- max(vme_perf_neg, precio_venta)

vme_estudio <- p_s_pos*dec_pos + p_s_neg*dec_neg - costo_sismico

# ---- Reporte ----
cat("===== ÁRBOL PETROLERO =====\n")
## ===== ÁRBOL PETROLERO =====
cat(sprintf("VME(Perforar directo): $%s\n",  format(round(vme_directo),  big.mark=",")))
## VME(Perforar directo): $170,000
cat(sprintf("VME(Vender):           $%s\n",  format(precio_venta,           big.mark=",")))
## VME(Vender):           $90,000
cat(sprintf("VME(Con estudio):      $%s\n",  format(round(vme_estudio),  big.mark=",")))
## VME(Con estudio):      $181,475
cat(sprintf("  Sísmico+: P(petróleo)=%.3f → %s ($%s)\n",
    post_si_pos, ifelse(dec_pos==vme_perf_pos,"Perforar","Vender"),
    format(round(dec_pos), big.mark=",")))
##   Sísmico+: P(petróleo)=0.724 → Perforar ($334,171)
cat(sprintf("  Sísmico−: P(petróleo)=%.3f → %s ($%s)\n",
    post_si_neg, ifelse(dec_neg==vme_perf_neg,"Perforar","Vender"),
    format(round(dec_neg), big.mark=",")))
##   Sísmico−: P(petróleo)=0.179 → Vender ($90,000)

2.5 Determinación de la decisión óptima

opts  <- c(vme_directo, precio_venta, vme_estudio)
noms  <- c("Perforar directo","Vender","Contratar estudio")
cat(sprintf("DECISIÓN ÓPTIMA: %s ($%s)\n",
    noms[which.max(opts)], format(round(max(opts)), big.mark=",")))
## DECISIÓN ÓPTIMA: Contratar estudio ($181,475)

2.6 Representación del árbol de decisión

Posteriormente, se construye el árbol de decisión de forma visual, lo que permite observar claramente las distintas ramas del problema, los eventos probabilísticos y las decisiones óptimas en cada punto:

library(data.tree)

arbol <- Node$new("Decision\nPrincipal")

# Rama 1: Perforar directo
r1 <- arbol$AddChild(sprintf("Perforar\nVME=$%sk", round(vme_directo/1e3)))

n1 <- r1$AddChild(sprintf("Petroleo p=%.2f", p_petrol))
n1$payoff <- ingreso - costo_perf

n2 <- r1$AddChild(sprintf("Sin petroleo p=%.2f", p_no))
n2$payoff <- -costo_perf


# Rama 2: Vender
r2 <- arbol$AddChild(sprintf("Vender\n$%s", format(precio_venta, big.mark=",")))
r2$payoff <- precio_venta


# Rama 3: Con estudio sismico
r3 <- arbol$AddChild(sprintf("Estudio\nVME=$%sk", round(vme_estudio/1e3)))

sp <- r3$AddChild(sprintf("Sismico+ p=%.3f", p_s_pos))

sp1 <- sp$AddChild(sprintf("Perforar *\n$%sk", round(vme_perf_pos/1e3)))
sp1$es_optimo <- TRUE

sp2 <- sp$AddChild("Vender |")
sp2$es_optimo <- FALSE


sn <- r3$AddChild(sprintf("Sismico- p=%.3f", p_s_neg))

sn1 <- sn$AddChild("Perforar |")
sn1$es_optimo <- FALSE

sn2 <- sn$AddChild(sprintf("Vender *\n$%sk", round(precio_venta/1e3)))
sn2$es_optimo <- TRUE


print(arbol, "payoff", "es_optimo")
##                        levelName payoff es_optimo
## 1  Decision\nPrincipal               NA        NA
## 2   ¦--Perforar\nVME=$170k           NA        NA
## 3   ¦   ¦--Petroleo p=0.45        5e+05        NA
## 4   ¦   °--Sin petroleo p=0.55   -1e+05        NA
## 5   ¦--Vender\n$90,000            9e+04        NA
## 6   °--Estudio\nVME=$181k            NA        NA
## 7       ¦--Sismico+ p=0.498          NA        NA
## 8       ¦   ¦--Perforar *\n$334k     NA      TRUE
## 9       ¦   °--Vender |              NA     FALSE
## 10      °--Sismico- p=0.502          NA        NA
## 11          ¦--Perforar |            NA     FALSE
## 12          °--Vender *\n$90k        NA      TRUE

2.7 Análisis de sensibilidad

Finalmente, se realiza un análisis de sensibilidad en el que se varía la probabilidad inicial de encontrar petróleo en un amplio rango de valores. Para cada valor se recalcula el VME de todas las alternativas, y los resultados se representan gráficamente para identificar los intervalos en los que cambia la decisión óptima.

# ---- Análisis de sensibilidad sobre P(petróleo) ----
ps <- seq(0.05, 0.95, 0.01)
sens <- sapply(ps, function(p) {
  pn  <- 1-p
  sp  <- p_pos_si*p + p_pos_no*pn
  sn  <- 1-sp
  pp  <- p_pos_si*p/sp; pn2 <- (1-p_pos_si)*p/sn
  dp  <- max(vme_perf(pp), precio_venta)
  dn  <- max(vme_perf(pn2), precio_venta)
  c(Perforar=vme_perf(p), Vender=precio_venta,
    Estudio=sp*dp+sn*dn-costo_sismico)
})
df_s <- as.data.frame(t(sens))
df_s$p_petrol <- ps
df_long <- tidyr::pivot_longer(df_s, -p_petrol,
              names_to="Alternativa", values_to="VME")

Resultado

Los resultados muestran que perforar directamente solo es rentable cuando la probabilidad de encontrar petróleo es alta, ya que en otros casos implica un riesgo elevado de pérdidas. Vender el terreno es una opción segura, pero con menor ganancia. En cambio, realizar el estudio sísmico resulta ser la mejor alternativa, ya que, aunque tiene un costo, permite tomar decisiones más acertadas.

Si el estudio es positivo, conviene perforar; si es negativo, es mejor vender el terreno. Esto explica por qué esta opción tiene el mayor Valor Monetario Esperado. Además, el análisis de sensibilidad indica que esta estrategia es la más adecuada en la mayoría de escenarios.

##  Visualización gráfica
ggplot(df_long, aes(x=p_petrol, y=VME/1000, color=Alternativa, group=Alternativa)) +
  geom_line(linewidth=1.2) +
  geom_vline(xintercept=p_petrol, linetype="dashed", alpha=0.5) +
  scale_color_manual(values=c(Perforar="#3a7fbd",Vender="#d97706",Estudio="#0f7a52")) +
  scale_x_continuous(labels=scales::percent) +
  labs(title="Sensibilidad del VME ante P(Petroleo)",
       subtitle="Puntos de cruce definen cuando cambiar de estrategia",
       x="P(Petroleo)", y="VME (miles $)") +
  theme_minimal()

Conclusiones

El análisis realizado permite concluir que, en el contexto planteado, la estrategia óptima consiste en contratar un estudio sísmico antes de tomar una decisión definitiva sobre la exploración del terreno. Esta alternativa maximiza el Valor Monetario Esperado al reducir la incertidumbre y permitir decisiones condicionadas a nueva información. Desde una perspectiva educativa, este ejemplo demuestra cómo el uso de R facilita la modelación de problemas reales de decisión, integrando conceptos de probabilidad, estadística y análisis económico. El empleo de árboles de decisión y análisis de sensibilidad no solo mejora la calidad de las decisiones, sino que también proporciona una herramienta clara y potente para el aprendizaje de métodos cuantitativos aplicados.