Tag Archives: données synthétiques

Pourquoi ne pas générer toute la population (grâce aux données synthétiques) ?

J’ai découvert un peu par hasard (via un post sur bsk de Thomas Delclite) une étude de l’Ifop pour Fairgen sur l’intention de vote des enseignants aux élections européennes. La note méthodologique indique que l’enquête a été menée auprès de 8 000 personnes représentatives de la population française adulte, “incluant l’équivalent statistique de 580 enseignants de collège et de lycée”, ces 580 enseignants étant “issus de 116 interviews extrapolées par la technologie DataBoostAI”. Le même document précise que cette technologie, basée sur l’IA générative, vise à améliorer la précision statistique par “génération d’échantillons synthétiques”.

Je n’ai jamais été très bon en sondages, mais comprends bien l’enjeu pratique. Dans un sondage national, certains groupes sont trop petits pour être analysés directement. Si l’on interroge 1 000 personnes, il est possible que l’on n’ait que quelques dizaines d’enseignants, quelques dizaines d’agriculteurs, ou quelques dizaines de personnes concernées par une situation particulière. Les résultats par sous-groupe deviennent alors très instables. Le billet récent de Thomas Delclite (publié par Mediapart, sous le titre “Quand 1000 personnes ne suffisent pas”) pose clairement ce problème, en expliquant que la réponse expérimentée consiste, en quelque sorte, à “inventer” des répondants supplémentaires pour mieux décrire de petits groupes. Et il explique rapidement l’idée.

Mais si on peut transformer 116 enseignants interrogés en un “équivalent statistique” de 580 enseignants, pourquoi s’arrêter à 580 ? Pourquoi ne pas en générer 1 000 ? 10 000 ? Ou, tant qu’à faire, pourquoi ne pas générer toute la population des enseignants français ? On appellerait ça un “équivalent statistique” d’un recensement exhaustif. Après tout, une fois le modèle entraîné, le coût marginal d’une ligne synthétique est presque nul. Ok, la question semble stupide, ou naïve, mais je pense qu’elle est importante parce qu’elle va nous obliger à distinguer clairement deux choses très différentes : augmenter le nombre de lignes dans une base, et augmenter l’information statistique contenue dans l’enquête.

Au risque de dire des banalités, comme bien souvent, ces méthodes sont connues depuis longtemps en statistique. On peut utiliser de l’information auxiliaire pour caler un échantillon sur des marges connues, comme dans les estimateurs par calibration de Jean-Claude Deville et Carl-Erik Särndal (dans Calibration Estimators in Survey Sampling). Dans ce cadre, on modifie les poids de sondage pour respecter des contraintes connues sur la population, par exemple des totaux par sexe, âge ou région. On peut aussi, en estimation sur petits domaines, emprunter à d’autres domaines pour produire des estimations lorsque l’échantillon local est trop petit. Dans Small Area Estimation, J.N.K. Rao et Isabel Molina rappellent que les estimateurs directs deviennent insuffisants lorsque les tailles par domaine sont faibles, et que les méthodes indirectes reposent alors sur un modèle reliant les petits domaines entre eux.

Autrement dit, l’idée d’aider un petit sous-échantillon par un modèle n’est pas absurde. En fait, c’est le cœur de toute une partie de la statistique d’enquête. Mais dans cette littérature, le prix à payer est explicite. On ne dit pas simplement “nous avons plus de données”. On dit : nous avons un modèle, nous empruntons de l’information, et l’incertitude finale doit intégrer l’incertitude des données initiales, l’incertitude du modèle, et le risque de biais si le modèle est mal spécifié. C’est ce point qui me semble disparaître derrière l’expression “équivalent statistique”. Si j’étais mesquin, je dirais que ça rejoins ce que j’explique à mes étudiants, quand je commence un cours de statistique mathématique, ou de régression : en nommant les hypothèses, explicitement, on va avoir des garanties théoriques. Mais effectivement, on est loin de la magie des approches computationnelles (même si je les trouve complémentaires).

