1 Introducción y Objetivo

1.1 ¿Qué hace este modelo?

Este documento describe el funcionamiento, la metodología, los supuestos y los resultados del Modelo Integrado de Predicción de Tasas de Interés. El modelo construye un sistema de pronóstico financiero que:

  • Predice la Tasa Monetaria (tasa de política del Banco de la República) usando Random Forest.
  • Predice la TIBC (Tasa de Interés Bancario Corriente) usando Random Forest con 6 variables optimizadas.
  • Proyecta la Inflación y la DTF mediante modelos SARIMA con simulación Monte Carlo.
  • Calcula la USURA (\(\text{TIBC} \times 1.5\)) para cada escenario probabilístico.
  • Genera proyecciones a 72 meses (48 meses con SARIMA real + 24 meses con valor constante).
  • Exporta archivos CSV y RDS consumibles por Power BI y Shiny.

1.2 Contexto de negocio

En Colombia, la TIBC es la tasa máxima de referencia que las entidades financieras pueden cobrar en créditos de libranza, consumo y microcrédito. Su valor depende directamente de la Tasa Monetaria fijada por el Banco de la República y de la Inflación observada. La USURA es el límite legal (TIBC × 1.5) por encima del cual cobrar interés constituye delito.

💡 Importancia estratégica: Este modelo permite anticipar el comportamiento de la TIBC y la USURA, facilitando la planeación financiera, la estructuración de portafolios de crédito y el cumplimiento normativo.

1.3 Tecnologías utilizadas

Herramienta Uso
R Lenguaje de programación principal
randomForest Modelos de clasificación y regresión no lineales
forecast (Arima) Modelos SARIMA para series temporales
readxl / openxlsx Lectura y escritura de archivos Excel
dplyr / tidyr Manipulación y transformación de datos
zoo Interpolación de series temporales
Power BI Visualización final de resultados

2 Arquitectura General del Modelo

3 Sección 1: Explicación Detallada del Código

Esta sección documenta cada bloque del código R, explicando qué hace, por qué se hace así, y qué supuestos implica.

3.1 1.1 Configuración Inicial

rm(list = ls())          # Limpia el entorno de trabajo
gc()                     # Libera memoria RAM
set.seed(123)            # Fija semilla para reproducibilidad
options(scipen = 999)    # Evita notación científica

¿Qué hace cada instrucción?

Instrucción Propósito Justificación
rm(list = ls()) Borra todos los objetos del entorno Evita conflictos con ejecuciones previas
gc() Libera memoria RAM Importante cuando se procesan 10,000 simulaciones
set.seed(123) Fija la semilla aleatoria Garantiza reproducibilidad: si otro analista ejecuta el mismo código con la misma data, obtendrá exactamente los mismos resultados
options(scipen = 999) Desactiva notación científica Mejora la legibilidad de los números en tablas

Parámetros globales:

Meta_Inf <- 0.03              # Meta de inflación del Banco de la República
HORIZONTE_SARIMA <- 48        # Meses con proyección SARIMA real
HORIZONTE_TOTAL <- 72         # Meses totales = 48 SARIMA + 24 constante

🔑 Supuesto 1: La meta de inflación se fija en 3% porque es el rango objetivo del Banco de la República de Colombia (entre 2% y 4%).


3.2 1.2 Carga de Datos

Indicadores <- read_excel(ruta_archivo, sheet = "Opcion2") %>%
  dplyr::select(-CDT)

Variables utilizadas:

Columna Tipo Rol
Fecha Fecha mensual Índice temporal
Inflacion Decimal (0.0452 = 4.52%) Variable exógena
SMMLV Decimal Variable exógena
Monetaria Decimal Variable objetivo 1
TIBC Decimal Variable objetivo 2
DTF Decimal Proyección SARIMA

⚠️ Supuesto 2: Los valores deben estar en decimal (NO en porcentaje). Un valor 0.0452 significa 4.52%. Este formato es obligatorio porque los modelos trabajan con proporciones.

Conversión de fecha:

if(is.numeric(Indicadores$Fecha)) {
  Indicadores$Fecha <- as.Date(Indicadores$Fecha, origin = "1970-01-01")
} else {
  Indicadores$Fecha <- as.Date(Indicadores$Fecha)
}

