I am trying to figure our a way to calculate rank. Right now it simply takes ratio of wins / losses of each individual entry, so e.g. one won 99 times out of a 100, it has 99% winning rank. BUT if an entry won 1 out of total 1 votes, it will have a 100% winning rank, but definitely it can't be higher that of the one that won 99 times. What would be a better way to do this?
5 に答える
次のようなものを試してください。
votes = wins + losses
score = votes * ( wins / votes )
そうすれば、50%が勝ったものが、100%が勝ったものよりも、100万票が先行しますが、1票しかありません。
年齢(この例では日数)に基づいて追加の重みを追加することもできます。
if age < 5:
score = score + ((highest real score on site) * ((5 - age) / 5)
これにより、最初のページの上部に新しいエントリが配置され、次の5日間でリストがゆっくりと下に移動します(年齢は整数ではなく小数であると想定しています)。5日が経過すると、前の擬似コードのスコアのみに基づいてリストに追加されます。
作りたい複雑さに応じて、チェスが使用する Elo システム (または類似のもの) が必要になる場合があります: http://en.wikipedia.org/wiki/Elo_rating_system
たとえ 1/1 の試合に勝ったとしても、そのレーティングは、たとえば、タフな対戦相手に対して何百回も勝ったり負けたりした人よりもはるかに低くなります。
勝敗比ではなく、常にポイントシステムを使用できます。勝つと常にポイントが与えられ、負けた場合はポイントを削除するか、負けた場合はポイントをまったく与えないか、負けた場合は与えるポイントを減らすかのいずれかで遊ぶことができます。それはすべて、人々をどのようにランク付けしたいかによって異なります. たとえば、参加しない人よりも参加する人を優先したい場合は、勝った場合は 2 ポイント、負けた場合は 1 ポイントを与えることができます (これは、100 ゲームをプレイする人と対戦する人の例で話していたことのように聞こえます)。 1ゲーム)。NHL はランキングに同様の手法を使用します (勝利の場合は 2 ポイント、延長戦の敗北の場合は 1 ポイント、通常の敗北の場合は 0 ポイント)。これにより、柔軟性が向上する可能性があります。
負けたエントリーが元々はるかに高いランク、たとえばはるかに強い競争相手だった場合、勝ったエントリーにランクを追加することは理にかなっていますか?
質問を正しく理解していれば、投票数が多い人ほどランクが高くなります。