Faisons quelques simulations pour illustrer ce problème. Supposons qu’on veuille estimer une proportion p. On observe n personnes réelles, puis on entraîne un modèle génératif \widehat P_n sur ces données. À partir de ce modèle, on génère (m) personnes synthétiques. Pour une variable Y, on calcule ensuite une moyenne synthétique\widehat\theta_m^\ast = \frac{1}{m}\sum_{j=1}^m Y_j^\ast.Conditionnellement aux données réellement observées, plus m est grand, plus la moyenne synthétique est stable. Si je génère 10 000 individus synthétiques au lieu de 1 000, je réduis le bruit de simulation. Mais je ne réduis pas magiquement l’incertitude provenant des n personnes réellement interrogées. C’est exactement la décomposition de la variance, le “théorème de Pythagore de la statistique\mathrm{Var}(\widehat\theta_m^\ast)\mathrm{Var}\left(\mathbb E[\widehat\theta_m^\ast \mid D_n]\right)+\mathbb E\left[\mathrm{Var}(\widehat\theta_m^\ast \mid D_n)\right].Le second terme diminue quand on génère davantage de données synthétiques. Le premier reste. C’est l’incertitude liée à l’échantillon initial, aux quotas, à la non-réponse, aux biais de recrutement, et au modèle appris. Quand m\to\infty, on obtient seulement la réponse moyenne du modèle. On ne découvre pas la vérité de la population.

Une première simulation permet de voir un peu mieux ce problème. Supposons que la vraie proportion soit p=0{,}35. On interroge 100 personnes réelles. On estime la proportion observée, puis on génère 900 personnes synthétiques à partir de cette proportion estimée. On compare trois situations : 100 vraies personnes, 100 vraies personnes plus 900 synthétiques, et 1 000 vraies personnes.

Sur 5 000 répétitions, les écarts-types obtenus sont les suivants :

set.seed(123)
B = 5000
p = 0.35
n = 100
m = 900
sim1 = replicate(B, {
+ y = rbinom(n, size = 1, prob = p)
+ phat = mean(y)
+ y_synth = rbinom(m, size = 1, prob = phat)
+ real_100 = phat
+ synth_1000 = mean(c(y, y_synth))
+ real_1000 = mean(rbinom(n + m, size = 1, prob = p))
+ c(real_100 = real_100,
+ synth_1000 = synth_1000,
+ real_1000 = real_1000)
+ })
sim1 = as.data.frame(t(sim1))
apply(sim1, 2, sd)
real_100 synth_1000 real_1000
0.04824604 0.05018030 0.01484701

soit

Écart-type des estimateurs dans la première simulation
Méthode Écart-type
100 vraies personnes 0,048
100 vraies personnes + 900 synthétiques 0,050
1 000 vraies personnes 0,015

Le résultat est clair. Les 900 personnes synthétiques ne donnent pas la précision de 1 000 vraies personnes. Dans cette simulation, elles se comportent plutôt comme une répétition, bruitée certes, de ce que les 100 premières personnes avaient déjà raconté. Et le problème devient plus grave si l’on calcule ensuite des intervalles de confiance, ou plus précisément la couverture empirique des intervalles de confiance construits naïvement, c’est-à-dire en traitant les 1 000 lignes comme 1 000 observations indépendantes.

se_wrong = sqrt(sim1$synth_1000 * (1 - sim1$synth_1000) / (n + m))
se_real100 = sqrt(sim1$real_100 * (1 - sim1$real_100) / n)
se_real1000 = sqrt(sim1$real_1000 * (1 - sim1$real_1000) / (n + m))
coverage = c(
+ synthetic_treated_as_1000 =
+ mean(abs(sim1$synth_1000 - p) <= 1.96 * se_wrong),
+ real_100 =
+ mean(abs(sim1$real_100 - p) <= 1.96 * se_real100),
+ real_1000 =
+ mean(abs(sim1$real_1000 - p) <= 1.96 * se_real1000)
+ )
coverage
synthetic_treated_as_1000 real_100 real_1000
0.4478 0.9386 0.9506

Dans la simulation, l’intervalle naïf construit en traitant les 100 réels plus 900 synthétiques comme 1 000 vraies observations ne couvre la vraie valeur que dans 44,8% des cas, au lieu des 95% attendus. Avec 100 vraies personnes, l’intervalle usuel couvre environ 93,9% des cas. Avec 1 000 vraies personnes, il couvre environ 95,1% des cas.

Couverture empirique des intervalles de confiance à 95 %
Méthode Couverture observée
Échantillon synthétique traité comme 1 000 observations indépendantes 44,8 %
100 vraies personnes 93,9 %
1 000 vraies personnes 95,1 %

L’erreur vient du fait que l’on confond le nombre de lignes avec la taille effective d’échantillon.