Cuando Excel exporta fechas, a veces las guarda como número (días desde 1900 o 1970). Esta condición las normaliza al tipo Date de R.

Filtro temporal:

Indicadores <- Indicadores %>% filter(Fecha <= as.Date("2026-09-01"))

⚠️ Supuesto 3: La fecha de corte se actualiza cada mes. Solo se consideran observaciones hasta esa fecha, garantizando que el modelo no “vea” información futura (evita data leakage).


3.3 1.3 Ingeniería de Variables (Feature Engineering)

Esta es la sección más crítica del modelo. Se construyen variables derivadas que capturan la dinámica económica.

3.3.1 1.3.1 Lags (rezagos temporales)

Inflacion_conocida   = lag(Inflacion, 2)
Inflacion_hace_3m    = lag(Inflacion, 5)
Inflacion_hace_6m    = lag(Inflacion, 8)
Monetaria_lag2       = lag(Monetaria, 2)
Monetaria_lag4       = lag(Monetaria, 4)
Monetaria_lag6       = lag(Monetaria, 6)

Formulación matemática:

Sea \(X_t\) el valor de la variable \(X\) en el período \(t\). Un lag de orden \(k\) se define como:

\[X_{t-k} = \text{lag}(X, k)\]

Por ejemplo, si hoy es \(t = \text{septiembre 2026}\), entonces: - \(X_{t-2}\) = valor de julio 2026 - \(X_{t-6}\) = valor de marzo 2026

🔑 Supuesto 4 (crítico): El Banco de la República decide la tasa monetaria con información desfasada. Cuando se reúne la Junta Directiva, solo tiene disponible la inflación publicada con 2 meses de rezago (por eso Inflacion_conocida = lag(Inflacion, 2)). Esto refleja la realidad institucional colombiana.

¿Por qué 2, 4 y 6 meses?

  • Lag 2: Captura la reacción inmediata (una decisión tras otra).
  • Lag 4: Captura el ciclo trimestral.
  • Lag 6: Captura el ciclo semestral (política monetaria tarda ~6 meses en transmitirse).

3.3.2 1.3.2 Variables económicas derivadas

3.3.2.1 Tasa Teórica

Tasa_Teorica = (Inflacion_conocida + SMMLV) / 2

Fórmula:

\[T_{\text{teórica}} = \frac{I_{t-2} + S_t}{2}\]

donde \(I_{t-2}\) es la inflación conocida y \(S_t\) es el SMMLV actual.

💡 Justificación: La tasa teórica es un referente de equilibrio. Si la inflación es alta, la tasa debería subir; si el SMMLV es alto (salarios altos → mayor consumo → presión inflacionaria), también. El promedio balancea ambos efectos.

3.3.2.2 Brecha Meta

Brecha_Meta = abs(Inflacion_conocida - Meta_Inf)

Fórmula:

\[B_{\text{meta}} = |I_{t-2} - I^*|\]

donde \(I^* = 0.03\) es la meta de inflación.

💡 Justificación: Mide qué tan lejos está la inflación de la meta. Si la brecha es grande, el banco debe actuar con mayor agresividad. El valor absoluto captura tanto inflación por encima como por debajo de la meta.

3.3.2.3 Tasa Real

Tasa_Real = Monetaria - Inflacion_conocida

Fórmula:

\[r_{\text{real}} = i - \pi\]

donde \(i\) es la tasa nominal y \(\pi\) la inflación. Es la ecuación de Fisher simplificada.

💡 Justificación: Mide el costo real del dinero. Una tasa real positiva indica política contractiva; una negativa indica política expansiva.

3.3.2.4 Poder Adquisitivo

Poder_Adquisitivo = ((SMMLV - Inflacion_conocida) / SMMLV) * 100

Fórmula:

\[PA = \frac{S - I_{t-2}}{S} \times 100\]

💡 Justificación: Cuantifica cuánto del salario mínimo se “come” la inflación. Si el poder adquisitivo cae, la presión social por aumentos salariales crece, lo que impacta la inflación futura.

3.3.2.5 Score de Restricción

