[PYTHON] Prévision du cours des actions à l'aide de l'apprentissage automatique (scikit-learn)

Depuis que j'ai étudié scikit-learn, je vais l'utiliser pour prédire le cours de l'action. Dernière fois, Dernière fois Je veux comparer avec TensorFlow En effet, il est difficile d'obtenir et de traiter les données utilisées pour l'entrée. S'il vous plaît, pardonnez-moi. Au fait, il y a déjà des gens qui font la même chose. De plus, comme j'ai seulement étudié scikit-learn (et la théorie qui l'entoure) pendant environ une semaine, je pense qu'il y a probablement des erreurs. Nous attendons vos suggestions.

Qu'est-ce que scikit-learn?

Il semble lire "Sykit Learn". Une bibliothèque pour l'apprentissage automatique. Il est équipé de divers algorithmes et est relativement facile à utiliser. TensorFlow peut faire de même, mais scicit-learn est plus facile à écrire.

mérite

Démérite

Effet

Choses à faire

"Utilisez plusieurs jours d'indices boursiers mondiaux (Dow, Nikkei Average, DAX, etc.) pour prédire si le Nikkei Average augmentera ou baissera le lendemain (2 choix)" (comme la dernière fois)

environnement

scikit-learn 0.17.1 Python 2.7 Windows 7

la mise en oeuvre

Préparation