Allez, une deuxième simulation pour mettre en avant un risque encore plus problématique, voire politique. Imaginons une population composée de deux groupes U=0 et U=1, en proportions égales. Dans le premier groupe, la probabilité de répondre oui vaut 0,25. Dans le second, elle vaut 0,70. La vraie proportion globale est donc0{,}5 \times 0{,}25 + 0{,}5 \times 0{,}70 = 0{,}475.Mais supposons que l’échantillon réel soit biaisé : au lieu d’avoir 50% de personnes du groupe U=1, il en contient 75%. On génère ensuite 900 personnes synthétiques à partir de ce que raconte cet échantillon biaisé.

set.seed(123)
B = 5000
n = 100
m = 900
sim2 = replicate(B, {
+ U = rbinom(n, size = 1, prob = 0.75)
+ y = rbinom(n, size = 1, prob = ifelse(U == 1, 0.70, 0.25))
+ phat = mean(y)
+ y_synth = rbinom(m, size = 1, prob = phat)
+ est_synth = mean(c(y, y_synth))
+ se_wrong = sqrt(est_synth * (1 - est_synth) / (n + m))
+ c(est = est_synth,
+ low = est_synth - 1.96 * se_wrong,
+ high = est_synth + 1.96 * se_wrong)
+ })
sim2 = as.data.frame(t(sim2))
mean(sim2$est)
[1] 0.5861708
p_true
[1] 0.475

Le résultat moyen de l’estimation synthétique est 0,586, alors que la vraie valeur est 0,475. Le biais est important (il me semble). Et si on construit un intervalle de confiance naïf comme si l’on avait 1 000 observations indépendantes, il ne contient la vraie valeur que dans 5,6% des cas.

mean(sim2$low <= p_true & sim2$high >= p_true)
[1] 0.0556

J’ai l’impression que ce biais dans les données pose soucis, si on n’en tient pas compte. Si on connait ce biais de réponse, on peut bien entendu en tenir compte dans la simulation, mais si on a peu de données, pourra-t-on l’estimer correctement ? La génération synthétique peut prolonger le biais, le lisser, le rendre plus cohérent, et surtout créer une fausse illusion. On passe alors d’une incertitude visible, “nous n’avons que 100 observations”, à une précision apparente, “nous avons 1 000 lignes”… mais autour d’une mauvaise valeur.

Ok, je force un peu le trait ici, les promoteurs de ces méthodes ne disent pas toujours qu’il suffit naïvement de dupliquer les observations. Dans Synthetic data in marketing studies de Samuel Cohen et Thomas Duhard, la méthode est présentée comme un “boost” synthétique évalué par tests parallèles. L’idée est de comparer les données synthétiques à de vrais boosts des données initiales, mis de côté comme référence, et de mesurer une taille d’échantillon effective, ou ESS. Le document indique par exemple que, sur certains jeux de données Pew, Fairgen obtient des facteurs de boost moyens autour de 2,5 à 3,5 selon les tailles de segments, et donne un exemple où un ESS moyen de 2,79 est interprété comme équivalent à passer de 1 000 à 2 790 répondants. Et on sera d’accord, c’est beaucoup plus raisonnable que de dire “nous générons des individus, donc nous avons autant d’information”. Mais cela ne supprime pas le problème. Une taille d’échantillon effective est toujours relative à un protocole de validation, à une classe de questions, à un type de population, à une métrique d’erreur, et à l’hypothèse que le futur ressemble suffisamment aux benchmarks passés. Ce n’est pas un droit général à multiplier les observations. Le papier lui-même reconnaît que les tests classiques ne s’appliquent pas naturellement aux données synthétiques et qu’il faut les utiliser avec prudence. Il mentionne aussi des risques de mauvaise interprétation, d’intégration difficile dans les méthodes existantes et de transparence.

Et comme bien souvent, la littérature sur les données synthétiques insiste sur ce point depuis longtemps. Donald Rubin proposait dès 1993 des bases de microdonnées synthétiques à des fins de confidentialité (dans Statistical disclosure limitation). Mais l’idée n’était pas de prétendre que les données synthétiques étaient des observations supplémentaires miraculeuses. Il s’agissait de produire des fichiers exploitables tout en protégeant les individus, avec des règles d’inférence adaptées. Il y a vingt ans, dans The Multiple Adaptations of Multiple Imputation, Jerome Reiter et Trivellore Raghunathan rappellaient que les règles usuelles de combinaison des variances ne fonctionnent pas toujours lorsqu’on change de contexte d’imputation, et que des règles spécifiques sont nécessaires pour les données synthétiques. Ils notent aussi que, dans les contextes de données synthétiques, plusieurs jeux synthétiques doivent être générés pour permettre d’estimer correctement les variances, mais que les règles classiques de Rubin peuvent produire des estimations de variance fortement biaisées.