Score_Restriccion = case_when(
  subidas_consecutivas >= 2 & Tasa_Real > 0.02 ~ 100,
  subidas_consecutivas == 1 & Tasa_Real > 0.02 ~ 90,
  abs(cambio_tasa_1) <= 0.0025 & Tasa_Real > 0.02 ~ 75,
  Tasa_Real > 0.03 ~ 70,
  Tasa_Real > 0.01 ~ 50,
  abs(Tasa_Real) <= 0.01 ~ 30,
  TRUE ~ 50
)

Interpretación:

Rango Significado
100 Política máximamente restrictiva (subidas consecutivas + tasa real alta)
90 Política restrictiva activa
75 Política estable con sesgo restrictivo
70 Restricción por tasa real alta
50 Política neutral
30 Política expansiva (tasa real cercana a cero)

💡 Justificación: Este score captura el estado de la política monetaria en una sola variable numérica. Es una transformación categórica que ayuda al Random Forest a capturar patrones no lineales.

3.3.3 1.3.3 Magnitud de Inflación (variable categórica)

Magnitud_Inflacion = case_when(
  Inflacion_conocida > 0.06 ~ "CRITICA",
  Inflacion_conocida > 0.045 ~ "MUY_ALTA",
  Inflacion_conocida > 0.04 ~ "ALTA",
  Inflacion_conocida >= 0.02 & Inflacion_conocida <= 0.04 ~ "META",
  Inflacion_conocida < 0.02 ~ "BAJA",
  TRUE ~ "DESCONOCIDA"
)

Interpretación de umbrales:

Categoría Rango Contexto
CRITICA > 6% Inflación descontrolada (raro en Colombia)
MUY_ALTA 4.5% – 6% Por encima del techo del rango meta
ALTA 4% – 4.5% Ligeramente por encima de la meta
META 2% – 4% Rango objetivo del Banco
BAJA < 2% Por debajo del piso del rango

💡 Justificación: El Random Forest captura mejor las relaciones cuando las variables son categóricas en regímenes económicos claramente diferenciados. Esta clasificación refleja los regímenes de política monetaria del Banco de la República.

3.3.4 1.3.4 Variables para el modelo TIBC (TOP 6)

top6_vars <- c("Monetaria_lag4", "Monetaria_lag6", "Monetaria_lag2",
               "Inflacion_pct", "Cambio3", "Inflacion_lag1")

Variable Cambio3:

\[Cambio3 = I_{t-2} - M_t\]

Es la brecha entre inflación y tasa monetaria. Si es positiva, la inflación supera a la tasa (política laxa); si es negativa, la tasa supera a la inflación (política restrictiva).

🔑 Supuesto 5: Estas 6 variables fueron seleccionadas por importancia en un modelo previo. NO se incluye el lag de la propia TIBC para evitar dependencia mecánica: el modelo debe explicar la TIBC a partir de condiciones económicas, no de su propio pasado.


3.4 1.4 Preparación de Datos para Modelos

3.4.1 Modelo Tasa Monetaria

datos_modelo_tasa <- Proyeccion %>%
  filter(mes_decision == TRUE) %>%
  dplyr::select(
    Monetaria = Monetaria_actual,
    Tasa_Teorica, Brecha_Meta, Score_Restriccion,
    Magnitud_Inflacion, score_divergencia, ratio_inflacion_smmlv
  ) %>%
  filter(complete.cases(.)) %>%
  mutate(Magnitud_Inflacion = as.factor(Magnitud_Inflacion))

Filtro mes_decision:

Los meses de decisión de política monetaria en Colombia son: enero, marzo, abril, junio, julio, septiembre, octubre y diciembre. Esto excluye febrero, mayo, agosto y noviembre (meses sin reunión de la Junta).

🔑 Supuesto 6: Solo los meses de decisión son relevantes para modelar la tasa monetaria, porque en los demás meses la tasa permanece constante por definición.

Resultado: 153 observaciones (después de eliminar NAs generados por los lags).

3.4.2 Modelo TIBC

datos_modelo_tibc <- Proyeccion %>%
  dplyr::select(TIBC = TIBC_pct, all_of(top6_vars), Fecha) %>%
  drop_na()

Resultado: 225 observaciones (todas las mensuales sin filtro).


3.5 1.5 Entrenamiento de Modelos

