Introducción

Este documento presenta un análisis de regresión lineal múltiple para entender cómo el contexto macroeconómico y el comportamiento de contacto bancario se relacionan con la tasa Euribor a 3 meses (euribor3m - Variable Dependiente).

Contexto del Problema

Los bancos promueven los depósitos a plazo mediante campañas de mercadeo directo, especialmente llamadas telefónicas, donde agentes contactan a clientes para ofrecer la suscripción; sin embargo, estas campañas implican altos costos operacionales y de personal, por lo que es importante mejorar su efectividad identificando qué perfiles de clientes tienen mayor probabilidad de suscribir y cómo influyen las diferentes variables operativas.

El conjunto de datos contiene registros relacionados con una campaña de marketing directo de una institución bancaria portuguesa. La campaña de marketing se ejecutó mediante llamadas telefónicas. A menudo, es necesario realizar más de una llamada a un solo cliente antes de que acepte o rechace una suscripción a un depósito a plazo.

  • age (edad): numérico
  • campaign (campaña): número de contactos realizados durante esta campaña y para este cliente (incluye el último contacto)
  • pdays: número de días que transcurrieron después de que el cliente fue contactado por última vez de una campaña anterior (999 significa que el cliente no fue contactado previamente)
  • previous (anterior): número de contactos realizados antes de esta campaña y para este cliente
  • emp.var.rate: tasa de variación del empleo - indicador trimestral
  • cons.price.idx: índice de precios al consumo - indicador mensual
  • cons.conf.idx: índice de confianza del consumidor - indicador mensual
  • euribor3m: tasa del euribor a 3 meses - indicador diario
  • nr.employed: número de empleados - indicador trimestral

El banco desea construir un modelo predictivo que explique la variación de la tasa Euribor utilizando:

  • Variables demográficas: edad del cliente
  • Variables de campaña: intensidad de contacto (campaign, pdays, previous)
  • Variables macroeconómicas: variación de empleo, índice de precios, confianza del consumidor, número de empleados

1. Carga de Datos

# Cargar el dataset
data1 <- read.csv("datos-banco.csv")

# Visualizar estructura de los datos
str(data1)
## 'data.frame':    41188 obs. of  9 variables:
##  $ age           : int  56 57 37 40 56 45 59 41 24 25 ...
##  $ campaign      : int  1 1 1 1 1 1 1 1 1 1 ...
##  $ pdays         : int  999 999 999 999 999 999 999 999 999 999 ...
##  $ previous      : int  0 0 0 0 0 0 0 0 0 0 ...
##  $ emp.var.rate  : num  1.1 1.1 1.1 1.1 1.1 1.1 1.1 1.1 1.1 1.1 ...
##  $ cons.price.idx: num  94 94 94 94 94 ...
##  $ cons.conf.idx : num  -36.4 -36.4 -36.4 -36.4 -36.4 -36.4 -36.4 -36.4 -36.4 -36.4 ...
##  $ euribor3m     : num  4.86 4.86 4.86 4.86 4.86 ...
##  $ nr.employed   : num  5191 5191 5191 5191 5191 ...
# Primeras filas del dataset
head(data1)
##   age campaign pdays previous emp.var.rate cons.price.idx cons.conf.idx
## 1  56        1   999        0          1.1         93.994         -36.4
## 2  57        1   999        0          1.1         93.994         -36.4
## 3  37        1   999        0          1.1         93.994         -36.4
## 4  40        1   999        0          1.1         93.994         -36.4
## 5  56        1   999        0          1.1         93.994         -36.4
## 6  45        1   999        0          1.1         93.994         -36.4
##   euribor3m nr.employed
## 1     4.857        5191
## 2     4.857        5191
## 3     4.857        5191
## 4     4.857        5191
## 5     4.857        5191
## 6     4.857        5191

Observaciones iniciales:

  • El dataset contiene 41188 registros
  • Variables numéricas clave: age, campaign, pdays, previous, emp.var.rate, cons.price.idx, cons.conf.idx, nr.employed, euribor3m

2. Exploración Gráfica: Análisis de Correlaciones

Antes de construir el modelo, es fundamental explorar las relaciones entre variables.

# Matriz de correlación
cor_matrix <- cor(data1, use = "complete.obs")

