##### UNIVERSIDAD CENTRAL DEL ECUADOR #####
#### AUTOR: LISS MURILLO ####
### CARRERA: INGENIERÍA EN PETRÓLEOS #####
#### REGRESIÓN MÚLTIPLE 3D ####
## DATASET ##
setwd("~/SEBAS PROYECTO")
# Cargar dataset
Datos <- read.csv("oil_and_gas_leases_data.csv", sep = ",", fileEncoding = "latin1")
## Estructura de los datos
str(Datos)'data.frame': 47757 obs. of 24 variables:
$ KID : int 1001106903 1001106572 1001106590 1001107343 1001108234 1001106684 1001107377 1001107386 1001107740 1001106710 ...
$ DEPTH_OF_WELL : num 700 800 1400 1125 2940 ...
$ CUMULATIVE_PRODUCTION : num 47225 275063 82624 7544 681006 ...
$ AVG_PRODUCTION : num 859 5001 1758 377 24322 ...
$ LATITUDE : num 37.1 38.8 37.5 37.8 37.1 ...
$ LONGITUDE : num -95.9 -95.2 -96.3 -95.7 -101.3 ...
$ YEARS_ACTIVE : num 55 55 47 20 28 55 20 48 48 55 ...
$ SECTION : num 33 11 34 8 30 4 26 28 11 17 ...
$ COUNTY_CODE : num 125 45 49 207 189 121 49 1 31 121 ...
$ STATE_CODE : int 15 15 15 15 15 15 15 15 15 15 ...
$ TOWNSHIP : num 33 15 29 26 33 17 30 26 23 16 ...
$ RANGE : num 14 20 10 16 36 25 12 21 16 24 ...
$ PRODUCES_OIL : num 1 1 1 1 0 1 1 1 1 1 ...
$ PRODUCES_GAS : num 0 0 0 0 1 0 0 0 0 0 ...
$ OPERATOR_NAME : chr "Horton, John" "Whitlow Energy, Inc." "Suerte Oil Company" "Patterson-Blackford" ...
$ FIELD_NAME : chr "WAYSIDE-HAVANA" "BALDWIN" "DUNKLEBERGER" "ROSE EAST" ...
$ PRODUCING_FORMATION : chr "UNKNOWN" "UNKNOWN" "UNKNOWN" "UNKNOWN" ...
$ LONGITUDE_LATITUDE_SOURCE: chr "CENTER_OF_SECTION" "CENTER_OF_SECTION" "CENTER_OF_SECTION" "CENTER_OF_SECTION" ...
$ PROD_LEVEL : chr "MEDIUM" "HIGH" "MEDIUM" "LOW" ...
$ DEPTH_LEVEL : chr "SHALLOW" "SHALLOW" "SHALLOW" "SHALLOW" ...
$ LIFE_STAGE : chr "OLD" "OLD" "OLD" "MATURE" ...
$ AVG_PROD_LEVEL : chr "LOW" "MEDIUM" "MEDIUM" "LOW" ...
$ TOWNSHIP_DIRECTION : chr "S" "S" "S" "S" ...
$ RANGE_DIRECTION : chr "E" "E" "E" "E" ...
El diseño de este modelo responde a una lógica operacional de “Interacción de Factores de Producción” aplicada a la gestión de pozos petroleros. Se busca explicar la Producción Promedio como el resultado combinado de dos variables operativas fundamentales: la antigüedad del pozo y la producción acumulada a lo largo de su vida útil.
Variable Dependiente (Y): Producción Promedio. Se seleccionó como variable de respuesta porque representa la producción promedio estimada de un pozo, es decir, su desempeño operativo actual. Es el resultado final del comportamiento del pozo y no depende de decisiones arbitrarias, sino de factores históricos y operativos que reflejan su eficiencia.
Variable Independiente 1 (X₁): Años Activo. Indica el tiempo que el pozo ha estado en operación. Esta variable refleja la madurez del pozo, su experiencia operativa y la evolución de su rendimiento a lo largo del tiempo. Es la variable dominante, ya que determina de manera significativa la capacidad de producción promedio actual.
Variable Independiente 2 (X₂): Producción Acumulada. Representa la producción acumulada del pozo desde su inicio. Esta variable cuantifica el efecto histórico del rendimiento del pozo sobre su producción promedio actual, aportando información complementaria sobre su desempeño operativo.
La Producción Promedio (Y) es, esencialmente, el resultado de la interacción entre la antigüedad del pozo (X₁) y su producción acumulada (X₂). Ambos factores interactúan para determinar la producción promedio estimada, proporcionando un panorama integral del desempeño del pozo.
# Selección de variables
datos_model <- Datos %>%
select(AVG_PRODUCTION, YEARS_ACTIVE, CUMULATIVE_PRODUCTION) %>%
mutate(
y = as.numeric(AVG_PRODUCTION),
x1 = as.numeric(YEARS_ACTIVE),
x2 = as.numeric(CUMULATIVE_PRODUCTION)
) %>%
filter(!is.na(y), !is.na(x1), !is.na(x2)) %>%
filter(y > 0, x1 > 0, x2 > 0)
# Limpiea de outliers
datos_model <- datos_model %>%
filter(
between(x2, quantile(x2, 0.02), quantile(x2, 0.98)),
between(y, quantile(y, 0.02), quantile(y, 0.98))
)
y <- datos_model$y
x1 <- datos_model$x1
x2 <- datos_model$x2El gráfico 3D permite analizar la distribución y relación entre los Años de Actividad, la Producción Acumulada y la Producción Promedio.
# Gráfico 3D
plot_ly(
x = ~x1,
y = ~x2,
z = ~y,
type = "scatter3d",
mode = "markers",
marker = list(
size = 4,
color = "#E67E22",
line = list(color = '#A04000', width = 0.5)
),
name = "Pozos"
) %>%
layout(
title = list(
text = "Gráfica N°1: Producción Promedio en función de Años Activos y Producción Acumulada - 3D",
font = list(size = 12),
font = list(size = 12),
x = 0.5,
xanchor = 'center'
),
scene = list(
xaxis = list(title = list(text = "Años Activo [X₁]", font = list(size = 10))),
yaxis = list(title = list(text = "Producción Acumulada [X₂]", font = list(size = 10))),
zaxis = list(title = list(text = "Producción Promedio [Y]", font = list(size = 10))),
camera = list(eye = list(x = 1.6, y = 1.6, z = 1.2))
),
margin = list(t = 50)
)Se aplicó un procedimiento de binning sobre la Producción Acumulada para agrupar los datos en intervalos homogéneos y reducir la variabilidad extrema. Cada grupo se representa por su valor promedio, lo que permite generar un conjunto más estable y representativo para el ajuste del modelo de regresión múltiple.
Se plantea la ecuación del plano: \(y = \beta_0 + \beta_1 \cdot X_1 + \beta_2 \cdot X_2\).
Se visualiza el plano de regresión múltiple junto con los datos reales, permitiendo observar el ajuste del modelo y la relación conjunta entre los Años Activo, la Producción Acumulada y la Producción Promedio.
# Crear grilla de valores
grid_x1 <- seq(min(x1), max(x1), length.out = 50)
grid_x2 <- seq(min(x2), max(x2), length.out = 50)
# Calcular plano ajustado
z_plano <- t(outer(grid_x1, grid_x2, function(x1_val, x2_val) {
b0 + (b1 * x1_val) + (b2 * x2_val)
}))
# Gráfico interactivo
plot_ly() %>%
add_trace(
x = grid_x1,
y = grid_x2,
z = z_plano,
type = "surface",
colorscale = list(c(0, 1), c("#F39C12", "#E67E22")),
opacity = 0.7,
name = "Plano Ajustado",
showscale = FALSE
) %>%
add_trace(
x = ~x1,
y = ~x2,
z = ~y,
type = "scatter3d",
mode = "markers",
marker = list(size = 4, color = "#2C3E50", line = list(color = 'black', width = 0.5)),
name = "Datos Binned"
) %>%
layout(
title = list(
text = "Gráfica N°2: Plano de Regresión de la Producción Promedio",
font = list(size = 12),
x = 0.5,
xanchor = 'center'
),
scene = list(
xaxis = list(title = list(text = "Años Activo [X₁]", font = list(size = 10))),
yaxis = list(title = list(text = "Producción Acumulada [X₂]", font = list(size = 10))),
zaxis = list(title = list(text = "Producción Promedio [Y]", font = list(size = 10))),
camera = list(eye = list(x = 1.6, y = 1.6, z = 1.2))
),
margin = list(t = 50)
)# Valores predichos
y_pred <- predict(modelo)
# Correlación múltiple
r <- cor(y, y_pred)
cat("El coeficiente de correlación múltiple es: ", round(r, 2))El coeficiente de correlación múltiple es: 0.85
El coeficiente de determinación (R²) es: 0.73
La ecuación estimada del modelo es:
y = 4637.1099 + -151.250941·X₁ + 0.033977·X₂
tabla_resumen <- data.frame(
Variable = c("Años Activo", "Producción Acumulada", "Producción Promedio"),
Tipo = c("Independiente (X₁)", "Independiente (X₂)", "Dependiente (Y)"),
R_multiple = c("", "", round(r, 2)),
R2 = c("", "", round(r2, 2)),
Intercepto = c("", "", round(b0, 4)),
Beta1 = c("", "", round(b1, 6)),
Beta2 = c("", "", round(b2, 6)),
Ecuación = c("", "", ecuacion)
)
tabla_resumen %>%
gt() %>%
tab_header(title = md("**Tabla N°1 del Resumen del Modelo de Regresión Múltiple**")) %>%
tab_source_note(source_note = "Autor: Liss Murillo") %>%
cols_align(align = "center", everything())| Tabla N°1 del Resumen del Modelo de Regresión Múltiple | |||||||
| Variable | Tipo | R_multiple | R2 | Intercepto | Beta1 | Beta2 | Ecuación |
|---|---|---|---|---|---|---|---|
| Años Activo | Independiente (X₁) | ||||||
| Producción Acumulada | Independiente (X₂) | ||||||
| Producción Promedio | Dependiente (Y) | 0.85 | 0.73 | 4637.1099 | -151.250941 | 0.033977 | y = 4637.1099 + -151.250941·X₁ + 0.033977·X₂ |
| Autor: Liss Murillo | |||||||
¿Cuál es la Producción Promedio estimada para un pozo con 10 años activo y 5,000 de Producción Acumulada?
Para un pozo con 10 años activo y 5000 de producción acumulada, la Producción Promedio estimada es: 3294.486
Se creó un modelo de regresión lineal múltiple para calcular la Producción Promedio (Y) a partir de los Años Activo (X₁) y la Producción Acumulada (X₂).
El coeficiente de determinación (R²) del modelo es del 0.73, lo que indica que aproximadamente el 73% de la variabilidad de la Producción Promedio se explica por la combinación de la madurez del pozo y su producción histórica. El resultado confirma la relación esperada: los Años Activo influyen de manera significativa sobre el desempeño, mientras que la Producción Acumulada aporta un efecto complementario.
En términos generales, el modelo demuestra una adecuada capacidad predictiva dentro del rango analizado, constituyendo una herramienta válida para la estimación preliminar del desempeño promedio de los pozos.