AccueilBlogTest technique données synthétiques : générer des données de test réalistes
Guide recrutement data

Test technique données synthétiques : générer des données de test réalistes

Les données synthétiques permettent de tester les pipelines et entraîner des modèles sans exposer de données réelles. En entretien, on évalue la capacité à choisir la bonne approche selon le cas.

Data Builder·Juin 2025·5 min de lecture·Data Engineer · Data Scientist
Sommaire
  1. Pourquoi les données synthétiques
  2. Faker pour les tests
  3. SDV pour la distribution
  4. Gretel et la confidentialité
  5. Évaluer la qualité
  6. Cas d usage
  7. Grille

1Pourquoi générer des données synthétiques

Question discriminante

Dans quels cas avez-vous besoin de données synthétiques ?

  • Tests de pipelines — tester avec des vraies distributions sans données de production
  • RGPD — partager des datasets avec des tiers ou des équipes offshore sans données personnelles réelles
  • ML avec peu de données — augmenter un dataset déséquilibré (SMOTE pour les classes minoritaires)
  • Environnements de dev/staging — cloner la production sans les données sensibles
  • Adversarial testing — générer des cas limites et des anomalies pour tester la robustesse

2Faker : données de test basiques

Question discriminante

Comment générez-vous des données de test réalistes avec Faker ?

from faker import Faker import pandas as pd import random from datetime import datetime, timedelta fake = Faker('fr_FR') # locale française def generate_orders(n: int = 1000) -> pd.DataFrame: orders = [] for _ in range(n): order_date = fake.date_between(start_date='-1y', end_date='today') orders.append({ 'order_id': fake.uuid4(), 'customer_email': fake.email(), 'customer_name': fake.name(), 'amount': round(random.lognormal(4, 1), 2), # log-normal comme les vrais achats 'status': random.choices( ['completed', 'pending', 'cancelled'], weights=[0.85, 0.1, 0.05] )[0], 'region': fake.department_name(), 'order_date': order_date }) return pd.DataFrame(orders) df = generate_orders(10000) print(df.head())

3SDV : préserver la distribution statistique

Question discriminante

Quand utilisez-vous SDV plutôt que Faker pour générer des données synthétiques ?

from sdv.single_table import GaussianCopulaSynthesizer from sdv.metadata import SingleTableMetadata # Faker génère des données plausibles mais pas statistiquement fidèles # SDV génère des données avec les MÊMES distributions que les vraies # Définir les métadonnées metadata = SingleTableMetadata() metadata.detect_from_dataframe(real_orders_df) metadata.update_column('email', sdtype='email') # PII à anonymiser # Entraîner le synthétiseur synth = GaussianCopulaSynthesizer(metadata) synth.fit(real_orders_df) # Générer des données synthétiques synthetic_df = synth.sample(num_rows=10000) # Évaluer la qualité from sdv.evaluation.single_table import run_diagnostic, evaluate_quality diag = run_diagnostic(real_orders_df, synthetic_df, metadata) quality = evaluate_quality(real_orders_df, synthetic_df, metadata) print(f'Quality score: {quality.get_score():.2f}')

4Gretel.ai : confidentialité différentielle

Question discriminante

Quand avez-vous besoin de données synthétiques avec garanties de confidentialité ?

  • Gretel.ai — génère des données synthétiques avec differential privacy. Les données synthétiques ne peuvent pas être utilisées pour retrouver des individus réels
  • Cas d usage — partager des données médicales ou financières pour de la recherche externe, développement offshore avec des données sensibles
  • Privacy guarantee — epsilon-differential privacy : même si on connaît N-1 lignes du dataset réel, on ne peut pas déterminer la N-ième
  • Trade-off — plus la garantie de confidentialité est forte (epsilon faible), moins les données synthétiques sont fidèles aux vraies

5Évaluer la qualité des données synthétiques

Question discriminante

Comment vérifiez-vous que vos données synthétiques sont suffisamment réalistes ?

  • Statistical fidelity — comparer les distributions (KS test), les corrélations, les valeurs manquantes entre real et synthétique
  • ML efficacy — entraîner un modèle sur le synthétique, évaluer sur le réel. Si les performances sont proches = bonne fidélité
  • Privacy test — vérifier que les données synthétiques ne contiennent pas de vraies données (Distance to Closest Record)
  • SDV Quality Report — rapport automatique qui compare les propriétés statistiques des deux datasets

