2. Generar Datos Sintéticos

Esta guía te enseñará a generar datasets sintéticos realistas de crédito hipotecario colombiano para entrenar y probar modelos de Machine Learning.

Objetivo del Módulo

El generador de datos sintéticos te permite:

  • 📊 Crear datasets realistas sin necesidad de datos reales

  • 🎲 Controlar la reproducibilidad con semillas aleatorias

  • 📈 Ajustar el tamaño del dataset (1,000 - 50,000 registros)

  • 🎯 Obtener distribuciones realistas de riesgo crediticio

  • 🔧 Experimentar sin restricciones de privacidad de datos

  • 📚 Aprender sobre variables financieras y crediticias

¿Por Qué Usar Datos Sintéticos?

Ventajas

Sin restricciones de privacidad

Los datos son completamente artificiales, no hay información personal real.

Distribuciones controladas

Puedes generar exactamente la distribución de riesgo que necesitas.

Reproducibilidad perfecta

Usando la misma semilla, obtendrás exactamente los mismos datos.

Escalabilidad

Genera desde 1,000 hasta 50,000 registros en segundos.

Correlaciones realistas

Las variables mantienen relaciones lógicas del mundo real.

Ideal para aprendizaje

Experimenta sin riesgo de dañar datos reales.

Limitaciones

⚠️ No reemplazan datos reales

Para producción, siempre valida con datos reales.

⚠️ Simplificaciones

Algunas relaciones complejas del mundo real están simplificadas.

⚠️ Sesgos del generador

Los datos reflejan los supuestos programados en el generador.

Acceso al Módulo

Paso 1: Navegar al módulo

En el sidebar, click en:

📊 Gestión de Datos → 📊 Generar Datos

Paso 2: Interfaz del generador

Verás la pantalla principal con:

  • Título: «Generador de Datos Sintéticos»

  • Descripción del módulo

  • Panel de configuración

  • Botón de generación

  • Área de resultados

Configuración del Generador

Parámetros Principales

1. Número de Registros

Número de registros a generar: [10000]
Rango: 1,000 - 50,000

¿Qué significa?

El número total de solicitudes de crédito que se generarán.

Recomendaciones:

  • 1,000 - 5,000: Pruebas rápidas y exploración inicial

  • 10,000: Valor por defecto, balance entre velocidad y representatividad

  • 20,000 - 30,000: Entrenamiento de modelos robustos

  • 50,000: Datasets grandes para modelos complejos

Truco

Para tu primer uso, mantén el valor por defecto de 10,000 registros.

2. Semilla Aleatoria

Semilla aleatoria: [42]
Rango: 1 - 9999

¿Qué significa?

Un número que controla la generación aleatoria. La misma semilla produce exactamente los mismos datos.

Casos de uso:

  • Reproducibilidad: Usa la misma semilla para obtener datos idénticos

  • Comparación: Diferentes semillas generan datasets distintos

  • Debugging: Semilla fija facilita encontrar problemas

Nota

La semilla por defecto es 42 (referencia a «La Guía del Autoestopista Galáctico»).

Ejemplo práctico:

# Estos dos comandos generan EXACTAMENTE los mismos datos
df1 = generar_datos(n=10000, semilla=42)
df2 = generar_datos(n=10000, semilla=42)

# Estos generan datos DIFERENTES
df3 = generar_datos(n=10000, semilla=123)

Parámetros Avanzados

Nota

Los parámetros avanzados están preconfigurados con valores óptimos. Solo modifícalos si tienes necesidades específicas.

Expandir «Configuración Avanzada» para ver:

1. Distribución de Riesgo Objetivo

Riesgo Bajo:  60% ━━━━━━━━━━━━━━━━━━━━━━━━
Riesgo Medio: 25% ━━━━━━━━━━
Riesgo Alto:  15% ━━━━━━

Esta es la distribución objetivo que el generador intentará alcanzar.

2. Rangos de Variables

Puedes ajustar los rangos de:

  • Edad: 22-65 años (por defecto)

  • Salario: Según educación y ciudad

  • Puntaje DataCrédito: 350-850 (por defecto)

  • Valor inmueble: Según ciudad y estrato

Advertencia

Modificar estos rangos puede generar datos poco realistas. Solo hazlo si entiendes las implicaciones.

