[PYTHON] J'ai essayé l'histoire courante de l'utilisation du Deep Learning pour prédire la moyenne Nikkei

Aperçu

Il s'agit de la prévision moyenne Nikkei que font diverses personnes. Cette fois, je l'ai essayé avec Random Forest, MLP et CNN. Bien qu'il s'agisse d'une clause de non-responsabilité, je ne suis pas responsable de toute perte qui pourrait survenir s'il est réellement acheté ou vendu par cette méthode.

Préface

Histoire théorique sur les actions

Fondamentalement, les actions ou les actifs financiers généraux sont des marches aléatoires, et même si les informations avant un point sont connues, il est fondamentalement impossible de prédire la valeur à la prochaine fois. Si vous pouvez faire cela, tout le monde est fait, et il n'y a pas une si bonne histoire.

En revanche, il y a une anomalie dans le monde des actions, par exemple, il y a un petit effet stock et un effet stock valeur, qui ne peuvent pas être expliqués théoriquement ・ Il est confirmé qu'il existe une sorte de fluctuation qui s'écarte de la théorie Ça a été. (L'effet petit stock et l'effet stock valeur ont été confirmés comme des anomalies qui ne pouvaient pas être capturées par le CAPM, qui était la théorie du prix des actifs jusque-là, et un modèle appelé le modèle Fama-French a été créé.)

Il est difficile de réaliser un profit en utilisant une anomalie car si elle devient largement connue, elle sera intégrée au marché.

Dans l'apprentissage profond et l'apprentissage automatique, nous visons à trouver de telles anomalies (dans ma compréhension personnelle). À cette fin, il est calculé comme approximatif en utilisant des données qui n'ont pas été utilisées jusqu'à présent ou une méthode.

Eh bien, si vous utilisez beaucoup de données, vous ne pouvez rien faire, non? Est-ce un endroit avec de telles attentes?

Parlez de l'achat et de la vente d'actions réels

Une prévision de stock générale est un retour, c'est-à-dire un taux de variation par rapport à la veille. En d'autres termes, «utiliser les données jusqu'au jour en cours pour prédire les hauts et les bas du jour suivant».

Cependant, le problème réel n'est pas si simple,

Il y a des problèmes tels que.

Il convient de noter que dans les achats et les ventes réels, ces points sont souvent plus importants que prévu.

Après cela, lors de la prévision à l'aide de l'indice boursier d'outre-mer, il est nécessaire de prendre pleinement en compte l'influence du «décalage horaire». Si vous ne tenez pas compte de cela, vous finirez par utiliser des données futures pour faire des prédictions.

Construction de modèles

Jusqu'à présent, je vais faire un modèle réel avec l'introduction.

Cible de données et de prévisions

Les données utilisent les données quotidiennes de cours de clôture de 225 constituants moyens du Nikkei (constituants les plus récents). L'objectif de prévision est de savoir si le cours de clôture du cours moyen de l'action Nikkei le jour suivant augmentera ou diminuera par rapport à la veille. En d'autres termes, si le rendement du cours de clôture par rapport à la journée est positif ou négatif est utilisé comme données sur les enseignants. Les données d'apprentissage sont comprises entre le 11 janvier 2000 et le 30 décembre 2007, et les données de test sont à partir de ce moment jusqu'au dernier.

Comme indiqué dans l'introduction, il est réaffirmé que l'utilisation du cours de clôture pour prédire le rendement du cours de clôture ne peut pas être utilisée dans le trading réel. Eh bien, c'est comme voir si les résultats diffèrent selon la méthode.

Composition des fonctionnalités par modèle

Forêt aléatoire

Dans une forêt aléatoire, la quantité de fonctionnalités est étendue horizontalement. Cette fois, nous allons construire une matrice qui a le retour du cours de clôture le jour précédent de chaque action dans le sens de la colonne et le point de temps dans le sens de la ligne.

Perceptron multicouche (MLP)

Il utilise les mêmes fonctionnalités que la forêt aléatoire.