6Cas d usage concrets

Question discriminante

Donnez 3 cas d usage où vous avez utilisé ou auriez dû utiliser des données synthétiques.

  • Tests de pipeline — générer 10M de lignes avec les distributions connues pour tester les performances avant la mise en production
  • Classe minoritaire ML — SMOTE pour augmenter les exemples positifs dans un dataset de détection de fraude déséquilibré (1% de fraude)
  • Staging environment — copier la production dans staging avec SDV pour avoir les mêmes distributions sans données personnelles
from sdv.single_table import GaussianCopulaSynthesizer from sdv.metadata import SingleTableMetadata from sdv.evaluation.single_table import run_diagnostic, evaluate_quality # SDV : préserver les distributions statistiques metadata = SingleTableMetadata() metadata.detect_from_dataframe(real_df) metadata.update_column('email', sdtype='email') # anonymiser PII metadata.update_column('phone', sdtype='phone_number') synth = GaussianCopulaSynthesizer(metadata) synth.fit(real_df) # apprend les distributions synthetic_df = synth.sample(num_rows=50000) # Évaluation automatique quality = evaluate_quality(real_df, synthetic_df, metadata) print(f"Quality score: {quality.get_score():.2f}") # 0.8+ = bon # SMOTE pour les classes déséquilibrées (ML) from imblearn.over_sampling import SMOTE sm = SMOTE(sampling_strategy=0.3, random_state=42) # 30% de positifs X_resampled, y_resampled = sm.fit_resample(X_train, y_train) print(f"Avant SMOTE: {Counter(y_train)}") print(f"Après SMOTE: {Counter(y_resampled)}")
  • Faker vs SDV — Faker génère des données plausibles mais pas statistiquement fidèles. SDV apprend les distributions réelles et préserve les corrélations entre colonnes
  • Differential Privacy (Gretel.ai) — garantie mathématique que les données synthétiques ne permettent pas de réidentifier des individus. Nécessaire pour les données médicales ou financières partagées en externe
  • SMOTE — Synthetic Minority Oversampling TEchnique : générer des exemples synthétiques de la classe minoritaire pour l'entraînement ML. Standard pour la détection de fraude (1% de positifs)
  • Évaluation — train on synthetic, test on real (TSTR) : le modèle entraîné sur données synthétiques doit performer proche d'un modèle entraîné sur données réelles
  • Adversarial testing — générer délibérément des cas limites (valeurs extrêmes, données manquantes, formats inattendus) pour tester la robustesse des pipelines
  • Faker vs SDV - Faker genere des donnees plausibles mais pas statistiquement fideles. SDV apprend les distributions reelles et preserve les correlations entre colonnes
  • Differential Privacy (Gretel.ai) - garantie mathematique que les donnees synthetiques ne permettent pas de reidentifier des individus. Necessaire pour les donnees medicales partagees en externe
  • SMOTE - Synthetic Minority Oversampling Technique : generer des exemples synthetiques de la classe minoritaire pour le ML. Standard pour la detection de fraude (1% de positifs)
  • Evaluation TSTR - Train on Synthetic, Test on Real : le modele entraine sur donnees synthetiques doit performer proche d un modele entraine sur donnees reelles
  • Adversarial testing - generer deliberement des cas limites (valeurs extremes, NaN, formats inattendus) pour tester la robustesse des pipelines

7Grille par niveau

NiveauMaitriseSignal GONO-GO
ConfirméFaker pour les tests, comprend les cas d usageA utilisé Faker pour générer des fixtures de test réalistesUtilise des données de production dans les tests
SeniorSDV, SMOTE, évaluation de la qualitéA utilisé SDV pour préserver les distributions, évalue la fidélité statistiqueNe sait pas ce que sont les données synthétiques

Vous recrutez un Data Engineer ou Data Scientist ?

Premier entretien gratuit. Rapport GO/NO-GO sous 48h.