L'Apprentissage Automatique dans le trading : théorie, modèles, pratique et trading algo - page 6

 
Dr. Trader:

Le "fichier CSV" et le "jeu de données R" de l'onglet "évaluation" sont simplement des façons différentes de spécifier la source de données. Si vous y introduisez les mêmes données, vous obtiendrez le même résultat lorsque vous testerez le modèle.

Si avant le hochet exécuter

alors ce dataset_validate sera maintenant disponible dans l'onglet evaluate comme dataset R. Mais le résultat du contrôle de modèle sera finalement le même que si vous sélectionnez simplement l'option de fichier csv et spécifiez le fichier C:/dummy_set_validation.csv, les données pour le test seront identiques dans les deux cas.

L'entraînement lui-même s'est déroulé sur un fichier différent, dummy_set_features.csv, donc il est impossible de faire des prévisions, car les données des deux fichiers sont différentes et ne dépendent pas du tout du temps (mais de la formule). Je pense que le réseau neuronal a fait un excellent travail et a trouvé 6 entrées qui déterminent le résultat, a réduit l'influence des autres entrées, et avec une certaine logique neuronale a décrit la formule souhaitée.

Juste au cas où, j'ai vérifié les deux fichiers pour trouver les chaînes dupliquées s'il y en a. Voici le code en R :

Si cela est fait avant le cliquetis, les deux tablesdataset_train etdataset_validate sont disponibles pour la formation et la vérification du modèle, et il n'y aura pas de doublons. Glory R.

le fichier de validation du modèle contenait 23 répétitions de l'échantillon d'entraînement, mais à part cela, il comporte 3000 autres lignes uniques, de sorte que l'évaluation du modèle n'a pas pu être affectée de manière significative.

Apparemment, je suis incapable d'expliquer ce que je veux.

1. Pourriez-vous indiquer les dates de début et de fin des deux fichiers ?

2.Rien ne peut être enlevé du fichierdataset_validate, car ce fichier simule l'arrivée de barre après barre.

 

J'y ai réfléchi un peu plus ce matin, ce n'est vraiment pas si simple.

Selon votre formule, il n'y a que 2^6 = 64 combinaisons d'entrées utilisées. Si l'algorithme d'apprentissage détermine d'une manière ou d'une autre l'importance de ces 6 entrées, alors il peut très bien se souvenir des 64 combinaisons. Et alors, peu importe que la combinaison de toutes les entrées de l'échantillon de validation soit unique, le modèle ne prendra que ces 6 entrées significatives et déterminera une réponse déjà connue. C'est comme ça que ça a marché pour moi avec le neurone. J'ai maintenant supprimé quelques combinaisons d'entrées 1,3,5,7,9,11 du fichier de formation, mais j'ai laissé des combinaisons similaires dans le fichier de validation. L'erreur pendant l'apprentissage est restée à 0%, mais pendant la validation, elle a augmenté à 50% sur ces nouvelles combinaisons. Et c'est une mauvaise chose, car sur le marché des changes, l'écart de taux aurait fait passer le dépôt en moins. SanSanych a raison, c'est une question de reconversion, j'admets que j'avais tort.

Apparemment, c'est la raison pour laquelle de nombreux modèles ne fonctionnent pas sur le marché des changes, ils se souviennent de certaines combinaisons mais ne sont pas capables d'en gérer de nouvelles.

 
SanSanych Fomenko:

Apparemment, je suis incapable d'expliquer ce que je veux.

1. Pourriez-vous indiquer les dates de début et de fin des deux fichiers ?

2.Rien ne peut être supprimé du fichierdataset_validate, carce fichier simule l'arrivée barre après barre.

Non, c'est vrai, j'ai compris. Ce que vous dites s'applique au forex, et je suis d'accord avec cela. Mais je parlais des fichiers d'Alexey et de l'entraînement du modèle sur ceux-ci.

https://c.mql5.com/3/96/dummy_set_features.zip - formation

https://c.mql5.com/3/96/dummy_set_validation.zip - validation