Ce n’est pas une querelle entre anciens statisticiens attachés aux preuves mathématiques, et nouvelles méthodes d’IA. Le cœur du problème est un problème très classique d’inférence. Qu’est-ce qui est aléatoire ? Qu’est-ce qui est observé ? Qu’est-ce qui est imputé ? Quel est le modèle ? Quelle incertitude est propagée ? Et que signifie exactement l’intervalle annoncé ?

Je peux tenter une troisième simulation pour essayer de nuancer la critique. Supposons qu’on cherche à estimer une moyenne dans un petit groupe G=1, qui ne représente que 10% de la population. On observe 1 000 personnes au total, donc seulement une centaine dans ce petit groupe. Une estimation directe sera bruitée. Si une covariable X explique bien la réponse Y, on peut ajuster un modèle sur tout l’échantillon et l’utiliser pour améliorer l’estimation dans le petit groupe. C’est l’idée classique de l’emprunt d’information. Quand le modèle est correct, la simulation donne ceci :

set.seed(123)
logit = function(x) 1 / (1 + exp(-x))
one_run = function(delta = 0, N = 50000, n = 1000) {
+ G = rbinom(N, size = 1, prob = 0.10)
+ X = rnorm(N, mean = 0.5 * G, sd = 1)
+ prob = logit(-1 + 0.8 * X + delta * G)
+ Y = rbinom(N, size = 1, prob = prob)
+ pop = data.frame(G = G, X = X, Y = Y)
+ target = mean(pop$Y[pop$G == 1])
+ s = pop[sample(seq_len(N), n), ]
+ direct = mean(s$Y[s$G == 1])
+ fit = glm(Y ~ X, data = s, family = binomial())
+ pred = predict(fit, newdata = pop[pop$G == 1, ], type = "response")
+ model_based = mean(pred)
+ c(target = target,
+ direct = direct,
+ model_based = model_based)
+ }
B = 1000
res_delta0 = as.data.frame(t(replicate(B, one_run(delta = 0))))
res_delta1 = as.data.frame(t(replicate(B, one_run(delta = 1))))
rmse = function(est, target) sqrt(mean((est - target)^2, na.rm = TRUE))
bias = function(est, target) mean(est - target, na.rm = TRUE)
out = data.frame(
+ scenario = c("model correct", "model correct",
+ "group specificity omitted", "group specificity omitted"),
+ estimator = c("direct", "model_based", "direct", "model_based"),
+ bias = c(
+ bias(res_delta0$direct, res_delta0$target),
+ bias(res_delta0$model_based, res_delta0$target),
+ bias(res_delta1$direct, res_delta1$target),
+ bias(res_delta1$model_based, res_delta1$target)
+ ),
+ rmse = c(
+ rmse(res_delta0$direct, res_delta0$target),
+ rmse(res_delta0$model_based, res_delta0$target),
+ rmse(res_delta1$direct, res_delta1$target),
+ rmse(res_delta1$model_based, res_delta1$target)
+ )
+ )
out
scenario estimator                            bias rmse
1 model correct direct                 -0.0023819498 0.04751389
2 model correct model_based            -0.0005472075 0.01752725
3 group specificity omitted direct      0.0001381138 0.04780230
4 group specificity omitted model_based -0.1907977431 0.19160979

i.e.

Effet d’un échantillon initial biaisé
Quantité Valeur
Vraie proportion dans la population 0,475
Estimation moyenne après génération synthétique 0,586
Couverture de l’intervalle naïf à 95 % 5,6 %

Le modèle aide beaucoup. Il réduit l’erreur quadratique moyenne. Il y a donc des cas où l’on gagne vraiment à emprunter de l’information. Mais si le petit groupe a une spécificité propre, ignorée par le modèle, le résultat se retourne

Comparaison entre estimation directe et estimation assistée par modèle
Scénario Estimateur Biais RMSE
Modèle correct Direct −0,0024 0,0475
Modèle correct Modèle −0,0005 0,0175
Spécificité de groupe omise Direct 0,0001 0,0478
Spécificité de groupe omise Modèle −0,1908 0,1916