# Visualización con pairs (R base)
pairs(data1, 
      main = "Matriz de Dispersión entre Variables",
      pch = 19, 
      col = rgb(0, 0, 1, 0.3),
      cex = 0.5)

# Mostrar matriz de correlación numérica
cat("\nMatriz de Correlaciones con euribor3m:\n")
## 
## Matriz de Correlaciones con euribor3m:
print(round(cor_matrix[, "euribor3m"], 2))
##            age       campaign          pdays       previous   emp.var.rate 
##           0.01           0.14           0.30          -0.45           0.97 
## cons.price.idx  cons.conf.idx      euribor3m    nr.employed 
##           0.69           0.28           1.00           0.95

Imagen adicional de dispersión

Matriz de Dispersión entre Variables

Figura: Matriz de dispersión detallada de las variables del modelo

Interpretación:

  • Las variables macroeconómicas muestran alta correlación con euribor3m
  • emp.var.rate, cons.price.idx y nr.employed parecen ser predictores fuertes
  • Algunas variables están altamente correlacionadas entre sí (posible multicolinealidad)

3. Construcción de Modelos

3.1 Modelo Completo

Incluimos todas las variables explicativas disponibles:

# Modelo con todas las variables
m_full1 <- lm(euribor3m ~ age + campaign + pdays + previous +
                emp.var.rate + cons.price.idx + cons.conf.idx + nr.employed,
              data = data1)

summary(m_full1)
## 
## Call:
## lm(formula = euribor3m ~ age + campaign + pdays + previous + 
##     emp.var.rate + cons.price.idx + cons.conf.idx + nr.employed, 
##     data = data1)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -0.57922 -0.17533  0.00282  0.13957  1.04191 
## 
## Coefficients:
##                  Estimate Std. Error  t value Pr(>|t|)    
## (Intercept)    -9.220e+01  6.275e-01 -146.932  < 2e-16 ***
## age             2.914e-04  1.032e-04    2.824  0.00475 ** 
## campaign       -6.659e-03  3.897e-04  -17.087  < 2e-16 ***
## pdays           1.858e-05  7.239e-06    2.567  0.01027 *  
## previous        3.567e-03  2.885e-03    1.236  0.21636    
## emp.var.rate    4.118e-01  3.331e-03  123.610  < 2e-16 ***
## cons.price.idx  3.378e-01  4.325e-03   78.112  < 2e-16 ***
## cons.conf.idx   5.397e-02  2.639e-04  204.479  < 2e-16 ***
## nr.employed     1.284e-02  5.369e-05  239.162  < 2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 0.2162 on 41179 degrees of freedom
## Multiple R-squared:  0.9845, Adjusted R-squared:  0.9845 
## F-statistic: 3.26e+05 on 8 and 41179 DF,  p-value: < 2.2e-16

3.2 Modelo Nulo (Solo Intercepto)

Este modelo sirve como punto de partida para la selección forward:

# Modelo mínimo (solo intercepto)
m_null1 <- lm(euribor3m ~ 1, data = data1)

summary(m_null1)
## 
## Call:
## lm(formula = euribor3m ~ 1, data = data1)
## 
## Residuals:
##    Min     1Q Median     3Q    Max 
## -2.987 -2.277  1.236  1.340  1.424 
## 
## Coefficients:
##             Estimate Std. Error t value Pr(>|t|)    
## (Intercept) 3.621291   0.008546   423.7   <2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 1.734 on 41187 degrees of freedom

4. Selección de Variables

Aplicaremos tres métodos de selección para identificar el mejor conjunto de variables:

4.1 Backward Elimination (Eliminación hacia atrás)

Comienza con todas las variables y elimina las menos significativas:

