外れ値を減らすためにゲーム数が少ないときにELOアルゴリズムを変更する方法


8

私はここで見つけることができる標準のELO実装を開発しましたが、私が遭遇している問題は、私のプレイヤーが「シーズン」で10〜40ゲームしか持てないことです。私の最初のシーズンは既に完了しているので(ゲームのOWNレーティングシステムを開始したばかりです)、ELOレーティングのランクは、または少なくともそれに非常に近いはずです。私の問題は、その基本アルゴリズムを実装した後、かなり離れたいくつかの外れ値があることです。

私は10〜40ゲームしかないので、この状況を改善するために最初に考えたのは、このプロセスの周りにループを実装し、1つのサイクルから最終結果のELOレーティングを取得し、それを次のサイクルの開始点として使用することでした(各個人について)プレーヤー)。次に、前のサイクルから現在のサイクルまでのELO定格の平均または最大偏差がX以下になるまで、これらのサイクルを繰り返します。これは、いくつかの大きな外れ値を解決するのに役立ちました。まだ気に入らない小さな外れ値がまだいくつかあります...

例として、私は7つのディビジョンを持っています。ディビジョン1の場合、ELOに基づいて#1にランク付けされる男は5位にランクされ、ディビジョン2の場合、1位にランクされる男は3位になります。これらの種類の外れ値を除いて、各部門のトップ10程度は実際にはかなり近いです。

アルゴリズムを変更するにはどうすればよいですか?または外れ値を試し、減らすためにどのようなアプローチを取ることができますか?

サイドノート#1。ディビジョン1の場合、#1であるはずの男が最終的に#5になりますが、実際には、他のレーティングシステムによってシーズン全体で#1にランクされています。その計算方法がわからないだけです(計算されない可能性があり、それに基づいている可能性があります。xプレーヤーがこれでいいので、彼は1位にランクされています)。

サイドノート#2。アルゴリズムを変更しました。私は、勝利/損失がどれほど支配的であるかによって、勝利/損失を「重み付け」したいと考えています。プレーヤーAがプレーヤーBに20対0で勝った場合、特にそれらのレーティングが非常に近い場合に、加重を大きくしますが、レーティングがさらに離れている場合(aがすでにBよりも大きい場合)、ELOの変更はそもそも彼らが最初に勝つと予想されていたからです。したがって、私がしたことは、元の式が使用するようにk係数/値400を使用する代わりに、に変更しました100 + ((score difference) * 2)。したがって、最大k係数は140になります(20-0が最大の勝利で、2を掛けて100に加算されます)。

ウェイト結果を含め、それらの外れ値の一部を修正するために、他にどのような戦略を実装できますか?


目の前にデータがない場合(すべてが家にある)、シナリオをまとめてみます...

ディビジョンI

#1 Elo Rating of 2250
#2 Elo Rating of 2200
#3 Elo rating of 2190
#4 Elo rating of 2175
#5 Elo rating of 2170

トーナメントで勝つために#5の男が#1を打ち負かしただけで、彼の "作品群"は#1の男よりも完全であるように見えます(別名彼は対戦し、#1の男よりも強い対戦相手を打ちました)。多分それは、「加重」kファクターがこれを捨てているためです。#5の勝ちが2〜5ポイントしかなかったためです。一方、#1勝はより高いマージン、たとえば5〜10ポイントでした。

たぶん、計算された結果を実際の結果に近づけることができるかどうかを確認するために、「重み付けされた」k係数をいじる必要があるだけかもしれません...


外れ値を特定して破棄した場合はどうなりますか?
ロバートハーベイ、

@RobertHarveyプロセスを完全に自動化したいのですが...あなたの提案を正しく理解しているなら。
2014

@RobertHarveyと私はちょうど彼が合法的にランク付けされています、プレイヤーを「捨てる」ことができず、#1(最初の例の男)であるべきである
ganders

1
それで彼は外れ値ではありません...彼はですか?メタであなたの質問を見ました。FWIW、この質問の問題は、あなたが話していることを視覚化するのが難しいということです。多分あなたは私たちが見るためにいくつかの表形式のデータを投稿できますか?
ロバートハーベイ

MSはXboxランキングシステムについて少しリサーチを行っています:research.microsoft.com/en-us/projects/trueskill。おそらくそれのいくつかはあなたのゲームに適用することができます。
Patrick

回答:


1

外れ値のシナリオを試して解決するために私がやったことは次のとおりです。私のシーズン全体を再シミュレーションし、各プレーヤーがレギュラーシーズンの終わりとシーズン終了トーナメントでランク付けされる必要があるものを知っています。もちろん、シーズン終盤のトーナメントに「混乱」があると、正確には表れませんが、これがすべてのプレイヤーに最も効果的な結果になったと感じています。

private double GetKFactor(double winnerRating, double scoreDifference, int winningPlayerMatchCount)
    {
        var kFactor = 32.0;

        if (winningPlayerMatchCount >= 11 && winningPlayerMatchCount < 21)
            kFactor = kFactor * .75;
        else if (winningPlayerMatchCount < 11)
            kFactor = kFactor * .5;

        return kFactor + scoreDifference;
    }

1
自分の質問に答えて、良いマークを付けるための+1。これで「未回答」リストから除外され、助けが必要な他の人に進むことができます。
Guy Schalnat 14年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.