3.5.1 División Train/Test (80/20)

set.seed(123)
n_tasa <- nrow(datos_modelo_tasa)
train_indices_tasa <- sample(1:n_tasa, size = floor(0.8 * n_tasa))
train_data_tasa <- datos_modelo_tasa[train_indices_tasa, ]
test_data_tasa <- datos_modelo_tasa[-train_indices_tasa, ]

🔑 Supuesto 7: El 80% de los datos se usa para entrenar y el 20% para evaluar. Es una división aleatoria, no temporal, porque el objetivo es medir la capacidad de generalización, no hacer backtesting. Para backtesting puro se requeriría división cronológica.

3.5.2 Random Forest — Tasa Monetaria

modelo_rf_tasa <- randomForest(
  Monetaria ~ ., 
  data = train_data_tasa,
  ntree = 500, 
  mtry = 2, 
  importance = TRUE
)

Parámetros:

Parámetro Valor Significado
ntree 500 Número de árboles
mtry 2 Variables evaluadas en cada división
importance TRUE Calcula importancia de variables

Fundamento matemático de Random Forest:

Dado un conjunto de entrenamiento \(D = \{(x_i, y_i)\}_{i=1}^n\), Random Forest construye \(B\) árboles de decisión. Cada árbol \(T_b\) se entrena sobre una muestra bootstrap \(D_b\) y en cada nodo se evalúan mtry variables aleatorias.

La predicción final es el promedio de los \(B\) árboles:

\[\hat{y}(x) = \frac{1}{B} \sum_{b=1}^{B} T_b(x)\]

Varianza de la predicción:

\[\text{Var}[\hat{y}(x)] = \rho \sigma^2 + \frac{1-\rho}{B} \sigma^2\]

donde \(\rho\) es la correlación promedio entre árboles. Al aumentar \(B\) (500), el segundo término tiende a cero.

💡 ¿Por qué 500 árboles? Estudios empíricos muestran que el error se estabiliza entre 300 y 500 árboles. Menos de 300 da resultados inestables; más de 500 no aporta mejora significativa pero aumenta el tiempo de cómputo.

💡 ¿Por qué mtry = 2? Regla empírica: mtry = √p donde \(p\) es el número de variables. Para 6 variables, \(\sqrt{6} \approx 2.45\), se redondea a 2.


3.6 1.6 Evaluación y Validación

pred_test_tasa <- predict(modelo_rf_tasa, test_data_tasa)
r2_test_tasa <- 1 - sum((test_data_tasa$Monetaria - pred_test_tasa)^2) / 
  sum((test_data_tasa$Monetaria - mean(test_data_tasa$Monetaria))^2)
rmse_test_tasa <- sqrt(mean((test_data_tasa$Monetaria - pred_test_tasa)^2))

Fórmulas de las métricas:

R² (Coeficiente de determinación):

\[R^2 = 1 - \frac{SSE}{SST} = 1 - \frac{\sum_{i=1}^{n}(y_i - \hat{y}_i)^2}{\sum_{i=1}^{n}(y_i - \bar{y})^2}\]

RMSE (Root Mean Squared Error):

\[RMSE = \sqrt{\frac{1}{n}\sum_{i=1}^{n}(y_i - \hat{y}_i)^2}\]

MAPE (Mean Absolute Percentage Error):

\[MAPE = \frac{100\%}{n} \sum_{i=1}^{n} \left| \frac{y_i - \hat{y}_i}{y_i} \right|\]

Resultados obtenidos:

Modelo RMSE MAPE
Tasa Monetaria 93.13% 0.74 pp
TIBC 93.72% 3.71%

✅ Interpretación: Un R² de 93% indica que el modelo explica el 93% de la variabilidad histórica. Un RMSE de 0.74 pp significa que, en promedio, las predicciones se desvían menos de 1 punto porcentual del valor real.

3.6.1 Shuffle Test (Prueba de aleatoriedad)

test_shuffled_tibc$TIBC_shuffled <- sample(test_y_tibc)
pred_shuffled_tibc <- predict(modelo_rf_tibc, newdata = ...)
r2_shuffled_tibc <- cor(test_shuffled_tibc$TIBC_shuffled, pred_shuffled_tibc)^2 * 100

