Partage
  • Partager sur Facebook
  • Partager sur Twitter

Calcul de Popularité

    13 septembre 2011 à 3:02:32

    Bonjour à tous !

    Je suis en train de concevoir un nouveau site internet, et je viens demander l'avis de personnes éclairées au sujet de la meilleure façon de faire plusieurs calculs (algorithmes ?).
    Si je vous fait cette demande c'est que les Maths ne sont pas vraiment mon fort.

    Popularité d'une Photo


    Admettons que je créé une photo à une date x.
    Cette photo reçoit y nombre de visites.
    Cette photo est favorisée f fois.
    Ces mêmes favoris sont ajoutés à un moment ft.
    Cette photo reçoit z nombre de commentaires
    Ces mêmes commentaires sont créés à un moment zt.

    Pour résumer :
    • x = date photo
    • y = nombre visites photo
    • f = nombre de fois qu'elle a été ajoutée aux favoris
    • ft = date favoris
    • z = nombre commentaires
    • zt = date commentaire



    A partir de là, il faudrait que je récupère un pourcentage ou une valeur me permettant de savoir quelle photo est la plus populaire pendant le mois en cours (bon ça c'est un détail).
    Sachant que je voudrais donner plus d'importance aux photos :
    • 1° - Qui ont été créées récemment.
    • 2° - Qui ont un plus grand nombre de commentaires durant les derniers jours ou les dernières heures.
    • 3° - Qui ont le plus grand nombre de commentaires sur le mois.
    • 4° - Qui ont été favorisées plus de fois durant les derniers jours ou les dernières heures.
    • 5° - Qui ont le plus grand nombre de favoris sur le mois.

    J'insiste bien sur cet ordre de priorité, une photo ancienne qui a eu un plus grand nombre de visite qu'une photo récente aura moins d'importance.
    Tout dépendant bien sûr de la pondération (1000 visites sur une photo ancienne reste plus important que 0 sur une photo neuve).


    Tableau de valeurs


    Je vous fournis un exemple de valeurs si besoin (ma table n'est pas créée comme ça hein c'est juste pour faciliter la tâche ^^). Vous pouvez bien sûr en imaginer d'autres, je n'ai pas représenté tous les cas de figures.
    Et je pars du principe qu'il y aura plus de créations de favoris que de commentaires, vu les nombres que j'indique je n'ai pas mis leur date d'ajout, mais elle sera bien nécessaire.

    #Photo Date Photo Visites Favorisée #Commentaire Date Comm'
    1 2011-09-01 08:00:00 205 53 - -
    - - - - - -
    2 2011-09-05 18:26:40 8 8 1 2011-09-05 18:57:49
    - - - - 2 2011-09-08 19:34:49
    - - - - 3 2011-09-08 19:34:40
    - - - - - -
    3 2011-09-08 19:34:43 162 21 1 2011-09-08 19:34:50
    - - - - 2 2011-09-08 19:34:51
    - - - - 3 2011-09-08 19:34:53
    - - - - 4 2011-09-08 19:35:05
    - - - - 5 2011-09-08 19:35:14
    - - - - 6 2011-09-08 19:38:47
    - - - - 7 2011-09-08 19:39:00
    - - - - 8 2011-09-09 23:51:57
    - - - - - -
    4 2011-09-10 11:40:37 0 0 - -



    Bon j'ai un autre calcul un peu plus complexe à faire, mais je ne vais peut être pas en mettre trop d'un coup, et j'essaierais de le faire par moi-même une fois que j'aurais celui-ci.

    Merci d'avance !


    PS : Sujet dupliqué dans la section Maths suite à une demande de déplacement.
    Sujet original ici.
    • Partager sur Facebook
    • Partager sur Twitter
    Anonyme
      14 septembre 2011 à 10:57:22

      Bonjour,
      si je comprends bien, l'idéal serait d'injecter toutes ses valeurs dans un algo qui te sort un nombre. Après la populaire est celle qui a le plus grand nombre. C'est assez facile, surtout que tu as déjà ton idée de la hiérarchie des données. Sauf qu'il te manque dans ta hiérarchie le nombre de visites qui est quand même important. Après, il faut voir aussi l'importance relative : 4 est bien moins important que 5, ou juste un peu moins, par exemple ?

      Partant de là, tu pourrais faire une sorte de calcul qui serait du genre <math>\(y\times [(f_{mois}^2+f_{recents})^2+(z_{mois}^2+z_{recent})+x_{mois}]\)</math>

      Et tu changes les exposants, les facteurs, l'unité de la date... selon l'importance que tu veux donner au paramètre. En cas d'égalité pour deux photos, tu compares les paramètres selon leur importance les uns après les autres.

      En esperant t'aider.
      • Partager sur Facebook
      • Partager sur Twitter
        14 septembre 2011 à 12:06:32

        Je tente un truc. Pour la i-ème image, on peut calculer un score :

        <math>\(S_i = \left(\alpha\frac{C_i^J}{\sum C_i^J}+\beta\frac{C_i^M}{\sum C_i^M}+\gamma \frac{F_i^J}{\sum F_i^J}+ \delta\frac{F_i^M}{\sum F_i^M}\right)e^{-\epsilon d\)</math>


        • <math>\(C_i^J\)</math> : nombre de commentaires pour l'image sur les 24h
        • <math>\(C_i^M\)</math> : nombre de commentaires pour l'image sur le mois
        • <math>\(F_i^J\)</math> : nombre de favoris pour l'image sur les 24h
        • <math>\(F_i^M\)</math> : nombre de favoris pour l'image sur le mois
        • <math>\(d\)</math> : temps écoulé depuis la création de la photo


        Les sommes représentent les nombres totaux de commentaires/favoris/... Ça permet de passer à un pourcentage et ainsi éviter les disproportions entres les variables. Tu ne tiens pas à intégrer le nombre de visites dans ton calcul. La favorite est celle qui a le meilleur score.

        L'exponentielle décroissante permet de réduire le poids des scores des photos anciennes.À toi de régler alpha, beta, gamma, delta et epsilon. C'est un peu surparamètré à mon goût, mais ça devrait le faire.
        • Partager sur Facebook
        • Partager sur Twitter
          14 septembre 2011 à 17:59:14

          C'est là où je me rend compte de mes lacunes.

          Je suis du genre à apprendre par l'exemple, du coup je fais le test vite fait avec vos calculs pour voir si j'ai bien compris. Le tout sous sa forme simple histoire de mettre en situation de développement.

          Photo 1 :
          Commentaires sur les 24h : 2
          Commentaires sur le mois : 23
          Favoris sur les 24h : 0
          Favoris sur le mois : 3
          Visites : 112
          Création il y a : 45000 secondes (je pense que cette unité est là plus adaptée ?)

          Photo 2 :
          Commentaires sur les 24h : 0
          Commentaires sur le mois : 34
          Favoris sur les 24h : 10
          Favoris sur le mois : 31
          Visites : 321
          Création il y a : 112000 secondes

          Toutes photos confondues :
          Commentaires sur les 24h : 2
          Commentaires sur le mois : 57
          Favoris sur les 24h : 10
          Favoris sur le mois : 34
          Visites : 433

          Alpha : 5
          Béta : 4
          Gamma : 3
          Delta : 2
          Epsilon : 1




          Calcul de @dri1 :


          Photo 1


          112 * ((3²+0)² + (23² + 2) + 45000)
          = 5 108 544

          Photo 2


          321 * ((31²+10)² + (34² + 0) + 112000)
          = 338 975 037



          Calcul de Lanfeust 313 :


          Je n'ai pas utilisé de pondérations (alpha et compagnie) très éloignées, c'était juste pour tester avec quelque chose de simple.

          Photo 1


          ( (5 x (2/2)) + (4 x (23/57)) + (3 x (0/10)) + (2 x (3/34)) ) * e-(1*45000)
          = 6,788 * e(-45000)
          = ?
          Là je crois que la calculatrice n'apprécie pas. D'ailleurs je ne sais pas trop comment utiliser l'exponentielle sur la calculette windaube... ou bien je m'y prend mal. Une aide ?


          Photo 2


          ( (5 x (0/2)) + (4 x (34/57)) + (3 x (10/10)) + (2 x (31/34)) ) * e-(1*112000)
          = 6.298 * e(-112000)
          = ?





          Mes 2 centimes


          Alors au niveau du résultat, je préfère tout de même la solution de Lanfeust, même si le calcul de @dri1 est plus abordable pour ma simple personne.
          Au final je pense avoir compris le raisonnement, il suffit de rajouter une pondération plus forte à ce que l'on estime être plus important. Maintenant je n'aurais jamais pensé à diviser par le nombre total de commentaires/favoris, c'est une bonne idée !
          Au niveau des résultats obtenus et vu que je n'arrive pas à calculer cette foutue exponentielle, je ne peux pas encore me prononcer.
          En partant de mon exemple, je pense qu'il serait logique que la photo 2 l'emporte.


          En tout cas merci à vous deux, vous m'avez déjà bien aidé à cerner la solution.



          PS : désolé mais aucune idée de comment utiliser la balise <math> avec latex...
          • Partager sur Facebook
          • Partager sur Twitter
            14 septembre 2011 à 18:29:15

            Pour la balise math.

            Sinon, pour le temps d'ancienneté, j'aurais plutôt utilisé les heures ou les jours, mais tu fais comme tu veux.
            Le problème, c'est que <math>\(e^{-x}\)</math> devient négligeable (très inférieur à 1) dès que <math>\(x>5\)</math> (<math>\(e^{-5}\approx0.006737946999\)</math>)
            Quelque soit l'unité que tu choisiras pour l'ancienneté, il faut bien choisir le <math>\(\varepsilon\)</math> proposé par Lanfeust313.

            Conseil pour le choix du <math>\(\varepsilon\)</math> :

            Je suppose que tu dois avoir une durée d’ancienneté à partir de laquelle une photo ne doit plus avoir de valeur (un mois —ou deux— j'imagine ? Si tu fais le classement sur un mois)
            Notons <math>\(d_0\)</math> cette durée.
            Dès que <math>\(\varepsilon\times d > 5\)</math>, le score initial (sans compter l'ancienneté) de la photo sera divisé par presque 200, donc en prenant <math>\(\varepsilon = \frac{5}{d_0}\)</math>, on arrive au comportement voulu.
            • Partager sur Facebook
            • Partager sur Twitter
            Anonyme
              14 septembre 2011 à 18:32:41

              Bonjour,
              là si tu veux que la photo 2 ressorte, la solution de Lanfeust (très propre, chapeau à Lanfeust) va te faire ressortir la une. Il va falloir arranger les pondérations.
              Pour l'exp, tu peux toujours essayer 2,718. Ce sera assez précis. Pour la balise math, il y un tout simplement un tuto : "la balise math, comment l'utiliser". C'est pratique et propre !
              • Partager sur Facebook
              • Partager sur Twitter

              Calcul de Popularité

              × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
              × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
              • Editeur
              • Markdown