Alejandría

Busca en Alejandría

Técnicas

Synthetic data for testing and training models

Genera ejemplos artificiales para pruebas y entrenamiento con cobertura dirigida.

01

En pocas palabras

Crear datos artificiales con reglas, simulaciones o modelos generativos para representar escenarios, ampliar ejemplos etiquetados o entrenar y evaluar sistemas.

Qué problema resuelve

Escasez de ejemplos, clases desbalanceadas y dificultad para reproducir situaciones raras sin reutilizar directamente datos sensibles.

Cuándo utilizarlo

Pruebas de software, ajuste de modelos y simulación de casos poco frecuentes. Ejemplo: generar solicitudes ficticias con campos faltantes y variantes lingüísticas para probar un extractor.

02

De la idea a la práctica

Funcionamiento, ejemplos y decisiones para pasar al siguiente nivel.

En el Radar compartido: Trial (valoración de la edición aportada).

Cómo funciona

Se define qué comportamientos o grupos deben cubrirse y se generan ejemplos con etiquetas esperadas. Las reglas de negocio, revisores o validadores independientes comprueban si los ejemplos sirven para el objetivo.

Ejemplo: probar un extractor

Genera mensajes ficticios de solicitud con variantes de idioma, campos opcionales y errores deliberados. Conserva la salida esperada junto con cada mensaje y comprueba su consistencia antes de incorporarlos al conjunto de pruebas.

Para entrenamiento, genera pares de instrucción y respuesta a partir de fuentes autorizadas y revisadas. Herramientas como AgentInstruct automatizan parte de ese trabajo, pero no sustituyen la evaluación de los datos.

Enfoques de generación

Enfoque Herramientas Uso típico
Basado en reglas Faker, generadores propios Datos de prueba con formato realista
Estadístico / generativo SDV (GaussianCopula, CTGAN), Gretel Tablas que imitan distribuciones y correlaciones reales
Generado por LLM Modelos de lenguaje con prompts y esquemas Textos: tickets, conversaciones, documentos
Simulación Modelos de negocio o agentes Escenarios raros: fraude, picos, fallos en cadena

Datos de prueba con reglas

from faker import Faker
import random

fake = Faker("es_CO")
Faker.seed(42); random.seed(42)          # reproducible

def solicitud():
    return {
        "documento": fake.unique.numerify("10########"),
        "nombre": fake.name(),
        "ciudad": fake.city(),
        "ingresos": random.choice([1_300_000, 2_500_000, 4_800_000, 12_000_000]),
        "monto": random.randrange(500_000, 30_000_000, 100_000),
        "plazo": random.choice([6, 12, 24, 36]),
    }

casos_limite = [
    {**solicitud(), "monto": 100_000},       # mínimo permitido
    {**solicitud(), "ingresos": 0},          # sin ingresos declarados
    {**solicitud(), "nombre": "María José Ñúñez-O'Connor"},   # caracteres especiales
]

La generación por reglas permite diseñar los casos difíciles en lugar de esperar a que aparezcan en una muestra.

Datos tabulares que imitan producción

from sdv.metadata import Metadata
from sdv.single_table import GaussianCopulaSynthesizer
from sdv.evaluation.single_table import evaluate_quality

metadata = Metadata.detect_from_dataframe(data=df_real, table_name="solicitudes")
sintetizador = GaussianCopulaSynthesizer(metadata)
sintetizador.fit(df_real)
df_sintetico = sintetizador.sample(num_rows=50_000)

informe = evaluate_quality(df_real, df_sintetico, metadata)
print(informe.get_score())

Evaluar datos sintéticos

Dimensión Pregunta Cómo medirla
Fidelidad ¿Se parecen las distribuciones y correlaciones? Comparación estadística por columna y pares
Utilidad ¿Sirven para la tarea? Entrenar con sintéticos y probar con reales (TSTR)
Privacidad ¿Revelan registros reales? Distancia al registro real más cercano, ataques de inferencia de pertenencia
Cobertura ¿Incluyen los casos que interesan? Conteo por segmento y caso límite

Que un dato sea sintético no garantiza que sea anónimo: un generador sobreajustado puede reproducir registros reales casi exactos. Para datos personales, aplica técnicas de privacidad diferencial o valida la privacidad antes de compartir.

Riesgos en entrenamiento

  • Entrenar repetidamente con datos generados por modelos degrada la diversidad (model collapse): mezcla siempre con datos reales.
  • El generador hereda sesgos de los datos originales y del LLM.
  • Evalúa siempre con un conjunto real e independiente, nunca solo sintético.

Para depurar errores de etiquetado en los datos reales, ver Cleanlab; para anonimizar textos antes de usarlos como semilla, Presidio.

Criterios de implementación

Versiona el generador y evita que copie datos sensibles de sus fuentes. Conserva evaluación real o independiente y mide errores por segmento. Si aplicas SMOTE al entrenamiento, hazlo solo sobre la partición de entrenamiento, nunca antes de separar los conjuntos.

Continúa en las fuentes

Documentación oficial para verificar detalles y explorar más.