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