2010-01-05 5 views
4

Comment calculer une valeur normalisée du karma (valeur entre 0 et 1), à partir du karma des utilisateurs de mon système?Calcul du karma normalisé

La valeur normalisée doit refléter la valeur du karma de l'utilisateur par rapport à tous les autres utilisateurs.

Je pense que je devrais probablement inclure la moyenne et les écarts-types de tous les karmas, mais je n'arrive pas à trouver la bonne formule.

Une aide?

+1

Je pense que vous pourriez vouloir mettre une limite de "temps" sur ce karma. De cette façon, les gens récents obtiennent le karma mais quelqu'un d'il y a 2 ans ne comptera pas. De cette façon, les nouvelles personnes ne sont pas simplement dans le dernier rang. – Daniel

Répondre

8
min_karma = min(karmas) 
max_karma = max(karmas) 
normalized = (karma - min_karma)/(max_karma - min_karma) 

Cela a la propriété que l'utilisateur (s) avec le karma = min_karma obtenir un karma normalisé de 0, et les utilisateurs avec le karma = max_karma obtenir 1. D'autres sont répartis de façon linéaire entre les deux. Vous devrez gérer séparément le cas particulier que tous les utilisateurs ont le même karma.

Si vous voulez une distribution non-linéaire, vous pouvez utiliser une fonction logarithmique:

normalized = (log(karma) - log(min_karma))/(log(max_karma) - log(min_karma)) 

Il est important dans ce cas que le karma ne peut jamais tomber en dessous de 1, car cela pourrait fausser les résultats.

+0

Je ne suis pas sûr si c'est le chemin à parcourir. Considérons une situation où 100 utilisateurs ont un faible karma distribué autour de 10, et seulement 1 utilisateur a un karma élevé de 100. Je m'attendrais à ce que les valeurs normalisées tiennent compte du fait que seulement 1 utilisateur a un karma élevé, et donc donner aux utilisateurs avec par exemple 15 karma un avantage supérieur à l'avantage linéaire. Cela a-t-il du sens? – EdanB

+0

De plus, il n'y a pas de karma max, car le karma est ajouté pour certaines actions qui peuvent être effectuées indéfiniment (comme obtenir des notes élevées pour une critique que vous avez publiée) – EdanB

+0

Vous pourriez prendre le logarithme du score si vous voulez une distribution non-linéaire . –