Bonjour a tous,
Première fois que je poste dans cette section, avec un problème peut être (et j'espère) simple à résoudre.
Un peu de contexte : Nous avons développé un système de répartition de traitements, qui envoie ces fameux traitements sur des machines lorsqu'elles sont disponibles. En gros on a une interface de soumission de traitements, un moteur qui s'occupe d'envoyer le traitement à réaliser sur une machine disponible, et la machine de traitement fait son boulot. L'interface de soumission monitore alors les traitements en train de tourner.
Pour chaque traitement on va enregistrer la date / heure de démarrage (lorsque la machine de traitement recoit le traitement a effectuer) ainsi qui la date / heure de fin de traitement.
Maintenant qu'on a un peu de données (le système tourne depuis plus d'un an), on souhairetait se servir de tout ca pour donner une estimation du temps de traitement à l'utilisateur. On a réfléchi aux possiblités pour donner un temps le plus réaliste possible à l'utilisateur.
Bien entendu la première solution envisagée était la moyenne, qui s'est vite avérée être imparfaite, car trop influencée par des anomalies de traitement, qui peuvent foutre en l'air le calcul. En gros il se peut qu'un traitement se bloque sur une machine, ce qui fait que l'on a des enregistrement aberrants en base. Imaginons ce cas :
Range de temps 10s à 15s 15s à 20s 20s à 25s ... 150s à 155s Nombre de temps 1 5 20 ... 3
En partant du principe qu'on supprime un peu de précision, et qu'on prenne la moitié des ranges comme valeur (12.5, 17.5, 22.5, 152.5), ca nous donne une moyenne de (12.5+5×17.5+20×22.5+152.5×3) / 29 = environ 34s.
Nous ce qu'on voudrait, c'est qu'étant donné qu'on a beaucoup plus de traitements qui ont duré entre 20 et 25 secondes, on ait un temps estimé qui soit très proche de cette tranche, et que les 3 traitements ayant duré plus de 150 secondes aient peu d'impacts.
J'ai pensé à une solution, mais je n'arrive pas à aller jusqu'au bout. L'idée serait de donner un poids "dynamique" à chacun des ranges, en prenant comme référence le range ayant le plus de valeurs, et en baissant le poids des autres ranges en fonction de la distance qui les séparent du range de référence. Par exemple (avec les temps de traitement rapprochés du multiple de 5 le plus proche) :
Range arrondi 5 10 15 20 25 30 35 40 45 50 55 60 Nombre 0 0 0 1 5 10 2 0 0 1 0 1 Poids relatif au plus grand nombre 1 2 3 4 5 6 5 4 3 2 1 0
Avec ca je pense pouvoir donner plus d'importance aux valeurs qui reviennent le plus souvent, et être moins influencé par les anomalies. Mais voila, je ne sais pas comment obtenir un résultat de cette affaire.
Il y a aussi un défaut, c'est que je ne prend pas en compte les nombres dans les ranges hors du range de référence, qui fait forcément une estimation fausse. On pourrait alors décider d'utiliser les poids suivants :
Range arrondi 5 10 15 20 25 30 35 40 45 50 55 60 Nombre 0 0 0 1 5 10 2 0 0 1 0 1 Poids relatif au plus grand nombre -3 -1 0 -2 -3 -3
Mais dans ce cas, je ne tiens plus compte des distances, et du coup je peux donner un poids trop important aux valeurs éloignées...
Bref, j'ai l'impression que je ne suis pas loin de quelque chose en cumulant tout ca, mais je manque de connaissances dans le domaine pour savoir comment l'appliquer. Pourriez vous m'apporter la lumière ? Merci d'avance.
Partager