Proceso de Generación

Paso a Paso

Paso 1: Configurar parámetros

  1. Ajusta el número de registros (ej: 10,000)

  2. Establece la semilla aleatoria (ej: 42)

  3. Revisa configuración avanzada (opcional)

Paso 2: Iniciar generación

Click en el botón:

[🎯 Generar Dataset]

Paso 3: Observar progreso

Verás un spinner con el mensaje:

⏳ Generando 10,000 registros...

[FASE 1/6] Generando variables demográficas...
✓ Fase 1 completada

[FASE 2/6] Generando variables laborales...
✓ Fase 2 completada

[FASE 3/6] Generando variables financieras...
✓ Fase 3 completada

[FASE 4/6] Generando variables del crédito...
✓ Fase 4 completada

[FASE 5/6] Generando características derivadas...
✓ Fase 5 completada

[FASE 6/6] Calculando nivel de riesgo REALISTA...
✓ Fase 6 completada

Truco

La generación de 10,000 registros toma aproximadamente 5-10 segundos.

Paso 4: Revisar resultados

Una vez completado, verás:

  • ✅ Mensaje de éxito

  • 📊 Resumen estadístico

  • 📈 Visualizaciones de distribución

  • 💾 Opciones de descarga

Fases de Generación

El generador trabaja en 6 fases secuenciales:

Fase 1: Variables Demográficas

Genera:

  • edad: Edad del solicitante (22-65 años)

  • ciudad: Ciudad de residencia (15 ciudades colombianas)

  • estrato_socioeconomico: Estrato 1-6

  • nivel_educacion: Bachiller, Técnico, Profesional, Posgrado

  • estado_civil: Soltero, Casado, Unión Libre, Divorciado, Viudo

  • personas_a_cargo: Número de dependientes (0-5)

Fase 2: Variables Laborales

Genera:

  • tipo_empleo: Formal, Informal, Independiente

  • antiguedad_empleo: Años en el empleo actual

  • salario_mensual: Ingreso mensual en COP

  • egresos_mensuales: Gastos mensuales totales

Fase 3: Variables Financieras

Genera:

  • numero_demandas: Demandas legales por dinero (0-3)

  • puntaje_datacredito: Score crediticio (350-850)

  • numero_propiedades: Propiedades que posee (0-3)

  • patrimonio_total: Patrimonio neto en COP

  • saldo_promedio_banco: Saldo promedio últimos 6 meses

Fase 4: Variables del Crédito

Genera:

  • valor_inmueble: Valor comercial de la propiedad

  • anos_inmueble: Antigüedad del inmueble

  • porcentaje_cuota_inicial: Porcentaje de cuota inicial (10-40%)

  • valor_cuota_inicial: Valor en COP de la cuota inicial

  • monto_credito: Monto solicitado del préstamo

  • plazo_credito: Plazo en años (10-30)

  • tasa_interes_anual: Tasa de interés anual (8.5-16%)

  • cuota_mensual: Cuota mensual del crédito

  • ltv: Loan-to-Value ratio (%)

Fase 5: Características Derivadas

Calcula:

  • dti: Debt-to-Income ratio (%)

  • capacidad_ahorro: Salario - Egresos

  • capacidad_residual: Capacidad de ahorro - Cuota

  • ratio_patrimonio_deuda: Patrimonio / Deuda

  • meses_colchon: Meses de reserva

  • Y 15+ características adicionales

Fase 6: Nivel de Riesgo

Calcula el nivel de riesgo final:

  • Bajo: 60% de los registros (bajo riesgo de default)

  • Medio: 25% de los registros (riesgo moderado)

  • Alto: 15% de los registros (alto riesgo de default)

Interpretación de Resultados

Resumen Estadístico

Después de la generación, verás un panel con:

Información General:

✓✓✓ GENERACIÓN COMPLETADA

Total de registros: 10,000
Total de columnas: 47
Tiempo de generación: 8.3 segundos

Distribución de Riesgo:

Distribución de Nivel de Riesgo:

Bajo:  6,074 (60.7%) ████████████████████████
Medio: 2,943 (29.4%) ████████████
Alto:    983 ( 9.8%) ████

Nota

La distribución real puede variar ligeramente del objetivo (60/25/15) debido a la aleatoriedad y las reglas de negocio.