Les données précédentes seront utilisées telles quelles. (Les indices boursiers de Nikkei, Dow, Hong Kong Hansen et l'Allemagne téléchargés à partir du site Quandl sont combinés en un seul sous forme de données textuelles)

étiquette

Dans le cas de scikit-learn, l'étiquette semble spécifier une valeur numérique avec int au lieu d'un format d'indicateur (comme [0,0,1]), donc il a été mis à 0 pour la hausse et 1 pour la baisse.

if array_base[i][3] > (array_base[i+1][3]):
    y_flg_array.append(0)
    up += 1
else:
    y_flg_array.append(1)
    down += 1

Comme un échantillon complet Monter: 50,5% En baisse: 49,5% est devenu.

Des données d'entrée

Sur la base des points d'amélioration précédents, au lieu de mettre le cours de l'action tel quel, nous donnons une liste de "combien (%) il a augmenté ou diminué par rapport à la veille".

tmp_array = []
for j in xrange(i+1, i + data_num + 1):
    for k in range(16):
        tmp_array.append((array_base[j][k] - array_base[j+1][k]) / array_base[j][k] * 100)
x_array.append(tmp_array)

Algorithme de classification

Divers algorithmes peuvent être utilisés avec scikit-learn, mais honnêtement, je ne sais pas lequel est le meilleur, alors j'ai décidé d'essayer environ trois de ces algorithmes. Cette fois, nous allons essayer trois méthodes: la descente de gradient stochastique, l'arbre de décision et la machine vectorielle de support. Au fait, je n'ai aucune idée en quoi ces trois sont différents. (^ _ ^;)

# SGDClassifier
clf = linear_model.SGDClassifier()
testClf(clf, x_train_array, y_flg_train_array, x_test_array, y_flg_test_array)

# Decision Tree
clf = tree.DecisionTreeClassifier()
testClf(clf, x_train_array, y_flg_train_array, x_test_array, y_flg_test_array)

# SVM
clf = svm.SVC()
testClf(clf, x_train_array, y_flg_train_array, x_test_array, y_flg_test_array)

Formation, évaluation

J'ai essayé de m'entraîner et d'évaluer dans la fonction. L'entraînement est très facile car il n'exécute que fit () et l'évaluation exécute score ().

def testClf(clf, x_train_array, y_flg_train_array, x_test_array, y_flg_test_array):

    print clf
    clf.fit(x_train_array, y_flg_train_array)
    print clf.score(x_test_array, y_flg_test_array)

Résultat-Partie 1-

SGDClassifier : 0.56591099916
DecisionTreeClassifier : 0.544080604534
SVM : 0.612090680101

Lors de l'utilisation de TensorFlow, le taux de réponse correct était d'environ 63%, il semble donc que certains résultats aient été obtenus, mais pas tellement. Le traitement est lourd uniquement pour SVM.

Réglage des paramètres

Dans ce qui précède, lors de la création d'une instance de chaque classificateur, rien n'a été spécifié dans l'argument, mais il semble que la précision puisse être améliorée en ajustant les paramètres. En outre, il existe également une fonction qui recherche ce paramètre de manière circulaire. Pratique. Essayez-le avec le SVM qui a donné les meilleurs résultats.

clf = svm.SVC()
grid = grid_search.GridSearchCV(estimator=clf, param_grid={'kernel': ['rbf','linear','poly','sigmoid']})
grid.fit(x_train_array, y_flg_train_array)
testClf(grid.best_estimator_, x_train_array, y_flg_train_array, x_test_array, y_flg_test_array)

Dans ce qui précède, nous avons essayé le noyau SVM avec quatre, «rbf», «linear», «poly» et «igmoid », et nous nous sommes entraînés et testés à nouveau avec les meilleurs paramètres. (La formation est-elle plus inutile?) En passant, bien sûr, je ne comprends pas vraiment la signification du noyau. (^ _ ^;)

Résultat-Partie 2-

0.638958858102

Les meilleurs résultats ont été obtenus lorsque le noyau était linéaire, avec une légère augmentation de la précision. Environ 64% ... J'ai dépassé l'apprentissage profond ... (je pense que c'est dans la plage d'erreur)

Considération

――Après tout, il est préférable de saisir le taux de variation plutôt que de saisir le cours de l'action tel qu'il est. (Je l'ai essayé avec le cours de l'action tel quel, mais cela n'a pas fonctionné) «L'apprentissage en profondeur est très populaire, mais vous pouvez également faire de votre mieux dans d'autres domaines.

Impressions

C'est amusant de bouger facilement même si vous ne comprenez pas du tout l'algorithme.

Site référencé

Recommended Posts

Prévision du cours des actions à l'aide de l'apprentissage automatique (scikit-learn)
Prévision du cours des actions à l'aide de l'apprentissage automatique (édition de retour)
Prévision du cours des actions à l'aide du Deep Learning (TensorFlow)
Prévision du cours des actions à l'aide du Deep Learning (TensorFlow) - Partie 2
Prévision du cours de l'action par machine learning Numerai Signals
Mémo d'étude Python & Machine Learning ⑦: Prévision du cours de l'action
Prévision du cours de l'action à l'aide du Deep Learning [acquisition de données]
Prévisions du cours des actions par apprentissage automatique Commençons Numerai
[Apprentissage automatique] Classification des sujets LDA à l'aide de scikit-learn
Prédire les variations du cours des actions à l'aide de l'étiquetage métallique et de l'apprentissage automatique en deux étapes
Les prévisions du cours des actions par apprentissage automatique sont si vraies Signaux Numerai
Prévision du cours de l'action 2 Chapitre 2
Prévision du cours de l'action 1 Chapitre 1
Prévision du cours de l'action avec tensorflow
Python: prévision du cours de l'action, partie 2
Prévision du cours de l'action avec LSTM_1
Python: prévision du cours de l'action partie 1
[Python] Mes prévisions de cours de bourse [HFT]
SVM essayant l'apprentissage automatique avec scikit-learn
100 traitement du langage knock-73 (en utilisant scikit-learn): apprentissage
Développement d'applications à l'aide d'Azure Machine Learning
Apprentissage automatique
scikit-learn Comment utiliser le résumé (apprentissage automatique)
[Apprentissage automatique] Prédiction FX à l'aide de l'arbre de décision
[Apprentissage automatique] Apprentissage supervisé utilisant l'estimation de la densité du noyau
Prévision de stock avec TensorFlow (LSTM) ~ Prévision de stock Partie 1 ~
[Apprentissage automatique] Analyse de régression à l'aide de scicit learn
Une histoire sur l'apprentissage automatique simple avec TensorFlow
Astuces de fourniture de données utilisant deque dans l'apprentissage automatique
Essayez de prédire la demande de puissance par l'apprentissage automatique
[Apprentissage automatique] Apprentissage supervisé utilisant l'estimation de la densité du noyau Partie 2
[Apprentissage automatique] Apprentissage supervisé utilisant l'estimation de la densité du noyau Partie 3
Vue d'ensemble des techniques d'apprentissage automatique apprises grâce à scikit-learn
Est-il possible de manger avec les prévisions de cours de bourse par apprentissage automatique [Plan de mise en œuvre]
J'ai essayé d'implémenter diverses méthodes d'apprentissage automatique (modèle de prédiction) en utilisant scicit-learn
[Français] scikit-learn 0.18 Introduction de l'apprentissage automatique par le didacticiel scikit-learn
Estimation raisonnable du prix de Mercari par apprentissage automatique
[Memo] Apprentissage automatique
Classification de l'apprentissage automatique
Essayez d'utiliser le bloc-notes Jupyter à partir d'Azure Machine Learning
Un mémorandum de méthode souvent utilisé dans l'apprentissage automatique utilisant scikit-learn (pour les débutants)
Exemple d'apprentissage automatique
[Apprentissage automatique] Extraire des mots similaires mécaniquement en utilisant WordNet
Raisonnement causal utilisant l'apprentissage automatique (organisation des méthodes de raisonnement causal)
Ce que j'ai appris sur l'IA / l'apprentissage automatique avec Python (1)
Prévision de stock avec TensorFlow (perceptron multicouche: MLP) ~ Prévision de stock 2 ~
Créez des projets d'apprentissage automatique à une vitesse explosive à l'aide de modèles
[Apprentissage automatique] Comprendre la SVM à la fois à partir de scikit-learn et des mathématiques
Apprentissage automatique facile avec scikit-learn et flask ✕ Application Web
Python Scikit-learn Analyse de régression linéaire Analyse de régression simple non linéaire Apprentissage automatique
Ce que j'ai appris sur l'IA / l'apprentissage automatique avec Python (3)
Apprentissage automatique avec des images de catégorie Caffe -1 à l'aide du modèle de référence
Tech-Circle Commençons le développement d'applications à l'aide de l'apprentissage automatique (auto-apprentissage)
[Apprentissage automatique] Essayez de détecter des objets à l'aide de la recherche sélective
[Apprentissage automatique] Classification de texte à l'aide du modèle Transformer (classificateur basé sur l'attention)
L'apprentissage automatique pratique avec Scikit-Learn et TensorFlow-TensorFlow a abandonné -
Mémo de construction d'environnement d'apprentissage automatique par Python
Ce que j'ai appris sur l'IA / l'apprentissage automatique avec Python (2)
J'ai essayé de compresser l'image en utilisant l'apprentissage automatique