[PYTHON] Prévisions du cours des actions par apprentissage automatique Commençons Numerai

introduction

Le grand public n'en a peut-être pas entendu parler, mais il existe un hedge fund appelé "Numerai". C'est un hedge fund devenu peu connu dans le quartier après avoir été présenté dans les médias tels que Wired et Forbes du second semestre 2016 au premier semestre 2017. Ce hedge fund est un fonds de type `` cloud sourcing '', qui est géré en fonction des résultats prévisionnels des cours des actions par un nombre indéterminé de personnes.

J'ai également participé à Numerai vers 2017. La méthode de Numerai est une méthode de tournoi qui est classée en fonction du résultat de la prédiction, c'est-à-dire qu'elle ressemble à Kaggle. Le tournoi a lieu chaque semaine et les meilleurs classements sont payés en crypto-monnaie. Cependant, dans le tournoi à ce moment-là, les critères de classement n'étaient pas clairs, et la fluctuation du classement était extrêmement sévère (comme tomber à la 100e place ou moins la semaine suivante même si c'était dans le TOP 10), alors j'ai arrêté immédiatement parce que c'était un soi-disant jeu de chance. ..

Récemment, en raison de certaines circonstances, j'ai jeté un coup d'œil à Numerai pour la première fois en environ trois ans. Ensuite, les spécifications du tournoi seront beaucoup plus sophistiquées qu'elles ne l'étaient en 2017. Le téléchargement du jeu de données et l'observation des caractéristiques est assez intéressant. Je pensais que c'était un excellent test de mes compétences en tant que personne impliquée dans la finance M / L, donc j'ai été mis en conserve pendant environ une semaine et j'ai lutté avec l'ensemble de données.

Nous pensons que les jeux de données et les tournois de Numerai sont des supports pédagogiques très utiles pour ceux qui s'intéressent à la finance M / L. Je voudrais profiter de cette occasion pour le présenter aux lecteurs.

À propos de Numerai

Permettez-moi d'ajouter un peu plus d'explications sur Numerai. Pour un aperçu de Numerai, veuillez d'abord vous référer au Blog passé que j'ai écrit en 2017. En plus de cela, les fonctionnalités de Numerai peuvent être résumées.

--Numerai effectue un méta-apprentissage basé sur les résultats de prédiction collectés auprès des participants et fonctionne sur la base des résultats.

Spécifications du tournoi

Jetons maintenant un coup d'œil aux spécifications du tournoi. Les tournois Numerai ont lieu chaque semaine et de nouveaux ensembles de données seront disponibles en téléchargement pendant le week-end. La date limite de téléchargement est 23h30 (heure du Japon) le lundi suivant. La procédure de création d'une prévision à télécharger est la suivante.

Téléchargement de l'ensemble de données

Lorsque vous vous connectez, il y a un bouton de téléchargement sur le côté gauche de l'écran. Appuyez simplement sur ceci. Le fichier Zip téléchargé contient les ensembles de données suivants:

training_data est un ensemble de données pour l'entraînement, et tournoi_data est un ensemble de données pour faire des prédictions. Ceux-ci sont fournis au format CSV, mais ils sont difficiles à ouvrir dans Excel en raison de leur grande capacité. À titre de référence, la dimension de trainig_data est (310 caractéristiques + α) x environ 500000 échantillons et sa capacité est de 770 Mo, et la dimension de tournoi_data est (310 caractéristiques + α) x environ 1,7 million d'échantillons et sa capacité est de 2,6 Go. Cela atteint. Le contenu de l'ensemble de données sera discuté un peu plus en détail dans les chapitres ci-dessous.

Création d'un modèle soumettant les résultats de la prédiction

Python ou R serait approprié pour créer le modèle. Un exemple de code est fourni pour les deux. Un exemple de code est également inclus lorsque vous téléchargez l'ensemble de données. Pour référence, le code fourni sur HP Numerai est listé ci-dessous (Python ver.).

Téléchargez simplement le CSV créé par la procédure suivante sur HP de Numerai. C'est facile.

import pandas as pd
from xgboost import XGBRegressor

# Read the csv file into a pandas Dataframe
training_data = pd.read_csv("numerai_training_data.csv").set_index("id")
tournament_data = pd.read_csv("numerai_tournament_data.csv").set_index("id")
feature_names = [f for f in training_data.columns if "feature" in f]

# train a model to make predictions on tournament data
model = XGBRegressor(max_depth=5, learning_rate=0.01, \
                     n_estimators=2000, colsample_bytree=0.1)
model.fit(training_data[feature_names], training_data["target"])

# submit predictions to numer.ai
predictions = model.predict(tournament_data[feature_names])
predictions.to_csv("predictions.csv")

Évaluation du modèle

La précision et le logloss sont utilisés pour évaluer les modèles généraux d'apprentissage automatique, tandis que la corrélation de rang est utilisée pour évaluer les modèles de tournois Numerai. C'est très bien. Parce que la compétence en trading est le coefficient d'information, qui est le coefficient de corrélation entre la cible de prévision et l'indice d'investissement utilisé pour la prévision. L'idée ici est basée sur la théorie traditionnelle du fonctionnement actif, et ceux qui sont intéressés sont le [Blog passé] de l'auteur (http://we.love-profit.com/entry/2018/04/01/152750) Prière de se référer à. La corrélation de rang peut être calculée avec le code suivant. Ce code est également fourni par Numerai.

ranked_prediction = training_data["prediction"].rank(pct=True, method="first")
correlation = np.corrcoef(training_data["target"], ranked_prediction)[0, 1]

Classement du classement

Les classements sont classés par réputation. La réputation est la valeur moyenne de la corrélation de rang dans la prédiction avancée pour les 100 derniers jours (* Les spécifications du tournoi ont été mises à jour récemment. L'ancienne spécification était la valeur moyenne des 20 derniers tournois. Le document à ce sujet n'a pas encore été mis à jour. Cela ne semble pas être le cas).

Il existe un autre index appelé MMC (Meta Model Contribution) dans le classement. Il s'agit de la valeur de corrélation avec le méta-modèle réellement exploité par Numerai. Cette métrique vient d'être implémentée dans la dernière mise à jour et n'est affichée que et ne semble pas encore fonctionner au moment de la publication. 01.png

Système de récompense

Maintenant, je vais vous expliquer le système de récompense de Numerai, qui est le sujet le plus intéressant pour les lecteurs. Tout d'abord, la prémisse principale est que "la récompense de Numerai est payée dans la propre crypto-monnaie de Numerai appelée NMR (Numeraire)". À ce stade, si vous pensez "Je ne comprends pas les crypto-monnaies et c'est un problème", vous pouvez sauter ce chapitre.

Une autre prémisse majeure est que vous «devez miser votre RMN» afin de recevoir des récompenses. Je vais expliquer cela un peu plus en détail.

À propos de l'enjeu

Si vous procédez à la RMN, certaines personnes peuvent provoquer une réaction de rejet, alors nous procéderons ici en yen.

Supposons que l'un des participants fasse une prédiction sûre. Je veux obtenir une récompense avec ça. Si vous pensez que oui, pariez, par exemple, 10 000 yens sur vos propres résultats de prédiction. En conséquence, si la prédiction est bonne, vous obtiendrez une récompense en fonction des 10 000 yens misés. Au contraire, si la prédiction est mauvaise, une partie du pari de 10 000 yens sera collectée par l'opération.

C'est une spécification encombrante, mais si vous y réfléchissez, cela ne peut pas être aidé. Si l'utilisateur ne prend aucun risque, par exemple, si vous créez environ 1000 comptes et continuez à soumettre des résultats de prédiction appropriés, vous pouvez obtenir de bons résultats par hasard et obtenir des récompenses. Le but est de l'empêcher. De plus, puisque le montant de la mise montre le degré de confiance des participants, le montant de la mise est très important pour Numerai pour construire un métamodèle.

La récompense de l'enjeu est la suivante. En fonction de la corrélation de rang dans le tour du tournoi, il sera décidé si la récompense sera donnée ou collectée. Les subventions et les collectes sont plafonnées à 25% du montant du pari. 02.png

Pour être plus précis, la valeur de corrélation de rang à chaque tour de tournoi se situe entre -0,15 et +0,15 (c'est-à-dire que la collecte / la subvention se situe entre -15% et + 15% du montant du pari). La variation entre chaque tour est grande, mais si vous êtes un participant expérimenté, elle se stabilisera à environ 0,03 en moyenne. En d'autres termes, si vous participez depuis longtemps, vous pouvez vous attendre à une récompense d'environ + 3% pour chaque tour.

Bonus quotidien

"Est-ce seulement 3%?" Je pense que beaucoup de gens le pensent. Il existe une autre façon d'obtenir de grosses récompenses avec Numerai. Tel est le classement. Si vous êtes classé en haut du classement, vous recevrez un bonus quotidien en fonction du montant de la mise. 5% en tête du classement et 4% dans le top 10. Si nous pouvons maintenir le top 10 des classements, nous pouvons profiter d'un rendement énorme de 4% par jour. Cependant, les conditions suivantes existent.

En outre, bien sûr, il existe une limite supérieure au montant que Numerai paie à tous les participants, jusqu'à 250 NMR par jour (le prix actuel du marché est de 450 000 yens). Au-delà, la récompense sera divisée à parts égales par la valeur que le participant devrait recevoir afin que le paiement total soit dans le montant maximum. Si vous avez le courage de vous ré-impliquer et de régner en tête du classement, il est tout à fait possible d'obtenir des dizaines de milliers de yens par jour. La récompense que vous devriez viser est d'environ 1 million de yens par mois. Ce sera suffisant pour un revenu supplémentaire en tant que data scientist.

Cependant, il convient de noter que NMR est une crypto-monnaie à faible crédit appelée grass coin. Les prix fluctuent tellement que nous ne savons pas quand ce seront des déchets. Bien qu'il soit coté sur l'échange de crypto-monnaie, il peut ne pas être possible de convertir un montant fixe en un montant fixe en raison de la faible liquidité. La crypto-monnaie est également désavantageuse en termes de fiscalité, et si vous gérez mal les envois de fonds, vous la perdrez et vous ne pourrez pas la restituer. Il est important de bénéficier de «fonds excédentaires» dans le cadre de «l'auto-responsabilité». Même si vous faites une erreur, ne pensez pas que vous gagnerez de l'argent grâce aux bénéfices commerciaux de la RMN. 03.png

base de données

Ensuite, expliquons le contenu de l'ensemble de données. L'ensemble de données est supervisé par Marcos Prado depuis 2019. Le livre de Prado (traduction japonaise) "Finance Machine Learning" sorti en décembre 2019 a été vendu stupidement sur Amazon, tant de gens auraient dû le voir. Sous la supervision de M. Prado, le nombre total de fonctionnalités est passé d'environ 40 à environ 300. Prado a même publié un article sur l'ensemble de données de Numerai. Ceux qui sont intéressés devraient le lire.

À propos des articles

Les éléments de l'ensemble de données sont les suivants. Le nombre d'échantillons est d'environ 500 000 pour training_data et d'environ 1,7 million pour tournoi_data. 04.png

--id est une valeur numérique attribuée à chaque échantillon individuellement, et il n'y a pas de duplication dans tous les échantillons. Le numéro d'identification est considéré comme la date et l'heure cryptées et le nom de la marque. --era indique la période des données. Le training_data contient 120 périodes de era1 à era120. Étant donné que le marché boursier évolue avec le temps, il est nécessaire de réaliser une EDA en tenant compte de la structure par période de l'ensemble de données. Il n'y a aucune explication quant à savoir si l'ère1 à l'ère120 sont dans l'ordre chronologique. Notez également que le nombre d'échantillons est différent pour chaque époque. --data_type n'est formé que dans training_data. Il existe trois types de tournoi_data: validation, test et live. la validation est une donnée pour la validation du modèle et la cible est attribuée. test est un ensemble utilisé par Numerai pour le jugement de la note, et la cible est une valeur nan. live sont les données de marché en cours. Naturellement, la cible est une valeur nanométrique. Le nombre de fonctionnalités est différent pour chacun.

À propos des numéros d'objet et d'objectif

Comme vous l'avez peut-être remarqué en examinant les données ci-dessus, les caractéristiques et les valeurs cibles sont des valeurs discrètes. Il existe cinq types de valeurs numériques, 0, 0,25, 0,5, 0,75 et 1, en bref, ce sont les données d'environ 5 minutes qui sont courantes dans le fonctionnement de Quants. L'observation de l'histogramme pour chaque époque est la suivante. Certains ont le même nombre d'échantillons pour chaque division, tandis que d'autres n'en ont pas. La série originale de fonctionnalités telles que feature_constitution1 dans la figure ci-dessous peut avoir une distribution de grosse queue, ou il peut y avoir extrêmement peu de résultats tels que les variables catégorielles. En pensant de cette façon, nous allons procéder avec EDA. 05.png

À propos de la structure des périodes

Ensuite, regardons la transition du nombre d'échantillons pour chaque époque. Le nombre d'échantillons à chaque époque est assez différent, comme indiqué ci-dessous. Corrélation ou tout ce qui doit être suivi dans l'ordre chronologique. Puisque la transition du nombre d'échantillons semble être presque continue, il est fort possible que l'ère1 à l'ère120 soient classés par ordre chronologique. 06.png

Autre EDA

Ce qui précède est l'essentiel, et au fur et à mesure que nous procédons à l'EDA, nous découvrirons diverses choses. Par rapport à 2017, l'ensemble de données est très sophistiqué et intéressant. "Eh bien, il n'est supervisé que par Prado. Ce tournoi ne devrait pas être un jeu de chance." Il y a une certitude chez l'auteur.

Résultat de la participation au tournoi

L'auteur participera à Numerai à partir du prochain ROUND 208. Le modèle a déjà été créé et le résultat de la validation était bon. La réputation utilisée pour le classement est le résultat de la prédiction directe pour les 100 derniers jours, et -0,1 est appliqué uniformément pendant les jours sans données. Par conséquent, les nouveaux participants commenceront avec une régression de -0,1 et augmenteront progressivement à mesure que les résultats des prévisions progressives s'accumulent.

Ce chapitre sera mis à jour un par un.

(Ajouté le 19 avril 2020) J'ai soumis la prédiction de ROUND 208 comme prévu. La corrélation de validation est de 0,034, ce qui est une valeur raisonnable. Au fait, je mets tout le RMN que j'ai. Il est de 26NMR (environ 60000 yens au prix du marché au 19 avril), ce qui est la récompense que j'ai obtenue lorsque j'ai participé en 2017. Encore une fois, le paiement sera appliqué après 100 jours.

(Ajouté le 24 avril 2020) Le résultat du ROUND 208, qui était la première soumission, était bon. Alors que les 10 premiers classements étaient tous négatifs CORRÉLATION RONDE, mon modèle a pu terminer avec un positif (le tableau ci-dessous est le total de l'auteur). ROUND208-2.png

(Ajouté le 30 avril 2020) Le résultat ci-dessus n'était que le premier jour de ROUND208 (j'ai mal compris que c'était une valeur définitive après ROUND. Excusez-moi). Le ROUND réel est de 20 jours et la valeur de corrélation change chaque jour pendant la période. Aujourd'hui, je vais montrer la distribution de corrélation et de MMC des 100 meilleurs utilisateurs du classement et la position de l'auteur à partir de 5 jours après ROUND208. Jusqu'ici ça va bien. J'ai ajouté MMC dans le chapitre ci-dessous, veuillez donc vérifier cela également. round208_submission_dist.png

(Ajouté le 22 mai 2020) J'ai mis à jour le modèle plusieurs fois et je suis passé du ROUND212 au modèle presque final. Je vais voir la situation pendant un moment. 21.png

Informations complémentaires (établies le 25 avril 2020)

Étant donné que j'ai beaucoup appris en participant à ROUND 208, je vais établir ce chapitre. Si je découvre quelque chose dans le futur, je l'ajouterai à ce chapitre.

(Ajouté le 25/04/2020)

--Training_data est fondamentalement inchangé. Vous n'avez donc pas besoin de recréer le modèle à chaque fois que vous téléchargez le jeu de données. Des améliorations peuvent être apportées sur la base des résultats soumis lors du cycle précédent, mais les résultats des cycles varieront, de sorte que les changements de modèle ne doivent pas être jugés sur la base de résultats à court terme.

(Ajouté le 30/04/2020)

08.png

--Pour référence, la corrélation de validation de tous les participants du ROUND 208 a été tabulée. En regardant l'ensemble (figure de gauche), il y a des utilisateurs avec une corrélation extrêmement élevée, car les données de validation incluses dans Tournoi_data sont également incluses dans les données d'entraînement pour construire le modèle. Si vous avez vos propres performances de prédiction hors échantillon, je pense que cette méthode est également bonne. Si vous le cochez dans une plage réaliste (figure de droite), vous pouvez voir qu'il y a beaucoup de 0,03 unités. Les utilisateurs avec une corrélation de validation extrêmement faible peuvent avoir d'autres intentions, comme la triche. round208_validation_dist.png

(Ajouté le 1 mai 2020)

(Ajouté le 5 mai 2020)

--À partir du ROUND 210, la période de validation est désormais de deux. Tous ont la même étiquette que «validation», mais pour des raisons de commodité dans cet article, nous nous référerons aux données de la période qui était jusqu'à présent utilisée comme validation1 et aux données de la période nouvellement ajoutée comme validation2. Les performances sont extrêmement pires avec la validation2 qu'avec la validation1. validation2 est vraiment des données hors échantillon. Pour être honnête, je pense que c'est une erreur de gestion. Avec l'ajout de validation2, il a été révélé que la validation1 ne vaut aucune donnée de validation. En réponse à ce changement, l'auteur se demande également ce qu'il faut faire à l'avenir. Pour l'instant, j'ai estimé le Validato en Corrélation de validation 2 des TOP 100 utilisateurs, donc je vais le décrire. La partie où les données sont manquantes est la partie qui n'a pas pu être estimée. Nous pensons que 0,01 à 0,015 est approprié pour la corrélation de validation au moins pendant la validation2. Après tout, la corrélation de validation du ROUND 210 soumis par l'auteur pendant la période de validation 2 a été fixée à environ 0,013.

12.png

(Ajouté le 22 mai 2020) Numerai permet la soumission de plusieurs modèles, mais jusqu'à présent, il était nécessaire d'enregistrer chaque compte avec une adresse e-mail indépendante. Cette fois, il a été modifié pour que vous puissiez soumettre jusqu'à 10 modèles par compte. Le montant de la mise peut également être alloué et géré pour chaque modèle. La méthode de paramétrage est ici.

L'auteur a soumis deux modèles. Le sous-modèle sert à la surveillance, et nous prévoyons de le combiner avec le modèle principal si les performances sont bonnes après avoir regardé quelques tours. 20.png

API Numerai (établie le 1er mai 2020)

Puisqu'il y a l'API de Numerai, je vais la présenter. Vous pouvez utiliser cette API pour soumettre des DL et des prédictions pour les ensembles de données. Mais plus utile que cela serait la possibilité d'agréger les informations utilisateur. Vous trouverez ci-dessous un exemple de code pour obtenir la corrélation de tour et la console MMC des 100 meilleurs utilisateurs le dernier jour de chaque tour. Veillez à ne pas trop frapper car vous n'êtes pas sûr de la limite de l'API. S'il y a d'autres utilisations pratiques, je les présenterai.

import time
import numerapi
import matplotlib.pyplot as plt

round = 208
api = numerapi.NumerAPI()

LB = api.get_leaderboard(limit=100)  #Utilisateurs du TOP100
users = [LB[i]["username"] for i in range(len(LB))]

submission_corr = []
mmc = []

for user in users:
    sub = api.daily_submissions_performances(username=user)
    sub_round = [sub[i] for i in range(len(sub)) if sub[i]["roundNumber"]==round]
    submission_corr.append(sub_round[0]["correlation"])
    mmc.append(sub_round[0]["mmc"])
    time.sleep(0.5)

plt.hist(submission_corr)
plt.hist(mmc)

Communauté Numerai (créée le 22 mai 2020)

Numerai a une communauté de chat ouverte sur une plate-forme appelée Rocket.chat. Rocket.chat est comme une discorde. Il y a des discussions sur les changements importants dans le tournoi et sur la science des données modèles. Si vous avez des informations utiles, je vais les ramasser et les présenter dans ce chapitre, mais surtout ceux qui sont sérieux à ce sujet devraient absolument rejoindre la communauté. Mon identifiant dans la communauté est uki1.

community.numer.ai

(Ajouté le 23 mai 2020) Les paiements par MMC ont commencé, et il semble que la communauté utilise une méthode pour neutraliser ses propres résultats de prédiction. MMC neutralise le méta-modèle, mais comme le méta-modèle est bien sûr inconnu, le résultat de la prédiction du modèle d'exemple, etc. est considéré comme un résultat de prédiction représentatif, et son propre résultat de prédiction est neutralisé. En exécutant cette action, la corrélation avec un modèle typique peut être maintenue faible (cependant, que les performances de prédiction restent ou non sont différentes). Voici le code de neutralisation. Il y a eu des rapports de cas dans lesquels la performance prédictive peut encore être maintenue en effectuant une neutralisation avec une proportion = 0,5. Dans le prochain ROUND 213, essayez de neutraliser pour le moment, et si les performances de prédiction restent, ce n'est pas une mauvaise idée de soumettre un résultat de prédiction après neutralisation.

import pandas as pd
import numpy as np

#series est votre propre résultat de prédiction, par est le résultat de prédiction qui est la base de neutraliser(Résultats de prédiction du métamodèle dans MMC)
def neutralize_series(series, by, proportion=1.0):
    scores = series.values.reshape(-1, 1)
    exposures = by.values.reshape(-1, 1)
    exposures = np.hstack((exposures, np.array([np.mean(series)] * len(exposures)).reshape(-1, 1)))
    correction = proportion * (exposures.dot(np.linalg.lstsq(exposures, scores)[0]))
    corrected_scores = scores - correction
    neutralized = pd.Series(corrected_scores.ravel(), index=series.index)
    return neutralized

Stratégie de supériorité en tournoi (établie le 2 mai 2020)

Il a été déclaré que le bonus de classement sera aboli et que le paiement passera au standard de corrélation ou au système de sélection standard MMC. Les paiements basés sur les critères de corrélation dépendent entièrement des compétences prédictives individuelles des participants, il n'y a pas d'asymétrie de revenu et il n'y a aucune incitation pour les participants à choisir cela, sauf pour les tests de compétence. Si nous choisissons ici les critères MMC, les participants peuvent-ils vraiment obtenir une asymétrie de profit? Dans ce chapitre, nous analysons la MMC et considérons la stratégie de supériorité des participants dont le but principal est la récompense.

Top 100 des analyses

Avant d'analyser MMC, nous analyserons d'abord les modèles construits par les utilisateurs actuels du TOP100 (au 2 mai 2020). Premièrement, pour les utilisateurs de TOP100, regroupement du modèle de prédiction créé par eux en fonction de la transition de la corrélation de soumission des 20 dernières séries (voir la figure ci-dessous). En effet, il existe de nombreux utilisateurs dont les transitions sont clairement similaires. 09.png

SOM a été utilisé comme méthode de clustering. De plus, les parcelles ont été classées en fonction de la compétence de prédiction (réputation) et de la corrélation avec le métamodèle (corr w / métamodèle) afin que les différences dans les parcelles puissent être considérées comme les caractéristiques de chaque région. 10.png Maintenant, quand vous regardez cela, il y a clairement des utilisateurs différents. En bas à gauche de la carte SOM, madmin et wilfred, c'est-à-dire les premier et deuxième classements. Actuellement classé numéro un, madmin est soupçonné d'être un tricheur (site de référence). Malheureusement, la deuxième place sera la même. Cela peut être déduit du fait que leur corrélation de validation est clairement faible (voir la figure ci-dessous). Pour référence, je pense que le modèle de l'auteur est situé dans le groupe supérieur gauche de la carte (faute de données, il n'est estimé qu'à partir du comportement jusqu'à présent). 11.png

La question est, après avoir exclu ces deux personnes, ** où sur la carte est le moyen le plus efficace d'être payé **. Vous pouvez simplement améliorer vos compétences de prédiction, mais si la corrélation avec le métamodèle devient grande, la MMC peut diminuer et la récompense peut diminuer. Sur la base des spécifications MMC, nous examinerons ce qui arrivera à la stratégie supérieure pour maximiser les récompenses (à signaler la prochaine fois).

(Ajouté le 19 mai 2020) Nous rapportons les résultats des paiements MMC. Premièrement, la définition de MMC est ici. En bref, lorsque la prédiction est considérée comme un vecteur à N dimensions, MMC est la corrélation entre la "composante orthogonale du vecteur métamodèle et le vecteur modèle de prédiction de l'utilisateur" et le vecteur cible. Voici un diagramme schématique dans le cas de deux dimensions (N = 2). A ce moment, le coefficient de corrélation, qui est la performance de prédiction, indique l'angle auquel chaque vecteur cible (pour être exact, cosθ). Sur cette figure, le vecteur cible est fixé à la composante (1,0), donc si le vecteur de prédiction est dans le premier quadrant, les performances de prédiction seront positives. Inversement, si le vecteur de prédiction est dans le deuxième quadrant, les performances de prédiction seront négatives. Dans la figure ci-dessous, les performances de prédiction du modèle utilisateur sont positives, mais la composante directe avec le méta-modèle est négative, ce qui signifie que le paiement sera négatif s'il s'agit de MMC. Cette relation est fortement influencée par la relation de position entre la cible, le métamodèle et le vecteur utilisateur. 18.png

Comme le montre la figure ci-dessus, 2 dimensions sont trop extrêmes, j'ai donc généré ici des nombres aléatoires pour N = 5000 dimensions et observé la relation entre chaque paramètre et le paiement d'une manière Monte Carlo. La figure ci-dessous est une comparaison de l'ancien paiement et du nouveau paiement. En tant que paramètres, les performances de prédiction du méta-modèle et la corrélation entre le méta-modèle et le modèle utilisateur sont données. La ligne rouge tracée en diagonale sur le graphique est la ligne montrant l'ancien paiement: nouveau paiement = 1: 1, et l'intrigue située en haut à gauche de cette ligne rouge est le nouveau paiement et la récompense augmente, et inversement, elle est située en bas à droite L'intrigue est un échantillon de nouveaux paiements qui réduisent les récompenses.

La première chose à savoir est que lorsque le métamodèle se porte bien (rangée du haut), les paiements MMC ont tendance à être inférieurs aux paiements traditionnels (c'est-à-dire les performances prédictives simples). À l'inverse, lorsque le métamodèle est malade (ligne inférieure), les paiements MMC ont tendance à être plus élevés que les paiements traditionnels. En d'autres termes, il a pour effet de lisser le paiement à l'utilisateur pendant la période où la prédiction est bonne (la période où la prédiction est facile) et la période où la prédiction est mauvaise (la période où la prédiction est difficile).

Ensuite, en observant par corrélation avec le métamodèle, on peut voir que le coefficient de régression augmente à mesure que la corrélation diminue (au fur et à mesure qu'elle progresse vers la colonne de droite). Si la corrélation est faible, on peut voir que le paiement par MMC fluctue considérablement par rapport au paiement conventionnel (c'est-à-dire une performance de prédiction simple). Cela signifie que si la corrélation avec le métamodèle devient faible, le paiement sera exploité pour ses propres performances de prédiction.

Enfin, en ce qui concerne l'asymétrie des revenus, comme le montre le graphique, le paiement par MMC a une relation linéaire avec l'ancien paiement (c'est-à-dire une simple performance de prédiction), et on peut voir qu'il n'y a pas de déjeuner gratuit. 19.png

Pour résumer ce qui précède,

En bref, l'incitation à rejoindre Numerai sera des paiements gonflés pendant les périodes d'imprévisibilité. Il est difficile de faire une comparaison quantitative, mais cela peut être une bonne option si vous le considérez comme l'un de vos portefeuilles d'investissement (à condition que vous puissiez tolérer les risques RMN). La chose la plus élégante est de frapper les prédictions avec un modèle qui a une faible corrélation avec le méta-modèle. Les participants qui connaissent leurs compétences sont encouragés à relever le défi.

(Ajouté le 22 mai 2020) Le paiement par MMC a commencé. Vous pouvez choisir entre le paiement par Corr et le paiement par MMC. La méthode de paramétrage est ici.

(Ajouté le 4 juin 2020) Environ un mois et demi s'est écoulé depuis que je suis entré en guerre. Au cours de cette période, l'auteur a procédé à de nombreuses vérifications sous différents angles. Sur la base des résultats et des conclusions de l'auteur, nous avons résumé les incitations à participer à Numerai.

** Incitatif 1. Excellent effet de levier ** Le paiement de Numerai est proportionnel au CORR. Si CORR = 0,1, le paiement est de 10% (dans le cas de MMC, multipliez par 2 de plus). Cette spécification est en premier lieu un effet de levier élevé. Le modèle de Numerai est neutre sur le marché, et si une telle stratégie peut éliminer le risque de marché, elle se traduit naturellement par des rendements inférieurs. D'après mon expérience, le rendement long-short des actions à grande échelle sur le marché boursier réel est estimé à 1% par CORR = 0,1 (voir la figure ci-dessous). En d'autres termes, lorsque le paiement est CORR, le mouvement de prix réel de l'action est déjà 10 fois plus endetté. Dans le cas de MMC, l'effet de levier est jusqu'à deux fois plus élevé que cela, de sorte que l'effet de levier réel est d'environ 20 fois. De plus, vous pouvez parier cela pendant quatre semaines consécutives sans manquer de marge, de sorte que l'effet de levier réel est d'environ 80 fois. Bien qu'un effet de levier élevé soit une arme à double tranchant, c'est une spécification très bienvenue en termes d'amélioration spectaculaire de l'efficacité financière des stratégies neutres sur le marché. 23.png

** Incentive 2. Construire un portefeuille sans coût ** L'utilisateur n'achète pas réellement l'action, mais peut simplement recevoir la récompense en fonction du résultat de la prédiction. Cela signifie qu'il n'y a pas d'impact des frais de transaction ou d'impact sur le marché. En d'autres termes, vous n'avez pas du tout à vous soucier de la détérioration due aux backtests. Il s'agit d'un avantage unique pour les négociants en systèmes, et les utilisateurs dont les enjeux sont particulièrement importants peuvent en bénéficier de manière significative.

** Incentive 3. Stabilisation du P / L par MMC ** Dans le cas d'une stratégie à effet de levier élevé, s'il y a une grande variation de P / L, vous serez immédiatement libéré. En effet, les récompenses accumulées sont libérées en même temps avec seulement quelques pertes. Parier sur MMC a pour effet de lisser les récompenses lors des périodes de bonnes / mauvaises prévisions. Cela nous permettra d'assurer la durabilité de notre stratégie de gestion des intérêts composés à haut niveau sans compromettre les attentes.

** Incitatif 4. Excellente fonctionnalité ** En général, le principal obstacle à la construction de stratégies d'investissement est la recherche d'indicateurs d'investissement. C'est un défi particulièrement rencontré par les débutants sur le marché. Je ne sais pas quels indicateurs sont explicatifs et je ne sais pas comment les trouver. La puissance prédictive des fonctionnalités contenues dans les données de Numerai est très bonne. L'auteur a procédé à une vérification à multiples facettes, mais l'utilisation de ces fonctionnalités permettra sans doute de rendre les profits et les pertes positifs à long terme.

Pour résumer ce qui précède, quelle est l'incitation à participer à Numerai?

C'est une plateforme de rêve pour les traders de système. Maintenant, il n'est pas juste d'expliquer uniquement les incitations, alors reconfirmons les inconvénients. Les risques les plus importants liés à la participation à un tournoi sont le risque opérationnel, le risque de fluctuation des prix RMN et le risque de liquidité RMN.

Le risque opérationnel est le risque que le tournoi soit soudainement aboli ou que les spécifications soient modifiées et que le rendement souhaité ne soit pas obtenu. quant à cela, il ne peut pas être aidé. Si cela se produit, cela soulève simplement la RMN (je ne pense pas qu'elle sera confisquée). Vient ensuite le risque de fluctuations de prix RMN, qui ne peuvent être qu'acceptées. En premier lieu, il n'y a pas de déjeuner gratuit dans le monde, et il y a toujours un risque pour obtenir un rendement élevé. Cependant, les joueurs TOP ont quintuplé le montant d'argent qu'ils misent en environ 30 semaines, de sorte que le risque que le prix RMN chute à environ 1/5 est acceptable. À l'inverse, le prix de la RMN peut augmenter fortement, je pense donc qu'il vaut la peine de parier sur la RMN. Enfin, en ce qui concerne le risque de liquidité, il est difficile de convertir une quantité extrême de RMN en espèces en peu de temps car il y a peu de bourses sur lesquelles la RMN est cotée et la plaque est mince. Je pense que c'est le plus gros goulot d'étranglement. Il est normal de fixer des frais élevés, je vous serais donc très reconnaissant si Numerai pouvait autoriser OTC à échanger NMR en BTC ou USDT.

Conseils pour les prévisions

Ce chapitre sera mis à jour lorsque nous serons en mesure de régner en maître dans le classement.

(Ajouté le 11 mai 2020) Bien qu'il soit encore loin d'être en tête du classement, je voudrais ici vous présenter l'une des EDA que je fais. L'essentiel est d'observer la transition chronologique de la corrélation entre les caractéristiques (de nombreux lecteurs l'ont peut-être confirmé). Ce que j'ai conçu dans cet EDA, c'est que j'ai observé les données de test de tournoi_data au lieu de training_data. Comme vous le savez peut-être, qui a lu le [Forum] de Numerai (https://forum.numer.ai/t/validation-2-announcement/166), les données de test de Tournament_data, ERA854-899 (hebdomadaire), sont Cela correspond presque à ERA 197-206 (mensuel) de Validation2. De plus, ces données correspondent presque aux ROUND168 à ROUND204 du tournoi actuel. Ceci est 40 semaines avant avril 2020 et comprend la période de choc corona.

Le graphique ci-dessous montre la transition de corrélation entre la dextérité1 et les autres dextérité (figure de gauche) et la transition de corrélation entre la constitution1 et les autres constitutions (figure de droite) dans ERA853 à ERA904 (hebdomadaire).

Comme vous pouvez le voir, le coefficient de corrélation diminue considérablement à l'extrémité droite de la corrélation de dextérité. Cette partie est le choc corona. Comme cela sera décrit plus loin, la dextérité est un indice d'augmentation / diminution de prix, et 14 indicateurs sont composés en combinant la période de calcul (1W, 4W, 52W, etc.) et la méthode de calcul (taux simple d'augmentation / diminution, taux d'écart moyen mobile, etc.). A été fait.

De plus, contrairement à la dextérité, où la corrélation entre eux fluctue considérablement, la constitution a une transition de corrélation presque constante. La constitution est sans doute un indicateur des attributs d'un titre (états financiers, secteurs, régions, etc.). Il existe un indice qui dérive légèrement de haut en bas dans la partie choc corona, mais il s'agit d'un indice financier qui intègre des prix tels que le PER et le PBR. 13.png

Sur la base de ces données, nous avons essayé de reproduire la dextérité, qui a un grand pouvoir explicatif et est la clé pour améliorer la corrélation, avec les données réelles du marché. Comme il faut du temps pour considérer les actions du monde entier, nous avons ciblé les actions du S & P 500 ici. La figure ci-dessous montre la transition de corrélation mutuelle des indicateurs à la hausse et à la baisse. les caractéristiques 1 à 4 sont le taux d'augmentation / diminution de 1W, 4W, 12W et 52W, respectivement. On peut voir qu'une forme similaire à la corrélation de dextérité dans la figure ci-dessus apparaît localement. 14.png

Ensuite, nous avons comparé les courbes d'équilibre de retour pour ces indices de reproduction et de dextérité. En conclusion, comme les courbes d'équilibre sont très similaires, je pense que la dextérité4 et la dextérité7, qui sont particulièrement descriptives, sont sans doute des indicateurs de hausse et de baisse de 52W (ou périodes similaires). 15.png

De plus, les utilisateurs les mieux classés bénéficient grandement de la dextérité 4. Ce qui suit est une comparaison des transitions de corrélation ronde de madmin, hb et steve2, qui sont bien classées, et les transitions de corrélation de dextérité4. 16.png

Maintenant, la question est de savoir si cette dextérité est un indicateur vraiment robuste pour toute l'année. Au terme de cette vérification, nous avons confirmé le comportement des titres du S&P 500 lors de leur sélection en utilisant l'indice de taux de hausse / diminution pour la période postérieure à 2010. En conclusion, il est difficile d'obtenir des performances suffisantes simplement en pariant sur le taux d'augmentation et de diminution à long terme (bien sûr). Bien que la dextérité4 semble être un très excellent indice, la période de validation2 n'est en fait que la partie cadre rouge de la figure ci-dessous. 17.png

À partir de cette vérification, je pense que c'est une tâche très difficile de créer un modèle stable sur une base hebdomadaire. Afin de surmonter cela, j'ai présenté un modèle pilote avec ROUND211. C'est un modèle pour vérifier le comportement, et je n'attends pas beaucoup de résultats.

(Ajouté le 29 mai 2020) J'ai reçu un commentaire selon lequel le modèle de moniteur introduit à partir de ROUND212 est extrêmement puissant, je vais donc l'expliquer. UKI_MONITOR1 est encore peu de temps après la soumission du modèle, mais il semble que les dernières performances soient certainement excellentes (voir la figure ci-dessous). 22.png

En conclusion, UKI_MONITOR1 n'est que dextérité7 (mais multiplié par moins). Le code est comme suit. Il est simplement mis à l'échelle à une valeur comprise entre 0,4 et 0,6.

tournament_data["prediction"] = -tournament_data["feature_dexterity7"]

La raison en est que la dextérité7 (ou la dextérité4) est la variance la plus élevée de toutes les fonctionnalités et qu'elle est essentielle pour augmenter les performances prédictives (c'est-à-dire la corrélation) du modèle. Cependant, étant donné que cet indice a une grande dépendance temporelle et qu'il existe un risque élevé de simplement l'incorporer dans le modèle, nous avons décidé de surveiller le comportement pour le moment. Les utilisateurs qui ont récemment atteint des performances prédictives élevées bénéficient de la dextérité 7, mais nous pensons qu'il est probable que leurs performances seront considérablement altérées à l'avenir. Dans un tel cas, ce moniteur devrait être utile pour l'isolation des facteurs.

A vrai dire, j'ai pensé faire ce moniteur pour toutes les fonctionnalités du 310, mais je ne l'ai pas aimé car ce serait une nuisance pour l'opération et pas très populaire. Les lecteurs sont également encouragés à essayer de fabriquer des moniteurs dans des quantités qui sont dans les limites du bon sens.

en conclusion

Comment c'est? Cet article a fourni un aperçu de Numerai, des tournois, des structures de récompenses et des ensembles de données. L'ensemble de données de Numerai est supervisé par un conseiller spécialisé en finance M / L, ce qui en fait un excellent sujet au-delà de Kaggle pour l'apprentissage pratique de la finance M / L. De nombreuses récompenses sont également disponibles. Le champ de bataille des acteurs de la finance M / L est ici.

Commençons avec Numerai.

Article de référence

Prévisions du cours de l'action par machine learning "I" Prix de l'action prévu par machine learning Iroha no "ro"

Recommended Posts

Prévisions du cours des actions par apprentissage automatique Commençons Numerai
Prévision du cours de l'action par machine learning Numerai Signals
Les prévisions du cours des actions par apprentissage automatique sont si vraies Signaux Numerai
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)
Mémo d'étude Python & Machine Learning ⑦: Prévision du cours de l'action
Démarrez avec l'apprentissage automatique avec SageMaker
Prévision du cours des actions à l'aide du Deep Learning (TensorFlow)
Essayez de prédire la demande de puissance par l'apprentissage automatique
Prévision du cours des actions à l'aide du Deep Learning (TensorFlow) - Partie 2
Estimation raisonnable du prix de Mercari par apprentissage automatique
Prévision du cours de l'action à l'aide du Deep Learning [acquisition de données]
Est-il possible de manger avec les prévisions de cours de bourse par apprentissage automatique [Plan de mise en œuvre]
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
Obtenez des stocks avec Python
4 [/] Quatre arithmétiques par apprentissage automatique
Python: prévision du cours de l'action partie 1
Prédire les variations du cours des actions à l'aide de l'étiquetage métallique et de l'apprentissage automatique en deux étapes
Résumé de l'apprentissage automatique par les débutants de Python
[Python] Mes prévisions de cours de bourse [HFT]
Est-il possible de manger avec la prévision du cours des actions par apprentissage automatique [Machine learning partie 1]
Code d'acquisition de stock par grattage (Selenium)
[Échec] Trouvez Maki Horikita par apprentissage automatique
Quatre règles de fonctionnement avec l'apprentissage automatique 6 [Commercial]
Prévision de stock avec TensorFlow (LSTM) ~ Prévision de stock Partie 1 ~
Mémo d'étude Python & Machine Learning ④: Machine Learning par rétro-propagation
[Blender x Python] Commençons avec Blender Python !!