Dans ce cas, l’estimateur direct est bruité mais à peu près centré. L’estimateur fondé sur le modèle est beaucoup plus stable, mais il est faux. Il tire le petit groupe vers la structure moyenne apprise ailleurs. C’est exactement ce qu’on redoute dans un sondage d’opinion : le modèle peut “corriger” ce qui ressemble à une anomalie statistique, alors que cette anomalie est peut-être précisément le signal politique ou sociologique que l’on cherchait à mesurer.

Le papier Synthetic data in marketing studies sur Fairgen et Ifop reconnait d’ailleurs cette logique lorsqu’il explique que, dans l’exemple des enseignants, les résultats synthétiques ont été comparés aux résultats bruts du sous-groupe et que les incohérences observées dans les résultats bruts auraient été corrigées par les résultats augmentés par IA. C’est à la fois l’intérêt et le danger de la méthode. Oui, un petit échantillon produit des irrégularités. Mais toute irrégularité n’est pas une erreur. Il faut savoir si l’on veut lisser un bruit d’échantillonnage ou effacer une différence réelle.

L’expression “équivalent statistique” devrait donc être maniée avec beaucoup de prudence. Elle peut avoir un sens technique si elle renvoie à une taille effective validée, sur un protocole documenté, pour une classe précise d’estimations. Mais elle devient trompeuse si elle est comprise comme “nous avons interrogé l’équivalent de 580 personnes”. Une personne synthétique ne répond pas. Elle est générée. Elle ne fournit pas une nouvelle information indépendante sur la population. Elle rend matériel une hypothèse du modèle.

C’est pourquoi ma question “pourquoi ne pas générer toute la population ?” n’était pas une boutade, puisqu’elle met en avant la limite logique de l’argument. Si les données synthétiques apportaient vraiment de l’information indépendante, il faudrait pousser le raisonnement jusqu’au bout : interrogeons 5 personnes, générons 67 millions de Français, calculons les résultats avec une marge d’erreur microscopique, et supprimons les sondages… Personne ne croit sérieusement cela. Ce que l’on génère, ce n’est pas la population, c’est une image de la population selon un modèle, appris à partir de données limitées.

Les données synthétiques peuvent être utiles. Elles peuvent aider à protéger la confidentialité, comme dans les travaux de Little, Rubin, Reiter et Raghunathan. Elles peuvent servir à l’imputation de valeurs manquantes, à la diffusion de microdonnées, à la simulation, ou à l’estimation de petits domaines. Elles peuvent aussi, sous conditions, améliorer des estimations instables. Mais elles demandent une discipline méthodologique stricte : distinguer le réel du synthétique, publier les effectifs réellement observés, décrire le modèle, mesurer la taille effective, propager l’incertitude de génération, tester la robustesse aux biais de sélection, et surtout ne pas présenter une prédiction comme une observation.

Je pense qu’il y a un vrai danger ici, parce que dans un sondage d’opinion, cette distinction subtile n’est pas seulement technique. Elle devient rapidement démocratique. Un sondage n’est pas qu’une machine à produire des pourcentages, c’est un dispositif (souvent fragile) par lequel des voix individuelles sont transformées en représentation collective. On l’a vu, compléter des voix manquantes par des voix synthétiques peut parfois stabiliser artificiellement un tableau, mais ça peut être très facilement orienté…

[à suivre dans des sondages sans sondé(e)s … ]

Jean-Claude Deville et Carl-Erik Särndal, “Calibration Estimators in Survey Sampling”, Journal of the American Statistical Association, 1992.

Roderick J. A. Little, “Statistical Analysis of Masked Data”, Journal of Official Statistics, 1993.

Donald B. Rubin, “Discussion: Statistical Disclosure Limitation”, Journal of Official Statistics, 1993.

Trivellore E. Raghunathan, Jerome P. Reiter et Donald B. Rubin, “Multiple Imputation for Statistical Disclosure Limitation”, Journal of Official Statistics, 2003.

Jerome P. Reiter et Trivellore E. Raghunathan, “The Multiple Adaptations of Multiple Imputation”, Journal of the American Statistical Association, 2007.

J. N. K. Rao et Isabel Molina, Small Area Estimation, 2e édition, Wiley, 2015.

Samuel Cohen et Thomas Duhard, “Synthetic Data in Marketing Studies: Exploring the Promise of Generative AI and Synthetic Data”, ESOMAR Congress, 2024.

Ifop pour Fairgen, L’intention de vote des enseignants aux élections européennes, juin 2024.

Thomas Delclite, “Quand 1000 personnes ne suffisent pas”, Mediapart, 26 mai 2026.