Algorithme sur des moyennes de prix
Salut,
Ceci est purement un problème d'algorithmique.
Je souhaite faire une moyenne sur des prix donnés à une référence.
Seulement, je veux ne pas prendre en compte les prix dont les écarts seraient trop importants par rapport à la future moyenne, on va dire par exemple + ou - 30%. Il peut en effet s'agir d'erreurs d'utilisateurs ou de saisie.
Selon les cas, il peut y avoir 1, 2...10... ou même 100 prix avant de faire la moyenne.
On va essayer de travailler sur une moyenne de 10 prix (avec des entiers) pour faire un exemple simple:
1, 18, 18, 19, 18, 16, 13, 17, 45, 84
Ici, on voit tout de suite que la moyenne va être autour de 17, et que 1, 45 et 84 sont démesurés. Ces 3 données fausseraient grandement la moyenne. 13 doit pouvoir contribuer à la moyenne, car il est probablement compris dans la tolérance de 30% sur la moyenne.
Bon, ici, c'est simple, mais j'aimerais savoir s'il existe une méthode infaillible pour dégager les trop petits et trop grands nombres.
Le problème c'est que si je fais une première moyenne pour avoir mon delta de 30% ensuite, cette moyenne n'a aucun sens car elle sera faussée par 1, 45 et 84. Je ne peux pas non plus compter le nombre d'occurrences d'un nombre, car ce ne seront pas des entiers au final: 18,56, 18,90, 19,13, 19,67...
Bref, il faudrait inclure seulement les prix qui sont dans une fourchette, sauf que je ne connais pas cette fourchette. :-)
Réponses
Il y a quelques infos là.
Le truc facile à faire, c'est de faire un sort, et de prendre le médian (celui à la "moitié" de la liste ordonnée), à partir de laquelle tu pourrais supprimer les valeurs ensuite soit trop grande, soit trop faibles. J'aime bien le calcul à "poids" aussi sur la liste ordonnée.
Super merci.
Oui, suivant le lien, 2 pistes:
Je préfère la solution du médian !
Moi j’essayerait d’utiliser la liste ordonnée pour calculer les « distances » entre chaque point. Les valeurs « aberrantes » sont des pics (ou des creux) par rapport au « nuage » des chiffres normaux. En triant les distances dans un tableau tu dois pouvoir repérer facilement les valeurs habituelles des variations aléatoires.
Ceci dit, si j’avais vraiment à faire ce genre de calculs j’irais me plonger dans un livre d’initiation à la statistique pour chercher la méthode la plus efficace.
@Draken je crois que c'était bien l'idée de tout le monde dès le départ, mais la question est plutôt de savoir quand on sort de la norme.
Je partirais sur un calcul d'écart-type. Dans l'article, il y a un exemple pour la Loi normale, et on voit qu'un écart de ±1 σ correspond à ±34,1 %.
Sur Khan Academy tu trouveras une explication du calcul beaucoup moins intimidante que sur Wikipédia (où presque tous les articles concernant les maths sont affreux).
Carrément. WikiPedia en Maths, c'est juste pour trouver le keyword (nom du théorème/principe, etc.) à chercher.
Ouai mais dans cette solution il y a un OS. Imaginons que les 4 premiers utilisateurs saisissent n'importe quoi. Imaginons que le PVC soit de 17€ et que tu reçoives 71,72,70,61 puis 17 et 18. Avec cette méthode, tu seras plus proche de 70 que de 17.
Second élément, si le prix fluctue durant le temps (cours du dollar, de l'essence) cette méthode ne peux pas fonctionner, si ?
Ça reste une méthode statistique, qui n'a de sens qu'avec un nombre suffisant d'échantillons. Toutefois, ton hypothèse que les 2/3 des saisies sont fausses semble peu réaliste.
C'est vrai, à moins de compenser selon le cours de la monnaie au moment de chaque saisie.
Dans cette situation précise, il s'agit de vin, dont les prix sont souvent en Euros, je ne suis pas sûr que ce soit très nécessaire, on n'a pas une variation du cours de 30 % en quelques années, si ?
Oui, il s'agit de faire une moyenne sur des prix payés pour des vins.
Et non d'avoir la valeur du marché d'un vin. Mais ça donne une indication.
En amont, je récupère des prix avec devise, je convertis tout en USD avec le taux de change courant de la devise originale. J'obtiens ma liste de prix.
Globalement, les données obtenues sont correctes, mais on va dire que 1 cas sur 50 peut être du n'importe quoi. C'est ce genre de cas que je veux exclure.
Je vais regarder le fonctionnement de l'écart type.
Voici quelques résultats en conditions réelles:
On voit bien les valeurs délirantes dans l'avant dernier exemple.
Ca semble bon ce que tu nous montres ici.