Predicción de resultados de futbolín
-
06-07-2019 - |
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?
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:
- la posición que jugaron
- 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.