Estadísticas Clave:

Estadísticas Principales:

Edad promedio:              38.2 años
Salario promedio:           $4,235,000 COP
Puntaje DataCrédito:        720 puntos
DTI promedio:               27.3%
Capacidad residual:         $1,245,000 COP
Valor inmueble promedio:    $185,000,000 COP

Visualizaciones

El módulo genera automáticamente:

1. Distribución de Riesgo (Gráfico de Barras)

Muestra la proporción de cada nivel de riesgo.

2. Distribución de Variables Clave (Histogramas)

  • Edad

  • Salario mensual

  • Puntaje DataCrédito

  • DTI (Debt-to-Income)

  • Valor del inmueble

3. Matriz de Correlación

Muestra las correlaciones entre variables numéricas principales.

Truco

Usa el botón de descarga en cada gráfico para guardar las visualizaciones.

Validaciones Automáticas

El generador valida automáticamente:

Restricción 1: Salario > Egresos

Todos los registros tienen capacidad de ahorro positiva.

Restricción 2: DTI ≤ 40%

Ningún registro excede el 40% de endeudamiento.

Restricción 3: Capacidad Residual ≥ 0

Todos pueden pagar la cuota y mantener gastos básicos.

Restricción 4: Edad + Plazo ≤ 80

El crédito termina antes de los 80 años.

Correlaciones Realistas

Las variables mantienen relaciones lógicas.

Si alguna validación falla, verás advertencias específicas.

Variables Generadas

El dataset incluye 47 variables organizadas en categorías:

Variables Demográficas (6)

Variable

Descripción

edad

Edad del solicitante (22-65 años)

ciudad

Ciudad de residencia (15 ciudades colombianas)

estrato_socioeconomico

Estrato socioeconómico (1-6)

nivel_educacion

Nivel educativo alcanzado

estado_civil

Estado civil actual

personas_a_cargo

Número de dependientes económicos

Variables Laborales (4)

Variable

Descripción

tipo_empleo

Formal, Informal o Independiente

antiguedad_empleo

Años en el empleo actual

salario_mensual

Ingreso mensual en COP

egresos_mensuales

Gastos mensuales totales en COP

Variables Financieras (5)

Variable

Descripción

numero_demandas

Demandas legales por dinero (0-3)

puntaje_datacredito

Score crediticio (350-850)

numero_propiedades

Propiedades que posee (0-3)

patrimonio_total

Patrimonio neto en COP

saldo_promedio_banco

Saldo promedio últimos 6 meses

Variables del Crédito (10)

Variable

Descripción

valor_inmueble

Valor comercial de la propiedad

anos_inmueble

Antigüedad del inmueble

porcentaje_cuota_inicial

Porcentaje de cuota inicial (10-40%)

valor_cuota_inicial

Valor en COP de la cuota inicial

monto_credito

Monto solicitado del préstamo

plazo_credito

Plazo en años (10-30)

tasa_interes_anual

Tasa de interés anual (%)

cuota_mensual

Cuota mensual del crédito

ltv

Loan-to-Value ratio (%)

dti

Debt-to-Income ratio (%)

Características Derivadas (15+)

Variables calculadas automáticamente:

  • capacidad_ahorro: Salario - Egresos

  • capacidad_residual: Capacidad ahorro - Cuota

  • ratio_patrimonio_deuda: Patrimonio / Deuda

  • meses_colchon: Reservas en meses

  • score_edad: Score basado en edad

  • flag_sobreendeudamiento: Indicador de sobreendeudamiento

  • score_estabilidad_laboral: Score de estabilidad

  • riesgo_legal: Score de riesgo legal

  • Y más…

Variable Objetivo (1)

Variable

Descripción

nivel_riesgo

Bajo / Medio / Alto

Casos de Uso Comunes

Caso 1: Generar Dataset para Entrenamiento

Objetivo: Crear un dataset balanceado para entrenar modelos de ML.

Pasos:

  1. Configura 20,000 registros

  2. Usa semilla 42 para reproducibilidad

  3. Genera el dataset

  4. Descarga como CSV

  5. Usa en módulo de modelos supervisados

Resultado esperado:

  • 20,000 registros

  • ~60% Bajo, ~25% Medio, ~15% Alto

  • Listo para entrenamiento

