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:

  1. ¿Cuáles son los factores determinantes para modelar el riesgo de crédito y la probabilidad de impago?

  2. ¿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?

  3. ¿Cuáles serían las características idóneas de un crédito de bajo riesgo que maximice la recuperación de la cartera?

  4. ¿Cómo se puede realizar una estimación precisa del monto óptimo a otorgar a un solicitante?

  5. ¿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:

  1. Contexto comercial

  2. Objetivos comerciales

  3. Criterios de rendimiento comercial

  4. Evaluación de la situación actual

  5. Requisitos, supuestos y restricciones

  6. Análisis de costos-beneficios

  7. Objetivos de minería de datos

  8. Criterios de rendimiento para los modelos

  9. 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

image.png

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:

  1. Mejorar el proceso de otorgamiento de créditos, introduciendo criterios cuantitativos en la evaluación de los proyectos
  2. Disminuir la tasa de impago mediante la identificación temprana de riesgos crediticios
  3. 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

image.png

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

image.png

image.png

image.png

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:

  1. Recolección inicial de los datos

  2. Descripción de los datos

  3. Exploración de los datos

  4. Verificación de la calidad de los datos

1. Recolección inicial de los datos

Se nos proporcionó una base de datos .csv

image.png

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

image.png

4. Verificación de la calidad de los datos

image.png

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:

  1. Cargue de datos
  2. Designación de la tipología de las variables
  3. Selección de los datos
  4. Depuración de los datos
  5. Transformación de las variables
  6. 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
A data.frame: 6 × 13
Xedadingresoanualtipoviviendaaniosempleodestinaciontipoprestamomonto_prestamotasainteresestadodeudadefaulthistoriacreditosponderador
<int><int><int><chr><int><chr><chr><int><dbl><int><int><int><chr>
112431200Alquilada 7Médico B 800011.490021
222250433Alquilada 6Venture B 500010.710041
332444000Alquilada 0Médico A 8500 7.510041
443289000Alquilada 0Médico A12000 8.940061
552537000Propia 6Médico B 900010.250031
662983000Hipotecada13Mejoramiento viviendaA 7500 8.900061
       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
  1. 14047
  2. 13
  1. 10926
  2. 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                     
                                             
  1. 10926
  2. 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)
  1. 7792
  2. 11
  1. 2724
  2. 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:

  1. Identificación del modelo

    • Selección de variables relevantes con base en el análisis exploratorio.
    • Identificación de la forma funcional del modelo
  2. 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.
  3. 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
A anova: 10 × 5
DfDevianceResid. DfResid. DevPr(>Chi)
<int><dbl><int><dbl><dbl>
NULLNA NA77916347.584 NA
edad 1 0.657284377906346.9264.175203e-01
ingresoanual 1 0.126905177896346.7997.216628e-01
tipovivienda 3 23.695099377866323.1042.892224e-05
aniosempleo 1 0.692020177856322.4124.054781e-01
destinacion 5 29.538111077806292.8741.818004e-05
tipoprestamo 53299.233106277752993.6410.000000e+00
monto_prestamo 1 1.632956677742992.0082.012946e-01
tasainteres 1 0.505351977732991.5034.771579e-01
historiacreditos 1 1.078739177722990.4242.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

  1. 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.
  1. 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.

  1. 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
A anova: 3 × 5
DfDevianceResid. DfResid. DevPr(>Chi)
<int><dbl><int><dbl><dbl>
NULLNA NA77916347.584 NA
monto_prestamo 13.052782487177906344.5310.08059895
aniosempleo 10.000197038577896344.5310.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

  1. 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.

  1. 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.

  1. 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
A anova: 2 × 5
DfDevianceResid. DfResid. DevPr(>Chi)
<int><dbl><int><dbl><dbl>
NULLNA NA77916347.584 NA
monto_prestamo 13.05278277906344.5310.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

  1. 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.

  1. 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.

  1. 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
A data.frame: 6 × 13
edadingresoanualtipoviviendaaniosempleodestinaciontipoprestamomonto_prestamotasainteresdefaulthistoriacreditosponderadorscore1Apron1A
<int><int><fct><int><fct><fct><int><dbl><fct><int><dbl><dbl><fct>
124110000Hipotecada 8Médico A10800 6.990 41.000001.025473e-090
233 50750Alquilada 2Libre destinoC 750011.911 66.127645.518153e-011
323 42000Propia 5Venture A 6500 6.030 21.000001.848543e-090
422 65000Alquilada 6Libre destinoA16000 7.880 31.000001.197785e-090
528 39996Alquilada 10Educativo D 552514.540101.000004.991471e-010
624 54000Alquilada 8Médico C 150014.171 26.127645.163558e-011
#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!”
A anova: 10 × 5
DfDevianceResid. DfResid. DevPr(>Chi)
<int><dbl><int><dbl><dbl>
NULLNA NA779118628.145 NA
edad 12.336196e+00779018625.8091.263979e-01
ingresoanual 14.150108e-01778918625.3945.194371e-01
tipovivienda 38.377087e+01778618541.6234.763962e-18
aniosempleo 12.429022e+00778518539.1941.191072e-01
destinacion 51.112127e+02778018427.9812.270793e-22
tipoprestamo 51.221358e+047775 6214.4030.000000e+00
monto_prestamo 13.007457e+007774 6211.3968.288224e-02
tasainteres 17.229944e-017773 6210.6733.951634e-01
historiacreditos 11.926755e+007772 6208.7461.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

  1. 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.
  1. 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.

  1. 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!”