# Backward elimination
m_back1 <- step(m_full1, direction = "backward", trace = 1)
## Start:  AIC=-126135.6
## euribor3m ~ age + campaign + pdays + previous + emp.var.rate + 
##     cons.price.idx + cons.conf.idx + nr.employed
## 
##                  Df Sum of Sq    RSS     AIC
## - previous        1      0.07 1925.7 -126136
## <none>                        1925.7 -126136
## - pdays           1      0.31 1926.0 -126131
## - age             1      0.37 1926.0 -126130
## - campaign        1     13.65 1939.3 -125847
## - cons.price.idx  1    285.33 2211.0 -120447
## - emp.var.rate    1    714.52 2640.2 -113140
## - cons.conf.idx   1   1955.26 3880.9  -97273
## - nr.employed     1   2674.80 4600.5  -90268
## 
## Step:  AIC=-126136.1
## euribor3m ~ age + campaign + pdays + emp.var.rate + cons.price.idx + 
##     cons.conf.idx + nr.employed
## 
##                  Df Sum of Sq    RSS     AIC
## <none>                        1925.7 -126136
## - pdays           1      0.24 1926.0 -126133
## - age             1      0.38 1926.1 -126130
## - campaign        1     13.68 1939.4 -125846
## - cons.price.idx  1    285.39 2211.1 -120446
## - emp.var.rate    1    716.85 2642.6 -113104
## - cons.conf.idx   1   1971.09 3896.8  -97107
## - nr.employed     1   2742.35 4668.1  -89669
# Resumen del modelo seleccionado
summary(m_back1)
## 
## Call:
## lm(formula = euribor3m ~ age + campaign + pdays + emp.var.rate + 
##     cons.price.idx + cons.conf.idx + nr.employed, data = data1)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -0.57374 -0.17530  0.00285  0.13938  1.04186 
## 
## Coefficients:
##                  Estimate Std. Error  t value Pr(>|t|)    
## (Intercept)    -9.212e+01  6.243e-01 -147.555  < 2e-16 ***
## age             2.933e-04  1.032e-04    2.842  0.00448 ** 
## campaign       -6.665e-03  3.897e-04  -17.104  < 2e-16 ***
## pdays           1.412e-05  6.275e-06    2.250  0.02446 *  
## emp.var.rate    4.120e-01  3.327e-03  123.811  < 2e-16 ***
## cons.price.idx  3.376e-01  4.322e-03   78.121  < 2e-16 ***
## cons.conf.idx   5.394e-02  2.627e-04  205.304  < 2e-16 ***
## nr.employed     1.283e-02  5.298e-05  242.162  < 2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 0.2162 on 41180 degrees of freedom
## Multiple R-squared:  0.9845, Adjusted R-squared:  0.9845 
## F-statistic: 3.726e+05 on 7 and 41180 DF,  p-value: < 2.2e-16

Variables eliminadas: previous

Variables que permanecen: age, campaign, pdays, emp.var.rate, cons.price.idx, cons.conf.idx, nr.employed


4.2 Forward Selection (Selección hacia adelante)

Comienza sin variables y agrega las más significativas:

# Forward selection
m_forw1 <- step(m_null1,
                scope = list(lower = m_null1, upper = m_full1),
                direction = "forward", trace = 1)
## Start:  AIC=45364.55
## euribor3m ~ 1
## 
##                  Df Sum of Sq    RSS    AIC
## + emp.var.rate    1    117121   6782 -74291
## + nr.employed     1    110685  13218 -46808
## + cons.price.idx  1     58688  65215  18932
## + previous        1     25594  98309  35836
## + pdays           1     10922 112981  41566
## + cons.conf.idx   1      9554 114349  42061
## + campaign        1      2263 121641  44607
## + age             1        14 123889  45362
## <none>                        123903  45365
## 
## Step:  AIC=-74290.98
## euribor3m ~ emp.var.rate
## 
##                  Df Sum of Sq    RSS    AIC
## + nr.employed     1   2803.58 3978.9 -96256
## + cons.price.idx  1   1336.18 5446.3 -83326
## + cons.conf.idx   1    977.24 5805.3 -80697
## + previous        1    314.01 6468.5 -76241
## + pdays           1    149.33 6633.2 -75206
## + campaign        1     16.58 6765.9 -74390
## + age             1     15.34 6767.2 -74382
## <none>                        6782.5 -74291
## 
## Step:  AIC=-96256.03
## euribor3m ~ emp.var.rate + nr.employed
## 
##                  Df Sum of Sq    RSS     AIC
## + cons.conf.idx   1   1756.42 2222.5 -120241
## + age             1     37.31 3941.6  -96642
## + campaign        1     25.10 3953.8  -96515
## + pdays           1     20.89 3958.0  -96471
## + previous        1      1.34 3977.6  -96268
## + cons.price.idx  1      0.45 3978.5  -96259
## <none>                        3978.9  -96256
## 
## Step:  AIC=-120241
## euribor3m ~ emp.var.rate + nr.employed + cons.conf.idx
## 
##                  Df Sum of Sq    RSS     AIC
## + cons.price.idx  1   282.525 1940.0 -125839
## + campaign        1    10.553 2211.9 -120435
## + age             1     0.653 2221.8 -120251
## <none>                        2222.5 -120241
## + pdays           1     0.107 2222.4 -120241
## + previous        1     0.012 2222.5 -120239
## 
## Step:  AIC=-125838.9
## euribor3m ~ emp.var.rate + nr.employed + cons.conf.idx + cons.price.idx
## 
##            Df Sum of Sq    RSS     AIC
## + campaign  1   13.6204 1926.3 -126127
## + age       1    0.3257 1939.6 -125844
## + pdays     1    0.2160 1939.8 -125841
## <none>                  1940.0 -125839
## + previous  1    0.0025 1940.0 -125837
## 
## Step:  AIC=-126127.1
## euribor3m ~ emp.var.rate + nr.employed + cons.conf.idx + cons.price.idx + 
##     campaign
## 
##            Df Sum of Sq    RSS     AIC
## + age       1   0.37149 1926.0 -126133
## + pdays     1   0.23045 1926.1 -126130
## <none>                  1926.3 -126127
## + previous  1   0.00000 1926.3 -126125
## 
## Step:  AIC=-126133
## euribor3m ~ emp.var.rate + nr.employed + cons.conf.idx + cons.price.idx + 
##     campaign + age
## 
##            Df Sum of Sq    RSS     AIC
## + pdays     1  0.236737 1925.7 -126136
## <none>                  1926.0 -126133
## + previous  1  0.000118 1926.0 -126131
## 
## Step:  AIC=-126136.1
## euribor3m ~ emp.var.rate + nr.employed + cons.conf.idx + cons.price.idx + 
##     campaign + age + pdays
## 
##            Df Sum of Sq    RSS     AIC
## <none>                  1925.7 -126136
## + previous  1  0.071472 1925.7 -126136
# Resumen del modelo seleccionado
summary(m_forw1)
## 
## Call:
## lm(formula = euribor3m ~ emp.var.rate + nr.employed + cons.conf.idx + 
##     cons.price.idx + campaign + age + pdays, data = data1)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -0.57374 -0.17530  0.00285  0.13938  1.04186 
## 
## Coefficients:
##                  Estimate Std. Error  t value Pr(>|t|)    
## (Intercept)    -9.212e+01  6.243e-01 -147.555  < 2e-16 ***
## emp.var.rate    4.120e-01  3.327e-03  123.811  < 2e-16 ***
## nr.employed     1.283e-02  5.298e-05  242.162  < 2e-16 ***
## cons.conf.idx   5.394e-02  2.627e-04  205.304  < 2e-16 ***
## cons.price.idx  3.376e-01  4.322e-03   78.121  < 2e-16 ***
## campaign       -6.665e-03  3.897e-04  -17.104  < 2e-16 ***
## age             2.933e-04  1.032e-04    2.842  0.00448 ** 
## pdays           1.412e-05  6.275e-06    2.250  0.02446 *  
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 0.2162 on 41180 degrees of freedom
## Multiple R-squared:  0.9845, Adjusted R-squared:  0.9845 
## F-statistic: 3.726e+05 on 7 and 41180 DF,  p-value: < 2.2e-16

4.3 Método Híbrido (Stepwise - Combinado)

Combina forward y backward en cada paso:

# Método híbrido (stepwise)
m_hyb1 <- step(m_null1,
               scope = list(lower = m_null1, upper = m_full1),
               direction = "both", trace = 1)
