Cómo modificar el algoritmo ELO cuando el número de juegos es bajo para reducir los valores atípicos

8

He desarrollado la implementación estándar de ELO que se puede encontrar aquí , pero el problema con el que me encuentro es que mis jugadores solo tendrán entre 10 y 40 juegos en una "temporada". Como mi primera temporada ya se completó (recién estoy comenzando mi propio sistema de clasificación para mi juego), sé cuál debería ser el rango de las clasificaciones ELO de mis jugadores, o al menos muy cerca de eso. Mi problema es que, después de implementar ese algoritmo base, tengo algunos valores atípicos que están muy lejos.

Como solo tengo de 10 a 40 juegos, mi primer pensamiento para remediar esta situación fue implementar un ciclo alrededor de este proceso, tomando el resultado final de la calificación ELO de un ciclo, y usarlo como punto de partida para el siguiente ciclo (para cada individuo jugador). Luego, repita estos ciclos hasta que la desviación promedio o máxima de las clasificaciones ELO de los ciclos anteriores a los actuales no sea mayor que X. Esto ayudó a resolver algunos de los grandes valores atípicos. Todavía hay algunos valores atípicos más pequeños con los que todavía no me siento cómodo ...

Como ejemplo, tengo 7 divisiones, para la división 1, el tipo que debería estar en el puesto n. ° 1 en función de su ELO, termina en el quinto lugar, para la división 2, el hombre que debe estar en el puesto n. ° 1 es el tercero. Los 10 primeros para cada división están bastante cerca, excepto por este tipo de valores atípicos.

¿Cómo puedo modificar mi algoritmo, o qué enfoque puedo tomar para tratar de reducir los valores atípicos?

Nota al margen # 1. Para la división 1, el tipo que debería ser el # 1, que termina en el # 5, en realidad está clasificado como el # 1 para toda la temporada por el otro sistema de clasificación. Simplemente no sé cómo se calcula ese (y puede que no se calcule, podría basarse en, sé que x jugador es tan bueno, por lo que está en el puesto n. ° 1).

Nota al margen # 2. He hecho una modificación al algoritmo. Quiero "ponderar" las victorias / derrotas por lo dominantes que fueron. Si el jugador A vence al jugador B 20-0, quiero que tenga más peso, especialmente si sus clasificaciones son muy cercanas, pero si sus clasificaciones están más separadas (donde a ya es mayor que B), entonces el cambio de ELO no debería ser eso de todos modos ya que se esperaba que ganaran en primer lugar. Entonces, lo que hice fue en lugar de usar el factor k / valor de 400 como lo usa la fórmula original, lo cambié para que sea 100 + ((score difference) * 2). Entonces, el factor k máximo sería 140 (20-0 es la mayor victoria, multiplique por 2, agregue a 100).

¿Qué otra estrategia podría implementar para incluir resultados de peso, así como corregir algunos de esos valores atípicos?


Sin tener los datos frente a mí (todo está en casa), intentaré resumir el escenario ...

División 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

Donde el hombre # 5 acaba de vencer al # 1 para ganar el torneo, y su "cuerpo de trabajo" parece más completo que el hombre # 1 (también conocido como el que jugó y venció a oponentes más fuertes que el hombre # 1). Tal vez sea porque el factor k "ponderado" está descartando esto porque el # 5 tuvo muchas victorias con solo 2 a 5 puntos, donde las victorias # 1 fueron por un margen más alto, digamos de 5 a 10 puntos.

Tal vez solo necesito jugar con mi factor k "ponderado" para ver si puedo obtener mis resultados calculados más cercanos a los resultados reales ...

gaders
fuente
¿Qué pasa si solo identificas y expulsas a los atípicos?
Robert Harvey
@RobertHarvey Me gustaría tener el proceso completamente automatizado ... si entiendo su sugerencia correctamente.
agrupa el
@RobertHarvey y yo no podemos simplemente "tirar" a un jugador, él está legítimamente clasificado y DEBERÍA ser el # 1 (el primer chico de ejemplo)
reúne el
1
Entonces no es un caso atípico ... ¿verdad? Vi tu pregunta sobre Meta. FWIW, el problema con esta pregunta es que es difícil visualizar de lo que estás hablando. ¿Quizás podría publicar algunos datos tabulares para que los veamos?
Robert Harvey
MS publicó un poco en su sistema de clasificación Xbox: research.microsoft.com/en-us/projects/trueskill . Probablemente parte de esto se pueda aplicar a tu juego.
Patrick

Respuestas:

1

Esto es lo que he hecho para tratar de resolver el escenario de los valores atípicos. Re-simulando toda mi temporada, sabiendo lo que DEBE clasificarse cada jugador al final de la temporada regular y el torneo que finaliza la temporada. Obviamente cuando hay "disgustos" en el torneo de final de temporada, no saldrá exacto, pero creo que esto me dio los resultados más cercanos que funcionan para TODOS los jugadores.

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;
    }
gaders
fuente
1
+1 por responder tu propia pregunta y marcarla como buena. Eso lo saca de la lista de "sin respuesta", lo que me permite pasar a otra persona que necesita ayuda.
Guy Schalnat