le résultat dans les fichiers est défini par la formule "1-mod(somme(entrée_1 ; entrée_3 ; entrée_5 ; entrée_7 ; entrée_9 ; entrée_11);2)".

Veuillez me donner un lien vers les fichiers que vous avez mentionnés et je vais essayer d'entraîner le neurone sur ces fichiers.

 
Les gars,

J'ai bien compris que la forêt est surentraînée sur toutes les données, bien que j'aie mis en évidence les caractéristiques importantes. Il doit effacer les données et s'entraîner à nouveau.

Est-ce que le NS sans nettoyage des données a bien appris ?

Merci.
 
Dr. Trader:

Non, c'est vrai, j'ai compris. Ce que vous dites s'applique au forex, et je suis d'accord avec cela. Mais je parlais des fichiers d'Alexei, et de la formation des modèles sur ces fichiers.

https://c.mql5.com/3/96/dummy_set_features.zip - formation

https://c.mql5.com/3/96/dummy_set_validation.zip - validation

le résultat dans les fichiers est défini par la formule "1-mod(somme(entrée_1 ; entrée_3 ; entrée_5 ; entrée_7 ; entrée_9 ; entrée_11);2)".

Veuillez me donner un lien vers les fichiers que vous avez mentionnés, je vais essayer d'entraîner les neurones sur ces fichiers.

Voilà, dans les archives.

C'est RData. Ouvrez R, chargez rattle et les cadres de données sont disponibles.

"R1.F1" "R1.F3" "R1.F4" "R1.F5" "R1.F6" - ceci est pour la formation, a différentes variables cibles qui sont marquées avec Fi.

"R2.F1" "R2.F3" "R2.F4" "R2.F5" "R2.F6" - ceci est pour les tests.

"Rat_DF1" "Rat_DF2" "Rat_DF3" est le fichier qui contient toutes les variables cibles.

Dossiers :
ALL_cod.zip  3281 kb
 
Alexey Burnakov:
Les gars,

J'ai bien compris que la forêt est surentraînée sur toutes les données, bien que j'aie mis en évidence les caractéristiques importantes. Il doit effacer les données et s'entraîner à nouveau.

Est-ce que le NS sans nettoyage des données a bien appris ?

Merci.
Oui, pour cette tâche du premier post, c'est comme ça. Mais si l'on applique la NS pour le forex, la NS sur les déchets sera également surentraînée et fonctionnera moins bien sur les nouvelles données, donc la sélection des données d'entrée est également pertinente.
 
Dr.Trader:
Oui, pour cette tâche, depuis le premier post, c'est comme ça. Mais si vous appliquez la NS au forex, la NS sur les déchets va également se surentraîner et obtenir de moins bonnes performances sur les nouvelles données, de sorte que la sélection des données d'entrée est également pertinente.

d Les données du test sont propres. Il y a donc un modèle à suivre sur tous les sites. Sur des données réelles, vous ne pouvez pas vous passer de diviser l'échantillon d'entraînement en plusieurs parties et de contrôler les performances sur un sous-échantillon ou plusieurs sous-échantillons lors de l'entraînement du modèle. Il s'agit d'une règle empirique simple.

Mais pour tester la capacité de réentraînement de modèles "prêts à l'emploi" comme les forêts aléatoires, il a été utile de constater qu'ils apprennent carrément du bruit - sur validation, un désordre complet. Cependant, ils sélectionnent correctement les prédicteurs importants.

Mais, même sur des données propres, où 14 prédicteurs sont du pur bruit (des nombres entrés au hasard sans connexion ni sortie), la forêt a commencé à les utiliser pour la formation. et c'est quelque chose que j'ai rencontré moi-même auparavant.