## Start:  AIC=45364.55
## euribor3m ~ 1
## 
##                  Df Sum of Sq    RSS    AIC
## + emp.var.rate    1    117121   6782 -74291
## + nr.employed     1    110685  13218 -46808
## + cons.price.idx  1     58688  65215  18932
## + previous        1     25594  98309  35836
## + pdays           1     10922 112981  41566
## + cons.conf.idx   1      9554 114349  42061
## + campaign        1      2263 121641  44607
## + age             1        14 123889  45362
## <none>                        123903  45365
## 
## Step:  AIC=-74290.98
## euribor3m ~ emp.var.rate
## 
##                  Df Sum of Sq    RSS    AIC
## + nr.employed     1      2804   3979 -96256
## + cons.price.idx  1      1336   5446 -83326
## + cons.conf.idx   1       977   5805 -80697
## + previous        1       314   6468 -76241
## + pdays           1       149   6633 -75206
## + campaign        1        17   6766 -74390
## + age             1        15   6767 -74382
## <none>                          6782 -74291
## - emp.var.rate    1    117121 123903  45365
## 
## Step:  AIC=-96256.03
## euribor3m ~ emp.var.rate + nr.employed
## 
##                  Df Sum of Sq     RSS     AIC
## + cons.conf.idx   1    1756.4  2222.5 -120241
## + age             1      37.3  3941.6  -96642
## + campaign        1      25.1  3953.8  -96515
## + pdays           1      20.9  3958.0  -96471
## + previous        1       1.3  3977.6  -96268
## + cons.price.idx  1       0.5  3978.5  -96259
## <none>                         3978.9  -96256
## - nr.employed     1    2803.6  6782.5  -74291
## - emp.var.rate    1    9239.5 13218.4  -46808
## 
## Step:  AIC=-120241
## euribor3m ~ emp.var.rate + nr.employed + cons.conf.idx
## 
##                  Df Sum of Sq    RSS     AIC
## + cons.price.idx  1     282.5 1940.0 -125839
## + campaign        1      10.6 2211.9 -120435
## + age             1       0.7 2221.8 -120251
## <none>                        2222.5 -120241
## + pdays           1       0.1 2222.4 -120241
## + previous        1       0.0 2222.5 -120239
## - cons.conf.idx   1    1756.4 3978.9  -96256
## - nr.employed     1    3582.8 5805.3  -80697
## - emp.var.rate    1    6818.5 9041.0  -62450
## 
## Step:  AIC=-125838.9
## euribor3m ~ emp.var.rate + nr.employed + cons.conf.idx + cons.price.idx
## 
##                  Df Sum of Sq    RSS     AIC
## + campaign        1     13.62 1926.3 -126127
## + age             1      0.33 1939.6 -125844
## + pdays           1      0.22 1939.8 -125841
## <none>                        1940.0 -125839
## + previous        1      0.00 1940.0 -125837
## - cons.price.idx  1    282.53 2222.5 -120241
## - emp.var.rate    1    715.34 2655.3 -112912
## - cons.conf.idx   1   2038.49 3978.5  -96259
## - nr.employed     1   2826.88 4766.8  -88812
## 
## Step:  AIC=-126127.1
## euribor3m ~ emp.var.rate + nr.employed + cons.conf.idx + cons.price.idx + 
##     campaign
## 
##                  Df Sum of Sq    RSS     AIC
## + age             1      0.37 1926.0 -126133
## + pdays           1      0.23 1926.1 -126130
## <none>                        1926.3 -126127
## + previous        1      0.00 1926.3 -126125
## - campaign        1     13.62 1940.0 -125839
## - cons.price.idx  1    285.59 2211.9 -120435
## - emp.var.rate    1    716.48 2642.8 -113104
## - cons.conf.idx   1   2027.25 3953.6  -96515
## - nr.employed     1   2835.09 4761.4  -88857
## 
## Step:  AIC=-126133
## euribor3m ~ emp.var.rate + nr.employed + cons.conf.idx + cons.price.idx + 
##     campaign + age
## 
##                  Df Sum of Sq    RSS     AIC
## + pdays           1      0.24 1925.7 -126136
## <none>                        1926.0 -126133
## + previous        1      0.00 1926.0 -126131
## - age             1      0.37 1926.3 -126127
## - campaign        1     13.67 1939.6 -125844
## - cons.price.idx  1    285.25 2211.2 -120446
## - emp.var.rate    1    716.74 2642.7 -113104
## - cons.conf.idx   1   1990.13 3916.1  -96905
## - nr.employed     1   2835.19 4761.2  -88857
## 
## Step:  AIC=-126136.1
## euribor3m ~ emp.var.rate + nr.employed + cons.conf.idx + cons.price.idx + 
##     campaign + age + pdays
## 
##                  Df Sum of Sq    RSS     AIC
## <none>                        1925.7 -126136
## + previous        1      0.07 1925.7 -126136
## - pdays           1      0.24 1926.0 -126133
## - age             1      0.38 1926.1 -126130
## - campaign        1     13.68 1939.4 -125846
## - cons.price.idx  1    285.39 2211.1 -120446
## - emp.var.rate    1    716.85 2642.6 -113104
## - cons.conf.idx   1   1971.09 3896.8  -97107
## - nr.employed     1   2742.35 4668.1  -89669
# Resumen del modelo seleccionado
summary(m_hyb1)
## 
## Call:
## lm(formula = euribor3m ~ emp.var.rate + nr.employed + cons.conf.idx + 
##     cons.price.idx + campaign + age + pdays, data = data1)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -0.57374 -0.17530  0.00285  0.13938  1.04186 
## 
## Coefficients:
##                  Estimate Std. Error  t value Pr(>|t|)    
## (Intercept)    -9.212e+01  6.243e-01 -147.555  < 2e-16 ***
## emp.var.rate    4.120e-01  3.327e-03  123.811  < 2e-16 ***
## nr.employed     1.283e-02  5.298e-05  242.162  < 2e-16 ***
## cons.conf.idx   5.394e-02  2.627e-04  205.304  < 2e-16 ***
## cons.price.idx  3.376e-01  4.322e-03   78.121  < 2e-16 ***
## campaign       -6.665e-03  3.897e-04  -17.104  < 2e-16 ***
## age             2.933e-04  1.032e-04    2.842  0.00448 ** 
## pdays           1.412e-05  6.275e-06    2.250  0.02446 *  
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 0.2162 on 41180 degrees of freedom
## Multiple R-squared:  0.9845, Adjusted R-squared:  0.9845 
## F-statistic: 3.726e+05 on 7 and 41180 DF,  p-value: < 2.2e-16

