私のウェブサイト上のユーザーのランク付けシステムを作成したいと思います。ランクは、メンバーの長さ、作成した投稿の数など、さまざまな要因によって決まります。すべてのデータ項目も私が決めた「重み」で割り算されます。実際のユーザー活動 - 私は1つの投稿がメンバーとして1日ほど重要であることは望ましくありません。計量の後、すべての統計値が一緒に加算されます。対数スケールを使用したデータのスケーリングと正規化
次に、いくつかのメンバーが数点の活動しか持たず、何人かのベテランメンバーが何千ものポイントを持っているので、1から20までのランクに割り当てられるように合計を正規化しなければなりません。 Iデータを正規化し、この関数で1-20ランク範囲にそれを縮小することによって、この操作を行います。 ノーマライズ(getUserTotal()、0、getHighestTotalOfAllMembers()、1:
function normalize($userTotal, $minOriginalRange, $maxOriginalRange, $minNewRange, $maxNewRange){
return $minNewRange + ((($maxNewRange - $minNewRange) * ($originalValue - $minOriginalRange))/($maxOriginalRange - $minOriginalRange));
}
これは通常、そのように呼ばれています、20)。
そして私は、結果としてこれを持って、鍵はランクがあり、値はそのランクになるだろうメンバーの数です:
Array
(
[1] => 7418
[2] => 1918
[3] => 289
[4] => 102
[5] => 62
[6] => 28
[7] => 21
[8] => 14
[9] => 1
[10] => 8
[11] => 6
[12] => 5
[13] => 1
[14] => 1
[17] => 1
[20] => 1
)
を、あなたは低く、非常にランク付けされているユーザーのトンがある見ることができるように中位と上位に割り当てられる人はほとんどいません。私は対数尺度を使って割り当てられたランクを計算することでこれを修正したいので、下位層のランクを上がりやすく、高くなるほど難しくなります。そうすれば、より均等に広がるべきであり、より多くのユーザーは中間にランクを持ちます。
しかし、これに近づく方法はわかりませんが、私は対数尺度を使ったことがなく、常にコード内で単純な算術を使用しています。