[PYTHON] J'ai essayé de prédire le match de la J League (analyse des données)

Aperçu

J'ai essayé de baser les prévisions du match de la J League sur la base des données passées 55% de chances de prédire les victoires, les pertes et les nuls (Données d'apprentissage 2573 jeux, données de test 200 jeux)

Avertissement

Nous ne sommes pas responsables de l'utilisation du contenu de l'article

Déclencheur et efforts passés

Google a prédit des victoires et des défaites en Coupe du monde vers 2014 "Lorsque Google analyse le Big Data et prédit la Coupe du Monde, il atteindra les quarts de finale pendant tous les matchs. Cela finira-t-il? " En regardant cet article, j'ai décidé de faire une prédiction pour la J League. Ce qui m'intéressait dans les efforts de Google Des informations sur toutes les positions des joueurs et du ballon peuvent être obtenues à partir des données de football appelées OPTA. (J'ai recherché des données, mais il me semble que c'est trop pour moi de les obtenir individuellement) Par exemple, simuler l'ensemble du jeu avec la méthode Monte Carlo.

Collecte de données

Il existe de nombreux sites sur la J League. J'ai recueilli les données tranquillement afin de ne causer aucun inconvénient.


Données d'entrée

Statut du match
・ ・ ・ Météo, nombre de spectateurs, jours, jours fériés, heure du coup d'envoi, etc.

L'historique des 6 derniers matchs des équipes à domicile et à l'extérieur
・ ・ ・ De nombreuses variables telles que le nombre de tirs, le nombre de passes et le taux de réussite des passes sont entrées ainsi que le score par match. Entrée en se connectant tel quel sans calcul de moyenne.

Données de tous les joueurs participant à l'alignement de départ
・ ・ ・ Position, taille, poids, lieu de naissance, score des derniers matchs de chaque individu

