Bonjour,
Je suis sur un projet de génération de données fictives.
J'ai donc des tables de références dans lesquelles je peux ajouter le nombre d'occurrences (count(*)) des valeurs dans la base à imiter.
Quelle serait la meilleure façon de sélectionner des valeurs dans cette table en respectant les probabilités d'apparition.
A ce stade, j'utilise cette méthode (en gros) :
J'ai défini une table PROBA dans laquelle j'ai une colonne val qui prend les valeurs de 0 à 99
Dans ma table de référence, je normalise les "count" des valeurs pour les ramener entre 0 et 100
Et je les sélectionne via une requête comme celle ci (je suis sur sqlite)
SELECT * FROM tablename INNER JOIN (select * from PROBA ORDER BY RANDOM() limit 1) p ON tablename.weightcol > p.val ORDER BY RANDOM() LIMIT 1;
Ca marche bien mais le problème, c'est que les count ne sont pas du tout répartis de façon linéaire
Par exemple, si j'ai une valeur A avec un count normalisé à 100 et 100 valeurs B, C.... chacune avec un count normalisé à 1, je devrais avoir 50% de chances d'avoir A et 50% de chance d'avoir l'une des autres valeurs (soit 0,5% pour chaque) or en utilisant la requête mentionnée, je vais me retrouver avec A dans un chouille plus de 99% des cas et l'une des autres valeurs dans un chouille moins de 1% (soit 0.01% pour chaque valeur)
J'ai pas réussi à trouver de technique plus pertinente pour sélectionner mes valeurs. Quelqu'un ici aurait-il une idée ?
Merci
Partager