math - numero - ¿Cómo puedo calcular una puntuación general justa en función de una cantidad variable de partidos?
numero pi en wxmaxima (12)
Tengo un juego en el que puedes puntuar de -40 a +40 en cada partida. Los usuarios pueden jugar cualquier cantidad de partidos. Quiero calcular una puntuación total que implícitamente tenga en cuenta la cantidad de partidos jugados.
Calcular solo el promedio no es justo. Por ejemplo, si Peter juega cuatro juegos y obtiene 40 puntos en cada partido, tendrá el mismo puntaje total que Janne, quien jugó solo un partido con 40 puntos.
Sumar los puntajes de los partidos tampoco es justo. Peter juega 2 juegos (40 puntos en cada partido), puntaje total de 80. Janne juega 8 juegos (10 puntos en cada partido), puntaje total de 80.
¿Hay una manera (simple) y justa de calcular la puntuación total? He leído sobre el sistema Elo y Glicko para clasificaciones de ajedrez, pero ambos se basan en el historial de clasificación de un jugador y en la clasificación de los oponentes.
Depende de lo que quieras acentuar, pero creo que esto es simple y efectivo:
puntaje promedio + juegos jugados
Podría ponderar un poco las variables (p. Ej., 2 * juegos jugados, si quiere tener más impacto), pero la relación básica parece razonable.
En su primer ejemplo, Peter tendría 44 y Jane tendría 40, pero si Peter empezaba a perder puntos, Jane podría ponerse al día.
Otro enfoque sería usar estadísticas bayesianas. Modele la probabilidad de que cada equipo gane como distribución beta y calcule la probabilidad de que una muestra de una distribución sea más grande que una muestra de la otra. Este enfoque se usa para evaluar medicamentos contra el cáncer. Tiene en cuenta no solo qué medicamento tiene una mejor tasa de respuesta sino también qué medicamento tiene más datos. Comparar dos jugadores o dos equipos es exactamente análogo.
Esto puede sonar más complicado de lo que es, pero hay software libre para hacer estos cálculos, y en algunos casos los cálculos son fáciles de hacer a mano.
Vea una introducción a desigualdades aleatorias y detalles sobre las desigualdades de distribución beta .
Creo que no hay una buena manera de crear un puntaje como este en un solo número.
Sugeriría calcular el éxito promedio e incluir la cantidad de juegos. Por ejemplo
- Peter marca 40/2 (promedio de 40 puntos en 2 juegos)
- Janne marca 10/8 (promedio de 10 puntos en 8 juegos)
Puede ver rápidamente si el segundo número es más grande, el primer número es más preciso.
De lo contrario, use ELO, pero solo es exacto si cada jugador juega al menos 10 partidos.
Otro punto de partida podría ser el artículo de wikipedia sobre el sistema de clasificación de ajedrez ELO
Podría establecer que el puntaje sea el promedio de los mejores 10 juegos de los últimos 30 jugadores (o algunos otros números, tal vez solo los últimos 10 que le convengan).
Los jugadores que aún no han jugado 10 juegos pueden tomar el promedio de los juegos que han jugado, pero luego ponderarlo hacia 0, para compensar el hecho de que el promedio de n <10 tiene una desviación estándar más alta que el promedio de 10. No estoy seguro de cuál es el factor de escala para cada n, pero si tiene algunos datos pasados para ver, puede averiguar cuán variables son las puntuaciones del jugador típico y trabajar a partir de eso.
O calcula cuál es el puntaje promedio global por juego (quizás 0), y agrega (10-n) puntajes falsos de esa cantidad al calcular el puntaje de un jugador con menos de 10 juegos.
Podrías verificar las carreras de victorias y dar puntos de bonificación a victorias consecutivas (+5, +10, +15 ...), así que (-10, + 10, + 10, + 10, -10, + 10) darían ( -10, + 10, + 15, + 20, -10, + 10). También puedes hacer esto sin preocuparte por las carreras, esto daría (-10, + 10, + 15, + 20, -10, + 25).
Otra posibilidad sería establecer el valor de bonificación en 0 al comienzo y disminuirlo en 5 si el jugador pierde, e incrementarlo en 5 si el jugador gana.
Puedes mirar en Microsofts TruSkill , lo leí hace unos meses y honestamente me he olvidado de la mayoría de los detalles, así que no estoy seguro de que sea súper apropiado, pero podría ser una buena inspiración.
Depende de cuánto quieras jugar con los juegos comparados con los puntajes. Podrías definir una función que devuelva el peso de un juego jugado: una fracción pequeña para un solo juego y 1 para muchos juegos (por ejemplo, 1 - 1 / (2 * #Games)) y multiplicarlo por el puntaje acumulado.
Haz la fórmula no lineal con respecto a la cantidad de juegos.
Deje que G sea la cantidad de juegos, y S la suma de todos los puntajes de los juegos, luego, TotalScore = G ^ 2 * S
Juega con él hasta que encuentres algo que parezca lógico.
Construye un gráfico, con cada persona representada por un vértice. Cada borde en el gráfico representa una serie de coincidencias entre dos jugadores. Ahora aplique algún tipo de algoritmo de rango de página para darle un conjunto de pesos sobre los vértices. Eso debería darle su clasificación.
Ahora la parte difícil es elegir los pesos de borde utilizados en el pagerank. Para el borde dirigido (u, v), del vértice u al vértice v, yo asignaría personalmente un peso igual al número de puntos que el jugador u ganó contra el jugador v.
Puede agregar vértices a su gráfico cada vez, pero recuerde que el rango de la página favorece los vértices más antiguos (es decir, los que han jugado más juegos). De todos modos para una referencia:
http://dbpubs.stanford.edu:8090/pub/1999-66
Una idea alternativa es utilizar clasificaciones ELO, y tratar de arrancar asignando a todos el mismo puntaje para comenzar, y luego propagar un puntaje hacia adelante. Sin embargo, no puedo decir que esto sea completamente satisfactorio.
Aquí hay un enfoque de principios:
http://www.evanmiller.org/how-not-to-sort-by-average-rating.html
Recomiendo que la puntuación del juego sea el extremo inferior de un intervalo de confianza del 95%. En el límite, a medida que juegas muchos juegos, tu puntaje de juego se acerca a tu puntaje promedio, aunque siempre es estrictamente menor. Es como usar puntaje promedio pero ser apropiadamente escéptico con las personas que solo jugaron unos pocos juegos y que tal vez tuvieron suerte.
Dicho de otra manera, es una estimación pesimista de cuál será el promedio real después de que se hayan jugado suficientes juegos.
Cómo calcular el intervalo de confianza del 95% sin almacenar toda la lista de puntajes: calcular un intervalo de confianza medio sin almacenar todos los puntos de datos
Alternativamente, si realiza un seguimiento de la cantidad de juegos jugados, la suma de los puntajes de la persona y la suma de los cuadrados de sus puntajes, puede calcular el error estándar de la siguiente manera:
SE = sqrt((ss - s^2/n) / (n-1) / n)
En lugar de molestar con el IC del 95%, puedes dejar que el puntaje del juego sea:
s/n - SE
Tenga en cuenta que lo anterior es infinito negativo cuando solo se ha jugado un juego. Eso implica que le darías a alguien que haya jugado solo un juego el puntaje más bajo posible en su Puntuación del juego.
Otra idea es mostrar explícitamente el intervalo de confianza al clasificar personas (ordenadas por el extremo inferior). Entonces las personas jugarían más para reducir tanto su CI como para aumentar su promedio.
Por último, podría tener sentido ponderar más los juegos más recientes para que un juego malo aislado decaiga más rápidamente. La forma de hacerlo sería escoger un factor de descuento d
mayor que 1 y darle al i
th juego un peso de d^(i-1)
. (Aunque entonces ya no estoy seguro de cómo aplicar la idea del intervalo de confianza).
PD: amplié esta idea aquí: ¿cómo calcular la media según el número de votos / puntajes / muestras / etc.?