Et un autre aspect, très important. L'exemple de test contient des observations mutuellement indépendantes. Chaque ligne n'est en aucun cas dépendante d'une autre. En réalité, sur une série temporelle, les observations voisines seront dépendantes. Par exemple, deux valeurs voisines d'une boule ondulante seront fortement corrélées. Et donc toutes - j'insiste, TOUTES - les méthodes échoueront sur les données brutes réelles. Idéalement, la bonne façon de préparer des données réelles pour l'entraînement consiste à les sélectionner de manière à ce que les observations voisines ne soient pas physiquement liées. Pour les séries temporelles, cela signifie que si vous prenez des indicateurs avec une fenêtre de 20, alors les observations voisines dans l'échantillon d'entraînement doivent être prises à au moins 20 pas d'intervalle. Pour qu'ils ne soient pas liés entre eux. C'est alors que les statistiques et l'apprentissage correct des modèles commencent à fonctionner et non plus des accumulations aléatoires de données similaires. J'espère que vous comprenez ce que je veux dire.

Lorsque je reviendrai de mon voyage d'affaires, je ferai également une expérience en public en utilisant des données forex réelles. Et peut-être le faire déjà ensemble dans le but pratique de profiter des modèles.

Alexey

 
Dr. Trader:

Mais comme le SN est comme une boîte noire, il n'est pas possible de connaître la logique de la solution. Vous pouvez regarder les poids, déterminer la valeur absolue moyenne pour chaque entrée et dessiner un diagramme. Et découvrez que 1, 3, 5, 7, 9, 11 sont plus importants que les autres. Cependant, les autres entrées sont également utilisées pour une raison quelconque ; les poids nuls sont introuvables. En d'autres termes, c'est l'inverse, nous apprenons d'abord, et ensuite nous pouvons identifier les entrées importantes.

Essayez une sorte d'algorithme de contraste NS. L'algorithme est capable de filtrer lui-même les entrées (vous n'avez pas besoin de les trier par une navigation "manuelle") et les connexions (et les neurones de la couche cachée, bien sûr). La sortie sera un résumé de la logique de l'opération.
 
SanSanych Fomenko:

Voilà, dans les archives.

C'est RData. Ouvrir R, charger rattle et à partir de celui-ci des cadres de données sont disponibles

"R1.F1" "R1.F3" "R1.F4" "R1.F5" "R1.F6" - ceci est pour la formation, a différentes variables cibles qui sont marquées avec Fi.

"R2.F1" "R2.F3" "R2.F4" "R2.F5" "R2.F6" est pour les tests.

"Rat_DF1" "Rat_DF2" "Rat_DF3" est le fichier qui contient toutes les variables cibles.

Merci, j'ai essayé. Je vois que vous avez fait beaucoup pour sélectionner les prédicteurs, pour que les neurones s'entraînent facilement sur eux, et que vous avez stocké le résultat sur le jeu de données de contrôle également.

Les résultats ci-dessous se réfèrent à la formation sur R1.F3

1) Le hochet est un résultat intéressant. HH avec la configuration standard a montré des erreurs de formation/validation/testing de 30%/29%/33%. L'erreur sur R2.F3 est de 35%. Mais tout ceci n'est qu'un cas de chance, en réalité. Dans une autre configuration, il aurait facilement été sous-formé ou surformé, ici il a juste eu de la chance.

2) J'ai ensuite adopté une approche simple et grossière avec un apprentissage non supervisé, 200 neurones cachés, le réseau a été entraîné jusqu'à ce qu'il cesse de s'améliorer. Erreurs former/valider/tester/R2.F3 - 2%/30%/27%/45%. En clair, le réseau est réentraîné.

3) L'apprentissage supervisé. C'est différent des arbres, mais vous devez toujours faire cela avec un neurone pour ne pas le surentraîner. Il s'agit essentiellement d'interrompre l'entraînement de temps en temps et de vérifier les résultats de l'entraînement/de la validation/du test. Je ne connais pas la règle d'or en matière de collationnement des résultats, mais il est tout à fait normal de s'entraîner sur l'ensemble de données d'entraînement, puis de rechercher les erreurs dans les ensembles de données de validation et de test, et d'arrêter l'entraînement lorsque les erreurs dans la validation et le test cessent de diminuer. Cela donne une sorte de garantie contre le surentraînement. R2.F3 est considéré comme indisponible pendant tout ce processus, et le test n'est effectué qu'après la fin de la formation. Dans ce cas, les erreurs train/validation/testing/R2.F3 sont de 27%/30%/31%/37%. Là encore, il y a surentraînement, mais pas beaucoup. Vous auriez pu arrêter le processus d'apprentissage dès que l'erreur de formation est devenue nettement inférieure aux erreurs de validation et de test, mais c'est une supposition... pourrait ou ne pourrait pas avoir aidé.

