Pregunta

En nuestra oficina, regularmente disfrutamos de algunas rondas de futbolín / futbolín después del trabajo. He reunido un pequeño programa java que genera alineaciones aleatorias 2vs2 de los jugadores disponibles y almacena los resultados del partido en una base de datos después.

La predicción actual del resultado utiliza un promedio simple de todos los resultados de partidos anteriores de los 4 jugadores involucrados. Esto da una estimación muy aproximada, pero me gustaría reemplazarlo con algo más sofisticado, teniendo en cuenta cosas como:

  • los jugadores pueden ser buenos jugando como atacantes pero malos como defensores (o viceversa)
  • a los jugadores les va bien contra un oponente específico / malo contra otros
  • algunos equipos trabajan bien juntos, otros no
  • las habilidades cambian con el tiempo

¿Cuál sería el mejor algoritmo para predecir el resultado del juego con la mayor precisión posible?

Alguien sugirió usar una red neuronal para esto, lo que suena bastante interesante ... pero no tengo suficiente conocimiento sobre el tema para decir si eso podría funcionar, y también sospecho que podría tomar demasiados juegos para estar razonablemente entrenado .

EDITAR:
Tuve que tomar un descanso más largo de esto debido a algunos plazos del proyecto. Para hacer la pregunta más específica:

Dada la siguiente tabla mysql que contiene todos los partidos jugados hasta ahora:

table match_result

match_id      int pk
match_start   datetime
duration      int (match length in seconds)
blue_defense  int fk to table player
blue_attack   int fk to table player
red_defense   int fk to table player
red_attack    int fk to table player
score_blue    int
score_red     int

¿Cómo escribiría una función predictResult (blueDef, blueAtk, redDef, redAtk) {...}
para estimar el resultado lo más cerca posible, ejecutando cualquier sql, haciendo cálculos o usando bibliotecas externas?

¿Fue útil?

Solución

Usa el algoritmo TrueSkill, es muy bueno en esto. Lo he implementado para futbolín y ajedrez y funciona muy bien. Los compañeros de trabajo me han dicho que es casi demasiado bueno en esto.

Para obtener detalles completos sobre cómo funciona, así como un enlace a mi implementación, consulte mi " Calculando tu habilidad " publicación de blog.

Otros consejos

¿Por qué usar una red neuronal? Utilice estadísticas, probablemente la correlación entre cada jugador sería una buena medida.

Solo para comenzar, recopilemos información: Para un jugador determinado necesitamos:

  1. la posición que jugaron
  2. la puntuación final

Un buen atacante acumulará puntos. Un buen defensor evitará que se sumen puntos.

La información real será de un buen atacante que juegue contra un buen defensor.

Intente aplicar el clasificador Naive Bayes.

  

El aprendizaje bayesiano es probabilístico   enfoque que se basa en un   suposición de que las cantidades de   los intereses se rigen por la probabilidad   distribuciones y que óptimo   las decisiones se pueden tomar razonando   acerca de estas probabilidades juntos   con datos observados [Mitchell, T.   (1997), Aprendizaje automático]

La misma distribución exacta de los jugadores puede dar como resultado resultados de partidos diferentes. Si sus datos tienen un patrón, un patrón basado en sus variables, el clasificador Naive Bayes puede producir buenos resultados.

El algoritmo no es muy complejo. Creo que alguien con algún conocimiento de probabilidad puede entender & amp; aplícalo.

En los sistemas de detección de intrusos, se está utilizando para determinar las anomalías de la red, observando varios parámetros de la red. El enfoque bayesiano puede tener mucho éxito en determinados tipos de datos y producir un alto TP & amp; bajas tasas de FP. Pero también puede resultar en altas tasas de FP, dependiendo de sus datos. Sus datos determinarán el mejor enfoque.

Puede usar Weka ( http: //www.cs.waikato. ac.nz/~ml/weka/ ), una biblioteca de software de minería de datos, y pruebe diferentes algoritmos. Contiene el clasificador Naive Bayes. Solo intenta ver.

Una opción sería tratar de adivinar la extensión del punto como algún tipo de modelo lineal . Si tiene más juegos que jugadores, puede hacer un ajuste de puntos de mínimos cuadrados por jugador construyendo una matriz de juegos (+1 para el jugador en un equipo, -1 para el otro, 0 para el espectador) para todos los juegos y un resultado vector para los spreads.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top