Réseau de neurones convolutifs (CNN)

Dans le réseau de neurones convolutifs, il est nécessaire de générer un format d'image, c'est-à-dire une carte de caractéristiques à deux dimensions, nous avons donc mis le canal à 1 et utilisé un tenseur à 4 dimensions. clm_dim et row_dim sont le nombre de colonnes et de lignes de l'image bidimensionnelle à un certain moment dans le temps, et représentent respectivement la valeur maximale et le nombre d'industries par industrie. Nous intégrerons le retour de la question dans chaque industrie.

    clm_dim = max(industry_count["count"])
    row_dim = len(industry_count)
    l_sample = len(x_train)
    t_sample = len(x_test)
    print row_dim,clm_dim
    x_train_mat = np.zeros((l_sample,1,row_dim,clm_dim),dtype=np.float32)
    x_test_mat = np.zeros((t_sample,1,row_dim,clm_dim),dtype=np.float32)

    for ind in industry_count["ind"]:
        """Tour par secteur"""
        ind_code_list = ind_data[ind_data["ind"]==ind]["code"]
        len_3 = [i for i,ii in enumerate(industry_count["ind"]) if ii == ind] #numéro de ligne

        len_1 = 0 #Index des colonnes
        for idx,row in x_train.iterrows():
            len_4 = 0
            for cc in ind_code_list:
                # x_train_mat[len_1,0,len_3,len_4] = 1. if row[str(cc)] > 0 else -1.
                x_train_mat[len_1,0,len_3,len_4] = row[str(cc)]
                len_4 += 1
            len_1 += 1

        len_1 = 0 #Index des colonnes
        for idx,row in x_test.iterrows():
            len_4 = 0
            for cc in ind_code_list:
                x_test_mat[len_1,0,len_3,len_4] = row[str(cc)]
                len_4 += 1
            len_1 += 1

Paramètres du modèle

Forêt aléatoire

Le nombre d'arbres de décision est de 200.

Perceptron multicouche (MLP)

Il s'agit d'un perceptron multicouche à 3 couches avec 1000 nœuds de couche cachés. l'époque est 100.

Réseau de neurones convolutifs (CNN)

Pliage → mise en commun moyenne une fois, puis une couche cachée, et le nombre de nœuds est de 1000. La taille du filtre est un filtre asymétrique 2x3, la taille du pooling est 1x2 et le canal de sortie est 30.

résultat

Mesuré par le rapport de classification de sklearn et l'ASC, respectivement.

Forêt aléatoire

RF_code.png

Perceptron multicouche (MLP)

MLP_code.png

Réseau de neurones convolutifs (CNN)

CNN_code.png

Le résultat est que le CNN est légèrement meilleur que les autres.

En regardant le pourcentage de bonnes réponses dans les résultats de CNN, 2013 Avenomics était le plus élevé. C'est vrai parce que c'était une période où il y avait une tendance claire.

正答率.png

Résumé

Recommended Posts