Caso 2: Experimentar con Diferentes Distribuciones

Objetivo: Ver cómo cambian los datos con diferentes semillas.

Pasos:

  1. Genera con semilla 42 → Observa distribución

  2. Genera con semilla 123 → Compara diferencias

  3. Genera con semilla 999 → Analiza variaciones

Aprendizaje:

  • Diferentes semillas = diferentes distribuciones

  • Algunas semillas pueden dar distribuciones más extremas

  • Útil para validar robustez de modelos

Caso 3: Dataset Pequeño para Pruebas Rápidas

Objetivo: Probar funcionalidades sin esperar.

Pasos:

  1. Configura 1,000 registros

  2. Genera en <2 segundos

  3. Prueba análisis descriptivo

  4. Experimenta con visualizaciones

Ventaja:

  • Iteración rápida

  • Ideal para debugging

  • Bajo consumo de memoria

Caso 4: Dataset Grande para Producción

Objetivo: Entrenar modelos robustos para producción.

Pasos:

  1. Configura 50,000 registros

  2. Usa semilla fija para reproducibilidad

  3. Genera (toma ~30-40 segundos)

  4. Valida calidad exhaustivamente

  5. Entrena modelos finales

Consideraciones:

  • Mayor tiempo de generación

  • Mayor consumo de memoria

  • Mejor representatividad estadística

Descargar Datos

Formatos Disponibles

1. CSV (Recomendado)

[💾 Descargar CSV]
  • Formato universal

  • Compatible con Excel, Python, R

  • Tamaño: ~5-10 MB por 10,000 registros

2. Excel

[📊 Descargar Excel]
  • Formato .xlsx

  • Incluye formato y estilos

  • Ideal para presentaciones

3. Parquet

[⚡ Descargar Parquet]
  • Formato columnar comprimido

  • Más rápido para datasets grandes

  • Ideal para análisis con Pandas/Spark

4. JSON

[📋 Descargar JSON]
  • Formato estructurado

  • Útil para APIs

  • Incluye metadata

Metadata del Dataset

Junto con los datos, se genera un archivo de metadata:

{
  "fecha_generacion": "2024-01-15 10:30:00",
  "numero_registros": 10000,
  "semilla_aleatoria": 42,
  "version": "1.3 - REALISTA",
  "distribucion_objetivo": "60% Bajo, 25% Medio, 15% Alto",
  "columnas": [...],
  "distribucion_riesgo": {
    "Bajo": 6074,
    "Medio": 2943,
    "Alto": 983
  },
  "estadisticas_clave": {
    "salario_promedio": 4235000,
    "edad_promedio": 38.2,
    "puntaje_datacredito_promedio": 720,
    "dti_promedio": 27.3
  }
}

Truco

Guarda siempre la metadata junto con los datos para trazabilidad.

Tips y Mejores Prácticas

Selección de Parámetros

Haz:

  • Usa semillas fijas para experimentos reproducibles

  • Comienza con 10,000 registros (balance velocidad/calidad)

  • Genera múltiples datasets con diferentes semillas para validación

  • Documenta la semilla usada en cada experimento

Evita:

  • Cambiar semilla constantemente sin documentar

  • Generar datasets muy pequeños (<1,000) para entrenamiento

  • Usar datasets muy grandes (>50,000) sin necesidad

  • Modificar parámetros avanzados sin entender el impacto

Calidad de Datos

Siempre valida:

  1. Distribución de riesgo: ¿Está cerca del objetivo?

  2. Rangos de variables: ¿Son realistas?

  3. Correlaciones: ¿Tienen sentido lógico?

  4. Valores faltantes: No debería haber ninguno

  5. Outliers: Deben ser razonables

Checklist de calidad:

☑ Distribución de riesgo: 55-65% Bajo, 20-30% Medio, 10-20% Alto
☑ DTI promedio: 25-30%
☑ Capacidad residual: 100% positiva
☑ Puntaje DataCrédito: 650-750 promedio
☑ Sin valores faltantes
☑ Sin duplicados

Reproducibilidad

Para garantizar reproducibilidad:

  1. Documenta la semilla: Anota siempre qué semilla usaste

  2. Versiona los datos: Guarda fecha y versión del generador

  3. Exporta metadata: Incluye toda la configuración usada

  4. Usa control de versiones: Git para scripts de generación