5. Comparación de Modelos (Criterio AIC)

El AIC (Akaike Information Criterion) permite comparar modelos: valores más bajos indican mejor ajuste.

# Extraer AIC de cada método
AIC_back1 <- AIC(m_back1)
AIC_forw1 <- AIC(m_forw1)
AIC_hyb1  <- AIC(m_hyb1)

# Tabla comparativa
AIC_comp1 <- data.frame(
  Metodo = c("Backward", "Forward", "Híbrido"),
  AIC = c(AIC_back1, AIC_forw1, AIC_hyb1)
)

# Mostrar tabla
knitr::kable(AIC_comp1, 
             caption = "Comparación de AIC entre métodos de selección",
             align = 'c')
Comparación de AIC entre métodos de selección
Metodo AIC
Backward -9247.597
Forward -9247.597
Híbrido -9247.597

Conclusión: Los tres métodos convergen al mismo modelo con AIC ≈ -9249.60


6. Modelo Final Seleccionado

# Seleccionamos el modelo backward como modelo final
m_final1 <- m_back1

# Resumen detallado
summary(m_final1)
## 
## Call:
## lm(formula = euribor3m ~ age + campaign + pdays + emp.var.rate + 
##     cons.price.idx + cons.conf.idx + nr.employed, data = data1)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -0.57374 -0.17530  0.00285  0.13938  1.04186 
## 
## Coefficients:
##                  Estimate Std. Error  t value Pr(>|t|)    
## (Intercept)    -9.212e+01  6.243e-01 -147.555  < 2e-16 ***
## age             2.933e-04  1.032e-04    2.842  0.00448 ** 
## campaign       -6.665e-03  3.897e-04  -17.104  < 2e-16 ***
## pdays           1.412e-05  6.275e-06    2.250  0.02446 *  
## emp.var.rate    4.120e-01  3.327e-03  123.811  < 2e-16 ***
## cons.price.idx  3.376e-01  4.322e-03   78.121  < 2e-16 ***
## cons.conf.idx   5.394e-02  2.627e-04  205.304  < 2e-16 ***
## nr.employed     1.283e-02  5.298e-05  242.162  < 2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 0.2162 on 41180 degrees of freedom
## Multiple R-squared:  0.9845, Adjusted R-squared:  0.9845 
## F-statistic: 3.726e+05 on 7 and 41180 DF,  p-value: < 2.2e-16

Ecuación del Modelo Final