J'ai essayé l'histoire courante de l'utilisation du Deep Learning pour prédire la moyenne Nikkei
J'ai essayé l'histoire courante de prédire la moyenne Nikkei à l'aide du Deep Learning (backtest)
J'ai essayé d'extraire et d'illustrer l'étape de l'histoire à l'aide de COTOHA
J'ai essayé de compresser l'image en utilisant l'apprentissage automatique
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 la présence ou l'absence de neige par apprentissage automatique.
J'ai essayé l'apprentissage en profondeur avec Theano
[TF] J'ai essayé de visualiser le résultat de l'apprentissage en utilisant Tensorboard
[Apprentissage automatique] J'ai essayé de résumer la théorie d'Adaboost
J'ai essayé de prédire la victoire ou la défaite de la Premier League en utilisant le SDK Qore
J'ai essayé d'obtenir l'index de la liste en utilisant la fonction énumérer
J'ai essayé de visualiser la condition commune des téléspectateurs de la chaîne VTuber
J'ai essayé de comparer la précision des modèles d'apprentissage automatique en utilisant kaggle comme thème.
J'ai essayé de prédire l'infection d'une nouvelle pneumonie en utilisant le modèle SIR: ☓ Wuhan edition ○ Hubei province edition
J'ai essayé de transformer l'image du visage en utilisant sparse_image_warp de TensorFlow Addons
L'histoire de l'apprentissage profond avec TPU
[Bouclier d'épée Pokémon] J'ai essayé de visualiser la base de jugement de l'apprentissage en profondeur en utilisant la classification des trois familles comme exemple
zoom J'ai essayé de quantifier le degré d'excitation de l'histoire lors de la conférence
J'ai essayé d'estimer la similitude de l'intention de la question en utilisant Doc2Vec de gensim
J'ai essayé de corriger la forme trapézoïdale de l'image
J'ai essayé le deep learning
En utilisant COTOHA, j'ai essayé de suivre le cours émotionnel de la course aux meros.
J'ai essayé d'utiliser le filtre d'image d'OpenCV
J'ai essayé de prédire le comportement du nouveau virus corona avec le modèle SEIR.
J'ai essayé de prédire les hauts et les bas du cours de clôture du cours de l'action de Guru Navi en utilisant TensorFlow (progression)
J'ai essayé de vectoriser les paroles de Hinatazaka 46!
[Python] Deep Learning: J'ai essayé d'implémenter Deep Learning (DBN, SDA) sans utiliser de bibliothèque.
J'ai essayé d'exécuter le didacticiel de détection d'objets en utilisant le dernier algorithme d'apprentissage en profondeur
J'ai essayé de prédire l'évolution de la quantité de neige pendant 2 ans par apprentissage automatique
L'histoire de la fabrication de soracom_exporter (j'ai essayé de surveiller SORACOM Air avec Prometheus)
J'ai essayé de résumer la forme de base de GPLVM
J'ai essayé de prédire le match de la J League (analyse des données)
J'ai essayé d'approcher la fonction sin en utilisant le chainer
J'ai essayé d'utiliser l'API de Sakenowa Data Project
J'ai essayé de visualiser les informations spacha de VTuber
[Deep Learning from scratch] J'ai essayé d'expliquer le décrochage
L'histoire de l'utilisation de Circleci pour construire des roues Manylinux
J'ai essayé d'identifier la langue en utilisant CNN + Melspectogram
J'ai essayé de compléter le graphe de connaissances en utilisant OpenKE
J'ai essayé de classer les voix des acteurs de la voix
J'ai essayé de résumer les opérations de chaîne de Python
J'ai essayé de comprendre attentivement la fonction d'apprentissage dans le réseau de neurones sans utiliser la bibliothèque d'apprentissage automatique (première moitié)
J'ai essayé de notifier la mise à jour de "Devenir romancier" en utilisant "IFTTT" et "Devenir un romancier API"
J'ai essayé de prédire les courses de chevaux en faisant tout, de la collecte de données à l'apprentissage en profondeur
J'ai essayé d'extraire le texte du fichier image en utilisant Tesseract du moteur OCR
J'ai essayé de trouver l'entropie de l'image avec python
[Première API COTOHA] J'ai essayé de résumer l'ancienne histoire
J'ai essayé d'obtenir les informations de localisation du bus Odakyu
J'ai essayé de trouver la moyenne de plusieurs colonnes avec TensorFlow
J'ai essayé de refactoriser le modèle CNN de TensorFlow en utilisant TF-Slim
J'ai essayé de simuler l'optimisation des publicités à l'aide de l'algorithme Bandit
J'ai essayé la reconnaissance faciale du problème du rire en utilisant Keras.
J'ai essayé d'héberger un modèle d'apprentissage en profondeur de TensorFlow à l'aide de TensorFlow Serving
[Python] J'ai essayé de visualiser la relation de suivi de Twitter
J'ai essayé d'implémenter ListNet d'apprentissage de rang avec Chainer