Como modificar o algoritmo ELO quando o número de jogos é baixo para reduzir os valores discrepantes

8

Eu desenvolvi a implementação padrão do ELO que pode ser encontrada aqui , mas o problema é que meus jogadores só terão entre 10 e 40 jogos em uma "temporada". Desde que minha primeira temporada já foi concluída (agora estou iniciando meu próprio sistema de classificação para o meu jogo), eu sei qual deve ser a classificação das classificações na ELO dos meus jogadores, ou pelo menos muito próxima disso. Meu problema é que, depois de implementar o algoritmo base, tenho alguns outliers que estão muito distantes.

Como eu tenho apenas 10 a 40 jogos, meu primeiro pensamento para remediar essa situação foi implementar um loop em torno desse processo, retirando a classificação ELO do resultado final de um ciclo e usá-la como ponto de partida para o próximo ciclo (para cada indivíduo jogador). Em seguida, repita esses ciclos até que o desvio médio ou máximo das classificações ELO dos ciclos anteriores aos atuais não seja maior que X. Isso ajudou a resolver alguns dos grandes valores extremos. Ainda existem alguns outliers menores com os quais ainda não me sinto confortável ...

Como exemplo, eu tenho 7 divisões, para a divisão 1, o cara que deve ser classificado como o número 1 com base no seu ELO, acaba sendo classificado em 5º, para a divisão 2, o cara que deve ser classificado como o número 1 é o 3º. Os dez primeiros ou mais para cada divisão são realmente muito próximos, exceto para esses tipos de outliers.

Como posso modificar meu algoritmo ou qual abordagem posso adotar para tentar reduzir os valores discrepantes?

Nota lateral 1. Para a divisão 1, o cara que deve ser o número 1, que acaba em 5, é na verdade o número 1 da temporada inteira pelo outro sistema de classificação. Eu simplesmente não sei como isso é calculado (e pode não ser calculado, pode ser com base, eu sei que x jogador é tão bom, então ele está no 1º lugar).

Nota lateral 2. Eu fiz uma modificação no algoritmo. Eu quero "ponderar" as vitórias / derrotas pelo quão dominantes elas foram. Se o jogador A vencer o jogador B 20-0, quero que o peso seja maior, especialmente se as classificações estiverem muito próximas, mas se as classificações estiverem mais distantes (onde a já é maior que B), a alteração da ELO não deve ser de qualquer maneira, já que se esperava que eles vencessem em primeiro lugar. Então, o que eu fiz foi, em vez de usar o fator / valor k de 400 como a fórmula original usa, eu mudei para ser 100 + ((score difference) * 2). Portanto, o fator k máximo seria 140 (20-0 é a maior vitória, multiplique por 2 e adicione 100).

Que outra estratégia eu poderia implementar para incluir resultados de peso e corrigir alguns desses valores extremos?


Sem ter os dados na minha frente (tudo está em casa), tentarei resumir o cenário ...

Divisão 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

Onde o cara nº 5 venceu o nº 1 para vencer o torneio, e seu "corpo de trabalho" parece mais completo que o nº 1 (ou seja, ele jogou contra e venceu oponentes mais fortes do que o nº 1). Talvez seja porque o fator k "ponderado" está jogando isso fora porque o # 5 teve muitas vitórias que foram de apenas 2 a 5 pontos, onde as vitórias # 1 foram por uma margem mais alta, digamos 5 a 10 pontos.

Talvez eu só precise brincar com meu fator k "ponderado" para ver se consigo obter meus resultados calculados mais próximos dos resultados reais ...

ganders
fonte
E se você apenas identificasse e jogasse fora os outliers?
Robert Harvey
@RobertHarvey Eu gostaria de ter o processo completamente automatizado .... se estou entendendo sua sugestão corretamente.
Ganders
@RobertHarvey e eu não posso simplesmente "jogar fora" um jogador, ele está legitimamente classificado e deve ser # 1 (o primeiro exemplo cara)
ganders
1
Então ele não é um extravagante ... é? Vi sua pergunta no Meta. FWIW, o problema com esta pergunta é que é difícil visualizar do que você está falando. Talvez você possa postar alguns dados tabulares para nós olharmos?
31714 Robert Downey
A MS publicou um pouco em seu sistema de classificação do Xbox: research.microsoft.com/en-us/projects/trueskill . Provavelmente, parte disso pode ser aplicada ao seu jogo.
Patrick Patrick

Respostas:

1

Aqui está o que eu fiz para tentar resolver o cenário dos outliers. Re-simulando minha temporada inteira, sabendo o que cada jogador DEVE ser classificado no final da temporada regular e no torneio de encerramento da temporada. Obviamente, quando houver "transtornos" no torneio de final de temporada, não será exato, mas acho que isso me deu os resultados mais próximos que funcionam para TODOS os jogadores.

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;
    }
ganders
fonte
1
+1 por responder à sua própria pergunta e marcá-la como boa. Isso tira isso da lista "sem resposta", que me permite passar para outra pessoa que precisa de ajuda.
Guy Schalnat