Ejemplo de documentación:

Dataset: credito_hipotecario_train.csv
Fecha: 2024-01-15
Registros: 20,000
Semilla: 42
Versión generador: 1.3
Distribución: 60.7% Bajo, 29.4% Medio, 9.8% Alto
Propósito: Entrenamiento modelo RBM + Random Forest

Troubleshooting

Problemas Comunes

Problema 1: Generación muy lenta

Síntoma: Toma más de 1 minuto para 10,000 registros

Causas posibles:

  • Número de registros muy alto (>50,000)

  • Computadora con recursos limitados

  • Otros procesos consumiendo CPU

Soluciones:

  1. Reduce el número de registros

  2. Cierra otras aplicaciones

  3. Espera a que termine (no interrumpas)

  4. Considera generar en lotes más pequeños

Problema 2: Distribución de riesgo muy desbalanceada

Síntoma: 80% Bajo, 15% Medio, 5% Alto (muy diferente del objetivo)

Causas posibles:

  • Semilla aleatoria particular

  • Número de registros muy pequeño (<5,000)

Soluciones:

  1. Prueba con otra semilla

  2. Aumenta el número de registros

  3. Genera múltiples datasets y combínalos

  4. Usa técnicas de balanceo posterior (SMOTE, undersampling)

Problema 3: Error al descargar

Error: "Failed to download file"

Soluciones:

  1. Verifica espacio en disco

  2. Intenta otro formato (CSV en lugar de Excel)

  3. Reduce el tamaño del dataset

  4. Recarga la página y genera nuevamente

Problema 4: Valores poco realistas

Síntoma: Salarios de $100M o DTI de 80%

Causas posibles:

  • Parámetros avanzados modificados incorrectamente

  • Bug en versión específica

Soluciones:

  1. Restaura configuración por defecto

  2. Verifica que no hayas modificado parámetros avanzados

  3. Reporta el problema con la semilla usada

  4. Usa una semilla diferente temporalmente

Errores Técnicos

Error: «Memory Error»

Causa: Dataset demasiado grande para la RAM disponible.

Solución:

# Genera en lotes más pequeños
# Lote 1: semilla 42, 25,000 registros
# Lote 2: semilla 43, 25,000 registros
# Combina después

Error: «Invalid seed value»

Causa: Semilla fuera del rango 1-9999.

Solución: Usa un valor entre 1 y 9999.

Error: «Generation failed»

Causa: Error interno del generador.

Solución:

  1. Recarga la página

  2. Intenta con configuración por defecto

  3. Reporta el error con detalles

Preguntas Frecuentes

P: ¿Cuántos registros debo generar?

R: Depende del uso:

  • Exploración: 5,000-10,000

  • Entrenamiento: 20,000-30,000

  • Producción: 30,000-50,000

P: ¿Los datos son completamente aleatorios?

R: No, mantienen correlaciones y restricciones realistas del mundo real.

P: ¿Puedo usar estos datos en producción?

R: Son ideales para desarrollo y pruebas. Para producción, valida con datos reales.

P: ¿Qué semilla debo usar?

R: Cualquiera entre 1-9999. La semilla 42 es el valor por defecto recomendado.

P: ¿Por qué la distribución no es exactamente 60/25/15?

R: Es un objetivo, no una garantía. La aleatoriedad y las reglas de negocio causan variaciones naturales.

P: ¿Puedo modificar las reglas de generación?

R: Los parámetros avanzados permiten algunos ajustes. Para cambios mayores, necesitarías modificar el código fuente.

P: ¿Los datos incluyen valores faltantes?

R: No, todos los registros están completos. Si necesitas simular valores faltantes, puedes eliminarlos manualmente después.

Próximos Pasos

Ahora que has generado tu dataset, puedes:

  1. Explorar los datos: 4. Análisis Descriptivo

  2. Cargar datos externos: 3. Cargar Datos Externos

  3. Crear características: 5. Ingeniería de Características

  4. Entrenar RBM: 7. Máquina de Boltzmann Restringida (RBM)

Truco

Te recomendamos explorar el dataset generado con el módulo de análisis descriptivo antes de entrenar modelos.

¡Felicitaciones! Has aprendido a generar datos sintéticos realistas. 🎉