La variable cible "R1.F1" a trois valeurs, Rattle ne peut pas faire cela avec la neuronique et vous devez écrire votre propre code en R, j'ai ignoré cet ensemble de données.

"R1.F4" "R1.F5" "R1.F6" a donné approximativement les mêmes résultats pour les 4 erreurs dans Rattle neuronka, je pense qu'une approche adéquate avec neuronka donnera également approximativement les mêmes résultats, je ne les ai pas traités davantage.

 

A propos de la méthodologie d'enseignement.

J'ai décrit ici une méthode standard qui est généralement applicable et donne de bons résultats : https://www.mql5.com/ru/blogs/post/661499.

Laissez-moi vous expliquer brièvement : divisez toutes les données en deux parties - formation et validation. La validation doit être aussi large que vous pensez en avoir besoin. J'ai fait ce qui suit. Je prends 15 ans de citations d'une minute. Je calcule les entrées et les sorties, j'éclaircis les données de manière à ce que les observations soient physiquement différentes (je les fais passer par n barres, où n n'est pas inférieur à la plus grande fenêtre utilisée dans l'indicateur et pas inférieur au décalage le plus éloigné). Réfléchissez à la raison pour laquelle cela est correct. Les données deviennent mutuellement indépendantes.

Ensuite, je prends la partie formation (la plus importante) - 10 ans dans le passé le plus lointain. Je crée des index de lignes pour la validation croisée. C'est-à-dire que je divise les données en 5 parties égales, séparées de manière rigide par la date. Pendant la validation croisée, le modèle passe par des paramètres d'apprentissage tels que la profondeur, le nombre d'itérations, etc., s'entraîne sur quatre morceaux d'entraînement ponctuels et mesure l'erreur sur un cinquième du morceau d'entraînement. Il le fait 5 fois, en sélectionnant à chaque fois une partie de test différente sur cinq. Il obtient cinq mesures d'erreur (pour un ensemble de paramètres d'apprentissage). Elles sont moyennées et données comme une valeur d'erreur de test sur les données non impliquées dans l'apprentissage.

Le modèle effectue ensuite ce travail n * m * s * d fois, où n,m,s,d sont les paramètres d'apprentissage. C'est une force brute sur la grille. Elle peut atteindre des centaines d'itérations. Vous pouvez effectuer une recherche aléatoire ou une recherche génétique. Ez Yu vish.

Nous obtenons alors un tableau de métriques d'erreur par validation croisée correspondant à l'ensemble des paramètres d'apprentissage. Nous devrions juste prendre le meilleur résultat et ces paramètres. Et ensuite, former l'ensemble de l'échantillon de formation sur ces paramètres. Une limite du nombre d'itérations sera également spécifiée pour NS afin d'éviter tout surentraînement.

Et à la fin, validez le modèle sur 5 ans de devis pour évaluer les performances hors échantillon.

Dans l'ensemble, la validation croisée est jusqu'à présent le meilleur choix pour une formation efficace des modèles. Je vous conseille de l'essayer.

Le paquet dans R est caret.

A bientôt.

Alexey

СОПРОВОЖДЕНИЕ ЭКСПЕРИМЕНТА ПО АНАЛИЗУ ДАННЫХ ФОРЕКСА: первое серьезное обучение модели и результаты
СОПРОВОЖДЕНИЕ ЭКСПЕРИМЕНТА ПО АНАЛИЗУ ДАННЫХ ФОРЕКСА: первое серьезное обучение модели и результаты
  • 2016.02.27
  • Alexey Burnakov
  • www.mql5.com
Начало по ссылкам: https://www.mql5.com/ru/blogs/post/659572 https://www.mql5.com/ru/blogs/post/659929 https://www.mql5.com/ru/blogs/post/660386 https://www.mql5.com/ru/blogs/post/661062