El presente documento describe el diseño, la implementación y los resultados del Modelo Integrado de Predicción de Tasas de Interés, una herramienta cuantitativa desarrollada para anticipar el comportamiento de la Tasa Monetaria, la TIBC (Tasa de Interés Bancario Corriente), la DTF, la Inflación y la USURA en el contexto financiero colombiano.
El modelo combina tres enfoques metodológicos complementarios:
El sistema genera proyecciones a 72 meses (48 meses con SARIMA real + 24 meses con valor constante), exportando más de 14 archivos en formato CSV y RDS que alimentan tableros interactivos en Power BI y Shiny.
El manual documenta además los 16 supuestos clave (de datos, económicos, estadísticos y de proyección) que garantizan la validez de los resultados, las fórmulas matemáticas utilizadas y la justificación metodológica de cada decisión de diseño.
En Colombia, la TIBC (Tasa de Interés Bancario Corriente) es la tasa máxima de referencia que las entidades financieras pueden aplicar a créditos de libranza, consumo y microcrédito. Su valor es certificado mensualmente por la Superintendencia Financiera de Colombia y depende directamente de:
Sobre la TIBC se calcula la USURA (TIBC × 1.5), que es el límite legal máximo por encima del cual cobrar intereses constituye delito en Colombia. Por lo tanto, conocer con anticipación el comportamiento de estas tasas es crítico para la planeación financiera, la estructuración de portafolios y el cumplimiento normativo.
La organización enfrenta las siguientes limitaciones para anticipar el comportamiento de las tasas:
Ausencia de un modelo cuantitativo formal que integre las múltiples variables macroeconómicas que determinan la TIBC y la USURA.
Dependencia de métodos manuales o heurísticos que no permiten cuantificar la incertidumbre asociada a las proyecciones.
Falta de escenarios diferenciados que permitan a los tomadores de decisiones elegir su nivel de exposición al riesgo.
Desconexión entre el análisis estadístico y la visualización ejecutiva, dificultando la interpretación de resultados por parte de áreas no técnicas.
Necesidad de cumplimiento normativo proactivo frente a los límites legales de USURA, evitando riesgos regulatorios y reputacionales.
¿Cómo construir un modelo cuantitativo que permita proyectar de manera confiable la Tasa Monetaria, la TIBC, la DTF, la Inflación y la USURA a un horizonte de 72 meses, incorporando la incertidumbre asociada y generando escenarios probabilísticos útiles para la toma de decisiones financieras?
El desarrollo de este modelo se justifica por:
Diseñar e implementar un modelo integrado de predicción que permita estimar la Tasa Monetaria, la TIBC, la DTF, la Inflación y la USURA a un horizonte de 72 meses, mediante la combinación de técnicas de machine learning (Random Forest), modelos de series temporales (SARIMA) y simulación probabilística (Monte Carlo), generando escenarios diferenciados y archivos consumibles por herramientas de visualización como Power BI y Shiny.
Diseñar y calcular las variables derivadas necesarias para capturar la dinámica económica de las tasas, incluyendo rezagos temporales (lags), tasas reales, brechas frente a la meta de inflación, scores de restricción monetaria y clasificaciones categóricas de la magnitud inflacionaria.
Entrenar dos modelos independientes de Random Forest:
Ajustar modelos SARIMA de orden \((2,0,2)(2,0,0)_{12}\) para la inflación y la DTF, capturando tanto la dinámica de corto plazo como la estacionalidad anual.
Generar 10.000 trayectorias simuladas de inflación y DTF, calculando los percentiles P50, P70 y P85 que definirán los escenarios Optimista, Neutro y Pesimista respectivamente.
Derivar la tasa de usura proyectada aplicando el multiplicador legal de 1.5 sobre la TIBC en cada uno de los tres escenarios.
Producir un horizonte completo de 72 meses (48 meses con proyección SARIMA real + 24 meses con valor constante), evitando extrapolaciones con varianza creciente que invalidarían las predicciones.
Evaluar los modelos mediante métricas estándar (\(R^2\), RMSE, MAPE) y aplicar un Shuffle Test para verificar la ausencia de sobreajuste (overfitting).
Generar los archivos CSV y RDS necesarios para alimentar tableros interactivos en Power BI y Shiny, incluyendo históricos, proyecciones, escenarios, intervalos de confianza, usura y métricas.
Elaborar un manual técnico que documente explícitamente:
Asegurar que cualquier analista con conocimientos básicos de R pueda replicar el modelo desde cero siguiendo el manual, actualizándolo mensualmente con solo modificar la fecha de corte.
| # | Objetivo Específico | Indicador de Cumplimiento |
|---|---|---|
| 1 | Construir el sistema de ingeniería de variables | 15+ variables derivadas calculadas correctamente |
| 2 | Entrenar modelo Random Forest para Tasa Monetaria | \(R^2 > 90\%\) en conjunto de prueba |
| 3 | Entrenar modelo Random Forest para TIBC | \(R^2 > 90\%\) en conjunto de prueba |
| 4 | Ajustar modelo SARIMA para inflación | AIC/BIC comparables con alternativas |
| 5 | Ajustar modelo SARIMA para DTF | Residuos sin autocorrelación significativa |
| 6 | Ejecutar 10,000 simulaciones Monte Carlo | Percentiles P50, P70, P85 calculados sin errores |
| 7 | Calcular USURA para 3 escenarios | Fórmula \(TIBC \times 1.5\) aplicada correctamente |
| 8 | Generar proyecciones a 72 meses | Archivos con 72 filas de proyección + 231 históricas |
| 9 | Validar desempeño | Shuffle Test \(R^2 < 5\%\) (sin overfitting) |
| 10 | Exportar archivos para Power BI | 14+ archivos CSV/RDS generados sin errores |
| 11 | Documentar supuestos y metodología | Manual técnico con 16 supuestos explícitos |
| 12 | Garantizar reproducibilidad | Cualquier analista puede replicar el 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:
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.
| 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 |
El flujo del modelo sigue una estructura de procesamiento secuencial en cinco etapas:
Esta sección documenta cada bloque del código R, explicando qué hace, por qué se hace así, y qué supuestos implica.
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 |
options(scipen = 999) |
Desactiva notación científica | Mejora la legibilidad de los números |
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 constanteVariables 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 |
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:
Esta es la sección más crítica del modelo. Se construyen variables derivadas que capturan la dinámica económica.
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}\): - \(X_{t-2}\) = valor de julio 2026 - \(X_{t-6}\) = valor de marzo 2026
¿Por qué 2, 4 y 6 meses?
Fórmula:
\[T_{\text{teórica}} = \frac{I_{t-2} + S_t}{2}\]
Fórmula:
\[B_{\text{meta}} = |I_{t-2} - I^*|\]
Fórmula:
\[r_{\text{real}} = i - \pi\]
Fórmula:
\[PA = \frac{S - I_{t-2}}{S} \times 100\]
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
)| Rango | Significado |
|---|---|
| 100 | Política máximamente restrictiva |
| 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 |
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"
)| Categoría | Rango | Contexto |
|---|---|---|
| CRITICA | > 6% | Inflación descontrolada |
| 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 |
top6_vars <- c("Monetaria_lag4", "Monetaria_lag6", "Monetaria_lag2",
"Inflacion_pct", "Cambio3", "Inflacion_lag1")Variable Cambio3:
\[Cambio3 = I_{t-2} - M_t\]
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 son enero, marzo, abril, junio, julio, septiembre, octubre y
diciembre.
Resultado: 153 observaciones.
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, ]modelo_rf_tasa <- randomForest(
Monetaria ~ .,
data = train_data_tasa,
ntree = 500,
mtry = 2,
importance = TRUE
)| 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:
\[\hat{y}(x) = \frac{1}{B} \sum_{b=1}^{B} T_b(x)\]
\[\text{Var}[\hat{y}(x)] = \rho \sigma^2 + \frac{1-\rho}{B} \sigma^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 | R² | RMSE | MAPE |
|---|---|---|---|
| Tasa Monetaria | 90.01% | 0.89 pp | 8.64% |
| TIBC | 90.38% | 3.71% | 1.12pp |
Resultado: R² = 0.01% → No hay overfitting.
Restricción económica:
\[\hat{T}_{\text{monetaria}} = \max(\hat{T}_{\text{RF}}, \pi)\]
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)\)
Fundamento matemático:
Cada simulación \(j = 1, \ldots, 10000\) genera una trayectoria:
\[\{y_{T+1}^{(j)}, y_{T+2}^{(j)}, \ldots, y_{T+48}^{(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)\]
Después del mes 48, 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]
}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\]
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 |
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\]
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.
| # | 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 |
| # | 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 |
| # | 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 |
| # | Supuesto | Justificación |
|---|---|---|
| 13 | El horizonte SARIMA útil es de 48 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 |
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.
La fecha de corte permite diferenciar entre información histórica (observada) y proyectada (estimada). Se actualiza mensualmente.
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\%\)).
Las tasas de interés no reaccionan instantáneamente. Los rezagos permiten incorporar esta dinámica temporal al modelo.
\[Cambio3 = I_{t-2} - M_t\]
Captura la brecha entre inflación y postura monetaria.
\[\hat{y}(x) = \frac{1}{B} \sum_{b=1}^{B} T_b(x)\]
con \(B = 500\) árboles.
\[\hat{T}_{\text{monetaria}} \geq \pi\]
| Métrica | Fórmula | Valor |
|---|---|---|
| R² | \(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% |
Variables: 6 del TOP 6 (sin lag de TIBC).
\[SARIMA(2,0,2)(2,0,0)_{12}\]
10,000 simulaciones → percentiles P50, P70, P85.
Optimista (P50), Neutro (P70), Pesimista (P85).
Cada escenario de inflación alimenta la función
predecir_tasa().
\[I \rightarrow M \rightarrow \text{Variables} \rightarrow TIBC\]
\[72 = 48 + 24\]
Más de 12 indicadores calculados en tiempo real.
\[\Delta = T_{\text{sugerida}} - T_{\text{actual}}\]
\[IC_{95\%} = \hat{Y} \pm 1.96 \times RMSE\]
\[USURA = TIBC \times 1.5\]
| 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 |
Se verifica: existencia de archivos, número de filas, tipos de variables, longitud del horizonte, disponibilidad de escenarios.
Salida esperada:
EJECUCION COMPLETADA EXITOSAMENTE
Cuatro niveles:
Este modelo: