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)
Ca marche bien mais le problème, c'est que les count ne sont pas du tout répartis de façon linéaire
Code : Sélectionner tout - Visualiser dans une fenêtre à part SELECT * FROM tablename INNER JOIN (select * from PROBA ORDER BY RANDOM() limit 1) p ON tablename.weightcol > p.val ORDER BY RANDOM() LIMIT 1;
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