🔑 Supuesto 8: Si el modelo funciona incluso con etiquetas aleatorias, hay overfitting. Un R² ≈ 0% con etiquetas aleatorias confirma que el modelo no está memorizando sino aprendiendo patrones reales.

Resultado: R² = 0.01% → No hay overfitting.


3.7 1.7 Funciones de Predicción

predecir_tasa <- function(inflacion, smmlv, monetaria_actual = NULL) {
  tasa_teorica <- (inflacion + smmlv) / 2
  brecha_meta <- abs(inflacion - Meta_Inf)
  magnitud <- case_when(...)
  ratio_crisis <- (inflacion / smmlv) * 100
  score_restriccion <- ifelse(monetaria_actual > 0.11, 100, 75)
  score_divergencia_val <- ifelse(smmlv > inflacion * 2, 25, 0)
  
  nuevos_datos <- data.frame(...)
  prediccion <- predict(modelo_rf_tasa, nuevos_datos)
  prediccion <- max(prediccion, inflacion)
  return(as.numeric(prediccion))
}

Restricción económica:

\[\hat{T}_{\text{monetaria}} = \max(\hat{T}_{\text{RF}}, \pi)\]

🔑 Supuesto 9 (crítico): La tasa monetaria no puede ser inferior a la inflación, porque eso implicaría una tasa real negativa, situación incompatible con la política monetaria del Banco de la República. Esta restricción actúa como “guardarraíl económico”.


3.8 1.8 SARIMA para Inflación y DTF

ts_Inflacion <- ts(Indicadores$Inflacion, 
                   start = c(2007, 7), frequency = 12)
modelo_sarima <- Arima(ts_Inflacion, 
                       order = c(2, 0, 2), 
                       seasonal = list(order = c(2, 0, 0), period = 12))

Estructura SARIMA:

\[SARIMA(p,d,q)(P,D,Q)_s = SARIMA(2,0,2)(2,0,0)_{12}\]

Ecuación completa:

\[(1 - \phi_1 B - \phi_2 B^2)(1 - \Phi_1 B^{12} - \Phi_2 B^{24}) y_t = (1 + \theta_1 B + \theta_2 B^2) \varepsilon_t\]

donde: - \(B\) es el operador de rezago (\(By_t = y_{t-1}\)) - \(\phi_i\) son coeficientes autorregresivos - \(\Phi_i\) son coeficientes autorregresivos estacionales - \(\theta_i\) son coeficientes de media móvil - \(\varepsilon_t\) es ruido blanco con \(\varepsilon_t \sim N(0, \sigma^2)\)

🔑 Supuesto 10: La inflación tiene estacionalidad anual (efectos de diciembre, enero, cosechas, etc.). El componente \((P,D,Q)_s = (2,0,0)_{12}\) captura esta estacionalidad con 2 rezagos anuales.

3.8.1 Simulación Monte Carlo

n_simulaciones <- 10000
for(i in 1:n_simulaciones) {
  simulaciones_matrix_sarima[, i] <- simulate(modelo_sarima, 
                                              future = TRUE, 
                                              nsim = HORIZONTE_SARIMA)
}

Fundamento matemático:

Cada simulación \(j = 1, \ldots, 10000\) genera una trayectoria:

\[\{y_{T+1}^{(j)}, y_{T+2}^{(j)}, \ldots, y_{T+24}^{(j)}\}\]

A partir de las 10,000 trayectorias se calculan los percentiles en cada horizonte:

\[P_{50}(h) = \text{quantile}_{0.50}\left(\{y_{T+h}^{(j)}\}_{j=1}^{10000}\right)\]

\[P_{70}(h) = \text{quantile}_{0.70}\left(\{y_{T+h}^{(j)}\}_{j=1}^{10000}\right)\]

\[P_{85}(h) = \text{quantile}_{0.85}\left(\{y_{T+h}^{(j)}\}_{j=1}^{10000}\right)\]

🔑 Supuesto 11: Los residuos del modelo SARIMA son ruido blanco gaussiano. Esta asunción permite usar simulación Monte Carlo con distribución normal.

💡 ¿Por qué 10,000 simulaciones? La desviación estándar del percentil estimado decrece con \(\sqrt{n}\). Con 10,000 simulaciones, el error estándar del P50 es aproximadamente \(\sigma / \sqrt{10000} = \sigma / 100\), suficientemente pequeño.


3.9 1.9 Extensión Constante (meses 25 a 72)

Después del mes 24, el código congela el valor en el último percentil simulado:

ultimo_valor_sarima <- apply(simulaciones_matrix_sarima, 2, function(x) x[HORIZONTE_SARIMA])
for(j in 1:n_simulaciones) {
  simulaciones_matrix_total[(HORIZONTE_SARIMA + 1):HORIZONTE_TOTAL, j] <- ultimo_valor_sarima[j]
}

🔑 Supuesto 12 (muy importante): Más allá de 24 meses, la incertidumbre SARIMA crece exponencialmente y las proyecciones pierden valor informativo. Congelar el valor es una decisión conservadora y prudente que evita extrapolaciones absurdas.

Justificación matemática:

La varianza de una predicción SARIMA a horizonte \(h\) crece aproximadamente como:

\[\text{Var}[\hat{y}_{T+h}] \approx \sigma^2 \sum_{i=0}^{h-1} \psi_i^2\]

donde \(\psi_i\) son los coeficientes MA(∞) del modelo. Para \(h > 24\), esta varianza puede superar el 100% del valor puntual, haciendo la proyección inútil.


3.10 1.10 Construcción de Escenarios

resultados_neutro <- aplicar_modelos_escenario(percentiles$P70, smmlv_actual_val, tasa_actual_val, "Neutro", fechas_proyeccion)
resultados_pesimista <- aplicar_modelos_escenario(percentiles$P85, smmlv_actual_val, tasa_actual_val, "Pesimista", fechas_proyeccion)
resultados_optimista <- aplicar_modelos_escenario(percentiles$P50, smmlv_actual_val, tasa_actual_val, "Optimista", fechas_proyeccion)
Escenario Percentil Interpretación
Optimista P50 Hay 50% de probabilidad de que la inflación sea menor
Neutro P70 Hay 70% de probabilidad de que la inflación sea menor
Pesimista P85 Hay 85% de probabilidad de que la inflación sea menor

🔑 Supuesto 13: Los escenarios reflejan la distribución probabilística de la inflación futura, no escenarios arbitrarios. Esto permite a los tomadores de decisiones elegir el nivel de riesgo que desean cubrir.


3.11 1.11 Cálculo de USURA y Archivos Finales

tabla_usura <- tabla_proyeccion %>%
  mutate(
    USURA_Optimista = TIBC_Optimista * 1.5,
    USURA_Neutro = TIBC_Neutro * 1.5,
    USURA_Pesimista = TIBC_Pesimista * 1.5
  )

Fórmula:

\[USURA = TIBC \times 1.5\]

🔑 Supuesto 14: El multiplicador 1.5 está fijado por la Superintendencia Financiera de Colombia y es de cumplimiento obligatorio.

4 Sección 2: Supuestos Clave del Modelo

Esta sección consolida todos los supuestos que garantizan que las proyecciones sean válidas. Si alguno de estos supuestos se viola, la interpretación de los resultados debe ajustarse.

4.1 2.1 Supuestos de datos

# Supuesto Implicación si se viola
1 Los valores están en decimal Los modelos darían errores o resultados absurdos
2 La fecha de corte refleja la última observación real Se incluiría información futura (data leakage)
3 Los datos están ordenados cronológicamente Los lags quedarían mal calculados
4 No hay valores faltantes (excepto los primeros lags) El modelo descartaría filas incompletas

4.2 2.2 Supuestos económicos

# Supuesto Justificación
5 La inflación se conoce con 2 meses de rezago Rezago real de publicación del DANE
6 Las decisiones de política se toman en meses específicos Calendario oficial de la Junta del Banco
7 La tasa monetaria nunca es inferior a la inflación Evita tasas reales negativas extremas
8 La meta de inflación se mantiene en 3% Rango objetivo del Banco de la República

4.3 2.3 Supuestos estadísticos

# Supuesto Implicación
9 Los residuos SARIMA son ruido blanco gaussiano Válida para simulación Monte Carlo
10 La inflación tiene estacionalidad anual Justifica el componente (P,D,Q)_12
11 Las relaciones no lineales entre variables Justifica el uso de Random Forest
12 Los datos siguen una distribución estable Las predicciones son comparables en el tiempo