A anova: 4 × 5
DfDevianceResid. DfResid. DevPr(>Chi)
<int><dbl><int><dbl><dbl>
NULLNA NA779118628.14 NA
destinacion 5 108.95404778618519.196.815788e-22
monto_prestamo 1 6.63557778518512.569.996218e-03
tasainteres 18657.754897784 9854.800.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_prestamo
  • tasainteres
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

  1. Accuracy (83.14%)
  • Interpretación: El modelo acierta en el 83,14% de los casos, lo cual es aceptable.
  1. 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.

  1. 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!”
A anova: 3 × 5
DfDevianceResid. DfResid. DevPr(>Chi)
<int><dbl><int><dbl><dbl>
NULLNA NA779118628.145 NA
monto_prestamo 1 10.53787779018617.6070.001169533
tasainteres 18756.385057789 9861.2220.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_prestamo
  • tasainteres
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

  1. Accuracy (83.21%)
  • Interpretación: El modelo clasifica correctamente el 83.21% de los casos.
  1. 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

  1. 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)
A matrix: 3 × 1 of type dbl
(Intercept)0.00000603
monto_prestamo0.99997645
tasainteres2.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:

  1. Identificación del modelo:
  • Selección de variables predictoras mediante análisis de importancia preliminar.
  1. 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.

  1. 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)
No description has been provided for this image

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

  1. 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.
  1. 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.
  1. 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)
No description has been provided for this image

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

  1. 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%).
  1. Sensitivity(93.2%):
  • Interpretación: Detecta correctamente el 93.2% de los no morosos (clase 1).
  • Significativamente mejor que el modelo 1F de referencia.
  1. 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)
No description has been provided for this image

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

  1. Accuracy (86.4%):
  • Interpretación: Clasifica correctamente el 86.4% de los casos, ligeramente inferior a los modelos anteriores (88% y 87.5%).
  1. 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.

  1. 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:

  1. 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.

  1. 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%).

  1. 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.

  1. 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

image.png

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:

  1. Identificación del modelo:
  • Selección de variables predictoras
  1. Estimación del modelo:
  • Desarrollo iterativo del árbol.

  • identificación de criterios de poda

  1. 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)
No description has been provided for this image

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
No description has been provided for this image
No description has been provided for this image
# Evaluación del modelo 3A: RMSEA
df_train$pron3A<-predict(modelo3A)
RMSE(df_train$monto_prestamo,df_train$pron3A)
5246.70359834527

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)
No description has been provided for this image

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
No description has been provided for this image
No description has been provided for this image
# Evaluación del modelo 3A: RMSEA
df_train$pron3A<-predict(modelo3A)
RMSE(df_train$monto_prestamo,df_train$pron3A)
5246.70359834527

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)
5356.25722291186

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)
5371.10552819806

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:

  1. 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.

  1. 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.

  1. Precisión de los pronósticos (RMSEA)
  • Ventaja crítica: Aunque la diferencia parece pequeña, es estadísticamente consistente.
  1. 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:

  1. 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).
  1. Estimación del modelo:
  • Se estima el modelo de regresión lineal mediante el método OLS
  1. 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

  1. 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.
  1. 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:
  • ingresoanual
  • tipovivienda
  • tipoprestamo
  • tasainteres
  1. 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

  1. 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.
  1. Significancia Individual (Variables): Las variables que se muestran como significativas; es decir, que su p-value es menor a 0,05 son:
  • ingresoanual
  • tasainteres
  1. 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

  1. 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.
  1. Significancia Individual (Variables): Las variables que se muestran como significativas; es decir, que su p-value es menor a 0,05 son:
  • ingresoanual
  • tasainteres
  1. 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

  1. 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.
  1. Significancia Individual (Variables): Las variables que se muestran como significativas; es decir, que su p-value es menor a 0,05 son:
  • ingresoanual
  • tasainteres
  1. 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

  1. 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.
  1. Significancia Individual (Variables): Las variables que se muestran como significativas; es decir, que su p-value es menor a 0,05 son:
  • ingresoanual
  • tasainteres
  1. 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

  1. 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.
  1. Significancia Individual (Variables): Las variables que se muestran como significativas; es decir, que su p-value es menor a 0,05 son:
  • ingresoanual
  • tasainteres
  1. 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)
5238.44038640281

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)
5240.85583798506

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)
5308.72641780101

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)
10891.4447213359

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)
5225.34356994236

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)
10891.4516640757

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:

  1. 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".

  1. 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.

  1. 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.

  1. 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

image.png

import pandas as pd