Moyenne pondérée au fur et à mesure des résultats

Olympiades mathématiques, énigmes et défis
Malcolm
Messages: 4
Enregistré le: 23 Sep 2019, 10:35

Moyenne pondérée au fur et à mesure des résultats

par Malcolm » 23 Sep 2019, 10:48

Bonjour à tous !

Je développe un programme et cherche à établir une moyenne pondérée au fur et à mesure de mes résultats. Voici mes résultats :

2 - 3 - 1 - 3 - 2 - 3 - 2 soit 7 résultats

Le calcul semble facile sauf que je dois respecter certaines conditions à savoir :

Au résultat N°7 (où x = 2), nous savons que x = 2 est déjà sorti 2 fois précédemment (donc 3 fois en tout).

Par contre, nous ignorons que x=3 est déjà sorti 3 fois, x=1 est déjà sorti 1 fois … et ainsi de suite.

Nous avons donc à notre disposition pour l’élaboration du calcul :

    La valeur du dernier résultat (au résultat n°7 = 2)
    La somme totale de tous les résultats précédents (au 7ème résultat, nous savons que la somme de tous les résultats est égale à 16)
    Le nombre de fois qu’un résultat est apparu précédemment par rapport au dernier résultat (Dans mon exemple, nous savons que x = 2 est déjà sorti 2 fois précédemment donc 3 fois en tout. Par contre, nous ignorons que x = 3 est déjà sorti 3 fois et que x = 1 est déjà sorti 1 fois …)

Ainsi pour le dernier résultat (où x = 2), nous avons la formule suivante :

(2*(3/7)*3) + (3*(3/7)*3) + (1*(1/7)*1) / ((3/7)*3) + ((3/7)*3) + ((1/7)*1) = ~6,5714 / ~2,7143 = ~ 2,42

Sauf que nous ignorons que : (3*(3/7)*3) + (1*(1/7)*1)

Par contre, nous sommes en mesure de connaître que la moyenne pondérée précédente (au résultat N°6) est égale à :

2 - 3 - 1 - 3 - 2 - 3 - 2 soit 6 résultats

(3*(3/6)*3) + (2*(2/6)*2) + (1*(1/6)*1) / ((3/6)*3) + ((2/6)*2) + ((1/6)*1) = 6 / ~2.33 = ~2.58

Pour mon 7ème résultat (où x = 2), je peux déterminer mon dénominateur de la manière suivante :

Dénominateur = ((3/7)*3) + ((14 - 4) * (1/7)) = ~2,7143

10 (14 - 4) est ici la somme de tous les résultats précédents différents de 2. Dans cette suite de résultats (14), 2 est déjà sorti 2 fois précédemment (4)...

Par contre, je suis incapable de déterminer le numérateur que devrait être égal (dans mon exemple) à ~6,5714 en sachant que nous savons que (x = 2) représente :

(2*(3/7)*3) = 2,57143

Mais que nous ignorons que les valeurs précédentes (x) représentent :

(3*(3/7)*3) + (1*(1/7)*1) = 4

J'espère avoir été clair dans l'exposé de ma problématique. N'hésitez pas à revenir vers moi si vous avez la moindre question ! Un grand merci par avance !! :wink:



lyceen95
Membre Complexe
Messages: 2263
Enregistré le: 14 Juin 2019, 23:42

Re: Moyenne pondérée au fur et à mesure des résultats

par lyceen95 » 23 Sep 2019, 11:38

C'est du chinois.
Mais tu as de la chance, je parle le chinois.

Tu dois donc gérer 3 variables : n, s et s2
- n = Nombre d'occurrences
- s = somme des termes
- s2 = somme des carrés des termes.
A chaque fois que tu lis un nouveau nombre (x par exemple), tu fais :
n = n+1
s = s+x
s2 = s2+x*x
Et tu affiches s2/s

Donc tu vas me dire : n ne sert à rien ... Oui, mais comme je ne suis pas tout à fait sûr de ta formule, je me dis que n peut être amené à servir.

PS : en fait dans tes calculs, tu as au numérateur s2/n et au dénominateur s/n ; Tu divises par n, pour multiplier par n juste après. C'est pour ça que j'ai au numérateur et au dénominateur des nombres entiers, alors que tu as des nombres généralement non-entiers.

Avatar de l’utilisateur
fatal_error
Modérateur
Messages: 6610
Enregistré le: 22 Nov 2007, 12:00

Re: Moyenne pondérée au fur et à mesure des résultats

par fatal_error » 23 Sep 2019, 13:13

Si on note
l'élem qui vaut
et le nombre de fois qu'est apparu dans la suite

je crois comprendre que ta moyenne pondérée se calcule par

avec

idem


si on pose S le numérateur et D le dénominateur
soit le 8ème élem que j'appele x:
SI c'est un nouvel élem de la suite, ta nouvelle moyenne est alors
(S + x*1^2) / (D+1^2)
SI il existe déjà dans la suite, et il est trouvé n fois, ta nouvelle moyenne est alors
(S - x(n-1)^2 + xn^2) / (D - (n-1)^2 + n^2) qui se simplifie en

(S + x(2n-1)) /(D + 2n-1)

Tu devrais donc t'en sortir en ne gardant que S, D de l'étape d'avant (si tant est que ca soit possible?), sous reserve que tu saches combien de fois ton dernier élément est apparu dans la suite (je suis curieux de savoir le cas réel ou tu peux pas stocker toutes les occurrences mais tu sais combien de fois la dernière est apparue...)
la vie est une fête :)

Malcolm
Messages: 4
Enregistré le: 23 Sep 2019, 10:35

Re: Moyenne pondérée au fur et à mesure des résultats

