Normalizing multi-source achievements

I am looking for a good recommendation on the algorithm.

I have users and achievements. Users create Achievements and then share them with other users. Associated with each Achievement is the point value that the user indicates. The total number of users is the sum of all their achievements.

Basically:

Achievement :
    owner = Alias
    points = int

User :
    achievements = list(Achievement)
    def points() :
        sum([achievements.points])

Good, so this system is obviously very capable of playing. You can make many accounts and give a lot of achievements to each other. I am trying to reduce this a bit by scaling the point values ​​to a value other than what the user specified.

  • , , -. ? AKA 5 , 10 , . , .
  • , , , ?
  • , , . ? , , , , .
  • , , - ?

. , . - , , .

- - . 10 /, . 10 55 , 550. , , . [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] , , [50, 25, 16.6, 12.5, 10, 8.3, 7.1, 6.25, 5.5, 5].

. , , , , . !

+3
3

, , stackoverflow, digg, slashdot ..,

, : , . , slashdot .

, : , .

, 10. , , 10 (, , ). , 100 ( ), 0,1 , 10. , , .

, pagerank, , -, , - , .

. . . . , , (), . "".

0

. , , . :

SELECT AVG(Points) AS user_average, 
STDDEV_POP(Points) AS user_stddev
FROM Achievements WHERE Owner = X

- "z-score":

$zscore = ($rating - $user_average) / $user_stddev;

all:

SELECT AVG(Points) AS all_average, 
STDDEV_POP(Points) AS all_stddev 
FROM Achievements

"t-score":

$tscore = $all_average + ($all_stddev * $zscore);

t-score . YMMV.:)

0

, $rating , $tscore - .

, . , , 50 - . , . . , , . , , .

. , . " " , , , , . , -, , , , , . , , , . "" , , .

, , - . - , , , . ( ), , , . http://www.ericdigests.org/2003-4/score-normilization.html, .

0

Source: https://habr.com/ru/post/1712450/


All Articles