(Le nombre total de variables d'apprentissage est de 754)


Données de réponse correctes

Étiqueté 0,1,2 pour gagner, perdre ou match nul

Traitement de données, moulage

Cette fois, j'ai utilisé pour la première fois beautifulsoup pour extraire des données de html. C'est trop pratique. J'aurais dû l'utiliser plus tôt. Vous devez également normaliser de 0 à 1. Vous pouvez facilement le faire en environ 2 lignes en utilisant np.max.

Apprentissage du code source

Code d'apprentissage scicit assez ordinaire

import numpy as np
from sklearn.metrics import accuracy_score
from sklearn.model_selection import GridSearchCV
from sklearn.metrics import classification_report
from sklearn.svm import SVC

all_input_np = np.load('input.npy')
all_label_np = np.load('label.npy')
train_input = all_input_np[:-200]
test_input = all_input_np[-200:]
train_result = all_label_np[:-200]
test_result = all_label_np[-200:]

tuned_parameters = [{'kernel': ['linear'], 'C': [1, 10, 100, 1000]}]

clf = GridSearchCV(SVC(), tuned_parameters, n_jobs=4, scoring="accuracy")

print(">>>START")
clf.fit(train_input, train_result)
print("Best parameters set found on development set: %s" % clf.best_params_)

print("Grid scores on development set:")
means = clf.cv_results_['mean_test_score']
stds = clf.cv_results_['std_test_score']
for mean, std, params in zip(means, stds, clf.cv_results_['params']):
        print("%0.3f (+/-%0.03f) for %r" % (mean, std * 2, params))

print("The scores are computed on the full evaluation set.")
y_true, y_pred = test_result, clf.predict(test_input)
print(classification_report(y_true, y_pred))
print(accuracy_score(y_true, y_pred))

résultat

             precision    recall  f1-score   support

        0.0       0.61      0.56      0.59        87
        1.0       0.51      0.78      0.62        78
        2.0       0.00      0.00      0.00        35
avg / total       0.46      0.55      0.50       200

0.55

55% est le taux de réponse correct Quant à l'étiquette, 0 perd, 1 gagne et 2 nuls.

Voici une ingéniosité. Il semble qu'environ 20% de tous les matchs de football sont tirés au sort Par conséquent, afin d'augmenter le taux global de réponses correctes, l'apprentissage prédit que le tirage au sort gagnera. J'ai essayé de ne prédire que les victoires et les pertes. (À l'inverse, le tirage au sort est imprévisible)

Résultats utilisant un réseau de neurones

Le taux de réponse correcte était d'environ 50% Perceptron multicouche (3 couches, elu, taux d'abandon 0,5)

Impressions

Après tout, il est difficile d'accéder uniquement à des données limitées. Avec les données collectées cette fois, je pense que même si le modèle mathématique est porté à la limite, le taux de réponse correcte est au plus d'environ 60%. Je pense que c'est une bonne idée pour toute une simulation de jeu comme Google l'a fait Il est sceptique que le football ne puisse être reproduit que par le taux de réussite et d'autres chiffres. Après tout, en reliant les données d'une image du jeu, les humains ne l'ont pas remarqué, ou Un point est qu'il peut être possible d'effectuer un traitement d'analyse que les humains ne peuvent pas supporter. L'autre est de savoir si nous pouvons visualiser le processus d'analyse des données Je pense que nous pouvons voir la direction de l'amélioration du modèle et des données d'entrée.

Recommended Posts

J'ai essayé de prédire le match de la J League (analyse des données)
J'ai essayé de sauvegarder les données avec discorde
J'ai essayé de déplacer le ballon
J'ai essayé d'estimer la section.
J'ai essayé d'analyser les données scRNA-seq en utilisant l'analyse des données topologiques (TDA)
[Première science des données ⑤] J'ai essayé d'aider mon ami à trouver la première propriété par analyse de données
J'ai essayé de résumer la commande umask
J'ai essayé l'analyse factorielle avec des données Titanic!
J'ai essayé de résumer la modélisation graphique.
Analyse des émotions avec traitement du langage naturel! J'ai essayé de prédire l'évaluation à partir du texte de l'avis
J'ai essayé d'estimer le rapport de circonférence π de manière probabiliste
J'ai essayé de toucher l'API COTOHA
J'ai fait apprendre à RNN la vague de péché et j'ai essayé de prédire
J'ai essayé l'analyse de données IRMf avec python (Introduction au décodage des informations cérébrales)
J'ai essayé d'effectuer une analyse de cluster de clients à l'aide des données d'achat
J'ai essayé l'histoire courante de l'utilisation du Deep Learning pour prédire la moyenne Nikkei
J'ai essayé de prédire le comportement du nouveau virus corona avec le modèle SEIR.
J'ai essayé de prédire l'année prochaine avec l'IA
J'ai essayé Web Scraping pour analyser les paroles.
J'ai essayé l'analyse par grappes de la carte météo
J'ai essayé d'optimiser le séchage du linge
J'ai essayé l'analyse du SRAS avant le virus corona
J'ai essayé d'analyser les principaux composants avec les données du Titanic!
J'ai essayé d'obtenir des données CloudWatch avec Python
J'ai essayé de corriger la forme trapézoïdale de l'image
[Analyse des données] Dois-je acheter le drapeau Harumi?
J'ai essayé de prédire la survie du Titanic avec PyCaret
Qiita Job J'ai essayé d'analyser le travail
LeetCode j'ai essayé de résumer les plus simples
J'ai essayé de mettre en œuvre le problème du voyageur de commerce
J'ai essayé de vectoriser les paroles de Hinatazaka 46!
J'ai essayé de déboguer.
J'ai essayé de prédire la détérioration de la batterie lithium-ion en utilisant le SDK Qore
J'ai essayé de prédire les chevaux qui seront dans le top 3 avec LightGBM
J'ai essayé de prédire la présence ou l'absence de neige par apprentissage automatique.
J'ai essayé de prédire l'évolution de la quantité de neige pendant 2 ans par apprentissage automatique
J'ai essayé de traiter et de transformer l'image et d'élargir les données pour l'apprentissage automatique
J'ai essayé de récupérer les données de l'ordinateur portable en le démarrant sur Ubuntu
J'ai essayé de représenter graphiquement les packages installés en Python
J'ai essayé de détecter l'iris à partir de l'image de la caméra
J'ai essayé de résumer la forme de base de GPLVM
J'ai essayé de toucher un fichier CSV avec Python
J'ai essayé de résoudre Soma Cube avec python
J'ai essayé de regrouper les données ECG en utilisant la méthode K-Shape
J'ai essayé d'approcher la fonction sin en utilisant le chainer
J'ai essayé de mettre Pytest dans la bataille réelle
[Python] J'ai essayé de représenter graphiquement le top 10 des ombres à paupières
J'ai essayé d'utiliser l'API de Sakenowa Data Project
J'ai essayé de visualiser les informations spacha de VTuber
J'ai essayé d'effacer la partie négative de Meros
J'ai essayé de résoudre le problème avec Python Vol.1
J'ai essayé de simuler la méthode de calcul de la moyenne des coûts en dollars
J'ai essayé de refaire la factorisation matricielle non négative (NMF)
J'ai essayé d'identifier la langue en utilisant CNN + Melspectogram