par Malcolm » 24 Sep 2019, 11:51

Bonjour lyceen95 et fatal_error, merci de vos réponses rapides ! :frime:

La formule de fatal_error colle parfaitement à mon (long) calcul de la moyenne pondérée, à savoir :

(1*(1/7)*1) + (2*(3/7)*3) + (3*(3/7)*3) / ((1/7)*1) + ((3/7)*3) + ((3/7)*3)

Je précise que je ne suis pas de formation scientifique et que les mathématiques sont un lointain souvenir que j'aimerais néanmoins raviver.

Aussi, pourriez-vous m'indiquer les avantages (et inconvénients) d'une moyenne "pondérée" par rapport à une moyenne simple ? J'ai longtemps débattu avec un ami hier et nous avons eu du mal à nous entendre sur la définition de la moyenne.

D'ailleurs, parlons-nous bien d'une moyenne pondérée dans mon exemple ? Je me trompe peut-être de dénomination... :gene:

J'ai le souvenir d'un ensemble de notes avec des coefficients par matière afin d’appréhender le calcul d'une moyenne pondérée. Ce n'est (peut-être) pas tout à fait ce que je cherche à obtenir ici ?

Concrètement, mon calcul s'appliquerait à une série de résultats corrects consécutifs selon un énoncé.

Par exemple, chaque fois que Météo France prévoit de la pluie à Lyon dans son bulletin, je cherche à obtenir la moyenne des résultats corrects consécutifs :

2 (vrai) - 4 (faux) - 3 (vrai) - 3 (faux) - 1 (vrai) - 6 (faux) - 3 (vrai) - 11 (faux) - 2 (vrai) - 1 (faux) - 3 (vrai) - 1 (faux) - 2 (vrai) - 1 (faux) ..... 13 (vrai)

Dans le cadre d'un 8ème résultat avec 13 bonnes réponses consécutives cette fois, il est peut-être (un peu plus) """"significatif"""" de dire qu'une moyenne (pondérée) de 3 est plus """représentative""" qu'une moyenne (simple) est de 3.75. J'abuse des guillemets volontairement.

On peut reproduire l'exemple sur un ensemble de salaires (en €) :

1 000, 1 200, 1 000, 1 200, 1 600, 1 000, 1 600, 1 600, 1 200, 1 000 000

... et dire de façon toute aussi """significative""" qu'une moyenne (pondérée) d'environ 36 936 € est (un peu plus) représentative qu'une moyenne (simple) de 101 140 € ........

J'espère être assez clair ? :gene: N'hésitez pas à me reprendre et commenter mes propos ! Encore merci !

lyceen95
Membre Complexe
Messages: 2263
Enregistré le: 14 Juin 2019, 23:42

Re: Moyenne pondérée au fur et à mesure des résultats

par lyceen95 » 24 Sep 2019, 13:13

Quand on parle de moyene pondérée, on a des pondérations. tu parles des notes scolaires, et dans ce cadre, les pondérations, ce sont les coefficients : telle épreuve est coefficient 4 par exemple. Dans tous tes exemples, je ne vois pas les pondérations.
Précise comment tu détermines tes coefficients. ça éclaircira les choses aussi bien dans ton esprit, que dans cette discussion.

Avatar de l’utilisateur
fatal_error
Modérateur
Messages: 6610
Enregistré le: 22 Nov 2007, 12:00

Re: Moyenne pondérée au fur et à mesure des résultats

par fatal_error » 24 Sep 2019, 13:23

slt,

oui c'est bien une moyenne pondérée.
par ex pour la suite
2 - 3 - 1 - 3 - 2 - 3 - 2

on a
m_1 = 1
m_2 = 3
m_3 = 3

et la formule avec tes carrés correspond en fait à une moyenne simple correspondant à
1 2 2 2 2 2 2 2 2 2 3 3 3 3 3 3 3 3 3
(si tu pondères une note par 3, c'est comme si t'avais eu 3 fois la même note)

le nombre que tu calcules je sais pas trop ce que tu veux en faire mais par exemple:
tu dis que si
1 apparait 3 fois, tu le pondères par 3^2
rien ne t'empêches de le pondérer par 3^3, ou 3^5, ou même e^3 (ou n'importe quelle autre fonction croissante, x^a (a>0), exp(x), log(x),...) pourvu que la fonction donne jamais 0 (sinon dénominateur peut valoir 0...)

ex:https://repl.it/repls/FaroffLovingWebportal
Code: Tout sélectionner
import math
def avg(s, m, f):
    weightElems = 0
    weights = 0
    for xi in m:
        weightElems += xi*f(m[xi])
        weights += f(m[xi])

    return weightElems/weights

def do_seq(s):
    m = {}
    for xi in s:
        if xi in m:
            m[xi] +=1
        else:
            m[xi] = 1
    print('go---', s)
    print('log', avg(s, m, lambda x:math.log(1+x)))
    print('x', avg(s, m, lambda x:x))
    print('x2', avg(s, m, lambda x:x*x))
    print('x3', avg(s, m, lambda x:x*x*x))
    print('exp', avg(s, m, lambda x:math.exp(x)))

do_seq([2,3,1,3,2,3,2])
do_seq([1000,1200,1000,1200,1600,1000,1600, 1600, 1200, 1000000])

la vie est une fête :)

 

Retourner vers ⚔ Défis et énigmes

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 6 invités

Tu pars déja ?



Fais toi aider gratuitement sur Maths-forum !

Créé un compte en 1 minute et pose ta question dans le forum ;-)
Inscription gratuite

Identification

Pas encore inscrit ?

Ou identifiez-vous :

Inscription gratuite