2008-11-11 40 views
8

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.¿Cómo puedo calcular una puntuación general justa en función de un número variable de partidos?

Calcular solo la media no es justo. Por ejemplo, si Peter juega cuatro juegos y obtiene 40 puntos en cada partido, tendrá la misma puntuación total de que Janne, quien jugó solo un partido con 40 puntos.

Sumar los puntajes de los partidos tampoco es justo. Peter juega 2 partidos (40 puntos en cada partido), la puntuación total 80. Janne juega 8 partidos (10 puntos en cada partido), la puntuación total 80.

¿Hay un (simple) y de manera justa para calcular el ¿puntaje total? He leído sobre el sistema Elo & Glicko para clasificaciones de ajedrez, pero ambos se basan en un historial de clasificación de jugadores y la clasificación de oponentes.

+0

¿Es esto de un libro de texto de matemáticas? –

+0

No es obvio por su descripción si este es un juego para un solo jugador o las personas juegan unas contra otras. – akaihola

Respuesta

3

depende de lo que desea acentuar, pero creo que esto es a la vez simple y eficaz:

promedio + juegos cuenta Jugado

Se podría ponderar las variables de un bit (por ejemplo, 2 * partidos jugados, si quieres 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.

+0

Gracias Phil, esto es exactamente lo que estaba buscando. El mejor puntaje total se le debe dar al jugador que tenga la suma de puntos más alta con el conteo de juegos más bajo. –

+0

Heh. Quizás SO también debería funcionar de esa manera. Respuesta aceptada, pero sin votos.Solo en SO, eh ;-) – philsquared

+0

Siento que esto es demasiado arbitrario, teniendo que sacar esos pesos de la nada. Soy parcial a mi método quizás excesivamente matemático: usar el extremo inferior de un intervalo de confianza medio. Es como una estimación pesimista de cuál será el promedio real después de suficientes juegos. – dreeves

1

Haz que la fórmula no sea lineal con respecto a la cantidad de juegos.

Sea G el número de juegos, y S la suma de todas las puntuaciones de juegos, a continuación, TotalScore = G^2 * S

jugar con él hasta que encuentre algo que parece lógico.

0

Depende de cuánto juegue juegos jugados en comparación 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.

1

Puede verificar las carreras ganadoras y otorgar puntos de bonificación a victorias consecutivas (+5, +10, +15 ...), entonces (-10, + 10, + 10, + 10, -10, + 10) daría (-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.

3

Creo que no hay una buena manera de crear una puntuación como esta en un solo número.

Sugeriría calcular el éxito promedio e incluir el número de juegos. Por ejemplo

  • Peter puntuaciones de 40/2 (un promedio de 40 puntos en 2 juegos)
  • puntuaciones de Janne 10/8 (10 pts promedio en 8 juegos)

puede ver rápidamente si el segundo el 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.

1

Podrías 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 te convengan).

Los jugadores que no han jugado 10 juegos todavía 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 la 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.

3

Puedes consultar 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.

+0

desafortunadamente el enlace está ahora muerto –

1

Otro punto de partida podría ser el artículo de Wikipedia sobre el sistema de clasificación de ajedrez ELO

4

Otro enfoque sería el uso de la estadística bayesiana. 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 free software para hacer estos cálculos, y en algunos casos los cálculos son fáciles de hacer a mano.

Ver an introduction to random inequalities y más detalles sobre beta distribution inequalities.

+0

Esto es realmente inteligente. Pero, ¿cómo convertir esto en una métrica simple, es decir, un número para cada jugador que da su puntaje? – dreeves

2

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 resultados: Computing a mean confidence interval without storing all the data points

Alternativamente, si se mantiene un registro del número de juegos jugados, la suma de las puntuaciones de la persona, y la suma de los cuadrados de sus puntuaciones, se puede calcular el error estándar de la siguiente manera:

SE = sqrt((ss - s^2/n)/(n-1)/n) 

en lugar de molestarse con el IC del 95%, sólo podría dejar que sea la puntuación del juego:

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 los juegos más recientes más para que un juego malo aislado disminuya en importancia más rápidamente. La forma de hacerlo sería elegir un factor de descuento d mayor que 1 y darle al juego i un peso de d^(i-1). (Aunque entonces ya no estoy seguro de cómo aplicar la idea intervalo de confianza.)

PD: Ampliado de esta idea aquí: How to calculate mean based on number of votes/scores/samples/etc?

+0

Eso suena muy útil. Probablemente reemplazaría la parte del "puntaje promedio" de mi propuesta con algo así. Sin embargo, aún conservaría el término de "número de juegos". No me importaría ver la forumula que tenías en mente también. – philsquared

+0

Gracias por publicar la forumula. Creo que eso mejoraría al ponderar aún más el promedio a favor de éxitos repetidos. – philsquared

+0

Para aprovechar la "decadencia de los juegos antiguos" ... básicamente estás describiendo una media móvil ponderada, y de hecho los CI clásicos se rompen allí. Sin embargo, podrías construir un intervalo bayesiano creíble, pero sería un poco complicado. Hacer bayesiano también puede deshacerse del problema de "un juego". –

1

construir 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 las calificaciones de ELO, e intentar iniciarla mediante la asignación a cada uno la misma puntuación para empezar, y luego propagar una puntuación hacia delante. Sin embargo, no puedo decir que esto sea completamente satisfactorio.

Cuestiones relacionadas