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)
Nous ne sommes pas responsables de l'utilisation du contenu de l'article
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.
Il existe de nombreux sites sur la J League. J'ai recueilli les données tranquillement afin de ne causer aucun inconvénient.
(Le nombre total de variables d'apprentissage est de 754)
Étiqueté 0,1,2 pour gagner, perdre ou match nul
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.
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))
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)
Le taux de réponse correcte était d'environ 50% Perceptron multicouche (3 couches, elu, taux d'abandon 0,5)
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