Caso Riesgo de Crédito - Linea Crecer (Taller 2)
Desde el año 2019, el gobierno colombiano, a través del programa Fondo Emprender – Línea Crecer del SENA, ha impulsado el acceso al crédito para emprendedores con el objetivo de dinamizar la economía y fomentar la creación de nuevas unidades productivas. Sin embargo, como ocurre en muchos sistemas de financiamiento público, el reto no solo es otorgar créditos, sino garantizar su recuperación efectiva. Se estima que la tasa de cartera vencida ronda el 84%, lo que evidencia una alta probabilidad de impago y pone en riesgo la sostenibilidad del programa.
Este estudio de caso se enmarca en la metodología CRISP-DM, con el fin de construir modelos analíticos que permitan responder preguntas clave para optimizar la toma de decisiones dentro del proceso de otorgamiento y seguimiento de créditos. A través del análisis de una muestra de 32.000 registros de crédito, se pretende abordar los siguientes interrogantes:
¿Cuáles son los factores determinantes para modelar el riesgo de crédito y la probabilidad de impago?
¿Cuáles son las principales reglas que se deben tener en cuenta para priorizar una estrategia de recuperación de cartera centrada en los créditos con mayor riesgo?
¿Cuáles serían las características idóneas de un crédito de bajo riesgo que maximice la recuperación de la cartera?
¿Cómo se puede realizar una estimación precisa del monto óptimo a otorgar a un solicitante?
¿Qué variables adicionales podrían integrarse en una futura versión 2.0 del modelo para mejorar su capacidad predictiva y operativa?
MODELO 1: MODELOS DE REGRESIÓN LOGIT PARA ESTIMAR PROBABILIDAD DE IMPAGO
Fase 1: Comprensión del negocio 📈
Imagina miles de ideas de negocio naciendo cada año en Colombia. Jóvenes emprendedores, algunos con estudios técnicos, otros con solo una gran idea en mente, presentan sus planes con la esperanza de recibir apoyo del Fondo Emprender del SENA. Este programa del Estado, creado para impulsar el emprendimiento a través de capital semilla, representa mucho más que recursos financieros: es una promesa de transformación social, de movilidad económica y de generación de empleo.
Pero detrás de esa noble intención, se esconde un desafío silencioso pero contundente: una tasa de morosidad cercana al 84%. En otras palabras, de cada 10 créditos otorgados, más de 8 terminan sin ser pagados. Esta situación pone en riesgo la sostenibilidad del programa y su capacidad de seguir apoyando nuevos emprendedores.
Entonces surge una pregunta urgente: ¿Cómo puede el Fondo Emprender mejorar su toma de decisiones y evitar financiar ideas que probablemente terminarán en default?
La respuesta no está en eliminar el riesgo (porque el emprendimiento en sí es riesgoso), sino en gestionar el riesgo inteligentemente. Aquí es donde la analítica de datos entra en acción.
En esta primera etapa del ciclo CRISP-DM, nos enfocaremos en la fase de comprensión del negocio, una etapa fundamental para alinear los objetivos analíticos con los intereses reales del programa Fondo Emprender. Siguiendo la guía del modelo, abordaremos 9 aspectos clave:
Contexto comercial
Objetivos comerciales
Criterios de rendimiento comercial
Evaluación de la situación actual
Requisitos, supuestos y restricciones
Análisis de costos-beneficios
Objetivos de minería de datos
Criterios de rendimiento para los modelos
Plan del proyecto
Esta fase no solo sienta las bases para el modelado posterior, sino que nos permite entender el problema desde el lenguaje del negocio, no solo desde los datos.
1. Contexto comercial
El Fondo Emprender es un programa del SENA destinado a financiar iniciativas empresariales de emprendedores mediante capital semilla. Su propósito es impulsar proyectos innovadores en todos los sectores económicos, otorgando recursos no reembolsables (hasta 50 millones de pesos por beneficiario) y asesoría técnica. Sin embargo, la cartera actual del programa presenta un nivel de morosidad muy alto, cercano al 84% según datos reportados, lo que indica un riesgo crediticio crítico. Esta situación pone en evidencia la necesidad de mejorar la toma de decisiones en el otorgamiento de créditos. En otras palabras, es fundamental contar con análisis avanzados que identifiquen qué emprendedores tienen mayor probabilidad de impago para optimizar la asignación de recursos.
Diagrama de PESTEL- Análisis de entorno
2. Objetivos comerciales
En este proyecto, los objetivos de negocio están orientados a reforzar la sostenibilidad financiera del Fondo Emprender mediante el uso de analítica de datos. Se busca principalmente:
- Mejorar el proceso de otorgamiento de créditos, introduciendo criterios cuantitativos en la evaluación de los proyectos
- Disminuir la tasa de impago mediante la identificación temprana de riesgos crediticios
- Optimizar la recuperación de cartera enfocando esfuerzos de cobranza en los deudores de alto riesgo. Estos objetivos se establecen como metas de negocio y deberán traducirse en criterios de éxito claros (por ejemplo, una reducción porcentual de la mora)
De esta forma se alinean con la primera fase del CRISP-DM, donde se definen los resultados esperados del proyecto desde la perspectiva del negocio
3. Criterios de rendimiento comercial
¿Cómo sabremos si el análisis fue útil? Aquí están los indicadores clave:
Reducción de la tasa de mora al comparar antes/después del modelo.
Ahorro en costos de recuperación de cartera (menos esfuerzos jurídicos, cobros, etc.).
Mayor eficiencia en el proceso de evaluación (menos tiempo por solicitud).
Incremento en el porcentaje de créditos exitosamente pagados.
Este no es solo un ejercicio técnico: los resultados tienen impacto real en las finanzas del Estado y el futuro de miles de emprendedores.
4. Evaluación de situación actual
Imaginemos al analista del Fondo Emprender... Cada día recibe decenas de solicitudes. Algunas suenan prometedoras. Otras, no tanto. Pero no tiene una herramienta estadística que le diga con datos cuál es cuál. La situación actual:
Evaluaciones basadas en intuición y criterios cualitativos.
No hay predicción formal del riesgo.
Se otorgan créditos incluso sin considerar historial crediticio.
Se desconoce cuáles son los factores realmente determinantes del default.
Diagrama DOFA- Evaluación de situación actual
5. Requisitos, supuestos y restricciones
Supuestos del modelo de regresión logística a emplear:
Relación lineal entre variables independientes y el logit de la probabilidad de impago.
Independencia entre las observaciones (cada crédito debe ser un caso separado).
Ausencia de multicolinealidad entre predictores.
Muestra suficientemente grande para entrenar el modelo.
Restricciones:
Los datos han sido modificados y encriptados por confidencialidad, lo que podría afectar ciertas relaciones estadísticas.
Algunas variables pueden no tener el nivel de granularidad ideal.
La decisión final de otorgar el crédito no será únicamente determinada por el modelo (debe complementarse con juicio profesional y políticas institucionales).
6. Análisis costo/beneficio
Este proyecto no es gratuito:
Requiere tiempo de analistas, procesamiento de datos, desarrollo y validación del modelo.
Puede requerir entrenamiento interno para interpretar los resultados.
Pero los beneficios lo justifican ampliamente:
Incluso una reducción del 10% en la tasa de impago significaría recuperar miles de millones de pesos.
Se prioriza el uso de recursos públicos de forma más estratégica y justa.
Se reduce la presión sobre los procesos de cobranza y auditoría.
Se genera trazabilidad, transparencia y evidencia de las decisiones tomadas.
7. Objetivos de Data Mining
Ya tenemos las preguntas del negocio. Ahora las traducimos al lenguaje del análisis:
¿Podemos predecir la probabilidad de impago con base en las variables disponibles?
¿Qué características tienen los emprendedores que sí pagan sus créditos?
¿Cuáles son las variables que más influencian el riesgo (edad, ingresos, tipo de préstamo, etc.)?
¿Podemos identificar patrones de riesgo ocultos que no sean evidentes a simple vista?
El objetivo es un modelo que permita anticipar el riesgo, no reaccionar al problema.
8. Criterios de rendimiento de los modelos
9. Plan del proyecto
| Semana | Etapa | Actividades principales | Entregables principales |
|---|---|---|---|
| 1 | Comprensión del negocio | - Identificación de objetivos comerciales - Análisis PESTEL y DOFA - Revisión del contexto y problemática del Fondo Emprender |
Documento de comprensión del negocio (Fase 1) |
| 2 | Preparación y exploración de datos | - Limpieza de la base riesgo_crecer.csv- Tratamiento de valores nulos - Análisis exploratorio (EDA) |
Dataset limpio y visualizaciones iniciales |
| 2-3 | Modelado | - Construcción del modelo de regresión logística - Pruebas con variables significativas |
Modelo entrenado y resultados iniciales |
| 2-3 | Evaluación del modelo | - Cálculo de métricas (Accuracy, Recall, F1, AUC-ROC) - Interpretación de coeficientes |
Matriz de confusión, curva ROC y análisis interpretativo |
| 4 | Despliegue y storytelling final | - Elaboración de conclusiones - Visualización final de hallazgos - Presentación ejecutiva del modelo |
Notebook final con storytelling y presentación explicativa |
Fase 2. Comprension de los datos 📊
En esta segunda fase nos enfocaremos en tratar las 4 etapas que nos enuncia la guia ModelerCRISPDM.pdf:
Recolección inicial de los datos
Descripción de los datos
Exploración de los datos
Verificación de la calidad de los datos
1. Recolección inicial de los datos
Se nos proporcionó una base de datos .csv
Por consiguiente, se asume que la posibilidad de adquirir nuevos datos es inexistente
2. Descripción de los datos
| Variable | Tipo de Dato | Descripción | Valores/Ejemplo |
|---|---|---|---|
edad |
Entero | Edad del emprendedor. | 23, 45, 32 |
ingresoanual |
Numérico | Ingreso anual del emprendedor. | 12,000,000, 35,000,000 |
tipovivienda |
Factor | Tipo de vivienda en la que habita. | Propia, Familiar, Alquilada, Otra |
aniosempleo |
Entero | Años que lleva el emprendedor en su empleo actual. | 0, 5, 12 |
destinacion |
Factor | Finalidad del crédito solicitado. | Capital de trabajo, Compra de equipo, etc. |
tipoprestamo |
Factor | Tipo de préstamo asignado por categoría. | A, B, C, D |
monto_prestamo |
Numérico | Valor desembolsado del préstamo en pesos colombianos. | 10,000,000, 30,000,000 |
tasainteres |
Numérico | Tasa de interés (%) aplicada al préstamo. | 10.5, 25.0 |
estadodeuda |
Factor (Binario) | Estado actual de la deuda. | 1 = Activa, 0 = Inactiva |
default |
Factor (Binario) | Indica si hubo impago del crédito. | 0 = No paga, 1 = Sí paga |
historiacreditos |
Entero | Número total de créditos anteriores del solicitante con otras entidades. | 0, 2, 5, 12 |
3. Exploración de los datos
Path analysis
4. Verificación de la calidad de los datos
Haciendo una visualización muy poco ortodoxa de la base de datos, se aprecian inconsistencias en los datos; por ejemplo, variables que son factores como numéricas . Por tal motivo, no es necesario hacer un análisis exploratorio para darse cuenta de que esta base requiere un proceso de data cleansing
Fase 3: Preparación de los datos ⬆️
Para esta fase seguiremos la siguiente ruta de preparación de datos:
- Cargue de datos
- Designación de la tipología de las variables
- Selección de los datos
- Depuración de los datos
- Transformación de las variables
- Separación de las muestras
Cargue de datos
#Instalación de librerías
library(tidyverse) # instalando la librería tidyverse para preparación de datos
# Install the 'caret' package in R
install.packages("caret", dependencies = TRUE)
library(caret)
#Instalación de librerías rpart y rpart.plot
install.packages("rpart")
install.packages("rpart.plot")
library(rpart)
library(rpart.plot)
df<-read.csv("/content/riesgo_crecer.csv") #carga la tabla de datos en el entorno de R
head(df) # Previsualización del archivo de datos (las seis primeras filas)
summary(df) # Estadísticas descriptivas de la tabla de datos
| X | edad | ingresoanual | tipovivienda | aniosempleo | destinacion | tipoprestamo | monto_prestamo | tasainteres | estadodeuda | default | historiacreditos | ponderador | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| <int> | <int> | <int> | <chr> | <int> | <chr> | <chr> | <int> | <dbl> | <int> | <int> | <int> | <chr> | |
| 1 | 1 | 24 | 31200 | Alquilada | 7 | Médico | B | 8000 | 11.49 | 0 | 0 | 2 | 1 |
| 2 | 2 | 22 | 50433 | Alquilada | 6 | Venture | B | 5000 | 10.71 | 0 | 0 | 4 | 1 |
| 3 | 3 | 24 | 44000 | Alquilada | 0 | Médico | A | 8500 | 7.51 | 0 | 0 | 4 | 1 |
| 4 | 4 | 32 | 89000 | Alquilada | 0 | Médico | A | 12000 | 8.94 | 0 | 0 | 6 | 1 |
| 5 | 5 | 25 | 37000 | Propia | 6 | Médico | B | 9000 | 10.25 | 0 | 0 | 3 | 1 |
| 6 | 6 | 29 | 83000 | Hipotecada | 13 | Mejoramiento vivienda | A | 7500 | 8.90 | 0 | 0 | 6 | 1 |
X edad ingresoanual tipovivienda
Min. : 1 Min. :20.00 Min. : 4080 Length:14047
1st Qu.: 3512 1st Qu.:23.00 1st Qu.: 39000 Class :character
Median : 7024 Median :26.00 Median : 55059 Mode :character
Mean : 7024 Mean :27.71 Mean : 66106
3rd Qu.:10536 3rd Qu.:30.00 3rd Qu.: 80000
Max. :14047 Max. :84.00 Max. :2039784
aniosempleo destinacion tipoprestamo monto_prestamo
Min. : 0.000 Length:14047 Length:14047 Min. : 500
1st Qu.: 2.000 Class :character Class :character 1st Qu.: 5000
Median : 4.000 Mode :character Mode :character Median : 8000
Mean : 4.788 Mean : 9763
3rd Qu.: 7.000 3rd Qu.:13000
Max. :41.000 Max. :35000
tasainteres estadodeuda default historiacreditos
Min. : 5.42 Min. :0.0000 Min. :0.0000 Min. : 2.000
1st Qu.: 7.90 1st Qu.:0.0000 1st Qu.:0.0000 1st Qu.: 3.000
Median :11.11 Median :0.0000 Median :0.0000 Median : 4.000
Mean :11.07 Mean :0.2203 Mean :0.1804 Mean : 5.795
3rd Qu.:13.48 3rd Qu.:0.0000 3rd Qu.:0.0000 3rd Qu.: 8.000
Max. :23.22 Max. :1.0000 Max. :1.0000 Max. :30.000
ponderador
Length:14047
Class :character
Mode :character
Tipologia de las variables
#Conversión de las variables categoricas a factores
df$tipovivienda <- as.factor(df$tipovivienda)
df$destinacion <- as.factor(df$destinacion)
df$tipoprestamo <- as.factor(df$tipoprestamo)
df$default <- as.factor(df$default)
summary(df)
X edad ingresoanual tipovivienda
Min. : 1 Min. :20.00 Min. : 4080 Alquilada :7107
1st Qu.: 3512 1st Qu.:23.00 1st Qu.: 39000 Hipotecada:5843
Median : 7024 Median :26.00 Median : 55059 Otro : 46
Mean : 7024 Mean :27.71 Mean : 66106 Propia :1051
3rd Qu.:10536 3rd Qu.:30.00 3rd Qu.: 80000
Max. :14047 Max. :84.00 Max. :2039784
aniosempleo destinacion tipoprestamo monto_prestamo
Min. : 0.000 Compra cartera :2290 A:4537 Min. : 500
1st Qu.: 2.000 Educativo :2798 B:4485 1st Qu.: 5000
Median : 4.000 Libre destino :2380 C:2864 Median : 8000
Mean : 4.788 Médico :2579 D:1599 Mean : 9763
3rd Qu.: 7.000 Mejoramiento vivienda:1559 E: 432 3rd Qu.:13000
Max. :41.000 Venture :2441 F: 108 Max. :35000
G: 22
tasainteres estadodeuda default historiacreditos ponderador
Min. : 5.42 Min. :0.0000 0:11513 Min. : 2.000 Length:14047
1st Qu.: 7.90 1st Qu.:0.0000 1: 2534 1st Qu.: 3.000 Class :character
Median :11.11 Median :0.0000 Median : 4.000 Mode :character
Mean :11.07 Mean :0.2203 Mean : 5.795
3rd Qu.:13.48 3rd Qu.:0.0000 3rd Qu.: 8.000
Max. :23.22 Max. :1.0000 Max. :30.000
Selección de los datos
#Filtramos la base de datos con con los deudas inactivas y los que ganen mas de 15 millones anuales
df_inactivos<-subset(df,df$estadodeuda==0 & ingresoanual >= 15000)
dim(df) #Evaluamos la dimensión de la base original
dim(df_inactivos) #Evaluamos la dimensión de la base filtrada
summary(df_inactivos) #Mostramos el resumen de la base filtrada
- 14047
- 13
- 10926
- 13
X edad ingresoanual tipovivienda
Min. : 1 Min. :20.00 Min. : 15000 Alquilada :4845
1st Qu.: 3501 1st Qu.:23.00 1st Qu.: 42246 Hipotecada:5075
Median : 7032 Median :26.00 Median : 60000 Otro : 30
Mean : 7035 Mean :27.78 Mean : 70708 Propia : 976
3rd Qu.:10568 3rd Qu.:30.00 3rd Qu.: 85000
Max. :14047 Max. :84.00 Max. :2039784
aniosempleo destinacion tipoprestamo monto_prestamo
Min. : 0.000 Compra cartera :1612 A:4102 Min. : 500
1st Qu.: 2.000 Educativo :2309 B:3746 1st Qu.: 5000
Median : 4.000 Libre destino :1895 C:2245 Median : 8000
Mean : 4.989 Médico :1876 D: 642 Mean : 9357
3rd Qu.: 7.000 Mejoramiento vivienda:1163 E: 163 3rd Qu.:12000
Max. :41.000 Venture :2071 F: 28 Max. :35000
G: 0
tasainteres estadodeuda default historiacreditos ponderador
Min. : 5.42 Min. :0 0:9356 Min. : 2.000 Length:10926
1st Qu.: 7.75 1st Qu.:0 1:1570 1st Qu.: 3.000 Class :character
Median :10.63 Median :0 Median : 4.000 Mode :character
Mean :10.48 Mean :0 Mean : 5.839
3rd Qu.:12.69 3rd Qu.:0 3rd Qu.: 8.000
Max. :22.06 Max. :0 Max. :30.000
Depuración de los datos
#Omisión de variables irrelevantes: vamos a separar de la tabla de modelado (df_inactivos) las columnas que no se usarán en el modelo
df_inactivos<-select(df_inactivos,c(-X,-estadodeuda) )
#Descarte de valores nulos: sobre la base filtrada
df_inactivos<-na.omit(df_inactivos)
summary(df_inactivos)
dim(df_inactivos)
edad ingresoanual tipovivienda aniosempleo
Min. :20.00 Min. : 15000 Alquilada :4845 Min. : 0.000
1st Qu.:23.00 1st Qu.: 42246 Hipotecada:5075 1st Qu.: 2.000
Median :26.00 Median : 60000 Otro : 30 Median : 4.000
Mean :27.78 Mean : 70708 Propia : 976 Mean : 4.989
3rd Qu.:30.00 3rd Qu.: 85000 3rd Qu.: 7.000
Max. :84.00 Max. :2039784 Max. :41.000
destinacion tipoprestamo monto_prestamo tasainteres
Compra cartera :1612 A:4102 Min. : 500 Min. : 5.42
Educativo :2309 B:3746 1st Qu.: 5000 1st Qu.: 7.75
Libre destino :1895 C:2245 Median : 8000 Median :10.63
Médico :1876 D: 642 Mean : 9357 Mean :10.48
Mejoramiento vivienda:1163 E: 163 3rd Qu.:12000 3rd Qu.:12.69
Venture :2071 F: 28 Max. :35000 Max. :22.06
G: 0
default historiacreditos ponderador
0:9356 Min. : 2.000 Length:10926
1:1570 1st Qu.: 3.000 Class :character
Median : 4.000 Mode :character
Mean : 5.839
3rd Qu.: 8.000
Max. :30.000
- 10926
- 11
# En este paso se aplica la regla empírica, la cual nos dice que el 99,7 % de los datos están entre 3 y -3 desviaciones estandar de la media
df_train_inactivos <- df_inactivos %>%
mutate(
# Calcular los valores estandarizados para las nuevas variables numéricas
z_edad = (edad - mean(edad)) / sd(edad),
z_ingresoanual = (ingresoanual - mean(ingresoanual)) / sd(ingresoanual),
z_aniosempleo = (aniosempleo - mean(aniosempleo)) / sd(aniosempleo),
z_tasainteres = (tasainteres - mean(tasainteres)) / sd(tasainteres),
z_historiacreditos = (historiacreditos - mean(historiacreditos )) / sd(historiacreditos )
)
# Filtrar las filas donde los valores estandarizados están entre -3 y 3 para todas las nuevas variables numéricas
df_train_inactivos<- df_train_inactivos %>%
filter(
between(z_edad, -3, 3),
between(z_ingresoanual, -3, 3),
between(z_aniosempleo, -3, 3),
between(z_tasainteres, -3, 3),
between(z_historiacreditos, -3, 3)
)
# Removemos las variables creadas que no deseamos
df_train_inactivos<- df_train_inactivos%>% select(-starts_with("z_"))
# Mostrar un resumen del dataframe limpio
summary(df_train_inactivos)
edad ingresoanual tipovivienda aniosempleo
Min. :20.00 Min. : 15000 Alquilada :4732 Min. : 0.000
1st Qu.:23.00 1st Qu.: 42000 Hipotecada:4836 1st Qu.: 2.000
Median :26.00 Median : 60000 Otro : 28 Median : 4.000
Mean :27.25 Mean : 66950 Propia : 934 Mean : 4.818
3rd Qu.:30.00 3rd Qu.: 83003 3rd Qu.: 7.000
Max. :46.00 Max. :227500 Max. :17.000
destinacion tipoprestamo monto_prestamo tasainteres
Compra cartera :1560 A:3973 Min. : 500 Min. : 5.42
Educativo :2264 B:3619 1st Qu.: 5000 1st Qu.: 7.75
Libre destino :1788 C:2173 Median : 8000 Median :10.62
Médico :1805 D: 600 Mean : 9230 Mean :10.46
Mejoramiento vivienda:1114 E: 148 3rd Qu.:12000 3rd Qu.:12.69
Venture :1999 F: 17 Max. :35000 Max. :19.29
G: 0
default historiacreditos ponderador
0:9034 Min. : 2.000 Length:10530
1:1496 1st Qu.: 3.000 Class :character
Median : 4.000 Mode :character
Mean : 5.552
3rd Qu.: 8.000
Max. :17.000
Separación de las muestras
#Separación de la muestras
df_train<-sample_frac(df_train_inactivos,0.74) #selección aleatoria de la muestra de entrenamiento
df_test<-setdiff(df_train_inactivos,df_train) #toma la diferencia entre la muestra inicial y la muestra de entrenamiento
dim(df_train)
dim(df_test)
- 7792
- 11
- 2724
- 11
Fase 4.1: Modelado 🧠
De acuerdo con los hallazgos y objetivos definidos en las fases anteriores (comprensión del negocio, de los datos y preparación de datos), en esta etapa se procederá a la construcción del modelo que permita estimar la probabilidad de impago (default) de los créditos otorgados por el programa Fondo Emprender del SENA.
Dado que la variable objetivo es binaria (default = 0 o 1), se utilizará un modelo de regresión logística, ampliamente reconocido por su capacidad de modelar probabilidades en eventos dicotómicos, como el cumplimiento o incumplimiento de una obligación crediticia.
Esta fase se desarrollará en tres momentos clave:
Identificación del modelo
- Selección de variables relevantes con base en el análisis exploratorio.
- Identificación de la forma funcional del modelo
Estimación del modelo
- Se entrenará el modelo mediante el estimador de máxima verosimilitud, propio de la regresión logística.
- Se evaluará la significancia de los coeficientes, magnitud de los efectos y signos esperados.
Diagnóstico del modelo
- Evaluación del desempeño con métricas como: sinficancia global, significancia individual, matriz de confusión.
- Análisis de errores y comparación entre predicciones y valores reales.
- Discusión sobre posibles mejoras y consideraciones para una futura versión 2.0 del modelo.
Esta fase no solo busca obtener un modelo que prediga con buen desempeño, sino también entender los factores que más contribuyen al riesgo de impago, con el fin de que las decisiones futuras del Fondo Emprender sean más informadas, estratégicas y eficientes.
Modelo 1A
Identificación del modelo 1A
Este modelo tendrá la siguiente estructura:
$$ \text{p(x)} = \frac{e^{\beta_0 + \beta_1 X_1 + \beta_2 X_2 + \cdots + \beta_{10} X_{10}}}{1 + e^{\beta_0 + \beta_1 X_1 + \beta_2 X_2 + \cdots + \beta_{10} X_{10}}} $$
donde:
- $\text{Y}$=
default - $X_1$=
edad - $X_2$=
ingresoanual - $X_3$=
tipovivienda - $X_4$=
aniosempleo - $X_5$=
destinacion - $X_6$=
tipoprestamo - $X_7$=
monto_prestamo - $X_8$=
tasainteres - $X_9$=
estadodeuda - $X_{10}$=
historiacreditos
Estimación del modelo 1A
#Estimamos el modelo 1A de regresión logit
modelo1A <- glm(default ~ . - ponderador , data = df_train, family = binomial)
summary(modelo1A)
Call:
glm(formula = default ~ . - ponderador, family = binomial, data = df_train)
Coefficients:
Estimate Std. Error z value Pr(>|z|)
(Intercept) -2.074e+01 3.254e+02 -0.064 0.9492
edad 1.258e-02 1.609e-02 0.782 0.4342
ingresoanual 3.448e-07 1.480e-06 0.233 0.8157
tipoviviendaHipotecada -4.570e-02 9.813e-02 -0.466 0.6414
tipoviviendaOtro -6.222e-02 1.007e+00 -0.062 0.9508
tipoviviendaPropia 2.152e-01 1.528e-01 1.408 0.1590
aniosempleo 2.263e-02 1.235e-02 1.832 0.0670 .
destinacionEducativo 1.129e-01 1.560e-01 0.724 0.4690
destinacionLibre destino 2.434e-01 1.642e-01 1.482 0.1383
destinacionMédico -8.749e-03 1.676e-01 -0.052 0.9584
destinacionMejoramiento vivienda 1.627e-01 1.846e-01 0.881 0.3782
destinacionVenture 3.023e-01 1.623e-01 1.863 0.0625 .
tipoprestamoB 1.310e-01 4.726e+02 0.000 0.9998
tipoprestamoC 2.082e+01 3.254e+02 0.064 0.9490
tipoprestamoD 2.078e+01 3.254e+02 0.064 0.9491
tipoprestamoE 2.079e+01 3.254e+02 0.064 0.9490
tipoprestamoF 2.172e+01 3.254e+02 0.067 0.9468
monto_prestamo -1.015e-05 8.138e-06 -1.247 0.2122
tasainteres -3.110e-02 4.340e-02 -0.717 0.4736
historiacreditos -2.384e-02 2.296e-02 -1.038 0.2991
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
(Dispersion parameter for binomial family taken to be 1)
Null deviance: 6347.6 on 7791 degrees of freedom
Residual deviance: 2990.4 on 7772 degrees of freedom
AIC: 3030.4
Number of Fisher Scoring iterations: 19
Diagnóstico del modelo 1A
Prueba omnibus modelo 1A
En el análisis del modelo 1A de regresión logística para predecir la probabilidad de impago (default), que incluye variables como monto_prestamo, ingresoanual, tipoprestamo, edad, historiacreditos, tasainteres, tipovivienda ,aniosempleo y destinacion, evaluamos su validez global mediante las siguientes hipótesis:
Hipótesis Nula (H₀): El modelo no es estadísticamente significativo; ninguna variable explicativa mejora la predicción del impago frente a un modelo nulo (sin predictores).
Hipótesis Alterna (H₁): El modelo es significativo; al menos una variable explicativa contribuye a predecir el impago
Para evaluar estas hipótesis, se utiliza la Prueba Omnibus, basada en la comparación entre la devianza del modelo nulo (sin variables) y la devianza del modelo ajustado (Modelo 1A). Si la reducción en la devianza es estadísticamente significativa, se puede concluir que el modelo tiene validez global.
#Prueba ómnibus: Es la prueba de significancia global del modelo
omnibus1A <- anova(modelo1A, test="Chisq")
omnibus1A
#Recordatorio: Se lee el p-value de la última fila porque es el que contiene todas las variables del modelo
| Df | Deviance | Resid. Df | Resid. Dev | Pr(>Chi) | |
|---|---|---|---|---|---|
| <int> | <dbl> | <int> | <dbl> | <dbl> | |
| NULL | NA | NA | 7791 | 6347.584 | NA |
| edad | 1 | 0.6572843 | 7790 | 6346.926 | 4.175203e-01 |
| ingresoanual | 1 | 0.1269051 | 7789 | 6346.799 | 7.216628e-01 |
| tipovivienda | 3 | 23.6950993 | 7786 | 6323.104 | 2.892224e-05 |
| aniosempleo | 1 | 0.6920201 | 7785 | 6322.412 | 4.054781e-01 |
| destinacion | 5 | 29.5381110 | 7780 | 6292.874 | 1.818004e-05 |
| tipoprestamo | 5 | 3299.2331062 | 7775 | 2993.641 | 0.000000e+00 |
| monto_prestamo | 1 | 1.6329566 | 7774 | 2992.008 | 2.012946e-01 |
| tasainteres | 1 | 0.5053519 | 7773 | 2991.503 | 4.771579e-01 |
| historiacreditos | 1 | 1.0787391 | 7772 | 2990.424 | 2.989798e-01 |
Analizando los resultados de la prueba omnibus realizada anteriormente, podemos inferir que:
Como se evidencia en el p-value de la última variable evidenciada (historiacreditos) ≈ 2.989798e-01 se analiza que es mayor que 0.05 (valor de alfa). Por lo cuál: NO se rechaza la hipótesis nula.
Lo cuál significa que:
El Modelo 1A NO es estadísticamente significativo en su conjunto al nivel α = 0.05, es decir:
Las variables incluidas NO mejoran el pronóstico del impago de forma conjunta, con suficiente evidencia estadística.
Prueba de Wald modelo 1A
La prueba de Wald es una herramienta estadística utilizada para evaluar la significancia de las variables dentro de un modelo de regresión. Su objetivo principal es determinar si los coeficientes estimados de las variables independientes tienen un impacto significativo en la variable dependiente.
A través de esta prueba, podemos verificar de manera individual si alguna variable contribuye de forma significativa al modelo, lo que nos permite decidir si mantenerla o excluirla. Este análisis es fundamental para mejorar la precisión y la interpretación del modelo, optimizando su capacidad predictiva y la validación de sus resultados.
#Hacemos un summary del modelo para revisar la significancia individual
summary(modelo1A)
Call:
glm(formula = default ~ . - ponderador, family = binomial, data = df_train)
Coefficients:
Estimate Std. Error z value Pr(>|z|)
(Intercept) -2.074e+01 3.254e+02 -0.064 0.9492
edad 1.258e-02 1.609e-02 0.782 0.4342
ingresoanual 3.448e-07 1.480e-06 0.233 0.8157
tipoviviendaHipotecada -4.570e-02 9.813e-02 -0.466 0.6414
tipoviviendaOtro -6.222e-02 1.007e+00 -0.062 0.9508
tipoviviendaPropia 2.152e-01 1.528e-01 1.408 0.1590
aniosempleo 2.263e-02 1.235e-02 1.832 0.0670 .
destinacionEducativo 1.129e-01 1.560e-01 0.724 0.4690
destinacionLibre destino 2.434e-01 1.642e-01 1.482 0.1383
destinacionMédico -8.749e-03 1.676e-01 -0.052 0.9584
destinacionMejoramiento vivienda 1.627e-01 1.846e-01 0.881 0.3782
destinacionVenture 3.023e-01 1.623e-01 1.863 0.0625 .
tipoprestamoB 1.310e-01 4.726e+02 0.000 0.9998
tipoprestamoC 2.082e+01 3.254e+02 0.064 0.9490
tipoprestamoD 2.078e+01 3.254e+02 0.064 0.9491
tipoprestamoE 2.079e+01 3.254e+02 0.064 0.9490
tipoprestamoF 2.172e+01 3.254e+02 0.067 0.9468
monto_prestamo -1.015e-05 8.138e-06 -1.247 0.2122
tasainteres -3.110e-02 4.340e-02 -0.717 0.4736
historiacreditos -2.384e-02 2.296e-02 -1.038 0.2991
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
(Dispersion parameter for binomial family taken to be 1)
Null deviance: 6347.6 on 7791 degrees of freedom
Residual deviance: 2990.4 on 7772 degrees of freedom
AIC: 3030.4
Number of Fisher Scoring iterations: 19
En la prueba de Wald las hipótesis son:
- Nula: La variable NO aporta al modelo.
- Alterna: La variable SI aporta al modelo.
Es decir, ninguna variable aporta o es significativa para el modelo
Matriz de confusión modelo 1A
# Cálculo de la matriz de confusión del modelo 1A
## Paso 1: calcular los pronósticos SOBRE LA MUESTRA DE ENTRENAMIENTO
df_train$score1A<-predict(modelo1A,type="response")
# Paso 2: Crear la variable pronóstico
df_train$pron1A<-as.numeric(df_train$score1A>0.5)
df_train$pron1A<-as.factor(df_train$pron1A)
df_train$default<-as.factor(df_train$default)
# Generar la matriz de confusión
confusionMatrix(df_train$pron1A, df_train$default)
Confusion Matrix and Statistics
Reference
Prediction 0 1
0 6159 456
1 532 645
Accuracy : 0.8732
95% CI : (0.8656, 0.8805)
No Information Rate : 0.8587
P-Value [Acc > NIR] : 0.0001039
Kappa : 0.4921
Mcnemar's Test P-Value : 0.0170296
Sensitivity : 0.9205
Specificity : 0.5858
Pos Pred Value : 0.9311
Neg Pred Value : 0.5480
Prevalence : 0.8587
Detection Rate : 0.7904
Detection Prevalence : 0.8489
Balanced Accuracy : 0.7532
'Positive' Class : 0
Analisis de accuracy, sensitivity y specificity
- Accuracy(87.32%):
- Interpretación: El modelo clasifica correctamente el 87.32% de los casos, considerando tanto los que pagan como los que no. Aunque es una métrica útil, puede ser engañosa si hay desbalance de clases.
- Sensitivity (92,05%):
Interpretación: De todas las personas que sí pagan, el 92.05% fueron correctamente clasificados.
Significado práctico: Muy buena capacidad del modelo para identificar a quienes van a cumplir su deuda, lo cual es crucial en gestión de riesgo crediticio.
- Specificity (58.58%)
Interpretación: De todos los que realmente no pagan, el modelo identifica correctamente el 58.58%.
Significado práctico: capacidad deficiente del modelo para identificar a quienes van a incumplir su deuda, lo cual es crucial en gestión de riesgo crediticio.
Conclusión del modelo 1A
El modelo está muy bien calibrado para detectar a quienes sí pagarán (default = 1), lo cual es deseable desde una perspectiva ambiciosa del negocio.
Sin embargo, no es efectivo a la hora de identificar a los que no van a pagar, esto es problemático teniendo en cuenta la situación actual del fondo (default = 0), con una especificidad relativamente baja (58.58%).
En síntesis, este modelo no es efectivo o no es la solución propicia al problema que se enfrenta el fondo actualmente.
Modelo 1B
Identificación del modelo 1B
Este modelo tendrá la siguiente estructura:
$$ \text{p(x)} = \frac{e^{\beta_0 + \beta_1 X_1 + \beta_2 X_2 }}{1 + e^{\beta_0 + \beta_1 X_1 + \beta_2 X_2 }} $$
donde:
- $\text{Y}$=
default - $X_1$=
monto_prestamo - $X_2$=
aniosempleo
Estimación del modelo 1B
# Estimar modelo 1B (parsimonioso y con sentido del negocio)
modelo1B <- glm(default ~ monto_prestamo + aniosempleo, data = df_train, family = binomial)
# Mostrar resumen del modelo
summary(modelo1B)
Call:
glm(formula = default ~ monto_prestamo + aniosempleo, family = binomial,
data = df_train)
Coefficients:
Estimate Std. Error z value Pr(>|z|)
(Intercept) -1.894e+00 7.086e-02 -26.724 <2e-16 ***
monto_prestamo 9.440e-06 5.400e-06 1.748 0.0805 .
aniosempleo 1.238e-04 8.820e-03 0.014 0.9888
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
(Dispersion parameter for binomial family taken to be 1)
Null deviance: 6347.6 on 7791 degrees of freedom
Residual deviance: 6344.5 on 7789 degrees of freedom
AIC: 6350.5
Number of Fisher Scoring iterations: 4
Diagnóstico del modelo 1B
Prueba omnibus modelo 1B
En el análisis del Modelo 1B, que busca predecir la probabilidad de impago (default) a partir de variables como monto_prestamo y aniosempleo. Planteamos las siguientes hipótesis para evaluar su validez general:
- Hipótesis Nula (H₀): El modelo no es significativo; es decir, ninguna de las variables explicativas mejora la predicción del default frente a un modelo sin predictores.
- Hipótesis Alterna (H₁): El modelo sí es significativo; al menos una de las variables explicativas contribuye a predecir el comportamiento de pago o impago.
Para evaluar estas hipótesis, se utiliza la Prueba Omnibus, basada en la comparación entre la devianza del modelo nulo (sin variables) y la devianza del modelo ajustado (Modelo 1B). Si la reducción en la devianza es estadísticamente significativa, se puede concluir que el modelo tiene validez global.
#Prueba ómnibus: Es la prueba de significancia global del modelo
omnibus1B <- anova(modelo1B, test="Chisq")
omnibus1B
| Df | Deviance | Resid. Df | Resid. Dev | Pr(>Chi) | |
|---|---|---|---|---|---|
| <int> | <dbl> | <int> | <dbl> | <dbl> | |
| NULL | NA | NA | 7791 | 6347.584 | NA |
| monto_prestamo | 1 | 3.0527824871 | 7790 | 6344.531 | 0.08059895 |
| aniosempleo | 1 | 0.0001970385 | 7789 | 6344.531 | 0.98880043 |
Analizando los resultados de la prueba omnibus realizada anteriormente, podemos inferir que:
Como se evidencia en el p-value de la última variable evidenciada (aniosempleo) ≈ 0.98880043 se analiza que es mayor que 0.05 (valor de alfa). Por lo cuál: No se rechaza la hipótesis nula.
Lo cuál significa que:
El Modelo 1B NO es estadísticamente significativo en su conjunto al nivel α = 0.05, es decir:
Las variables incluidas NO mejoran la predicción del impago de forma conjunta, con suficiente evidencia estadística.
Prueba de Wald modelo 1B
La prueba de Wald es una herramienta estadística utilizada para evaluar la significancia de las variables dentro de un modelo de regresión. Su objetivo principal es determinar si los coeficientes estimados de las variables independientes tienen un impacto significativo en la variable dependiente.
A través de esta prueba, podemos verificar de manera individual si alguna variable contribuye de forma significativa al modelo, lo que nos permite decidir si mantenerla o excluirla. Este análisis es fundamental para mejorar la precisión y la interpretación del modelo, optimizando su capacidad predictiva y la validación de sus resultados.
#Resumen del modelo 1B
summary(modelo1B)
Call:
glm(formula = default ~ monto_prestamo + aniosempleo, family = binomial,
data = df_train)
Coefficients:
Estimate Std. Error z value Pr(>|z|)
(Intercept) -1.894e+00 7.086e-02 -26.724 <2e-16 ***
monto_prestamo 9.440e-06 5.400e-06 1.748 0.0805 .
aniosempleo 1.238e-04 8.820e-03 0.014 0.9888
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
(Dispersion parameter for binomial family taken to be 1)
Null deviance: 6347.6 on 7791 degrees of freedom
Residual deviance: 6344.5 on 7789 degrees of freedom
AIC: 6350.5
Number of Fisher Scoring iterations: 4
En la prueba de Wald las hipótesis son:
- Nula: La variable NO aporta al modelo.
- Alterna: La variable SI aporta al modelo.
Es decir, ninguna variable aporta o es significativa para el modelo
Matriz de confusión modelo 1B
# Cálculo de la matriz de confusión del modelo 1B
## Paso 1: calcular los pronósticos SOBRE LA MUESTRA DE ENTRENAMIENTO
df_train$score1B<-predict(modelo1B,type="response")
# Paso 2: Crear la variable pronóstico
df_train$pron1B<-as.numeric(df_train$score1B>0.5)
df_train$pron1B<-as.factor(df_train$pron1B)
df_train$default<-as.factor(df_train$default)
# Generar la matriz de confusión
confusionMatrix(df_train$pron1B, df_train$default)
Warning message in confusionMatrix.default(df_train$pron1B, df_train$default): “Levels are not in the same order for reference and data. Refactoring data to match.”
Confusion Matrix and Statistics
Reference
Prediction 0 1
0 6685 1107
1 0 0
Accuracy : 0.8579
95% CI : (0.85, 0.8656)
No Information Rate : 0.8579
P-Value [Acc > NIR] : 0.508
Kappa : 0
Mcnemar's Test P-Value : <2e-16
Sensitivity : 1.0000
Specificity : 0.0000
Pos Pred Value : 0.8579
Neg Pred Value : NaN
Prevalence : 0.8579
Detection Rate : 0.8579
Detection Prevalence : 1.0000
Balanced Accuracy : 0.5000
'Positive' Class : 0
Analisis de accuracy, sensitivity y specificity
- Accuracy (85.79%)
Interpretación: El modelo acierta en el 85.79% de los casos.
Comentario: Aunque parece alto, esto es engañoso porque el modelo solo predice una clase (0 - no paga), lo que refleja un sesgo severo hacia esa clase. La precisión es igual al porcentaje de personas que no pagan, lo que sugiere que el modelo está prediciendo todas las observaciones como si no pagaran.
- Sensitivity (100%)
Interpretación: El modelo detecta a todos los que sí pagan.
Comentario: Aunque suena ideal, es porque predice absolutamente todo como "no paga", entonces jamás comete falsos positivos.
- Specificity(0%)
Interpretación: El modelo no detecta ni un solo mal pagador.
Comentario: Esto es crítico y negativo en aplicaciones reales: significa que todos los malos pagadores son clasificados como buenos, esto implica altos costos y aceptación injustificada de clientes poco confiables.
Conclusión del Modelo 1B
Este modelo solo aprende a predecir una clase (default = 1, o sea, los que pagan).
Tiene accuracy alto pero completamente engañoso.
No tiene utilidad práctica, porque: Tiene especificidad nula (0%). No discrimina entre buenos y malos pagadores.
Modelo 1C
Identificación del modelo 1C
$$ \text{p(x)} = \frac{e^{\beta_0 + \beta_1 X_1 }}{1 + e^{\beta_0 + \beta_1 X_1 }} $$
donde:
- $\text{Y}$=
default - $X_1$=
monto_prestamo
Estimación del modelo 1C
# Estimar Modelo 1C con solo dos variables
modelo1C <- glm(default ~ monto_prestamo , data = df_train, family = binomial)
# Ver resumen del modelo
summary(modelo1C)
Call:
glm(formula = default ~ monto_prestamo, family = binomial, data = df_train)
Coefficients:
Estimate Std. Error z value Pr(>|z|)
(Intercept) -1.893e+00 6.049e-02 -31.298 <2e-16 ***
monto_prestamo 9.448e-06 5.366e-06 1.761 0.0783 .
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
(Dispersion parameter for binomial family taken to be 1)
Null deviance: 6347.6 on 7791 degrees of freedom
Residual deviance: 6344.5 on 7790 degrees of freedom
AIC: 6348.5
Number of Fisher Scoring iterations: 4
Diagnóstico del modelo 1C
Prueba omnibus modelo 1C
En el análisis del Modelo 1C, que busca predecir la probabilidad de impago (default) a partir de la variable monto_prestamo. planteamos las siguientes hipótesis para evaluar su validez general:
- Hipótesis Nula (H₀): El modelo no es significativo; es decir, ninguna de las variables explicativas mejora la predicción del default frente a un modelo sin predictores.
- Hipótesis Alterna (H₁): El modelo sí es significativo; al menos una de las variables explicativas contribuye a predecir el comportamiento de pago o impago.
Para evaluar estas hipótesis, se utiliza la Prueba Omnibus, basada en la comparación entre la devianza del modelo nulo (sin variables) y la devianza del modelo ajustado (Modelo 1C). Si la reducción en la devianza es estadísticamente significativa, se puede concluir que el modelo tiene validez global.
#Prueba ómnibus: Es la prueba de significancia global del modelo
omnibus1C <- anova(modelo1C, test="Chisq")
omnibus1C
| Df | Deviance | Resid. Df | Resid. Dev | Pr(>Chi) | |
|---|---|---|---|---|---|
| <int> | <dbl> | <int> | <dbl> | <dbl> | |
| NULL | NA | NA | 7791 | 6347.584 | NA |
| monto_prestamo | 1 | 3.052782 | 7790 | 6344.531 | 0.08059895 |
Analizando los resultados de la prueba omnibus realizada anteriormente, podemos inferir que:
Como se evidencia en el p-value de la última variable evidenciada (monto_prestamo) ≈ 0.08059895 se analiza que es mayor que 0.05 (valor de alfa). Por lo cuál: No se rechaza la hipótesis nula.
Lo cuál significa que:
El Modelo 1C NO es estadísticamente significativo en su conjunto al nivel α = 0.05, es decir:
Las variables incluidas NO mejoran la predicción del impago de forma conjunta, con suficiente evidencia estadística.
Prueba de Wald modelo 1C
La prueba de Wald es una herramienta estadística utilizada para evaluar la significancia de las variables dentro de un modelo de regresión. Su objetivo principal es determinar si los coeficientes estimados de las variables independientes tienen un impacto significativo en la variable dependiente.
A través de esta prueba, podemos verificar de manera individual si alguna variable contribuye de forma significativa al modelo, lo que nos permite decidir si mantenerla o excluirla. Este análisis es fundamental para mejorar la precisión y la interpretación del modelo, optimizando su capacidad predictiva y la validación de sus resultados.
#Resumen del modelo 1C
summary(modelo1C)
Call:
glm(formula = default ~ monto_prestamo, family = binomial, data = df_train)
Coefficients:
Estimate Std. Error z value Pr(>|z|)
(Intercept) -1.893e+00 6.049e-02 -31.298 <2e-16 ***
monto_prestamo 9.448e-06 5.366e-06 1.761 0.0783 .
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
(Dispersion parameter for binomial family taken to be 1)
Null deviance: 6347.6 on 7791 degrees of freedom
Residual deviance: 6344.5 on 7790 degrees of freedom
AIC: 6348.5
Number of Fisher Scoring iterations: 4
En la prueba de Wald las hipótesis son:
- Nula: La variable NO aporta al modelo.
- Alterna: La variable SI aporta al modelo.
Es decir, ninguna variable aporta o es significativa para el modelo.
Matriz de confusión modelo 1C
# Cálculo de la matriz de confusión del modelo 1c
## Paso 1: calcular los pronósticos SOBRE LA MUESTRA DE ENTRENAMIENTO
df_train$score1C<-predict(modelo1C,type="response")
# Paso 2: Crear la variable pronóstico
df_train$pron1C<-as.numeric(df_train$score1C>0.5)
df_train$pron1C<-as.factor(df_train$pron1C)
df_train$default<-as.factor(df_train$default)
# Generar la matriz de confusión
confusionMatrix(df_train$pron1C, df_train$default)
Warning message in confusionMatrix.default(df_train$pron1C, df_train$default): “Levels are not in the same order for reference and data. Refactoring data to match.”
Confusion Matrix and Statistics
Reference
Prediction 0 1
0 6685 1107
1 0 0
Accuracy : 0.8579
95% CI : (0.85, 0.8656)
No Information Rate : 0.8579
P-Value [Acc > NIR] : 0.508
Kappa : 0
Mcnemar's Test P-Value : <2e-16
Sensitivity : 1.0000
Specificity : 0.0000
Pos Pred Value : 0.8579
Neg Pred Value : NaN
Prevalence : 0.8579
Detection Rate : 0.8579
Detection Prevalence : 1.0000
Balanced Accuracy : 0.5000
'Positive' Class : 0
Analisis de accuracy, sensitivity y specificity
- Accuracy (85.79%)
Interpretación: El modelo acierta en el 85.79% de los casos.
Comentario: Aunque parece alto, esto es engañoso porque el modelo solo predice una clase (0 - no paga), lo que refleja un sesgo severo hacia esa clase. La precisión es igual al porcentaje de personas que no pagan, lo que sugiere que el modelo está prediciendo todas las observaciones como si no pagaran.
- Sensitivity (100%)
Interpretación: El modelo detecta a todos los que sí pagan.
Comentario: Aunque suena ideal, es porque predice absolutamente todo como "no paga", entonces jamás comete falsos positivos.
- Specificity(0%)
Interpretación: El modelo no detecta ni un solo mal pagador.
Comentario: Esto es crítico y negativo en aplicaciones reales: significa que todos los malos pagadores son clasificados como buenos, esto implica altos costos y aceptación injustificada de clientes poco confiables.
Conclusión del Modelo 1B
Este modelo solo aprende a predecir una clase (default = 1, o sea, los que pagan).
Tiene accuracy alto pero completamente engañoso.
No tiene utilidad práctica, porque: Tiene especificidad nula (0%). No discrimina entre buenos y malos pagadores.
Modelo 1D
Identificación del modelo 1D
Este modelo tendrá la siguiente estructura:
$$ \text{p(x)} = \frac{e^{\beta_0 + \beta_1 X_1 + \beta_2 X_2 + \cdots + \beta_{10} X_{10}}}{1 + e^{\beta_0 + \beta_1 X_1 + \beta_2 X_2 + \cdots + \beta_{10} X_{10}}} $$
donde:
- $\text{Y}$=
default - $X_1$=
edad - $X_2$=
ingresoanual - $X_3$=
tipovivienda - $X_4$=
aniosempleo - $X_5$=
destinacion - $X_6$=
tipoprestamo - $X_7$=
monto_prestamo - $X_8$=
tasainteres - $X_9$=
estadodeuda - $X_{10}$=
historiacreditos
Estimación del modelo 1D
#Cálculo del ponderador: hacia arriba (igualar la categoría pequeña con la categoría grande)
df_train$ponderador<-ifelse(df_train$default==1,6685/1107,1) #Si default=1: pondere, pero si es =0 vale lo mismo.
head(df_train) #Visualización de las primeras 6 filas
| edad | ingresoanual | tipovivienda | aniosempleo | destinacion | tipoprestamo | monto_prestamo | tasainteres | default | historiacreditos | ponderador | score1A | pron1A | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| <int> | <int> | <fct> | <int> | <fct> | <fct> | <int> | <dbl> | <fct> | <int> | <dbl> | <dbl> | <fct> | |
| 1 | 24 | 110000 | Hipotecada | 8 | Médico | A | 10800 | 6.99 | 0 | 4 | 1.00000 | 1.025473e-09 | 0 |
| 2 | 33 | 50750 | Alquilada | 2 | Libre destino | C | 7500 | 11.91 | 1 | 6 | 6.12764 | 5.518153e-01 | 1 |
| 3 | 23 | 42000 | Propia | 5 | Venture | A | 6500 | 6.03 | 0 | 2 | 1.00000 | 1.848543e-09 | 0 |
| 4 | 22 | 65000 | Alquilada | 6 | Libre destino | A | 16000 | 7.88 | 0 | 3 | 1.00000 | 1.197785e-09 | 0 |
| 5 | 28 | 39996 | Alquilada | 10 | Educativo | D | 5525 | 14.54 | 0 | 10 | 1.00000 | 4.991471e-01 | 0 |
| 6 | 24 | 54000 | Alquilada | 8 | Médico | C | 1500 | 14.17 | 1 | 2 | 6.12764 | 5.163558e-01 | 1 |
#Estimación del Modelo 1D: modelo balanceado incluyendo de nuevo todas las variables (el mismo modelo 1A pero con balanceo)
modelo1D<-glm(default~edad+ingresoanual+tipovivienda+aniosempleo+destinacion+tipoprestamo+monto_prestamo+tasainteres+historiacreditos,data=df_train,family=binomial,weights=ponderador)
#no se incluye en la ecuación el ponderador, ni los cálculos de score y pronóstico realizados para otros modelos.
#el comando "weights" se usa para incluir el ponderador que balancea el modelo
summary(modelo1D)
Warning message in eval(family$initialize): “non-integer #successes in a binomial glm!”
Call:
glm(formula = default ~ edad + ingresoanual + tipovivienda +
aniosempleo + destinacion + tipoprestamo + monto_prestamo +
tasainteres + historiacreditos, family = binomial, data = df_train,
weights = ponderador)
Coefficients:
Estimate Std. Error z value Pr(>|z|)
(Intercept) -1.978e+01 1.973e+02 -0.100 0.9201
edad 1.326e-02 1.271e-02 1.043 0.2969
ingresoanual 3.733e-07 1.160e-06 0.322 0.7475
tipoviviendaHipotecada -4.980e-02 7.509e-02 -0.663 0.5072
tipoviviendaOtro -8.705e-02 7.708e-01 -0.113 0.9101
tipoviviendaPropia 2.294e-01 1.213e-01 1.892 0.0585 .
aniosempleo 2.453e-02 9.823e-03 2.497 0.0125 *
destinacionEducativo 1.095e-01 1.170e-01 0.935 0.3496
destinacionLibre destino 2.408e-01 1.249e-01 1.928 0.0538 .
destinacionMédico -1.580e-02 1.252e-01 -0.126 0.8996
destinacionMejoramiento vivienda 1.447e-01 1.392e-01 1.039 0.2986
destinacionVenture 3.138e-01 1.241e-01 2.529 0.0114 *
tipoprestamoB 1.232e-01 2.865e+02 0.000 0.9997
tipoprestamoC 2.162e+01 1.973e+02 0.110 0.9127
tipoprestamoD 2.157e+01 1.973e+02 0.109 0.9130
tipoprestamoE 2.160e+01 1.973e+02 0.110 0.9128
tipoprestamoF 2.256e+01 1.973e+02 0.114 0.9089
monto_prestamo -1.045e-05 6.085e-06 -1.717 0.0860 .
tasainteres -2.874e-02 3.379e-02 -0.850 0.3951
historiacreditos -2.485e-02 1.788e-02 -1.390 0.1646
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
(Dispersion parameter for binomial family taken to be 1)
Null deviance: 18628.1 on 7791 degrees of freedom
Residual deviance: 6208.7 on 7772 degrees of freedom
AIC: 6207.5
Number of Fisher Scoring iterations: 18
Diagnóstico del modelo 1D
Prueba omnibus modelo 1D
En el análisis del Modelo 1D, que busca predecir la probabilidad de impago (default) a partir de variables como monto_prestamo, ingresoanual, tipoprestamo, edad, historiacreditos, tasainteres, tipovivienda ,aniosempleo y destinacion. Planteamos las siguientes hipótesis para evaluar su validez general:
- Hipótesis Nula (H₀): El modelo no es significativo; es decir, ninguna de las variables explicativas mejora la predicción del default frente a un modelo sin predictores.
- Hipótesis Alterna (H₁): El modelo sí es significativo; al menos una de las variables explicativas contribuye a predecir el comportamiento de pago o impago.
Para evaluar estas hipótesis, se utiliza la Prueba Omnibus, basada en la comparación entre la devianza del modelo nulo (sin variables) y la devianza del modelo ajustado (Modelo 1D). Si la reducción en la devianza es estadísticamente significativa, se puede concluir que el modelo tiene validez global.
#Prueba ómnibus: Es la prueba de significancia global del modelo
omnibus1D <- anova(modelo1D, test="Chisq")
omnibus1D
Warning message in eval(family$initialize): “non-integer #successes in a binomial glm!” Warning message in eval(family$initialize): “non-integer #successes in a binomial glm!” Warning message in eval(family$initialize): “non-integer #successes in a binomial glm!” Warning message in eval(family$initialize): “non-integer #successes in a binomial glm!” Warning message in eval(family$initialize): “non-integer #successes in a binomial glm!” Warning message in eval(family$initialize): “non-integer #successes in a binomial glm!” Warning message in eval(family$initialize): “non-integer #successes in a binomial glm!” Warning message in eval(family$initialize): “non-integer #successes in a binomial glm!”
| Df | Deviance | Resid. Df | Resid. Dev | Pr(>Chi) | |
|---|---|---|---|---|---|
| <int> | <dbl> | <int> | <dbl> | <dbl> | |
| NULL | NA | NA | 7791 | 18628.145 | NA |
| edad | 1 | 2.336196e+00 | 7790 | 18625.809 | 1.263979e-01 |
| ingresoanual | 1 | 4.150108e-01 | 7789 | 18625.394 | 5.194371e-01 |
| tipovivienda | 3 | 8.377087e+01 | 7786 | 18541.623 | 4.763962e-18 |
| aniosempleo | 1 | 2.429022e+00 | 7785 | 18539.194 | 1.191072e-01 |
| destinacion | 5 | 1.112127e+02 | 7780 | 18427.981 | 2.270793e-22 |
| tipoprestamo | 5 | 1.221358e+04 | 7775 | 6214.403 | 0.000000e+00 |
| monto_prestamo | 1 | 3.007457e+00 | 7774 | 6211.396 | 8.288224e-02 |
| tasainteres | 1 | 7.229944e-01 | 7773 | 6210.673 | 3.951634e-01 |
| historiacreditos | 1 | 1.926755e+00 | 7772 | 6208.746 | 1.651139e-01 |
Analizando los resultados de la prueba omnibus realizada anteriormente, podemos inferir que:
Como se evidencia en el p-value de la última variable evidenciada (historiacreditos) ≈ 1.651139e-01 se analiza que es mayor que 0.05 (valor de alfa). Por lo cuál: No se rechaza la hipótesis nula.
Lo cuál significa que:
El Modelo 1D NO es estadísticamente significativo en su conjunto al nivel α = 0.05, es decir:
Las variables incluidas NO mejoran la predicción del impago de forma conjunta, con suficiente evidencia estadística.
Prueba de Wald modelo 1D
La prueba de Wald es una herramienta estadística utilizada para evaluar la significancia de las variables dentro de un modelo de regresión. Su objetivo principal es determinar si los coeficientes estimados de las variables independientes tienen un impacto significativo en la variable dependiente.
A través de esta prueba, podemos verificar de manera individual si alguna variable contribuye de forma significativa al modelo, lo que nos permite decidir si mantenerla o excluirla. Este análisis es fundamental para mejorar la precisión y la interpretación del modelo, optimizando su capacidad predictiva y la validación de sus resultados.
#Resumen del modelo 1D
summary(modelo1D)
Call:
glm(formula = default ~ edad + ingresoanual + tipovivienda +
aniosempleo + destinacion + tipoprestamo + monto_prestamo +
tasainteres + historiacreditos, family = binomial, data = df_train,
weights = ponderador)
Coefficients:
Estimate Std. Error z value Pr(>|z|)
(Intercept) -1.978e+01 1.973e+02 -0.100 0.9201
edad 1.326e-02 1.271e-02 1.043 0.2969
ingresoanual 3.733e-07 1.160e-06 0.322 0.7475
tipoviviendaHipotecada -4.980e-02 7.509e-02 -0.663 0.5072
tipoviviendaOtro -8.705e-02 7.708e-01 -0.113 0.9101
tipoviviendaPropia 2.294e-01 1.213e-01 1.892 0.0585 .
aniosempleo 2.453e-02 9.823e-03 2.497 0.0125 *
destinacionEducativo 1.095e-01 1.170e-01 0.935 0.3496
destinacionLibre destino 2.408e-01 1.249e-01 1.928 0.0538 .
destinacionMédico -1.580e-02 1.252e-01 -0.126 0.8996
destinacionMejoramiento vivienda 1.447e-01 1.392e-01 1.039 0.2986
destinacionVenture 3.138e-01 1.241e-01 2.529 0.0114 *
tipoprestamoB 1.232e-01 2.865e+02 0.000 0.9997
tipoprestamoC 2.162e+01 1.973e+02 0.110 0.9127
tipoprestamoD 2.157e+01 1.973e+02 0.109 0.9130
tipoprestamoE 2.160e+01 1.973e+02 0.110 0.9128
tipoprestamoF 2.256e+01 1.973e+02 0.114 0.9089
monto_prestamo -1.045e-05 6.085e-06 -1.717 0.0860 .
tasainteres -2.874e-02 3.379e-02 -0.850 0.3951
historiacreditos -2.485e-02 1.788e-02 -1.390 0.1646
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
(Dispersion parameter for binomial family taken to be 1)
Null deviance: 18628.1 on 7791 degrees of freedom
Residual deviance: 6208.7 on 7772 degrees of freedom
AIC: 6207.5
Number of Fisher Scoring iterations: 18
En la prueba de Wald las hipótesis son:
- Nula: La variable NO aporta al modelo.
- Alterna: La variable SI aporta al modelo.
Es decir, la variables que se consideran significativas para el modelo son:
destinacionVenture
Matriz de confusión modelo 1D
# Cálculo de la matriz de confusión del modelo 1D
## Paso 1: calcular los pronósticos SOBRE LA MUESTRA DE ENTRENAMIENTO
df_train$score1D<-predict(modelo1D,type="response")
# Paso 2: Crear la variable pronóstico
df_train$pron1D<-as.numeric(df_train$score1D>0.5)
df_train$pron1D<-as.factor(df_train$pron1D)
df_train$default<-as.factor(df_train$default)
# Generar la matriz de confusión
confusionMatrix(df_train$pron1D, df_train$default)
Confusion Matrix and Statistics
Reference
Prediction 0 1
0 5621 0
1 1070 1101
Accuracy : 0.8627
95% CI : (0.8548, 0.8702)
No Information Rate : 0.8587
P-Value [Acc > NIR] : 0.1606
Kappa : 0.5975
Mcnemar's Test P-Value : <2e-16
Sensitivity : 0.8401
Specificity : 1.0000
Pos Pred Value : 1.0000
Neg Pred Value : 0.5071
Prevalence : 0.8587
Detection Rate : 0.7214
Detection Prevalence : 0.7214
Balanced Accuracy : 0.9200
'Positive' Class : 0
Analisis de accuracy, sensitivity y specificity
- Accuracy (86.27%)
- Interpretación: El modelo clasifica correctamente el 86.19% de los casos, lo cual es muy bueno. Supera ligeramente al modelo 1A y tiene mejor equilibrio que los modelos 1B y 1C.
- Sensitivity (83.89%)
Interpretación: De todos los que realmente sí pagan, el modelo identifica correctamente el 83.89%.
Significado práctico: Tiene muy buena capacidad para detectar clientes que sí pagarán sus obligaciones, aunque no tan alta como el modelo 1A.
- Specificity (100%):
- Interpretación: De todos los que no pagan, el modelo clasifica correctamente al 100%.
Advertencia: Aunque esto suena ideal, una especificidad perfecta no es necesariamente fiable y puede indicar:
Sobreajuste del modelo.
Una estrategia de clasificación sesgada (por ejemplo, basada en umbrales muy extremos).
Datos de prueba no representativos.
Significado práctico: El modelo nunca rechaza a malos pagadores, pero debemos validar que esta perfección no sea ilusoria o dependiente del conjunto de prueba.
Conclusión del Modelo 1D
Tiene alto rendimiento general y muy buena capacidad para identificar tanto a quienes no pagarán como a quienes sí pagarán.
Aunque la especificidad perfecta (1.000) es atractiva, debe tomarse con precaución: es raro en escenarios reales y puede ocultar problemas de sobreajuste o limitaciones del set de validación.
Aun así, se posiciona como el modelo más equilibrado y robusto hasta ahora, especialmente si se verifica con una validación cruzada adicional o conjunto de prueba externo.
Modelo 1E
Identificación del modelo 1E
Este modelo tendrá la siguiente estructura:
$$ \text{p(x)} = \frac{e^{\beta_0 + \beta_1 X_1 + \beta_2 X_2 + \beta_{3} X_{3}}}{1 + e^{\beta_0 + \beta_1 X_1 + \beta_2 X_2 + \beta_{3} X_{3}}} $$
donde:
- $\text{Y}$=
default - $X_1$=
destinacion - $X_2$=
monto_prestamo - $X_3$=
tasainteres
Estimación del modelo 1E
#Estimación del Modelo 1E: modelo balanceado incluyendo las variables relevantes obtenidas en el modelo 1D
modelo1E<-glm(default~destinacion+monto_prestamo+tasainteres,data=df_train,family=binomial,weights=ponderador)
#no se incluye en la ecuación el ponderador, ni los cálculos de score y pronóstico realizados para otros modelos.
#el comando "weights" se usa para incluir el ponderador que balancea el modelo
summary(modelo1E)
Warning message in eval(family$initialize): “non-integer #successes in a binomial glm!”
Call:
glm(formula = default ~ destinacion + monto_prestamo + tasainteres,
family = binomial, data = df_train, weights = ponderador)
Coefficients:
Estimate Std. Error z value Pr(>|z|)
(Intercept) -1.202e+01 2.348e-01 -51.164 < 2e-16 ***
destinacionEducativo 3.416e-02 8.605e-02 0.397 0.691
destinacionLibre destino 8.209e-02 9.110e-02 0.901 0.368
destinacionMédico -1.197e-01 9.133e-02 -1.311 0.190
destinacionMejoramiento vivienda 1.752e-02 1.030e-01 0.170 0.865
destinacionVenture 4.423e-02 8.856e-02 0.499 0.617
monto_prestamo -2.384e-05 4.137e-06 -5.761 8.36e-09 ***
tasainteres 9.934e-01 1.796e-02 55.314 < 2e-16 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
(Dispersion parameter for binomial family taken to be 1)
Null deviance: 18628.1 on 7791 degrees of freedom
Residual deviance: 9854.8 on 7784 degrees of freedom
AIC: 9787.8
Number of Fisher Scoring iterations: 6
Diagnóstico del modelo 1E
Prueba omnibus modelo 1E
En el análisis del Modelo 1E, que busca predecir la probabilidad de impago (default) a partir de variables como monto_prestamo, destinacion,tasainteres. Planteamos las siguientes hipótesis para evaluar su validez general:
- Hipótesis Nula (H₀): El modelo no es significativo; es decir, ninguna de las variables explicativas mejora la predicción del default frente a un modelo sin predictores.
- Hipótesis Alterna (H₁): El modelo sí es significativo; al menos una de las variables explicativas contribuye a predecir el comportamiento de pago o impago.
Para evaluar estas hipótesis, se utiliza la Prueba Omnibus, basada en la comparación entre la devianza del modelo nulo (sin variables) y la devianza del modelo ajustado (Modelo 1E). Si la reducción en la devianza es estadísticamente significativa, se puede concluir que el modelo tiene validez global.
#Prueba omnibus para el modelo 1E
omnibus1E<-anova(modelo1E,chisq.test)
omnibus1E
Warning message in eval(family$initialize): “non-integer #successes in a binomial glm!” Warning message in eval(family$initialize): “non-integer #successes in a binomial glm!”
| Df | Deviance | Resid. Df | Resid. Dev | Pr(>Chi) | |
|---|---|---|---|---|---|
| <int> | <dbl> | <int> | <dbl> | <dbl> | |
| NULL | NA | NA | 7791 | 18628.14 | NA |
| destinacion | 5 | 108.95404 | 7786 | 18519.19 | 6.815788e-22 |
| monto_prestamo | 1 | 6.63557 | 7785 | 18512.56 | 9.996218e-03 |
| tasainteres | 1 | 8657.75489 | 7784 | 9854.80 | 0.000000e+00 |
Analizando los resultados de la prueba omnibus realizada anteriormente, podemos inferir que:
Como se evidencia en el p-value de la última variable evidenciada (tasainteres) ≈ 0 se analiza que es menor que 0.05 (valor de alfa). Por lo cuál: SÍ se rechaza la hipótesis nula. Lo cuál significa que:
El Modelo 1E SÍ es estadísticamente significativo en su conjunto al nivel α = 0.05, es decir:
- Las variables incluidas SÍ mejoran la predicción del impago de forma conjunta, con suficiente evidencia estadística.
Prueba de Wald modelo 1E
La prueba de Wald es una herramienta estadística utilizada para evaluar la significancia de las variables dentro de un modelo de regresión. Su objetivo principal es determinar si los coeficientes estimados de las variables independientes tienen un impacto significativo en la variable dependiente.
A través de esta prueba, podemos verificar de manera individual si alguna variable contribuye de forma significativa al modelo, lo que nos permite decidir si mantenerla o excluirla. Este análisis es fundamental para mejorar la precisión y la interpretación del modelo, optimizando su capacidad predictiva y la validación de sus resultados.
#Resumen del modelo 1E
summary(modelo1E)
Call:
glm(formula = default ~ destinacion + monto_prestamo + tasainteres,
family = binomial, data = df_train, weights = ponderador)
Coefficients:
Estimate Std. Error z value Pr(>|z|)
(Intercept) -1.202e+01 2.348e-01 -51.164 < 2e-16 ***
destinacionEducativo 3.416e-02 8.605e-02 0.397 0.691
destinacionLibre destino 8.209e-02 9.110e-02 0.901 0.368
destinacionMédico -1.197e-01 9.133e-02 -1.311 0.190
destinacionMejoramiento vivienda 1.752e-02 1.030e-01 0.170 0.865
destinacionVenture 4.423e-02 8.856e-02 0.499 0.617
monto_prestamo -2.384e-05 4.137e-06 -5.761 8.36e-09 ***
tasainteres 9.934e-01 1.796e-02 55.314 < 2e-16 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
(Dispersion parameter for binomial family taken to be 1)
Null deviance: 18628.1 on 7791 degrees of freedom
Residual deviance: 9854.8 on 7784 degrees of freedom
AIC: 9787.8
Number of Fisher Scoring iterations: 6
En la prueba de Wald las hipótesis son:
- Nula: La variable NO aporta al modelo.
- Alterna: La variable SI aporta al modelo.
Es decir, la variables que se consideran significativas para el modelo son:
monto_prestamotasainteres
Matriz de confusión modelo 1E
# Cálculo de la matriz de confusión del modelo 1E
## Paso 1: calcular los pronósticos SOBRE LA MUESTRA DE ENTRENAMIENTO
df_train$score1E<-predict(modelo1E,type="response")
# Paso 2: Crear la variable pronóstico
df_train$pron1E<-as.numeric(df_train$score1E>0.5)
df_train$pron1E<-as.factor(df_train$pron1E)
df_train$default<-as.factor(df_train$default)
# Generar la matriz de confusión
confusionMatrix(df_train$pron1E, df_train$default)
Confusion Matrix and Statistics
Reference
Prediction 0 1
0 5453 76
1 1238 1025
Accuracy : 0.8314
95% CI : (0.8229, 0.8396)
No Information Rate : 0.8587
P-Value [Acc > NIR] : 1
Kappa : 0.5177
Mcnemar's Test P-Value : <2e-16
Sensitivity : 0.8150
Specificity : 0.9310
Pos Pred Value : 0.9863
Neg Pred Value : 0.4529
Prevalence : 0.8587
Detection Rate : 0.6998
Detection Prevalence : 0.7096
Balanced Accuracy : 0.8730
'Positive' Class : 0
Analisis de accuracy, sensitivity y specificity
- Accuracy (83.14%)
- Interpretación: El modelo acierta en el 83,14% de los casos, lo cual es aceptable.
- Sensitivity (81.50%)
Interpretación: El modelo detecta correctamente al 81.4% de los que sí pagan.
Comentario: Buena capacidad para identificar a quienes pagarán, aunque inferior a los modelos 1A y 1D.
- Specificity (93.10%)
Interpretación: El modelo identifica correctamente al 93.10% de los malos pagadores.
Comentario: Excelente resultado. El modelo minimiza la aceptación de personas no confiables, mejorando frente a modelos como el 1A.
Conclusión del Modelo 1E
Este modelo logra un buen equilibrio entre detectar morosos y aceptar buenos pagadores.
Tiene una de las mejores especificidades observadas (92.55%), sin comprometer demasiado la sensibilidad.
Aunque su accuracy general es menor al de otros modelos, lo que lo convierte en un modelo confiable para decisiones de riesgo crediticio.
Puede ser útil en escenarios donde se busque maximizar la seguridad crediticia sin llegar a ser muy riguroso o inflexible.
Modelo 1F
Identificación del modelo 1F
Este modelo tendrá la siguiente estructura:
$$ \text{p(x)} = \frac{e^{\beta_0 + \beta_1 X_1 + \beta_2 X_2 }}{1 + e^{\beta_0 + \beta_1 X_1 + \beta_2 X_2 }} $$
donde:
- $\text{Y}$=
default - $X_1$=
monto_prestamo - $X_2$=
tasainteres
Estimación del modelo 1F
#Estimación del Modelo 1F: modelo balanceado incluyendo las variables relevantes obtenidas en el modelo 1D
modelo1F<-glm(default~monto_prestamo+tasainteres,data=df_train,family=binomial,weights=ponderador)
#no se incluye en la ecuación el ponderador, ni los cálculos de score y pronóstico realizados para otros modelos.
#el comando "weights" se usa para incluir el ponderador que balancea el modelo
summary(modelo1F)
Warning message in eval(family$initialize): “non-integer #successes in a binomial glm!”
Call:
glm(formula = default ~ monto_prestamo + tasainteres, family = binomial,
data = df_train, weights = ponderador)
Coefficients:
Estimate Std. Error z value Pr(>|z|)
(Intercept) -1.202e+01 2.283e-01 -52.643 < 2e-16 ***
monto_prestamo -2.355e-05 4.126e-06 -5.708 1.14e-08 ***
tasainteres 9.944e-01 1.793e-02 55.455 < 2e-16 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
(Dispersion parameter for binomial family taken to be 1)
Null deviance: 18628.1 on 7791 degrees of freedom
Residual deviance: 9861.2 on 7789 degrees of freedom
AIC: 9784.1
Number of Fisher Scoring iterations: 6
Diagnóstico del modelo 1F
Prueba omnibus modelo 1F
En el análisis del Modelo 1F, que busca predecir la probabilidad de impago (default) a partir de variables como monto_prestamo y tasainteres. Planteamos las siguientes hipótesis para evaluar su validez general:
- Hipótesis Nula (H₀): El modelo no es significativo; es decir, ninguna de las variables explicativas mejora la predicción del default frente a un modelo sin predictores.
- Hipótesis Alterna (H₁): El modelo sí es significativo; al menos una de las variables explicativas contribuye a predecir el comportamiento de pago o impago.
Para evaluar estas hipótesis, se utiliza la Prueba Omnibus, basada en la comparación entre la devianza del modelo nulo (sin variables) y la devianza del modelo ajustado (Modelo 1F). Si la reducción en la devianza es estadísticamente significativa, se puede concluir que el modelo tiene validez global.
#Prueba omnibus para el modelo 1F
omnibus1F<-anova(modelo1F,chisq.test)
omnibus1F
Warning message in eval(family$initialize): “non-integer #successes in a binomial glm!”
| Df | Deviance | Resid. Df | Resid. Dev | Pr(>Chi) | |
|---|---|---|---|---|---|
| <int> | <dbl> | <int> | <dbl> | <dbl> | |
| NULL | NA | NA | 7791 | 18628.145 | NA |
| monto_prestamo | 1 | 10.53787 | 7790 | 18617.607 | 0.001169533 |
| tasainteres | 1 | 8756.38505 | 7789 | 9861.222 | 0.000000000 |
Analizando los resultados de la prueba omnibus realizada anteriormente, podemos inferir que:
Como se evidencia en el p-value de la última variable evidenciada (tasainteres) ≈ 0 se analiza que es menor que 0.05 (valor de alfa). Por lo cuál: SÍ se rechaza la hipótesis nula.
Lo cuál significa que:
El Modelo 1F SÍ es estadísticamente significativo en su conjunto al nivel α = 0.05, es decir:
- Las variables incluidas SÍ mejoran la predicción del impago de forma conjunta, con suficiente evidencia estadística.
Prueba de Wald modelo 1F
La prueba de Wald es una herramienta estadística utilizada para evaluar la significancia de las variables dentro de un modelo de regresión. Su objetivo principal es determinar si los coeficientes estimados de las variables independientes tienen un impacto significativo en la variable dependiente.
A través de esta prueba, podemos verificar de manera individual si alguna variable contribuye de forma significativa al modelo, lo que nos permite decidir si mantenerla o excluirla. Este análisis es fundamental para mejorar la precisión y la interpretación del modelo, optimizando su capacidad predictiva y la validación de sus resultados.
#Resumen del modelo 1F
summary(modelo1F)
Call:
glm(formula = default ~ monto_prestamo + tasainteres, family = binomial,
data = df_train, weights = ponderador)
Coefficients:
Estimate Std. Error z value Pr(>|z|)
(Intercept) -1.202e+01 2.283e-01 -52.643 < 2e-16 ***
monto_prestamo -2.355e-05 4.126e-06 -5.708 1.14e-08 ***
tasainteres 9.944e-01 1.793e-02 55.455 < 2e-16 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
(Dispersion parameter for binomial family taken to be 1)
Null deviance: 18628.1 on 7791 degrees of freedom
Residual deviance: 9861.2 on 7789 degrees of freedom
AIC: 9784.1
Number of Fisher Scoring iterations: 6
En la prueba de Wald las hipótesis son:
- Nula: La variable NO aporta al modelo.
- Alterna: La variable SI aporta al modelo.
Es decir, la variables que se consideran significativas para el modelo son:
monto_prestamotasainteres
Matriz de confusión modelo 1F
# Cálculo de la matriz de confusión del modelo 1F
## Paso 1: calcular los pronósticos SOBRE LA MUESTRA DE ENTRENAMIENTO
df_train$score1F<-predict(modelo1F,type="response")
# Paso 2: Crear la variable pronóstico
df_train$pron1F<-as.numeric(df_train$score1F>0.5)
df_train$pron1F<-as.factor(df_train$pron1F)
df_train$default<-as.factor(df_train$default)
# Generar la matriz de confusión
confusionMatrix(df_train$pron1F, df_train$default)
Confusion Matrix and Statistics
Reference
Prediction 0 1
0 5458 75
1 1233 1026
Accuracy : 0.8321
95% CI : (0.8236, 0.8404)
No Information Rate : 0.8587
P-Value [Acc > NIR] : 1
Kappa : 0.5194
Mcnemar's Test P-Value : <2e-16
Sensitivity : 0.8157
Specificity : 0.9319
Pos Pred Value : 0.9864
Neg Pred Value : 0.4542
Prevalence : 0.8587
Detection Rate : 0.7005
Detection Prevalence : 0.7101
Balanced Accuracy : 0.8738
'Positive' Class : 0
Analisis de accuracy, sensitivity y specificity
- Accuracy (83.21%)
- Interpretación: El modelo clasifica correctamente el 83.21% de los casos.
- Sensitivity (81.57%)
Interpretación: El modelo identifica correctamente al 81.3% de quienes pagarán.
Comentario: Es un valor sólido, muy similar al modelo 1E
- Specificity (93.19%)
Interpretación: El modelo identifica correctamente al 93.19% de los que no pagarán.
Comentario: Excelente resultado, lo que significa que el modelo acepta muy pocos clientes no confiables. De hecho, mejora levemente frente al modelo 1E en esta métrica.
Conclusión del Modelo 1F
El modelo 1F muestra un rendimiento muy similar al modelo 1E, con un ligero aumento en especificidad, pero también una ligera disminución en sensibilidad.
Tiene muy buena capacidad para detectar tanto a los morosos como a los buenos pagadores, y presenta una Balanced Accuracy sobresaliente.
Es adecuado para situaciones donde se desea minimizar el riesgo crediticio sin excluir injustamente a clientes confiables.
Fase 5.1: Evaluación 📝
En esta fase nos encargaremos de analizar la matriz de confusión de los modelos de regresión logística aplicada a la muestra de comprobación; asimismo, haremos un análisis de estos y escogeremos el mejor modelo posible.
Evaluación modelo 1A
# EVALUACIÓN: Cálculo de la matriz de confusión del modelo 1A
## Paso 1: calcular los pronósticos SOBRE LA MUESTRA DE **COMPROBACION**
df_test$score1A<-predict(modelo1A,newdata= df_test, type="response") #agregar la muestra de comprobación con la función newdata
# Paso 2: Crear la variable pronóstico
df_test$pron1A<-as.numeric(df_test$score1A>0.5)
df_test$pron1A<-as.factor(df_test$pron1A)
df_test$default<-as.factor(df_test$default)
# Generar la matriz de confusión
confusionMatrix(df_test$pron1A, df_test$default)
Confusion Matrix and Statistics
Reference
Prediction 0 1
0 2134 200
1 198 192
Accuracy : 0.8539
95% CI : (0.8401, 0.867)
No Information Rate : 0.8561
P-Value [Acc > NIR] : 0.6408
Kappa : 0.4058
Mcnemar's Test P-Value : 0.9600
Sensitivity : 0.9151
Specificity : 0.4898
Pos Pred Value : 0.9143
Neg Pred Value : 0.4923
Prevalence : 0.8561
Detection Rate : 0.7834
Detection Prevalence : 0.8568
Balanced Accuracy : 0.7024
'Positive' Class : 0
Evaluación modelo 1B
# EVALUACIÓN: Cálculo de la matriz de confusión del modelo 1B
## Paso 1: calcular los pronósticos SOBRE LA MUESTRA DE **COMPROBACION**
df_test$score1B<-predict(modelo1B,newdata= df_test, type="response") #agregar la muestra de comprobación con la función newdata
# Paso 2: Crear la variable pronóstico
df_test$pron1B<-as.numeric(df_test$score1B>0.5)
df_test$pron1B<-as.factor(df_test$pron1B)
df_test$default<-as.factor(df_test$default)
# Generar la matriz de confusión
confusionMatrix(df_test$pron1B, df_test$default)
Warning message in confusionMatrix.default(df_test$pron1B, df_test$default): “Levels are not in the same order for reference and data. Refactoring data to match.”
Confusion Matrix and Statistics
Reference
Prediction 0 1
0 2332 392
1 0 0
Accuracy : 0.8561
95% CI : (0.8423, 0.8691)
No Information Rate : 0.8561
P-Value [Acc > NIR] : 0.5135
Kappa : 0
Mcnemar's Test P-Value : <2e-16
Sensitivity : 1.0000
Specificity : 0.0000
Pos Pred Value : 0.8561
Neg Pred Value : NaN
Prevalence : 0.8561
Detection Rate : 0.8561
Detection Prevalence : 1.0000
Balanced Accuracy : 0.5000
'Positive' Class : 0
Evaluación modelo 1C
# EVALUACIÓN: Cálculo de la matriz de confusión del modelo 1C
## Paso 1: calcular los pronósticos SOBRE LA MUESTRA DE **COMPROBACION**
df_test$score1C<-predict(modelo1C,newdata= df_test, type="response") #agregar la muestra de comprobación con la función newdata
# Paso 2: Crear la variable pronóstico
df_test$pron1C<-as.numeric(df_test$score1C>0.5)
df_test$pron1C<-as.factor(df_test$pron1C)
df_test$default<-as.factor(df_test$default)
# Generar la matriz de confusión
confusionMatrix(df_test$pron1C, df_test$default)
Warning message in confusionMatrix.default(df_test$pron1C, df_test$default): “Levels are not in the same order for reference and data. Refactoring data to match.”
Confusion Matrix and Statistics
Reference
Prediction 0 1
0 2332 392
1 0 0
Accuracy : 0.8561
95% CI : (0.8423, 0.8691)
No Information Rate : 0.8561
P-Value [Acc > NIR] : 0.5135
Kappa : 0
Mcnemar's Test P-Value : <2e-16
Sensitivity : 1.0000
Specificity : 0.0000
Pos Pred Value : 0.8561
Neg Pred Value : NaN
Prevalence : 0.8561
Detection Rate : 0.8561
Detection Prevalence : 1.0000
Balanced Accuracy : 0.5000
'Positive' Class : 0
Evaluación modelo 1D
# EVALUACIÓN: Cálculo de la matriz de confusión del modelo 1D
## Paso 1: calcular los pronósticos SOBRE LA MUESTRA DE **COMPROBACION**
df_test$score1D<-predict(modelo1D,newdata= df_test, type="response") #agregar la muestra de comprobación con la función newdata
# Paso 2: Crear la variable pronóstico
df_test$pron1D<-as.numeric(df_test$score1D>0.5)
df_test$pron1D<-as.factor(df_test$pron1D)
df_test$default<-as.factor(df_test$default)
# Generar la matriz de confusión
confusionMatrix(df_test$pron1D, df_test$default)
Confusion Matrix and Statistics
Reference
Prediction 0 1
0 1960 0
1 372 392
Accuracy : 0.8634
95% CI : (0.85, 0.8761)
No Information Rate : 0.8561
P-Value [Acc > NIR] : 0.1433
Kappa : 0.6026
Mcnemar's Test P-Value : <2e-16
Sensitivity : 0.8405
Specificity : 1.0000
Pos Pred Value : 1.0000
Neg Pred Value : 0.5131
Prevalence : 0.8561
Detection Rate : 0.7195
Detection Prevalence : 0.7195
Balanced Accuracy : 0.9202
'Positive' Class : 0
Evaluación modelo 1E
# EVALUACIÓN: Cálculo de la matriz de confusión del modelo 1E
## Paso 1: calcular los pronósticos SOBRE LA MUESTRA DE **COMPROBACION**
df_test$score1E<-predict(modelo1E,newdata= df_test, type="response") #agregar la muestra de comprobación con la función newdata
# Paso 2: Crear la variable pronóstico
df_test$pron1E<-as.numeric(df_test$score1E>0.5)
df_test$pron1E<-as.factor(df_test$pron1E)
df_test$default<-as.factor(df_test$default)
# Generar la matriz de confusión
confusionMatrix(df_test$pron1E, df_test$default)
Confusion Matrix and Statistics
Reference
Prediction 0 1
0 1894 29
1 438 363
Accuracy : 0.8286
95% CI : (0.8139, 0.8425)
No Information Rate : 0.8561
P-Value [Acc > NIR] : 1
Kappa : 0.5148
Mcnemar's Test P-Value : <2e-16
Sensitivity : 0.8122
Specificity : 0.9260
Pos Pred Value : 0.9849
Neg Pred Value : 0.4532
Prevalence : 0.8561
Detection Rate : 0.6953
Detection Prevalence : 0.7059
Balanced Accuracy : 0.8691
'Positive' Class : 0
Evaluación modelo 1F
# EVALUACIÓN: Cálculo de la matriz de confusión del modelo 1F
## Paso 1: calcular los pronósticos SOBRE LA MUESTRA DE **COMPROBACION**
df_test$score1F<-predict(modelo1F,newdata= df_test, type="response") #agregar la muestra de comprobación con la función newdata
# Paso 2: Crear la variable pronóstico
df_test$pron1F<-as.numeric(df_test$score1F>0.5)
df_test$pron1F<-as.factor(df_test$pron1F)
df_test$default<-as.factor(df_test$default)
# Generar la matriz de confusión
confusionMatrix(df_test$pron1F, df_test$default)
Confusion Matrix and Statistics
Reference
Prediction 0 1
0 1896 28
1 436 364
Accuracy : 0.8297
95% CI : (0.815, 0.8436)
No Information Rate : 0.8561
P-Value [Acc > NIR] : 0.9999
Kappa : 0.5175
Mcnemar's Test P-Value : <2e-16
Sensitivity : 0.8130
Specificity : 0.9286
Pos Pred Value : 0.9854
Neg Pred Value : 0.4550
Prevalence : 0.8561
Detection Rate : 0.6960
Detection Prevalence : 0.7063
Balanced Accuracy : 0.8708
'Positive' Class : 0
Conclusión técnica de los modelos
| Modelo | Accuracy | Sensitivity | Specificity | N° Variables Usadas |
|---|---|---|---|---|
| 1A | 0.8539 | 0.9151 | 0.4898 | 10 |
| 1B | 0.8561 | 1.0000 ⚠️ | 0.0000 | 2 |
| 1C | 0.8601 | 1.0000 ⚠️ | 0.0000 | 1 |
| 1D | 0.8634 | 0.8405 | 1.0000 ⚠️ | 10 |
| 1E | 0.8286 | 0.8122 | 0.9260 | 3 |
| 1F | 0.8297 | 0.8130 | 0.9286 | 2 |
Al hacer el anàlisis de cada modelo, se llega a La elección del modelo 1F debido a un equilibrio sólido entre desempeño de los pronòsticos y simplicidad. A continuación se explican las métricas clave y cómo sustentan esta elección:
1. Accuracy : 0.8297
¿Qué mide? Proporción total de observaciones correctamente clasificadas (tanto quienes pagan como quienes no pagan).
Interpretación práctica: Aunque el modelo 1F no tiene el valor más alto de accuracy, su desempeño (82.97%) sigue siendo competitivo. Esto implica que clasifica correctamente a más del 82% de los clientes.
Comparación: Su accuracy es solo ligeramente menor que el de modelos más complejos como 1A o 1D, pero sin el costo de mayor complejidad.
2. Sensitivity: 0.8130
¿Qué mide? La proporción de verdaderos positivos de la clase 1 (clientes que sí pagan) correctamente identificados.
Interpretación práctica: Esta métrica es crucial en contextos financieros donde identificar correctamente a los clientes confiables (que no caen en default) es prioritario para maximizar el ingreso a razón de créditos.
Comparación: Aunque no es la más alta, sigue siendo sólida y adecuada para propósitos de filtrado de riesgo crediticio.
3. Specificity: 0.9370
¿Qué mide? La proporción de verdaderos negativos (clientes que no pagan) correctamente clasificados.
Interpretación práctica: Una alta especificidad como esta evita aceptar injustamente a malos clientes, lo cual es clave para mantener la rentabilidad y no caer en perdidas por no pago.
Comparación: El modelo 1F tiene la specificity más alta de todos los modelos evaluados, superando incluso al modelo 1E (comparándola con los modelos "validos").
4. Parsimonia (Simplicidad del modelo)
¿Qué es? Principio según el cual, entre dos modelos con desempeño similar, se prefiere el que utiliza menos variables.
Aplicación en el modelo 1F: El modelo 1F utiliza solo 2 variables (monto_prestamo y tasainteres), lo cual:
Facilita su interpretación por parte de analistas y tomadores de decisiones.
Reduce el riesgo de sobreajuste (overfitting).
Mejora la escalabilidad y facilidad de implementación en sistemas productivos.
Fase 6.1: Distribución 🚛
En esta última fase nos enfocaremos en tratar los 3 pasos a seguir que nos muestra la guia ModelerCRISPDM.pdf:
- Planificación de la distribución (Distribution Planning)
- Creación de medios de distribución (Creation of Distribution Media)
- Distribución real (Distribution of Results)
Además, nos encargaremos de responder las preguntas que fueron planteadas inicialmente.
#Calculo de los odds ratio para el modelo 1F
options(scipen = 999) #quitando notación científica
options(digits = 3)
oddsratio1F<-exp(coef(modelo1F))
as.matrix(oddsratio1F)
| (Intercept) | 0.00000603 |
|---|---|
| monto_prestamo | 0.99997645 |
| tasainteres | 2.70311470 |
Planeación de la distribución
Para asegurar que los hallazgos y el modelo predictivo sean accesibles y comprensibles para los tomadores de decisiones, se definió una estrategia de distribución enfocada en:
- Audiencia objetivo: Equipo directivo y de cartera.
- Objetivo: Que puedan entender facilmente los resultados de nuestro estudio.
- Formato de entrega:
- Notebook en Google Colab con visualizaciones.
- Lenguaje: Técnico pero con explicaciones interpretables para usuarios no estadísticos.
- Medio de acceso: Compartido vía enlance del notebook.
Creación de medios de distribución
Se podrian usar los siguientes medios de distribución:
- Aplicaciones con una interfaz interactiva: aplicación que incorpore el modelo hecho y que muestre los resultados de forma comprensible.
- Notebook de colab: usar el mismo modelo en colab en caso de que los recursos sean limitados; se requeriria una persona que sepa interpretar los resultados.
Estas herramientas permitirian a los usuarios explorar y entender los resultados sin requerir conocimientos avanzados de programación o estadística.
Distribución de resultados
¿Qué?
En los últimos años, miles de emprendedores en Colombia han puesto en marcha sus ideas gracias a los créditos otorgados por el programa Crecer del Fondo Emprender. Sin embargo, tras esa gran oportunidad se esconde un desafío mayúsculo: casi el 84% de esos créditos están en mora o han caído en impago.
Eso significa sueños aplazados, recursos públicos comprometidos y un sistema que, si no mejora, podría volverse insostenible.
Frente a esa realidad, surgió una pregunta clave: ¿Existe alguna forma de anticiparse al riesgo de impago antes de aprobar un crédito?
Y así nació este proyecto: construir un modelo que, con los datos que ya tiene el Fondo, pueda predecir la probabilidad de que un crédito no sea pagado. La meta no es excluir, sino tomar decisiones más inteligentes, proteger el presupuesto y, sobre todo, dar más oportunidades a quienes sí pueden y quieren cumplir.
¿Cómo?
La historia comenzó con una base de datos silenciosa, compuesta por más de 32.000 registros de créditos otorgados. Cada fila era una historia de vida: edades, ingresos, tipos de vivienda, tasas de interés, destinos del crédito, comportamientos financieros pasados…
Pero los datos, por sí solos, no cuentan nada. Así que primero se les escuchó: se limpiaron, se organizaron y se exploraron como se estudia un mapa antes de salir a buscar respuestas.
Luego, se entrenó un modelo de regresión logística, un modelo que no busca complejidad por sí misma, sino utilidad. Su misión: predecir la probabilidad de que un nuevo crédito termine en default.
Lo valioso no fue solo construir un modelo que "acierte", sino uno que explique: que diga por qué alguien representa un mayor riesgo, que muestre cómo factores como los ingresos, la edad o el tipo de vivienda se relacionan con el cumplimiento o el impago.
Y con esas probabilidades en la mano, ahora el Fondo puede mirar cada solicitud con nuevos ojos. Ya no solo con intuición, sino con evidencia.
¿Cuándo?
Este modelo no es una herramienta más para el archivo. Está hecho para actuar justo en el momento en que más se necesita: antes de que se apruebe un crédito.
Es allí, en esa pequeña ventana de análisis, donde puede marcar la diferencia: no para negar automáticamente, sino para personalizar el análisis, ajustar condiciones, o incluso orientar al emprendedor a un mejor camino.
Además, puede usarse periódicamente, cada trimestre o semestre, para alimentar estrategias de recuperación, priorizar esfuerzos en quienes más lo necesitan, y ajustar las políticas del programa según el comportamiento real de la cartera.
¿Dónde?
Aunque los datos originales no contenían información geográfica, el modelo está pensado para funcionar a nivel nacional, en cualquier oficina o comité que evalúe solicitudes del Fondo Emprender.
La implementación puede darse desde una plataforma central, accesible a través de los canales digitales actuales del SENA, o integrarse directamente en el sistema de análisis de riesgo de la entidad. Y con el tiempo, si se incorporan variables territoriales, incluso podría afinarse para capturar diferencias regionales en el comportamiento crediticio.
¿Para qué?
La razón de ser de este modelo va más allá de una tasa de precisión o una métrica de desempeño.
Este modelo existe para hacer que el crédito público funcione mejor, para que los recursos lleguen a donde realmente hacen la diferencia, y para que más emprendedores tengan la oportunidad de crecer sin que el sistema se desfonde por impagos masivos.
Al aplicarlo, el Fondo puede:
Detectar riesgos antes de que se conviertan en problemas.
Tomar decisiones más justas, con base en datos y no en suposiciones.
Reducir el costo social y económico de la cartera vencida.
Fomentar una cultura de responsabilidad financiera desde el emprendimiento.
Conclusiones y Recomendaciones
El análisis realizado sobre los datos históricos del programa Crecer del Fondo Emprender nos permitió identificar factores clave que influyen en el comportamiento de pago de los beneficiarios. Gracias a esta evaluación, hoy contamos con una herramienta valiosa que nos ayuda a anticipar, con base en datos reales, quiénes tienen mayor probabilidad de cumplir con sus obligaciones y quiénes podrían representar un riesgo para el fondo. Esta información no solo mejora la eficiencia del proceso de asignación de créditos, sino que también abre la puerta a una gestión de cartera más proactiva y sostenible.
Uno de los resultados más reveladores del estudio fue que los beneficiarios que reciben créditos con tasas de interés más altas tienden a pagar con mayor frecuencia. Aunque esto podría parecer contradictorio con lo que comúnmente se cree, existen varias razones por las cuales esto ocurre. Es posible que quienes aceptan una tasa más alta tengan una mayor conciencia del compromiso adquirido, estén más seguros de su capacidad de pago o se trate de perfiles más estables que han sido calificados para asumir este tipo de condiciones. En cualquier caso, este hallazgo sugiere que la tasa de interés puede estar funcionando como un mecanismo natural de filtro, ayudando a identificar beneficiarios con mayor disposición o capacidad para cumplir con el crédito.
En contraste, observamos que los préstamos de mayor valor están asociados con una menor probabilidad de pago. Es decir, a medida que aumenta el monto desembolsado, también lo hace el riesgo de que ese dinero no sea recuperado. Este resultado no implica que se deban dejar de otorgar montos altos, pero sí invita a extremar las precauciones al hacerlo. Se vuelve fundamental establecer mecanismos más rigurosos de evaluación para estos casos, así como condiciones adicionales que mitiguen el riesgo, como la exigencia de garantías, planes de negocio más detallados o acompañamiento técnico más frecuente.
A partir de estos resultados, consideramos que el modelo desarrollado no debe implementarse aún de forma masiva en todo el programa, sino que se recomienda avanzar mediante una implementación parcial, en forma de plan piloto. Este piloto puede desarrollarse en una región específica o con un grupo reducido de nuevos beneficiarios, lo que permitirá validar en condiciones reales si el modelo realmente mejora la calidad de la cartera. Esta etapa también será útil para ajustar detalles antes de ampliar su uso a nivel nacional, asegurando así que las decisiones tomadas con ayuda del modelo sean efectivas y sostenibles.
Más allá del uso del modelo como herramienta de evaluación, estos resultados también ofrecen oportunidades estratégicas para rediseñar algunos aspectos del programa. Por ejemplo, en lugar de evitar tasas altas por temor a que afecten el pago, ahora sabemos que pueden ser un indicador de compromiso. En ese sentido, podrían aplicarse tasas diferenciales de forma más inteligente, ajustadas al perfil del beneficiario, e incluso ofrecer incentivos a quienes mantienen un buen historial de cumplimiento con tasas progresivamente mejores en el tiempo. También podría diseñarse una ruta de acceso gradual al crédito, donde el monto inicial sea más bajo y se aumente en la medida que el beneficiario demuestra buen comportamiento financiero.
De igual manera, los créditos de mayor valor podrían estar acompañados de mecanismos de seguimiento más cercanos, como visitas periódicas, asesoría financiera o requerimientos adicionales antes del desembolso. Estas medidas no buscan poner barreras, sino garantizar que el emprendimiento tenga realmente la capacidad de absorber ese nivel de inversión sin comprometer su viabilidad ni los recursos del fondo.
Hacia el futuro, es importante seguir fortaleciendo este tipo de modelos mediante la incorporación de nuevas variables. Hoy trabajamos con información como edad, tipo de vivienda, monto, tasa y otros datos básicos, pero podríamos enriquecer mucho más el análisis si se incorpora información como el tipo de negocio, el tiempo que lleva operando, la formación del beneficiario, su ubicación geográfica, y su historial en otros programas. Estas variables aportarían un entendimiento más profundo del entorno y permitirían hacer una segmentación más precisa del riesgo.
Además, se recomienda avanzar hacia una estrategia de monitoreo y mejora continua del modelo. Es decir, no basta con construir el modelo una vez: este debe actualizarse con frecuencia, incorporar nuevos datos y adaptarse a los cambios del contexto. También sería ideal que el programa cuente con un sistema de alertas tempranas que, con base en el perfil del crédito, permita detectar señales de riesgo antes de que se conviertan en cartera vencida. Este sistema podría apoyarse en mensajes preventivos, llamadas de seguimiento o flexibilización de condiciones antes de caer en mora.
En conclusión, el análisis realizado no solo nos entrega un modelo útil para predecir el comportamiento de pago, sino que abre la puerta a una transformación más profunda del proceso de crédito. Podemos empezar a tomar decisiones más informadas, diseñar productos financieros más adecuados a cada perfil, y aumentar la eficiencia del programa sin perder su enfoque social. Si se implementa con responsabilidad y de forma gradual, esta herramienta puede convertirse en un aliado estratégico para reducir pérdidas, ampliar el impacto del fondo y construir un modelo de financiamiento más justo y sostenible.
MODELO 2: ÁRBOL DE CLASIFICACIÓN PARA ESTIMAR LA PROBABILIDAD DE IMPAGO
Para este modelo se asume que las etapas 1, 2 y 3 de la metodología CRISP usadas en el modelo 1 son válidas, por ende nos enfocaremos únicamente en las etapas 4, 5, 6 de CRISP (Modelado, Evaluación y la Distribución)
Esto se hace debido a que las primeras etapas son válidas para aplicar este tipo de algoritmo.
Fase 4.2: Modelado 🧠
De acuerdo con los hallazgos y objetivos definidos en las fases anteriores (comprensión del negocio, de los datos y preparación de datos), en esta etapa se procederá a la construcción del modelo que permita clasificar la probabilidad de impago (default) de los créditos otorgados por el programa Fondo Emprender del SENA.
Dado que la variable objetivo es binaria (default = 0 o 1), se utilizará un árbol de clasificación, reconocido por su interpretabilidad, capacidad para manejar relaciones no lineales e identificación automática de interacciones entre variables, aspectos clave para entender el riesgo crediticio.
Esta fase se desarrollará en tres momentos clave:
- Identificación del modelo:
- Selección de variables predictoras mediante análisis de importancia preliminar.
- Estimación del modelo:
Construcción iterativa del árbol.
Validación de la estructura generada: análisis de las reglas de decisión y criterios de poda.
Evaluación de la estabilidad del árbol con subconjuntos de datos.
- Diagnóstico del modelo:
Evaluación del desempeño con métricas como: accuracy, sensibility y specificity
Identificación de variables clave mediante importancia de características (basada en reducción de impureza).
Generación de reglas de decisión para futuras recomendaciones estratégicas.
Modelo 2A
Identificación del modelo 2A
Este modelo no sigue una forma funcional; por consiguiente, únicamente se mencionan las variables que se usarán para la estimación de este.
- Variable dependiente:
default - Variables independientes:
edad,ingresoanual,tipovivienda,aniosempleo,destinacion,tipoprestamo,monto_prestamo,tasainteres,historiacreditos
Estimación del modelo 2A
#Estimación del modelo 2A: modelo genérico de árbol de clasificación con todas las variables.
modelo2A<-rpart(default~edad+ingresoanual+tipovivienda+aniosempleo+destinacion+tipoprestamo+monto_prestamo+tasainteres+historiacreditos,data=df_train)
rpart.plot(modelo2A)
Diagnóstico del modelo 2A
#Matriz de confusión para el modelo 2A - Muestra de entrenamiento
df_train$pron2A<-predict(modelo2A,type="class")
confusionMatrix(df_train$pron2A,df_train$default)
Confusion Matrix and Statistics
Reference
Prediction 0 1
0 6377 629
1 308 478
Accuracy : 0.88
95% CI : (0.872, 0.887)
No Information Rate : 0.858
P-Value [Acc > NIR] : 0.00000000944
Kappa : 0.439
Mcnemar's Test P-Value : < 0.0000000000000002
Sensitivity : 0.954
Specificity : 0.432
Pos Pred Value : 0.910
Neg Pred Value : 0.608
Prevalence : 0.858
Detection Rate : 0.818
Detection Prevalence : 0.899
Balanced Accuracy : 0.693
'Positive' Class : 0
Análisis de accuracy,sensibility y specificity
- Accuracy (88%)
- Interpretación: El modelo clasifica correctamente el 88% de todos los casos, superando significativamente al modelo de referencia (82.94%). Esto indica una mejora en la capacidad general de predicción.
- Sensitivity(95.4%):
- Interpretación: Detecta correctamente el 95.4% de los casos que sí pagarán (clase 1). Es excelente para identificar no morosos.
- Specificity(43.2%):
- Interpretación: Solo identifica correctamente el 43.2% de los morosos (clase 0). Esto indica que clasifica erróneamente como no morosos al 56.8% de los clientes no confiables.
Modelo 2B
Identificación del modelo 2B
Este modelo no sigue una forma funcional; por consiguiente, únicamente se mencionan las variables que se usarán para la estimación de este.
- Variable dependiente:
default - Variables independientes:
edad,ingresoanual,tipovivienda,aniosempleo,destinacion,tipoprestamo,monto_prestamo,tasainteres,historiacreditos
Estimación del modelo 2B
#Estimando el modelo 2B - definición de los criterios de poda
control.poda<-rpart.control(maxdepth=3,minsplit=800)
#maxdepth= máximo número de niveles, en R el máximo es 30 niveles y el mínimo es 3 niveles
#minsplit= tamaño mínimo de los nodos filiales (minimo debe ser 5% del tamaño de la muestra n)
#En minsplit se puso el valor n=800 porque es alrededor del 10% de la muestra de entrenamiento (n de entrenamiento = 7792)
modelo2B<-rpart(default~edad+ingresoanual+tipovivienda+aniosempleo+destinacion+tipoprestamo+monto_prestamo+tasainteres+historiacreditos,data=df_train,control=control.poda)
rpart.plot(modelo2B)
Diagnóstico del modelo 2B
#Matriz de confusión para el modelo 2B - Muestra de entrenamiento
df_train$pron2B<-predict(modelo2B,type="class")
confusionMatrix(df_train$pron2B,df_train$default)
Confusion Matrix and Statistics
Reference
Prediction 0 1
0 6232 523
1 453 584
Accuracy : 0.875
95% CI : (0.867, 0.882)
No Information Rate : 0.858
P-Value [Acc > NIR] : 0.00000839
Kappa : 0.472
Mcnemar's Test P-Value : 0.0272
Sensitivity : 0.932
Specificity : 0.528
Pos Pred Value : 0.923
Neg Pred Value : 0.563
Prevalence : 0.858
Detection Rate : 0.800
Detection Prevalence : 0.867
Balanced Accuracy : 0.730
'Positive' Class : 0
Análisis de accuracy,sensibility y specificity
- Accuracy(87.5%)
- Interpretación: El modelo clasifica correctamente el 87.5% de los casos totales, mostrando un rendimiento ligeramente inferior al modelo anterior (88%) pero superior al modelo de referencia 1F (82.94%).
- Sensitivity(93.2%):
- Interpretación: Detecta correctamente el 93.2% de los no morosos (clase 1).
- Significativamente mejor que el modelo 1F de referencia.
- Specificity(52.8%):
Interpretación: Identifica correctamente el 52.8% de los malos pagadores, mejorando notablemente frente al modelo anterior.
Limitación: Aún presenta un 47.2% de falsos negativos (clientes morosos marcados como confiables).
Modelo 2C
Identificación del modelo 2C
Este modelo no sigue una forma funcional; por consiguiente, únicamente se mencionan las variables que se usarán para la estimación de este.
- Variable dependiente:
default - Variables independientes:
edad,ingresoanual,tipovivienda,aniosempleo,destinacion,tipoprestamo,monto_prestamo,tasainteres,historiacreditos
Estimación del modelo 2C
#Estimación del modelo 2C
control.poda<-rpart.control(maxdepth=30,minsplit=390)
#maxdepth= máximo número de niveles, en R el máximo es 30 niveles y el mínimo es 3 niveles
#minsplit= tamaño mínimo de los nodos filiales (minimo debe ser 5% del tamaño de la muestra n)
#En minsplit se puso el valor n=390 porque es el 5% de la muestra de entrenamiento (n de entrenamiento = 7792)
modelo2C<-rpart(default~edad+ingresoanual+tipovivienda+aniosempleo+destinacion+tipoprestamo+monto_prestamo+tasainteres+historiacreditos,data=df_train,control=control.poda,weights=ponderador)
rpart.plot(modelo2C)
Diagnóstico del modelo 2C
#Matriz de confusión para el modelo 2C - Muestra de entrenamiento
df_train$pron2C<-predict(modelo2C,type="class")
confusionMatrix(df_train$pron2C,df_train$default)
Confusion Matrix and Statistics
Reference
Prediction 0 1
0 5628 0
1 1057 1107
Accuracy : 0.864
95% CI : (0.857, 0.872)
No Information Rate : 0.858
P-Value [Acc > NIR] : 0.0534
Kappa : 0.602
Mcnemar's Test P-Value : <0.0000000000000002
Sensitivity : 0.842
Specificity : 1.000
Pos Pred Value : 1.000
Neg Pred Value : 0.512
Prevalence : 0.858
Detection Rate : 0.722
Detection Prevalence : 0.722
Balanced Accuracy : 0.921
'Positive' Class : 0
Análisis de accuracy,sensibility y specificity
- Accuracy (86.4%):
- Interpretación: Clasifica correctamente el 86.4% de los casos, ligeramente inferior a los modelos anteriores (88% y 87.5%).
- Sensitivity (84.2%)
Interpretación: Detecta solo el 84.2% de pagadores confiables, la más baja de los modelos analizados (vs 93.2%-95.4% en otros).
Riesgo: 1,057 falsos positivos (buenos pagadores clasificados como confiables), lo que implica alto riesgo crediticio.
- Specificity (100%) ⚠️
Problema fundamental: Este valor es artificial y no confiable porque:
Cero falsos negativos (0 casos donde un moroso sea marcado como buen pagador) es estadísticamente improbable en créditos.
Inconsistencia operativa: En escenarios reales, siempre hay errores tipo II.
Fase 5.2: Evaluación 📝
En esta fase nos encargaremos de analizar la matriz de confusión de los modelos de árboles de clasificación aplicada a la muestra de comprobación; asimismo, haremos un análisis de estos y escogeremos el mejor modelo posible.
Evaluación modelo 2A
#Matriz de confusión para el modelo 2A - Muestra de comprobación
df_test$pron2A<-predict(modelo2A,newdata=df_test,type="class")
confusionMatrix(df_test$pron2A,df_test$default)
Confusion Matrix and Statistics
Reference
Prediction 0 1
0 2204 244
1 137 144
Accuracy : 0.86
95% CI : (0.847, 0.873)
No Information Rate : 0.858
P-Value [Acc > NIR] : 0.363
Kappa : 0.353
Mcnemar's Test P-Value : 0.0000000562
Sensitivity : 0.941
Specificity : 0.371
Pos Pred Value : 0.900
Neg Pred Value : 0.512
Prevalence : 0.858
Detection Rate : 0.808
Detection Prevalence : 0.897
Balanced Accuracy : 0.656
'Positive' Class : 0
Evaluación modelo 2B
#Matriz de confusión para el modelo 2B - Muestra de comprobación
df_test$pron2B<-predict(modelo2B,newdata=df_test,type="class")
confusionMatrix(df_test$pron2B,df_test$default)
Confusion Matrix and Statistics
Reference
Prediction 0 1
0 2167 189
1 174 199
Accuracy : 0.867
95% CI : (0.854, 0.88)
No Information Rate : 0.858
P-Value [Acc > NIR] : 0.0888
Kappa : 0.446
Mcnemar's Test P-Value : 0.4625
Sensitivity : 0.926
Specificity : 0.513
Pos Pred Value : 0.920
Neg Pred Value : 0.534
Prevalence : 0.858
Detection Rate : 0.794
Detection Prevalence : 0.863
Balanced Accuracy : 0.719
'Positive' Class : 0
Evaluación modelo 2C
#Matriz de confusión para el modelo 2C - Muestra de comprobación
df_test$pron2C<-predict(modelo2C,newdata=df_test,type="class")
confusionMatrix(df_test$pron2C,df_test$default)
Confusion Matrix and Statistics
Reference
Prediction 0 1
0 1956 0
1 385 388
Accuracy : 0.859
95% CI : (0.845, 0.872)
No Information Rate : 0.858
P-Value [Acc > NIR] : 0.448
Kappa : 0.591
Mcnemar's Test P-Value : <0.0000000000000002
Sensitivity : 0.836
Specificity : 1.000
Pos Pred Value : 1.000
Neg Pred Value : 0.502
Prevalence : 0.858
Detection Rate : 0.717
Detection Prevalence : 0.717
Balanced Accuracy : 0.918
'Positive' Class : 0
Conclusión técnica de los modelos
| Modelo | Accuracy | Sensitivity | Specificity | N° Nodos finales |
|---|---|---|---|---|
| 2A | 0.86 | 0.941 | 0.371 | 8 |
| 2B | 0.867 | 0.926 | 0.513 | 4 |
| 2C | 0.859 | 0.836 | 1 ⚠️ | 2 |
Se selecciona el modelo 2B por ofrecer el mejor equilibrio entre capacidad predictiva, gestión de riesgo crediticio y parsimonia. A continuación, el análisis detallado que sustenta esta elección:
- Accuracy: 0.867
¿Qué mide? La precisión global para identificar correctamente tanto a clientes que no pagan (clase 0) como a los que sí pagan (clase 1).
Interpretación práctica: Clasifica correctamente 86.7% de los casos totales, superando a 2A (86.0%) y 2C (85.9%).
Es el valor más alto entre los modelos, lo que indica una mayor confiabilidad global.
- Sensitivity: 0.926
¿Qué mide? La capacidad para detectar clientes no morosos (clase 1: "paga").
Interpretación práctica: Identifica correctamente 92.6% de los buenos pagadores, evitando riesgos financieros graves. Genera solo 7.4% de falsos positivos (vs. 15.8% en 2C):
Traducción operativa: Por cada 1,000 personas que pagan sus obligaciones, solo 74 no son detectados (frente a 158 en 2C).
Ventaja comparativa: Supera significativamente a 2C (83.6%) y se acerca a 2A (94.1%) con un costo marginal en sensibilidad (-1.5%) que se compensa con ganancias en especificidad (+14.2%).
- Specificity: 0.513
¿Qué mide? La capacidad para identificar morosos (clase 1: "no paga").
Interpretación práctica: Detecta correctamente 51.3% de clientes no confiables, reduciendo aceptaciones injustificadas. Mejora sustancial vs. 2A (37.1%): Evita aceptar a 142 de cada 1,000 malos clientes adicionales.
Ventaja comparativa: Realista y no artificial (vs. 100% de 2C, resultado de sobreajuste). Equilibrio óptimo: Mientras 2A sacrifica especificidad (bajo 40%) y 2C la infla artificialmente, 2B la sitúa en un rango operativamente viable.
- Parsimonia (Simplicidad del Modelo)
¿Qué relevancia tiene? La parsimonia prioriza modelos simples que evitan sobreajuste, facilitan implementación y mantienen estabilidad predictiva.
Aplicación en 2B:4 nodos terminales (vs. 8 en 2A y 2 en 2C): Mayor simplicidad que 2A (8 nodos): Menor complejidad computacional y más fácil interpretación. Más robusto que 2C (2 nodos): Aunque 2C es más simple, su extrema simplicidad genera métricas irreales (specificity 100%).
Ventajas operativas:Reduce riesgo de overfitting: Mantiene estabilidad en datos nuevos.Escalabilidad: Implementación eficiente en entornos productivos.
Fase 6.2: Distribución 🚛
En esta última fase nos enfocaremos en tratar el paso de distribución de resultados; puesto que la planificación de la distribución y la creación de los medios para esta, mencionadas en la fase de distribución 6.1 son perfectamente aplicables para este modelo. Además, nos encargaremos de responder las preguntas planteadas inicialmente que le conciernen a este modelo.
Distribución de los resultados
¿Qué?
En el corazón del programa Crecer del Fondo Emprender late una intención noble: apostarle al talento colombiano y darle alas a los sueños de quienes deciden emprender. Sin embargo, esa apuesta viene acompañada de un riesgo enorme: el 84% de los créditos otorgados terminan en impago.
Este dato, por sí solo, prende todas las alarmas. No se trata solo de números. Son miles de proyectos truncados, recursos públicos que no se recuperan y una confianza que puede deteriorarse si el sistema no cambia.
Frente a esa realidad, surgió una necesidad urgente: ¿Cómo podemos saber, antes de entregar el dinero, si un solicitante tiene altas probabilidades de no pagar su crédito?
Ese fue el punto de partida para desarrollar un modelo predictivo con una misión muy clara: identificar, con la mayor certeza posible, el riesgo de impago de cada solicitud.
¿Cómo?
Para enfrentar este reto, se optó por una técnica robusta, intuitiva y explicativa: árboles de clasificación.
A diferencia de otros modelos más opacos, los árboles nos permitieron tomar decisiones “visibles”, entendibles incluso para quienes no son expertos en análisis de datos. Se construyó un árbol que aprende de las decisiones históricas y del comportamiento de los usuarios, clasificando a los nuevos solicitantes según sus características y el resultado más probable: si pagarán o no el crédito.
Se comenzó limpiando y preparando una base de datos compuesta por más de 32.000 créditos. Variables como la edad, ingreso anual, años en el empleo, tipo de vivienda y destino del préstamo se convirtieron en las ramas del árbol, guiando el camino hacia la clasificación de riesgo.
Cada división del árbol no fue arbitraria: respondió a patrones reales de comportamiento. Por ejemplo, el modelo detectó que ciertos niveles de ingreso combinados con determinado tipo de préstamo o historial crediticio aumentaban significativamente la probabilidad de impago.
El resultado no es solo una predicción. Es una ruta lógica que explica cómo llega a esa predicción, lo cual facilita su adopción en ambientes institucionales.
¿Cuándo?
Este modelo tiene su mayor utilidad justo antes del otorgamiento del crédito. En el momento en que un solicitante presenta su información, el árbol puede analizar sus características y, en segundos, estimar el nivel de riesgo.
Esto permite:
Ajustar las condiciones del préstamo (tasa, plazo, monto)
Pedir garantías adicionales en casos críticos
O incluso redirigir al solicitante a otro tipo de apoyo si su perfil es muy riesgoso
Además, el modelo puede ser usado en ciclos de revisión periódica (mensual o trimestral) para actualizar estrategias de recuperación, enfocándose en los deudores con más riesgo de caer en mora.
¿Dónde?
Aunque la base de datos no incluyó información territorial, este modelo puede ser implementado en cualquier oficina del Fondo Emprender a nivel nacional o incluso centralizado en una plataforma digital del SENA.
Su diseño es flexible: puede ser incrustado en un sistema de evaluación en línea o como herramienta de soporte para los analistas financieros. Y si en el futuro se incorporan variables geográficas, se podrá refinar aún más para considerar diferencias regionales.
¿Para qué?
Este modelo fue creado con un propósito claro: hacer del crédito una herramienta más efectiva, justa y sostenible.
Aplicarlo no solo permite detectar con anticipación quién tiene más probabilidades de no pagar. También permite:
Fortalecer los criterios de análisis sin perder el enfoque social del programa
Reducir la cartera vencida y proteger los recursos públicos
Aumentar la transparencia y confianza en el proceso de asignación
Diseñar estrategias de acompañamiento o educación financiera para emprendedores en riesgo
Además, los árboles de clasificación hacen algo que pocos modelos logran con tanta claridad: mostrar el "por qué" detrás de la decisión, lo cual es fundamental en contextos públicos, donde se exige rendición de cuentas y trazabilidad.
Conclusiones y Recomendaciones
En el marco del programa Crecer del Fondo Emprender, nos propusimos comprender mejor qué factores influyen en que un beneficiario cumpla o no con su obligación crediticia. La alta tasa de impago que enfrenta actualmente el programa ha encendido las alarmas, no solo porque pone en riesgo la sostenibilidad de los recursos públicos, sino porque impide que nuevos emprendedores accedan a estas oportunidades. Por eso, nos dimos a la tarea de construir un modelo exploratorio que nos ayudara, aunque fuera de forma aproximada, a encontrar patrones de riesgo que hasta ahora pasaban desapercibidos.
El modelo desarrollado se basa en una técnica sencilla pero útil conocida como árbol de decisión. En esencia, intenta agrupar a los beneficiarios según sus características —como el tipo de préstamo, el destino del crédito o el monto otorgado— para estimar si tienen mayor o menor probabilidad de pagar. Aunque este modelo no debe ser visto como una verdad definitiva, sí arroja señales importantes que pueden ser aprovechadas para tomar mejores decisiones.
Uno de los hallazgos más llamativos fue que los créditos clasificados como tipo A o B presentan una probabilidad de pago prácticamente nula. Es decir, en la muestra analizada, ninguno de los beneficiarios con este tipo de préstamo cumplió con su obligación crediticia. Esta información no debe tomarse a la ligera. Si bien no podemos afirmar que el tipo de préstamo por sí solo cause el incumplimiento, es evidente que algo en los criterios o en el perfil de los beneficiarios de estos créditos está fallando. Puede ser que este tipo de préstamos estén mal estructurados, mal asignados, o se estén entregando sin los filtros adecuados. En cualquier caso, se convierte en una alerta que exige revisión inmediata.
Por otro lado, el modelo también sugiere que dentro de los préstamos tipo C o D, el riesgo aumenta cuando el crédito se destina a fines como libre inversión, salud o educación, y cuando el monto supera ciertos umbrales. Esto implica que no solo importa el tipo de préstamo, sino también cómo se usa y cuánto dinero se desembolsa. Este hallazgo refuerza una idea clave: no todos los perfiles requieren el mismo tipo de acompañamiento ni deben recibir las mismas condiciones de crédito.
Con base en estos resultados, si bien preliminares, se pueden plantear varias acciones concretas para mejorar la eficiencia del programa. Primero, es urgente revisar los criterios con los que se están asignando los préstamos tipo A y B. Si estos créditos muestran sistemáticamente mal desempeño, podría ser necesario suspender su uso temporalmente, rediseñar sus condiciones o replantear los perfiles para los cuales están destinados. También podría explorarse la posibilidad de transformarlos en otro tipo de producto financiero más acorde a las capacidades de pago de los beneficiarios.
Segundo, se recomienda implementar un sistema de evaluación más detallado para los préstamos tipo C y D, especialmente aquellos con montos elevados o con destinos sensibles. Por ejemplo, podrían exigirse planes de negocio más robustos, visitas técnicas previas al desembolso, o garantías mínimas. Además, una vez entregado el crédito, estos beneficiarios deberían recibir un acompañamiento más cercano: asesoría periódica, educación financiera obligatoria, y seguimiento personalizado que les permita anticipar problemas antes de que caigan en mora.
Una tercera medida sería establecer umbrales de riesgo que activen alertas preventivas. Si un crédito cumple con ciertas condiciones críticas —como tipo D, destino libre inversión y monto superior a cierto límite—, el sistema podría recomendar automáticamente su revisión por parte de un comité, o bien ofrecerlo solo bajo condiciones especiales. Este tipo de automatización no reemplaza el juicio humano, pero sí ayuda a enfocar los esfuerzos donde más se necesitan.
En última instancia, este modelo no nos da certezas absolutas, pero sí nos permite tomar conciencia de que hay decisiones que podrían mejorarse de inmediato. Si bien no pretendemos que esta herramienta reemplace el criterio de los gestores del programa, sí creemos que puede convertirse en un aliado para tomar decisiones más responsables y sostenibles. La clave está en usar estos hallazgos como insumo para rediseñar políticas, afinar los procesos de evaluación y, sobre todo, ofrecer un crédito más justo, enfocado en quienes tienen tanto el deseo como la capacidad de cumplir.
La analítica de datos no tiene por qué ser un mundo lejano o abstracto. Cuando se traduce en acciones concretas, como las que aquí se proponen, se convierte en una herramienta poderosa para mejorar el impacto social y financiero de programas como el Fondo Emprender. Este es apenas el comienzo de una transformación que podría llevarnos a asignar mejor los recursos, recuperar más cartera y fortalecer la confianza en el emprendimiento como motor de desarrollo.
MODELO 3: CONTRUYENDO ÁRBOLES DE REGRESIÒN
Para este modelo se asume que las etapas 1, 2 (excepto el path analysis) y 3 de la metodología CRISP usadas en el modelo 1 son válidas, por ende nos enfocaremos únicamente en las etapas 2,4, 5, 6 de CRISP (Modelado, Evaluación y la Distribución)
Esto se hace debido a que las primeras etapas son válidas para aplicar este tipo de algoritmo.
Fase 2.3: Comprension de los datos 📊
En esta segunda fase nos enfocaremos en tratar la etapa de exploración de los datos de ModelerCRISPDM.pdf; puesto que las otras etapas ya se contemplan en la fase 2.1 de este notebook:
Exploración de los datos
Path analysis para pronosticar la variable monto_prestamo
Fase 4.3: Modelado 🧠
De acuerdo con los hallazgos y objetivos definidos en las fases anteriores (comprensión del negocio, de los datos y preparación de datos), en esta etapa se procederá a la construcción del modelo que permita predecir el impacto financiero asociado al impago de los créditos otorgados por el programa Fondo Emprender del SENA.
Dado que la variable objetivo es continua (monto_prestamo), se utilizará un árbol de regresión, reconocido por su eficacia para modelar relaciones no lineales, identificar patrones complejos y ofrecer interpretabilidad en predicciones numéricas, esencial para cuantificar riesgos financieros.
Esta fase se desarrollará en tres momentos clave:
- Identificación del modelo:
- Selección de variables predictoras
- Estimación del modelo:
Desarrollo iterativo del árbol.
identificación de criterios de poda
- Diagnóstico y optimización:
- Evaluación del R² (coeficiente de determinación)
- Evaluación del RMSEA en la muestra de entreamiento
Modelo 3A
Identificación del modelo 3A
Este modelo no sigue una forma funcional; por consiguiente, únicamente se mencionan las variables que se usarán para la estimación de este.
- Variable dependiente:
default - Variables independientes:
edad,ingresoanual,tipovivienda,aniosempleo,destinacion,tipoprestamo,monto_prestamo,tasainteres,historiacreditos
Estimación del modelo 3A
#Estimación del modelo 3A
modelo3A<-rpart(monto_prestamo~edad+ingresoanual+tipovivienda+aniosempleo+destinacion+tipoprestamo+tasainteres+historiacreditos+default,data=df_train)
rpart.plot(modelo3A)
Diagnóstico del modelo 3A
## Evaluación del modelo: cálculo del R²
rsq.rpart(modelo3A)
Regression tree:
rpart(formula = monto_prestamo ~ edad + ingresoanual + tipovivienda +
aniosempleo + destinacion + tipoprestamo + tasainteres +
historiacreditos + default, data = df_train)
Variables actually used in tree construction:
[1] ingresoanual tasainteres
Root node error: 2.729e+11/7792 = 35023039
n= 7792
CP nsplit rel error xerror xstd
1 0.140941 0 1.00000 1.00053 0.021638
2 0.026839 1 0.85906 0.86530 0.017742
3 0.023494 2 0.83222 0.84175 0.016844
4 0.022732 3 0.80873 0.83207 0.016617
5 0.010000 4 0.78599 0.79948 0.016066
# Evaluación del modelo 3A: RMSEA
df_train$pron3A<-predict(modelo3A)
RMSE(df_train$monto_prestamo,df_train$pron3A)
Modelo 3B
Identificación del modelo 3B
Este modelo no sigue una forma funcional; por consiguiente, únicamente se mencionan las variables que se usarán para la estimación de este.
- Variable dependiente:
default - Variables independientes:
edad,ingresoanual,tipovivienda,aniosempleo,destinacion,tipoprestamo,monto_prestamo,tasainteres,historiacreditos
Estimación del modelo 3B
#Estimando el modelo 3B - definición de los criterios de poda
control.poda<-rpart.control(maxdepth=3,minsplit=3240)
#maxdepth= máximo número de niveles, en R el máximo es 30 niveles y el mínimo es 3 niveles
#minsplit= tamaño mínimo de los nodos filiales (minimo debe ser 5% del tamaño de la muestra n)
#En minsplit se puso el valor n=3240 inicialmente para poder comparar, alrededor del 40% de la muestra (n de entrenamiento = 7792)
modelo3B<-rpart(monto_prestamo~edad+ingresoanual+tipovivienda+aniosempleo+destinacion+tipoprestamo+tasainteres+historiacreditos+default,data=df_train,control=control.poda)
rpart.plot(modelo3B)
Diagnóstico del modelo 3B
## Evaluación del modelo: cálculo del R2
rsq.rpart(modelo3B)
Regression tree:
rpart(formula = monto_prestamo ~ edad + ingresoanual + tipovivienda +
aniosempleo + destinacion + tipoprestamo + tasainteres +
historiacreditos + default, data = df_train, control = control.poda)
Variables actually used in tree construction:
[1] ingresoanual
Root node error: 2.729e+11/7792 = 35023039
n= 7792
CP nsplit rel error xerror xstd
1 0.140941 0 1.00000 1.00012 0.021623
2 0.026744 1 0.85906 0.86382 0.017679
3 0.022732 2 0.83232 0.85587 0.017480
4 0.010000 3 0.80958 0.83513 0.017249
# Evaluación del modelo 3A: RMSEA
df_train$pron3A<-predict(modelo3A)
RMSE(df_train$monto_prestamo,df_train$pron3A)
Fase 5.3: Evaluación 📝
Este fase nos encargaremos de analizar el RMSEA(root median square error average) de los modelos hechos anteriormente (en la muestra de comprobación); asimismo, haremos un análisis de estos y escogeremos el mejor modelo posible.
Evaluación modelo 3A
# Evaluación del modelo 3A: RMSEA - Muestra de comprobación
df_test$pron3A<-predict(modelo3A,newdata=df_test)
RMSE(df_test$monto_prestamo,df_test$pron3A)
Evaluación modelo 3B
# Evaluación del modelo 3B: RMSEA - Muestra de comprobación
df_test$pron3B<-predict(modelo3B,newdata=df_test)
RMSE(df_test$monto_prestamo,df_test$pron3B)
Conclusión técnica de los modelos
| Modelo | RMSEA | R² | N° Nodos finales |
|---|---|---|---|
| 3A | 5356.25 | 21,4% | 6 |
| 3B | 5371.10 | 19,05% | 4 |
Se selecciona el Modelo 3A como óptimo para pronosticar la variable monto_prestamo por lograr el mejor equilibrio entre capacidad explicativa, precisión predictiva y complejidad manejable. A continuación, el análisis detallado que fundamenta esta elección:
- Criterio de Parsimonia: Complejidad Controlada con Alto Rendimiento El principio de parsimonia exige preferir el modelo más simple cuando el rendimiento es comparable. Sin embargo, el Modelo 3A justifica su complejidad adicional con mejoras significativas:
Nodos terminales: 6 vs. 4 del Modelo 3B (2 nodos adicionales).
Ganancia en R²: +2.35% absoluto (21.4% vs. 19.05%) que representa una mejora relativa del 12.3% -(21.4 - 19.05) / 19.05-.
Compensación crítica: Los 2 nodos extra capturan patrones relevantes en montos de préstamo, sin caer en sobreajuste (evidenciado por su RMSE competitivo).
Conclusión: La complejidad de 3A es óptima: maximiza información sin sacrificar estabilidad.
- Capacidad Explicativa (R²): Superioridad Estadísticamente Relevante El R² mide el porcentaje de variabilidad explicado por el modelo:
Modelo 3A: 21.4% (1 de cada 5 variaciones en montos se explica por predictores).
Modelo 3B: 19.05% (limitado para segmentar clientes por riesgo crediticio).
Ejemplo: Mejor identificación de montos altos (>$100k) asociados a ingresos o historial crediticio.
- Precisión de los pronósticos (RMSEA)
- Ventaja crítica: Aunque la diferencia parece pequeña, es estadísticamente consistente.
- Ventajas Operativas en Contexto Crediticio:
Interpretabilidad: 6 nodos permiten segmentaciones accionables (ej.: "Clientes con ingresos >$5k/historial A tienen 70% más de montos aprobados").
Implementación eficiente: La estructura arbórea de 3A es computacionalmente ligera (segundos en ejecutar), a diferencia de modelos black-box.
Mitigación de riesgo: Menor error en montos altos reduce exposición a subestimaciones peligrosas (ej. préstamos a PYMEs).
Fase 6.3: Distribución 🚛
En esta última fase nos enfocaremos en tratar el paso de distribución de resultados; puesto que la planificación de la distribución y la creación de los medios para esta, mencionadas en la fase de distribución 6.1 son perfectamente aplicables para este modelo. Además, nos encargaremos de responder las preguntas planteadas inicialmente que le conciernen a este modelo.
Distribución de los resultados
¿Qué?
Cada vez que un emprendedor colombiano se acerca al programa Crecer del Fondo Emprender, lleva consigo una idea, una historia, un sueño… pero también una pregunta clave: ¿Cuánto dinero es justo y suficiente para poner en marcha ese sueño?
Asignar un monto adecuado al préstamo no es tarea fácil. Si se otorga muy poco, el negocio puede no despegar. Pero si se otorga más de lo necesario, aumenta el riesgo para el programa y se comprometen recursos que podrían destinarse a otros emprendedores.
En ese dilema nace este proyecto: construir un modelo que, con base en la información del solicitante, permita predecir con mayor precisión el monto ideal del préstamo.
No se trata solo de “dar por dar”, sino de otorgar con criterio, con evidencia, con datos.
¿Cómo?
Para lograrlo, se optó por un enfoque basado en árboles de regresión, una técnica poderosa para este tipo de problemas donde la variable objetivo —en este caso, el monto del préstamo— es numérica y está influenciada por múltiples factores al mismo tiempo.
El modelo aprendió de un histórico de más de 32.000 créditos otorgados, donde se analizaron variables como:
Edad del emprendedor
Ingreso anual
Tipo de vivienda
Años en el empleo actual
Destinación del crédito
Tipo de préstamo
Historial crediticio
Tasa de interés aplicada
Cada una de estas variables aporta una pieza al rompecabezas de cuánto debería prestarse.
El árbol de regresión divide los datos en grupos homogéneos según combinaciones de estas características, y a cada hoja final le asigna un valor promedio de préstamo, basado en datos reales.
Esto le permite predecir montos con base en patrones concretos, no en suposiciones. Por ejemplo, el modelo puede reconocer que emprendedores con ingresos altos, vivienda propia y destinos productivos suelen recibir montos mayores que aquellos con menor estabilidad financiera.
¿Cuándo?
El modelo fue diseñado para actuar en el momento más crucial del proceso: cuando el emprendedor presenta su solicitud.
En ese instante, con solo ingresar sus datos, el modelo puede ofrecer una estimación recomendada del monto del préstamo, basada en miles de decisiones previas. Esa estimación no es final ni obligatoria, pero sí una guía objetiva para los comités de evaluación.
Además, puede ser útil en fases de actualización presupuestal, al proyectar la demanda agregada de recursos o al ajustar políticas de asignación según perfiles recurrentes.
¿Dónde?
Este modelo puede integrarse fácilmente en el sistema digital de evaluación del Fondo Emprender, en los formularios o plataformas donde se recolecta la información del solicitante.
No depende de una región específica, por lo tanto, puede aplicarse a nivel nacional. Sin embargo, si se incorporan en el futuro datos geográficos o contextuales (como tipo de región, sector productivo local, etc.), el modelo puede ajustarse para ofrecer recomendaciones aún más precisas por zona o sector.
¿Para qué?
El objetivo es claro: otorgar los montos de forma más eficiente, justa y alineada con las necesidades reales de cada emprendedor.
Al utilizar este modelo, el Fondo Emprender puede:
Reducir la discrecionalidad y la subjetividad en el proceso de asignación.
Aumentar la eficiencia del uso de recursos públicos, evitando tanto la subfinanciación como el sobreendeudamiento.
Diseñar productos financieros diferenciados, según los perfiles identificados.
Identificar oportunidades de ajuste en políticas de crédito, basadas en evidencia acumulada.
Y más allá de eso, esta herramienta fortalece el vínculo entre la confianza del emprendedor y la responsabilidad del Estado, generando decisiones más transparentes, replicables y defendibles.
Conclusiones y Recomendaciones
Uno de los desafíos más complejos del programa Crecer del Fondo Emprender ha sido encontrar un equilibrio entre apoyar financieramente a los emprendedores y, al mismo tiempo, no sobrecargar sus capacidades de pago. No se trata simplemente de entregar dinero, sino de asegurarnos de que cada crédito tenga sentido en relación con la realidad económica de quien lo recibe. Con ese objetivo, construimos un modelo exploratorio que, aunque no perfecto, nos permite observar algunos patrones útiles para orientar la política de asignación de montos.
Este modelo analiza principalmente dos variables: los ingresos anuales del beneficiario y la tasa de interés del crédito. A partir de esos dos elementos, sugiere de manera aproximada qué monto podría otorgarse en distintos escenarios. Si bien no se trata de una fórmula definitiva, la información que entrega nos da pistas valiosas sobre cómo diseñar una estrategia de crédito más realista y responsable.
En los casos en que el beneficiario tiene ingresos anuales inferiores a 4,3 millones de pesos, el modelo sugiere otorgar montos relativamente bajos, en el orden de los 5,9 millones. Este tipo de ajuste es coherente con la lógica de no comprometer a los emprendedores por encima de su capacidad. Cuando los ingresos están en un rango un poco más alto —entre 4,3 y 6,3 millones anuales—, el modelo estima que se podrían manejar montos algo mayores, alrededor de 8,3 millones. Estos dos primeros grupos muestran cómo una escala progresiva, basada en los ingresos, puede ayudar a entregar montos más proporcionales al perfil de cada emprendedor.
Ahora bien, cuando el beneficiario tiene ingresos anuales superiores a 6,3 millones, el modelo considera también la tasa de interés. Si esta tasa es baja (menor al 7,9%), el monto sugerido sube a cerca de 9,4 millones. Pero si la tasa es más alta, el modelo continúa diferenciando: si el ingreso anual sigue siendo relativamente bajo (menos de 9,2 millones), el monto estimado es de 11 millones; si es más alto, puede llegar hasta los 14 millones. Estos resultados reflejan una lógica que tiene sentido: a mayor ingreso y con una tasa más alta, se puede asumir un poco más de riesgo, pero siempre ajustando el monto al perfil financiero del beneficiario.
¿Qué implicaciones tiene esto para la política de crédito del programa? Primero, que deberíamos dejar de pensar en un único monto de referencia para todos los casos. El modelo nos sugiere adoptar una política escalonada y personalizada, donde el monto no sea definido por lo que el emprendedor solicita, sino por su capacidad comprobada de generar ingresos y por las condiciones financieras ofrecidas. Esto no significa negar oportunidades, sino entregarlas con mayor responsabilidad.
Segundo, que el uso de tasas de interés más bajas no solo beneficia al beneficiario, sino que también permite otorgar montos más altos de forma más segura. Esto refuerza la idea de usar las tasas como herramientas estratégicas: quienes muestran buen comportamiento financiero podrían acceder a tasas más bajas como incentivo, lo que a su vez permitiría ampliar su acceso a montos mayores sin incrementar el riesgo.
Y tercero, que el monto otorgado debe ser dinámico, es decir, puede ajustarse con el tiempo. Un beneficiario que inicia con 5,9 millones y demuestra buen manejo podría, más adelante, escalar a 8 o 11 millones, según su evolución. Esta ruta gradual no solo reduce el riesgo de impago, sino que fortalece la relación entre el emprendedor y el fondo, construyendo confianza mutua.
En conclusión, el modelo no nos dice cuánto prestar con exactitud, pero sí nos recuerda una lección fundamental: el monto de un crédito no debe ser un número estático ni arbitrario, sino el resultado de una evaluación cuidadosa que tome en cuenta el contexto del beneficiario. Si logramos que cada crédito entregado sea justo, proporcional y viable, no solo reduciremos el riesgo financiero, sino que estaremos dando pasos firmes hacia un sistema de crédito más humano, más inteligente y más sostenible.
MODELO 4: CONTRUYENDO MODELOS DE REGRESIÒN LINEAL
Para este modelo se asume que las etapas 1, 2 y 3 de la metodología CRISP usadas en el modelo 1 y el path analysis del modelo 3 son válidas, por ende nos enfocaremos únicamente en las etapas 4, 5, 6 de CRISP (Modelado, Evaluación y la Distribución)
Esto se hace debido a que las primeras etapas son válidas para aplicar este tipo de algoritmo.
Fase 4.4: Modelado 🧠
De acuerdo con los hallazgos y objetivos definidos en las fases anteriores (comprensión del negocio, de los datos y preparación de datos), en esta etapa se procederá a la construcción del modelo que permita predecir el impacto financiero del impago en los créditos otorgados por el programa Fondo Emprender del SENA.
Dado que la variable objetivo es continua (monto_prestamo), se utilizará un modelo de regresión lineal, reconocido por su eficiencia para cuantificar relaciones entre variables, interpretabilidad matemática y capacidad para identificar tendencias clave en riesgos crediticios.
Esta fase se desarrollará en tres momentos clave:
- Identificación del modelo:
- Selección de variables predictoras
- identificación de la forma funcional del modelo
- Identificación de transformaciones necesarias (ej: logarítmicas para normalización).
- Estimación del modelo:
- Se estima el modelo de regresión lineal mediante el método OLS
- Diagnóstico del modelo
- Evaluación de bondad de ajuste: R²
- Prueba de significancia global
- Prueba de significancia individual
Modelo 4A
Identificación del modelo 4A
Este modelo tendrá la siguiente estructura:
$\text{Y} = \beta_{0} + \beta_{1}*X_{1}+ \beta_{2}*X_{2}+\beta_{3}*X_{3}+\beta_{4}*X_{4}+\beta_{5}*X_{5}+\beta_{6}*X_{6}+\beta_{7}*X_{7}+\beta_{8}*X_{8}+\beta_{9}*X_{9}+\text{E}$
donde:
- $\text{Y}$=
monto_prestamo - $X_1$=
edad - $X_2$=
ingresoanual - $X_3$=
tipovivienda - $X_4$=
aniosempleo - $X_5$=
destinacion - $X_6$=
tipoprestamo - $X_7$=
tasainteres - $X_8$=
historiacreditos - $X_9$=
PromoAgresiva - $\text{E}$=
Error
Estimación del modelo 4A
Modelo Lin-Lin
#Estimación del modelo 4A
modelo4A<-lm(monto_prestamo~ edad+ingresoanual+tipovivienda+aniosempleo+destinacion+tipoprestamo+tasainteres+historiacreditos,data = df_train)
summary(modelo4A)
Call:
lm(formula = monto_prestamo ~ edad + ingresoanual + tipovivienda +
aniosempleo + destinacion + tipoprestamo + tasainteres +
historiacreditos, data = df_train)
Residuals:
Min 1Q Median 3Q Max
-17121.2 -3602.2 -687.4 2975.7 25788.4
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 1.866e+03 6.761e+02 2.760 0.005793 **
edad -1.894e+01 2.240e+01 -0.846 0.397699
ingresoanual 7.030e-02 1.857e-03 37.848 < 2e-16 ***
tipoviviendaHipotecada 1.307e+03 1.341e+02 9.742 < 2e-16 ***
tipoviviendaOtro -8.721e+01 1.208e+03 -0.072 0.942472
tipoviviendaPropia 9.556e+02 2.180e+02 4.383 1.18e-05 ***
aniosempleo 5.633e+00 1.680e+01 0.335 0.737460
destinacionEducativo 6.802e+01 2.036e+02 0.334 0.738386
destinacionLibre destino -4.428e+01 2.139e+02 -0.207 0.836023
destinacionMédico -9.407e+00 2.126e+02 -0.044 0.964701
destinacionMejoramiento vivienda 2.814e+02 2.444e+02 1.152 0.249506
destinacionVenture -9.998e+00 2.089e+02 -0.048 0.961828
tipoprestamoB 7.960e+02 2.607e+02 3.053 0.002272 **
tipoprestamoC -1.703e+02 4.031e+02 -0.422 0.672699
tipoprestamoD 9.075e+02 5.557e+02 1.633 0.102489
tipoprestamoE 2.122e+03 7.667e+02 2.768 0.005657 **
tipoprestamoF 5.297e+03 1.591e+03 3.331 0.000871 ***
tasainteres 1.928e+02 6.051e+01 3.186 0.001446 **
historiacreditos 2.330e+01 3.213e+01 0.725 0.468452
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 5245 on 7773 degrees of freedom
Multiple R-squared: 0.2174, Adjusted R-squared: 0.2156
F-statistic: 120 on 18 and 7773 DF, p-value: < 2.2e-16
Diagnóstico del modelo 4A
- Significancia Global: p-valor < 0.000000000000002
- Conclusión: El modelo es altamente significativo globalmente (p-valor < 0.05). Rechazamos la hipótesis nula (H₀: "Todos los coeficientes son cero"). Existe evidencia sólida de que al menos una variable explica la variable respuesta.
- Significancia Individual (Variables): Las variables que al menos una de sus categorias se muestran como significativas; es decir, que su p-value es menor a 0,05 son:
ingresoanualtipoviviendatipoprestamotasainteres
- Bondad de Ajuste (R²= 21,7%): El modelo explica solo el 21.7% de la variabilidad de la variable respuesta.
- Conclusión: Aunque el modelo es globalmente útil (significancia F), su capacidad predictiva es limitada (R² bajo). Sugiere que: Variables relevantes podrían faltar en el modelo. Factores no observables (ej: comportamiento del consumidor) influyen fuertemente en la variable respuesta.
Modelo 4B
Identificación del modelo 4B
Este modelo tendrá la siguiente estructura:
$\text{Y} = \beta_{0} + \beta_{1}*X_{1}+ \beta_{2}*X_{2}+\beta_{3}*X_{3}+\beta_{4}*X_{4}+\text{E}$
donde:
- $\text{Y}$=
monto_prestamo - $X_1$=
ingresoanual - $X_2$=
tipovivienda - $X_3$=
tipoprestamo - $X_4$=
tasainteres - $\text{E}$=
Error
Estimación del modelo 4B
Modelo Lin-Lin quitando variables no significativas
#Estimación del modelo 4B
modelo4B<-lm(monto_prestamo~ ingresoanual+tipovivienda+tipoprestamo+tasainteres,data = df_train)
summary(modelo4B)
Call:
lm(formula = monto_prestamo ~ ingresoanual + tipovivienda + tipoprestamo +
tasainteres, data = df_train)
Residuals:
Min 1Q Median 3Q Max
-17196.9 -3586.5 -694.1 2974.5 25701.1
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 1519.70636 474.82428 3.201 0.00138 **
ingresoanual 0.07049 0.00183 38.520 < 2e-16 ***
tipoviviendaHipotecada 1327.92833 131.05110 10.133 < 2e-16 ***
tipoviviendaOtro -54.80518 1207.11269 -0.045 0.96379
tipoviviendaPropia 983.53396 215.23985 4.569 4.96e-06 ***
tipoprestamoB 795.89507 260.58446 3.054 0.00226 **
tipoprestamoC -164.78545 402.95923 -0.409 0.68260
tipoprestamoD 936.22629 554.08307 1.690 0.09113 .
tipoprestamoE 2138.59910 765.00890 2.796 0.00519 **
tipoprestamoF 5340.46486 1588.92171 3.361 0.00078 ***
tasainteres 192.07323 60.47449 3.176 0.00150 **
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 5243 on 7781 degrees of freedom
Multiple R-squared: 0.2171, Adjusted R-squared: 0.2161
F-statistic: 215.8 on 10 and 7781 DF, p-value: < 2.2e-16
Diagnóstico del modelo 4B
- Significancia Global: p-valor < 0.000000000000002
- Conclusión: El modelo es altamente significativo globalmente (p-valor < 0.05). Rechazamos la hipótesis nula (H₀: "Todos los coeficientes son cero"). Existe evidencia sólida de que al menos una variable explica la variable respuesta.
- Significancia Individual (Variables): Las variables que se muestran como significativas; es decir, que su p-value es menor a 0,05 son:
ingresoanualtasainteres
- Bondad de Ajuste (R²= 21,7%): El modelo explica solo el 21.7% de la variabilidad de la variable respuesta.
- Conclusión: Aunque el modelo es globalmente útil (significancia F), su capacidad predictiva es limitada (R² bajo). Sugiere que: Variables relevantes podrían faltar en el modelo. Factores no observables (ej: comportamiento del consumidor) influyen fuertemente en la variable respuesta.
Modelo 4C
Identificación del modelo 4C
Este modelo tendrá la siguiente estructura:
$\text{Y} = \beta_{0} + \beta_{1}*X_{1}+ \beta_{2}*X_{2}+\text{E}$
donde:
- $\text{Y}$=
monto_prestamo - $X_1$=
ingresoanual - $X_2$=
tasainteres - $\text{E}$=
Error
Estimación del modelo 4C
Modelo Lin-Lin quitando las variables no significativas del modelo 4B
#Estimación del modelo 4C
modelo4C<-lm(monto_prestamo~ ingresoanual+tasainteres,data = df_train)
summary(modelo4C)
Call:
lm(formula = monto_prestamo ~ ingresoanual + tasainteres, data = df_train)
Residuals:
Min 1Q Median 3Q Max
-17952 -3608 -795 2894 26222
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 1.765e+03 2.515e+02 7.017 2.46e-12 ***
ingresoanual 7.558e-02 1.776e-03 42.558 < 2e-16 ***
tasainteres 2.341e+02 2.046e+01 11.439 < 2e-16 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 5300 on 7789 degrees of freedom
Multiple R-squared: 0.1993, Adjusted R-squared: 0.1991
F-statistic: 969.6 on 2 and 7789 DF, p-value: < 2.2e-16
Diagnóstico del modelo 4C
- Significancia Global: p-valor < 0.000000000000002
- Conclusión: El modelo es altamente significativo globalmente (p-valor < 0.05). Rechazamos la hipótesis nula (H₀: "Todos los coeficientes son cero"). Existe evidencia sólida de que al menos una variable explica la variable respuesta.
- Significancia Individual (Variables): Las variables que se muestran como significativas; es decir, que su p-value es menor a 0,05 son:
ingresoanualtasainteres
- Bondad de Ajuste (R²= 19,9%): El modelo explica solo el 19.9% de la variabilidad de la variable respuesta.
- Conclusión: Aunque el modelo es globalmente útil (significancia F), su capacidad predictiva es limitada (R² bajo). Sugiere que: Variables relevantes podrían faltar en el modelo. Factores no observables (ej: comportamiento del consumidor) influyen fuertemente en la variable respuesta.
Modelo 4D
Identificación del modelo 4D
Este será un modelo transformado por logaritmos. La transformación por logaritmos es una forma de reducir la varianza de las variables en el modelo, como forma previa a decidir si las variables que no aportan se deben excluir; la estructura de este modelo será: $log(\text{Y}) = \beta_{0} + \beta_{1}*log(X_{1})+ \beta_{2}*log(X_{2})+\text{E}$
Como consecuencia de esta transformación, la lectura de los estimadores de regresión (Betas) pasa a darse en valores relativos (en porcentajes).
donde:
- $log(\text{Y})$= $log(montoprestamo)$
- $log(X_1)$= $log(edad)$
- $log(X_2)$= $log(ingresoanual)$
- $\text{E}$=
Error
Se descartan las variables que contengan valores cero, ya que el logaritmo de cero es un número irracional. Por ende en aquellas variables que contengan ceros se puede descartar o se puede filtrar las observaciones con ese valor para poder hacer el estimación
Estimación del modelo 4D
Modelo Log-Log con las variables significativas
#Estimacion del modelo 4D
modelo4D<-lm(log(monto_prestamo)~
log(ingresoanual)+
log(tasainteres)
, data=df_train)
summary(modelo4D)
Call:
lm(formula = log(monto_prestamo) ~ log(ingresoanual) + log(tasainteres),
data = df_train)
Residuals:
Min 1Q Median 3Q Max
-2.40373 -0.37099 0.08814 0.45468 1.52596
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 1.74111 0.17155 10.149 <2e-16 ***
log(ingresoanual) 0.60816 0.01467 41.451 <2e-16 ***
log(tasainteres) 0.21399 0.02400 8.916 <2e-16 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 0.6204 on 7789 degrees of freedom
Multiple R-squared: 0.1864, Adjusted R-squared: 0.1862
F-statistic: 892.5 on 2 and 7789 DF, p-value: < 2.2e-16
Diagnóstico del modelo 4D
- Significancia Global: p-valor < 2.2e-16
- Conclusión: El modelo es altamente significativo globalmente (p-valor < 0.05). Rechazamos la hipótesis nula (H₀: "Todos los coeficientes son cero"). Existe evidencia sólida de que al menos una variable explica la variable respuesta.
- Significancia Individual (Variables): Las variables que se muestran como significativas; es decir, que su p-value es menor a 0,05 son:
ingresoanualtasainteres
- Bondad de Ajuste (R²= 18,64%): El modelo explica solo el 18.64% de la variabilidad de la variable respuesta.
- Conclusión: Aunque el modelo es globalmente útil (significancia F), su capacidad predictiva es limitada (R² bajo). Sugiere que: Variables relevantes podrían faltar en el modelo. Factores no observables (ej: comportamiento del consumidor) influyen fuertemente en la variable respuesta.
Modelo 4E
Identificación del modelo 4E
Este será un modelo transformado por logaritmos. La transformación por logaritmos es una forma de reducir la varianza de las variables en el modelo, como forma previa a decidir si las variables que no aportan se deben excluir; la estructura de este modelo será: $\text{Y} = \beta_{0} + \beta_{1}*log(X_{1})+ \beta_{2}*log(X_{2})+\text{E}$
Como consecuencia de esta transformación, la lectura de los estimadores de regresión (Betas) pasa a darse en valores relativos (en porcentajes).
donde:
- $\text{Y}$=
monto_prestamo - $log(X_1)$= $log(edad)$
- $log(X_2)$= $log(ingresoanual)$
- $\text{E}$=
Error
Se descartan las variables que contengan valores cero, ya que el logaritmo de cero es un número irracional. Por ende en aquellas variables que contengan ceros se puede descartar o se puede filtrar las observaciones con ese valor para poder hacer el estimación
Estimación del modelo 4E
Modelo Lin-Log
#Estimacion del modelo 4E
modelo4E<-lm(monto_prestamo~
log(ingresoanual)+
log(tasainteres)
, data=df_train)
summary(modelo4E)
Call:
lm(formula = monto_prestamo ~ log(ingresoanual) + log(tasainteres),
data = df_train)
Residuals:
Min 1Q Median 3Q Max
-14276.0 -3571.4 -631.9 2866.5 25555.4
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) -57717.8 1449.8 -39.81 <2e-16 ***
log(ingresoanual) 5566.4 124.0 44.89 <2e-16 ***
log(tasainteres) 2508.6 202.8 12.37 <2e-16 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 5243 on 7789 degrees of freedom
Multiple R-squared: 0.2163, Adjusted R-squared: 0.2161
F-statistic: 1075 on 2 and 7789 DF, p-value: < 2.2e-16
Diagnóstico del modelo 4E
- Significancia Global: p-valor < 2.2e-16
- Conclusión: El modelo es altamente significativo globalmente (p-valor < 0.05). Rechazamos la hipótesis nula (H₀: "Todos los coeficientes son cero"). Existe evidencia sólida de que al menos una variable explica la variable respuesta.
- Significancia Individual (Variables): Las variables que se muestran como significativas; es decir, que su p-value es menor a 0,05 son:
ingresoanualtasainteres
- Bondad de Ajuste (R²= 21,63%): El modelo explica solo el 21.63% de la variabilidad de la variable respuesta.
- Conclusión: Aunque el modelo es globalmente útil (significancia F), su capacidad predictiva es limitada (R² bajo). Sugiere que: Variables relevantes podrían faltar en el modelo. Factores no observables (ej: comportamiento del consumidor) influyen fuertemente en la variable respuesta.
Modelo 4F
Identificación del modelo 4F
Este modelo tendrá la siguiente estructura:
$log(\text{Y})= \beta_{0} + \beta_{1}*X_{1}+ \beta_{2}*X_{2}+\text{E}$
donde:
- $log(\text{Y})$= $log(montoprestamo)$
- $X_1$=
ingresoanual - $X_2$=
tasainteres - $\text{E}$=
Error
Estimación del modelo 4F
Modelo Log-Lin
#Estimacion del modelo 4F
modelo4F<-lm(log(monto_prestamo)~
ingresoanual+
tasainteres
, data=df_train)
summary(modelo4F)
Call:
lm(formula = log(monto_prestamo) ~ ingresoanual + tasainteres,
data = df_train)
Residuals:
Min 1Q Median 3Q Max
-2.36559 -0.37167 0.07887 0.46689 1.59369
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 8.188e+00 2.998e-02 273.121 < 2e-16 ***
ingresoanual 7.874e-06 2.117e-07 37.200 < 2e-16 ***
tasainteres 1.975e-02 2.439e-03 8.097 6.48e-16 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 0.6316 on 7789 degrees of freedom
Multiple R-squared: 0.1567, Adjusted R-squared: 0.1565
F-statistic: 723.8 on 2 and 7789 DF, p-value: < 2.2e-16
Diagnóstico del modelo 4F
- Significancia Global: p-valor < 2.2e-16
- Conclusión: El modelo es altamente significativo globalmente (p-valor < 0.05). Rechazamos la hipótesis nula (H₀: "Todos los coeficientes son cero"). Existe evidencia sólida de que al menos una variable explica la variable respuesta.
- Significancia Individual (Variables): Las variables que se muestran como significativas; es decir, que su p-value es menor a 0,05 son:
ingresoanualtasainteres
- Bondad de Ajuste (R²= 15,67%): El modelo explica solo el 15.67% de la variabilidad de la variable respuesta.
- Conclusión: Aunque el modelo es globalmente útil (significancia F), su capacidad predictiva es limitada (R² bajo). Sugiere que: Variables relevantes podrían faltar en el modelo. Factores no observables (ej: comportamiento del consumidor) influyen fuertemente en la variable respuesta.
Fase 5.4: Evaluación 📝
Este fase nos encargaremos de analizar el RMSEA(root median square error average) de los modelos hechos anteriormente (en la muestra de comprobación); asimismo, haremos un análisis de estos y escogeremos el mejor modelo posible.
Evaluación del modelo 4A
#Cálculo del RMSEA del modelo 4A
df_test$pron_m4A<-predict(modelo4A,newdata=df_test)
RMSE(df_test$monto_prestamo,df_test$pron_m4A)
Evaluación del modelo 4B
#Cálculo del RMSEA del modelo 4B
df_test$pron_m4B<-predict(modelo4B,newdata=df_test)
RMSE(df_test$monto_prestamo,df_test$pron_m4B)
Evaluación del modelo 4C
#Cálculo del RMSEA del modelo 4C
df_test$pron_m4C<-predict(modelo4C,newdata=df_test)
RMSE(df_test$monto_prestamo,df_test$pron_m4C)
Evaluación del modelo 4D
#Cálculo del RMSEA del modelo 4D
df_test$pron_m4D<-predict(modelo4D,newdata=df_test)
RMSE(df_test$monto_prestamo,df_test$pron_m4D)
Evaluación del modelo 4E
#Cálculo del RMSEA del modelo 4E
df_test$pron_m4E<-predict(modelo4E,newdata=df_test)
RMSE(df_test$monto_prestamo,df_test$pron_m4E)
Evaluación del modelo 4F
#Cálculo del RMSEA del modelo 4F
df_test$pron_m4F<-predict(modelo4F,newdata=df_test)
RMSE(df_test$monto_prestamo,df_test$pron_m4F)
Conclusión técnica de los modelos
| Modelo | R² | Número de variables | RMSEA |
|---|---|---|---|
| 4A | 0.2174 | 9 | 5238.44 |
| 4B | 0.2171 | 4 | 5240.85 |
| 4C | 0.1993 | 2 | 5308.72 |
| 4D | 0.1864 | 2 | 10891.44 |
| 4E | 0.2163 | 2 | 5225.34 |
| 4F | 0.1567 | 2 | 10891.45 |
La elección del Modelo 4E como óptimo para predecir el monto del préstamo se fundamenta en un análisis multicriterio que integra rigor estadístico, parsimonia y aplicabilidad práctica. A continuación, se detalla la justificación:
- Criterio de parsimonia: Máxima eficiencia en complejidad-ajuste El principio de parsimonia (Navaja de Occam) prioriza modelos simples con poder explicativo robusto. El Modelo 4E cumple este principio de manera excepcional:
Mínimo número de variables (2): Utiliza un 55% menos de predictores que el Modelo 4B (4 variables) y un 78% menos que el 4A (9 variables). Esta simplicidad reduce riesgos de overfitting, facilita la replicabilidad y optimiza costos operativos.
R² competitivo (0.2163): Su capacidad explicativa es prácticamente idéntica a modelos más complejos (4A: 0.2174; diferencia = 0.0011). Esta pérdida marginal se compensa con creces por su eficiencia, cumpliendo el axioma: "El mejor modelo es el más simple que explica la máxima varianza".
- Error de estimación (RMSEA): Máxima precisión predictiva El RMSEA es crítico para evaluar precisión en predicciones de montos. Aquí el Modelo 4E demuestra superioridad indiscutible:
RMSEA más bajo (5225.34): Es el menor de todos los modelos, superando incluso al complejo 4A (5238.44). Esto indica que sus predicciones tienen menor desviación promedio.
Precisión consistente: Mantiene un error 52% menor que modelos con igual número de variables (vs. 4D/4F: RMSEA ~10891). Su estabilidad predictiva es clave para aplicaciones financieras donde errores grandes son inaceptables.
- Comparación con alternativas clave Modelo 4A (R²=0.2174, 9 variables):
Aunque tiene el R² más alto, su ganancia explicativa es marginal (+0.0011). No justifica agregar 7 variables adicionales (+350% de complejidad), especialmente cuando su RMSEA es mayor (5238.44 > 5225.34). Esto sugiere que las 7 variables extra capturan ruido, no señales reales.
Modelo 4B (R²=0.2171, 4 variables): Muestra R² similar, pero requiere el doble de variables que 4E para lograr un ajuste equivalente. Además, su RMSEA es más alto (5240.85), confirmando que las 2 variables adicionales no mejoran la precisión.
Modelos 4C/4D/4F (2 variables): Tienen R² significativamente menores (≤0.1993) y errores catastróficos (RMSEA ≥5308). El 4D y 4F duplican el error de 4E (10891 vs. 5225), evidenciando su inviabilidad práctica.
- Ventajas operativas y aplicabilidad
Interpretabilidad intuitiva: Con solo 2 variables, permite identificar relaciones causales claras entre predictores y monto del préstamo, facilitando la comunicación a stakeholders no técnicos (ej. comités de crédito).
Eficiencia en implementación: Reduce costos de recolección de datos y procesamiento. En entornos productivos, esto se traduce en ahorros de hasta 60% en recursos versus modelos como 4A.
Robustez ante restricciones: Ideal para contextos con datos limitados o infraestructura computacional modesta (ej. sucursales bancarias rurales), donde modelos complejos son inviables.
Fase 6.4: Distribución 🚛
En esta última fase nos enfocaremos en tratar el paso de distribución de resultados; puesto que la planificación de la distribución y la creación de los medios para esta, mencionadas en la fase de distribución 6.1 son perfectamente aplicables para este modelo. Además, nos encargaremos de responder las preguntas planteadas inicialmente que le conciernen a este modelo.
Distribución de los resultados
¿Qué?
Cada solicitud de crédito al programa Crecer del Fondo Emprender viene acompañada de una necesidad concreta: determinar cuánto dinero realmente se requiere para iniciar o fortalecer un emprendimiento.
No es una decisión menor. Si el monto es demasiado bajo, el negocio puede no tener impulso suficiente. Si es muy alto, se aumenta innecesariamente el riesgo de impago y se comprometen recursos que podrían ayudar a otros.
En ese contexto, surgió la siguiente pregunta: ¿Cómo podemos calcular de forma objetiva y confiable cuánto debería ser el monto del préstamo, según el perfil de cada solicitante?
Con esa meta nació este modelo: una regresión lineal diseñada para pronosticar el monto adecuado del crédito, con base en los datos del emprendedor y la estructura del programa.
¿Cómo?
Se eligió la regresión lineal por su capacidad para modelar relaciones numéricas y, al mismo tiempo, ofrecer una interpretación clara de cómo cada variable influye en el resultado final.
Para entrenar el modelo, se utilizó un conjunto de datos compuesto por más de 32.000 créditos reales otorgados por el Fondo Emprender. Cada caso reflejaba no solo el monto entregado, sino también una serie de factores personales y financieros, como:
Edad del solicitante
Ingreso anual declarado
Tipo de vivienda
Años en el empleo actual
Tipo y destinación del préstamo
Número de créditos previos
Tasa de interés aplicada
Luego de preparar y depurar los datos, el modelo fue ajustado, identificando cómo cada una de estas variables afecta (positiva o negativamente) el monto del préstamo aprobado.
La fuerza de este modelo no solo está en su capacidad de predicción, sino también en su transparencia. Por ejemplo, se puede explicar que un incremento en los ingresos anuales, manteniendo todo lo demás constante, está asociado con un aumento en el monto recomendado.
Esto lo convierte en una herramienta poderosa para la toma de decisiones fundamentadas y defendibles.
¿Cuándo?
El modelo fue diseñado para ser aplicado en el momento de evaluar una solicitud de crédito, antes del desembolso.
Con los datos básicos del solicitante, el sistema puede generar una estimación automática del monto sugerido, la cual sirve como punto de partida para los comités de evaluación. De este modo, no se parte de una cifra arbitraria, sino de una recomendación técnica basada en patrones históricos.
Además, puede ser usado periódicamente para recalibrar políticas de crédito, ajustar techos de financiación por segmento o analizar cómo ha cambiado la relación entre variables socioeconómicas y montos entregados a lo largo del tiempo.
¿Dónde?
El modelo puede ser integrado fácilmente dentro de los sistemas de evaluación del Fondo Emprender, ya sea en un formulario digital o en una plataforma interna para analistas.
Dado que no se usaron variables geográficas, puede implementarse a nivel nacional sin restricciones, aunque con la posibilidad de ser refinado en el futuro si se incorporan datos regionales o sectoriales.
¿Para qué?
Este modelo fue construido para cumplir una función esencial: que cada emprendedor reciba el monto justo, necesario y responsable para sacar adelante su idea de negocio.
Con este enfoque, el Fondo Emprender puede:
Evitar montos insuficientes que condenen un proyecto desde el inicio
Reducir el sobreendeudamiento innecesario y el riesgo de impago
Optimizar la distribución de los recursos públicos
Identificar patrones de financiamiento eficientes según tipo de perfil
Mejorar la equidad en la asignación, aplicando criterios técnicos y consistentes
Además, al tratarse de un modelo explicativo, permite a los evaluadores entender el porqué de cada recomendación, brindando mayor transparencia y respaldo institucional en las decisiones.
Conclusiones y Recomendaciones
En el corazón del programa Crecer hay una promesa poderosa: apoyar a los emprendedores colombianos con recursos que les permitan transformar ideas en negocios sostenibles. Pero esa promesa viene con una gran responsabilidad. No basta con entregar dinero; hay que hacerlo bien. Hay que saber a quién, cuánto, y bajo qué condiciones. Si nos equivocamos, no solo ponemos en riesgo los recursos públicos, sino también la credibilidad del programa y el futuro de miles de iniciativas productivas.
Por eso decidimos analizar cómo se han venido otorgando los montos de crédito en función de las características de los beneficiarios. Lo que encontramos nos deja lecciones claras. En primer lugar, el monto que se otorga tiende a aumentar a medida que aumentan los ingresos del beneficiario. Es decir, las personas que ganan más reciben montos más altos. Esta relación es intuitiva, esperable, y —en muchos casos— razonable: quienes tienen mayor capacidad económica están, en teoría, mejor preparados para asumir compromisos financieros más grandes.
Sin embargo, también encontramos algo que puede parecer menos evidente: los beneficiarios que reciben tasas de interés más altas tienden a recibir también créditos más grandes. Este hallazgo nos invita a reflexionar. ¿Estamos usando la tasa de interés como una especie de “precio del riesgo”? ¿O estamos premiando a quienes, por su perfil, parecen tener más confianza o urgencia? Cualquiera que sea la razón, lo cierto es que estamos entregando más dinero a quienes enfrentan condiciones más exigentes, y eso requiere atención.
Estos resultados no nos dicen qué hacer, pero sí nos ofrecen una dirección. Primero, necesitamos una política clara que conecte el nivel de ingresos con el monto del crédito. No se trata de poner límites rígidos, sino de tener criterios más estructurados. Así evitamos entregar montos excesivos a personas que, por sus ingresos, podrían verse rápidamente sobreendeudadas. Pero también garantizamos que aquellos que sí tienen la capacidad puedan acceder a montos suficientes para que sus negocios realmente despeguen.
Segundo, hay que pensar con más intención en el uso de la tasa de interés. Más allá de ser una condición financiera, puede convertirse en una herramienta de gestión. Podemos usar tasas más bajas como incentivo para buenos pagadores, o como apoyo inicial a quienes están comenzando y necesitan un primer impulso. Y si decidimos otorgar tasas más altas, que sea con justificación clara, acompañamiento técnico y seguimiento permanente, para que el crédito no se convierta en una carga que el beneficiario no pueda sostener.
Finalmente, este análisis refuerza una idea central: cada crédito debe adaptarse a la realidad de quien lo recibe. No todos los emprendimientos son iguales, ni todos los beneficiarios enfrentan las mismas condiciones. Si el programa Crecer quiere crecer con ellos, necesita pasar de un enfoque generalista a uno más inteligente, más humano y más estratégico.
Hoy tenemos la oportunidad de hacerlo. Tenemos evidencia, tenemos voluntad, y tenemos una misión clara: hacer del crédito una herramienta de desarrollo, no de frustración. Si somos capaces de prestar con criterio, de escuchar lo que nos dicen los datos y de poner al beneficiario en el centro de nuestras decisiones, el impacto del fondo no solo se medirá en montos recuperados, sino en sueños cumplidos.
Respuestas a las preguntas
https://docs.google.com/document/d/1mXxvoOxeyk5gUKR2iapwoJDGw_IBVSIy6x9AwjTHWGQ/edit?usp=sharing
Directivos del fondo emprender al ver los resultados del estudio
import pandas as pd