4.4 2.4 Supuestos de proyección

# Supuesto Justificación
13 El horizonte SARIMA útil es de 24 meses Más allá, la varianza explota
14 El valor constante es una aproximación conservadora Evita extrapolaciones sin base
15 Los escenarios P50/P70/P85 son suficientes Cubren el rango de decisiones típicas
16 El multiplicador de USURA se mantiene en 1.5 Norma vigente colombiana

⚠️ Importante: Estos supuestos son condiciones necesarias para que las proyecciones sean válidas. Si el entorno económico cambia estructuralmente (por ejemplo, una reforma monetaria), los supuestos deben revisarse.

5 Sección 3: Metodología Completa y Resultados

5.1 3.1 Carga y organización de la información

El primer paso consiste en cargar la información histórica: inflación, tasa monetaria, TIBC, DTF y SMMLV. La información se organiza cronológicamente porque los modelos utilizan la estructura temporal de las series.

💡 Principio fundamental: Los modelos de series económicas deben respetar la secuencia temporal. La información futura no debe utilizarse para explicar el pasado (no look-ahead bias).

5.2 3.2 Definición de la fecha de corte

La fecha de corte permite diferenciar entre información histórica (observada) y proyectada (estimada). Se actualiza mensualmente.

5.3 3.3 Preparación de las variables

Los valores se manejan internamente como proporciones decimales (\(0.12 = 12\%\)) y se convierten a porcentaje solo para presentación (\(0.12 \times 100 = 12\%\)).

5.4 3.4 Construcción de variables rezagadas

Las tasas de interés no reaccionan instantáneamente. Los rezagos permiten incorporar esta dinámica temporal al modelo.

5.5 3.5 Variable Cambio3

\[Cambio3 = I_{t-2} - M_t\]

Captura la brecha entre inflación y postura monetaria.

5.6 3.6 Random Forest para la Tasa Monetaria

\[\hat{y}(x) = \frac{1}{B} \sum_{b=1}^{B} T_b(x)\]

con \(B = 500\) árboles.

5.7 3.7 Restricción económica

\[\hat{T}_{\text{monetaria}} \geq \pi\]

5.8 3.8 Evaluación del modelo

Métrica Fórmula Valor
\(1 - SSE/SST\) 93.13%
RMSE \(\sqrt{\text{mean}((y-\hat{y})^2)}\) 0.74 pp
MAPE \(\text{mean}(|y-\hat{y}|/y)\) 3.71%

5.9 3.9 Random Forest para la TIBC

Variables: 6 del TOP 6 (sin lag de TIBC).

5.10 3.10 Proyección de Inflación mediante SARIMA

\[SARIMA(2,0,2)(2,0,0)_{12}\]

5.11 3.11 Simulación Monte Carlo

10,000 simulaciones → percentiles P50, P70, P85.

5.12 3.12 Construcción de escenarios

Optimista (P50), Neutro (P70), Pesimista (P85).

5.13 3.13 Proyección de la Tasa Monetaria

Cada escenario de inflación alimenta la función predecir_tasa().

5.14 3.14 Proyección de la TIBC

\[I \rightarrow M \rightarrow \text{Variables} \rightarrow TIBC\]

5.15 3.15 Horizonte de proyección

\[72 = 24 + 48\]

5.16 3.16 Cálculo de la situación actual

Más de 12 indicadores calculados en tiempo real.

5.17 3.17 Regla para la decisión sobre la Tasa Monetaria

\[\Delta = T_{\text{sugerida}} - T_{\text{actual}}\]

  • \(\Delta > +0.25 \rightarrow\) SUBIR
  • \(\Delta < -0.25 \rightarrow\) BAJAR
  • \(|\Delta| \leq 0.25 \rightarrow\) MANTENER

5.18 3.18 Intervalos de incertidumbre

\[IC_{95\%} = \hat{Y} \pm 1.96 \times RMSE\]

5.19 3.19 Proyección de la USURA

\[USURA = TIBC \times 1.5\]

5.20 3.20 Archivos generados

Archivo Contenido Uso
tibc.csv Histórico + proyección Tableros y gráficos
Tasas.csv Proyecciones Seguimiento de tasas
tabla_proyeccion_completa.csv Proyección detallada Análisis económico
tabla_historica.csv Serie histórica Gráficos históricos
tabla_usura.csv USURA proyectada Seguimiento de límites
metricas.rds Métricas de modelos Validación
situacion_actual.rds Diagnóstico actual Indicadores del tablero

5.21 3.21 Verificación de consistencia

Se verifica: existencia de archivos, número de filas, tipos de variables, longitud del horizonte, disponibilidad de escenarios.

Salida esperada: EJECUCION COMPLETADA EXITOSAMENTE

5.22 3.22 Interpretación de resultados

Cuatro niveles:

  1. Resultado actual: Situación observada
  2. Proyección central: Trayectoria estimada
  3. Escenarios: Diferentes condiciones económicas
  4. Intervalos: Nivel de incertidumbre

Una TIBC proyectada de 20% con intervalo de 18% a 22% debe interpretarse como estimación central de 20%, con rango de incertidumbre — NO como un valor exacto.

5.23 3.23 Resumen del proceso completo

  1. Cargar datos históricos
  2. Ordenar cronológicamente
  3. Establecer fecha de corte
  4. Validar y transformar variables
  5. Construir variables rezagadas
  6. Entrenar Random Forest
  7. Evaluar con datos de prueba
  8. Estimar inflación con SARIMA
  9. Realizar 10,000 simulaciones Monte Carlo
  10. Construir escenarios
  11. Proyectar Tasa Monetaria
  12. Proyectar TIBC
  13. Calcular intervalos
  14. Obtener USURA
  15. Construir situación actual
  16. Integrar históricos y proyecciones
  17. Generar CSV y RDS
  18. Verificar consistencia
  19. Consumir en Power BI / Shiny

✅ Conclusión metodológica: El modelo combina información histórica, machine learning, series de tiempo y simulación probabilística para generar proyecciones económicas bajo diferentes escenarios, manteniendo explícita la incertidumbre asociada.

6 Referencias Bibliográficas

  1. Breiman, L. (2001). Random Forests. Machine Learning, 45(1), 5–32.
  2. Hyndman, R.J., & Athanasopoulos, G. (2021). Forecasting: Principles and Practice (3rd ed.). OTexts.
  3. Banco de la República de Colombia. Series estadísticas. https://www.banrep.gov.co
  4. Superintendencia Financiera de Colombia. Tasa de usura. https://www.superfinanciera.gov.co
  5. Liaw, A., & Wiener, M. (2002). Classification and Regression by randomForest. R News, 2(3), 18–22.
  6. R Core Team (2024). R: A Language and Environment for Statistical Computing. https://www.R-project.org/
  7. Box, G.E.P., Jenkins, G.M., Reinsel, G.C., & Ljung, G.M. (2015). Time Series Analysis: Forecasting and Control (5th ed.). Wiley.
  8. James, G., Witten, D., Hastie, T., & Tibshirani, R. (2021). An Introduction to Statistical Learning (2nd ed.). Springer.
  9. DANE. Índice de Precios al Consumidor (IPC). https://www.dane.gov.co
  10. Fisher, I. (1930). The Theory of Interest. Macmillan.

7 Resumen Ejecutivo

Este modelo:

  1. Integra 3 metodologías: Random Forest, SARIMA y Monte Carlo.
  2. Predice 5 variables: Tasa Monetaria, TIBC, Inflación, DTF y Usura.
  3. Genera 3 escenarios: Optimista (P50), Neutro (P70), Pesimista (P85).
  4. Proyecta 72 meses: 24 con SARIMA real + 48 constantes.
  5. Exporta 14+ archivos listos para Power BI.
  6. Se actualiza mensualmente cambiando la fecha de corte.

Precisión: R² > 93% en ambos modelos. Sin overfitting (Shuffle Test ≈ 0%).

Supuestos clave: 16 supuestos documentados (datos, económicos, estadísticos y de proyección).

Replicabilidad: Este manual permite a cualquier analista con conocimientos básicos de R replicar el modelo desde cero.

📖 Documento generado automáticamente con R Markdown