\[ \text{euribor3m} = \beta_0 + \beta_1 \cdot \text{age} + \beta_2 \cdot \text{campaign} + \beta_3 \cdot \text{pdays} + \] \[ \beta_4 \cdot \text{emp.var.rate} + \beta_5 \cdot \text{cons.price.idx} + \beta_6 \cdot \text{cons.conf.idx} + \beta_7 \cdot \text{nr.employed} \]


7. Interpretación de Coeficientes

# Extraer coeficientes
coef_tabla <- summary(m_final1)$coefficients

# Mostrar tabla formateada
knitr::kable(coef_tabla, 
             caption = "Coeficientes del Modelo Final",
             digits = 6)
Coeficientes del Modelo Final
Estimate Std. Error t value Pr(>|t|)
(Intercept) -92.121302 0.624316 -147.555489 0.000000
age 0.000293 0.000103 2.842248 0.004482
campaign -0.006665 0.000390 -17.104396 0.000000
pdays 0.000014 0.000006 2.249974 0.024456
emp.var.rate 0.411966 0.003327 123.810883 0.000000
cons.price.idx 0.337633 0.004322 78.120888 0.000000
cons.conf.idx 0.053941 0.000263 205.304002 0.000000
nr.employed 0.012830 0.000053 242.161682 0.000000

Interpretación Práctica (manteniendo otras variables constantes):

  1. emp.var.rate (β ≈ 0.412):
    • Si la variación de empleo aumenta en 1 unidad, el euribor3m aumenta ~0.412
    • Efecto más fuerte entre las variables
  2. cons.price.idx (β ≈ 0.338):
    • Si el índice de precios sube 1 punto, el euribor3m sube ~0.338
  3. cons.conf.idx (β ≈ 0.054):
    • Si la confianza del consumidor sube 1 punto, el euribor3m sube ~0.054
  4. nr.employed (β ≈ 0.013):
    • Por cada 100 empleados adicionales, el euribor3m sube ~1.28
  5. campaign (β ≈ -0.007):
    • Por cada contacto adicional, el euribor3m disminuye ligeramente (~0.007)
  6. age (β ≈ 0.0003):
    • Efecto muy pequeño: por cada año adicional, euribor3m sube 0.0003
  7. pdays (β ≈ 0.000014):
    • Efecto marginal: por cada día adicional desde último contacto

8. Calidad del Ajuste

# R-cuadrado
r2 <- summary(m_final1)$r.squared
r2_adj <- summary(m_final1)$adj.r.squared

# Error estándar residual
rse <- summary(m_final1)$sigma

# Crear tabla de métricas
metricas <- data.frame(
  Metrica = c("R²", "R² Ajustado", "Error Estándar Residual", "AIC"),
  Valor = c(r2, r2_adj, rse, AIC(m_final1))
)

knitr::kable(metricas, 
             caption = "Métricas de Calidad del Modelo",
             digits = 4,
             align = 'lr')
Métricas de Calidad del Modelo
Metrica Valor
0.9845
R² Ajustado 0.9845
Error Estándar Residual 0.2162
AIC -9247.5973

Observaciones:

  • R² = 0.9845: El modelo explica aproximadamente el 98.45% de la variabilidad en euribor3m
  • R² Ajustado = 0.9845: Ajuste muy alto, confirmando la robustez del modelo
  • El AIC muy negativo indica excelente ajuste

9. Conclusiones

  1. Modelo robusto: El R² de 98.45% indica un ajuste excelente

  2. Variables clave: Las variables macroeconómicas (emp.var.rate, cons.price.idx) son los predictores más importantes del euribor3m

  3. Selección consistente: Los tres métodos (backward, forward, híbrido) convergieron al mismo modelo, confirmando su solidez

  4. Variable eliminada: previous (contactos previos) no aporta valor significativo al modelo

  5. Aplicabilidad: Este modelo puede usarse para:

    • Predecir tasas euribor futuras basadas en indicadores económicos
    • Entender cómo factores macro afectan las tasas de interés
    • Planificar estrategias de campaña bancaria

10. Referencias

  • Dataset: datos-banco.csv
  • Métodos utilizados: Regresión Lineal Múltiple
  • Criterio de selección: AIC (Akaike Information Criterion)
  • Software: R versión R version 4.5.2 (2025-10-31)