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

 

Rappelez-vous que j'ai dit que j'ai reçu un modèle qui a gagné du 01.31.2018 à aujourd'hui, et voici comment ce modèle s'est comporté ces deux semaines du 03.05.2018 à aujourd'hui. Résultat du test.

Plutôt bien pour une vieille dame formée sur 40 points et qui est sur OOS depuis un mois et demi maintenant.

Et voici l'intégralité de son OOS du 01.31.2018

Et vous pensez toujours que c'est un ajustement ???? Je vous rappelle que les captures d'écran montrent la section OOS.

 

Je vais donner des calculs qui montrent que tout n'est que bavardage inutile :

  • sans justifier soigneusement que les prédicteurs affectent la variable cible
  • le surentraînement (overfitting) n'est déterminé que sur les fichiers à TEMPS en dehors du temps de formation.

Données initiales :

Deux fichiers temporels consécutifs avec 54 prédicteurs et une variable cible sur l'inversion de tendance : short-out-long

Les calculs sont effectués dans rattle, que le premier fichier R Rat_DF1a divise en trois parties : train, test, validation. La division en parties se fait par échantillon, c'est-à-dire qu'une sélection aléatoire de barres du fichier original est effectuée.

Résultats des calculs RF : 500 arbres, 7 prédicteurs par nœud.

Nombre d'observations utilisées pour construire le modèle : 2491

L'imputation des valeurs manquantes est active.


Appelez :

randomForest(formule = trainY ~ ,

data = crs$dataset[crs$sample, c(crs$input, crs$target)],

ntree = 500, mtry = 7, importance = TRUE, replace = FALSE, na.action = randomForest::na.roughfix)


Type de forêt aléatoire : classification

Nombre d'arbres : 500

Nombre de variables essayées à chaque fractionnement : 7


Estimation par l'OOB du taux d'erreur : 1,61%.

Matrice de confusion :

-1 0 1 class.error

-1 498 5 2 0.01386139

0 3 1067 17 0.01839926

1 1 12 886 0.01446051

C'est un résultat merveilleux ! Un graal ! Notez que l'AOB est la pièce du fichier qui n'a pas été utilisée dans la formation.

Ici, nous examinons également l'erreur de formation. Nous voyons que 500 arbres ne sont pas nécessaires, nous pouvons nous en sortir avec 50 ou 100 arbres.



Vérifions-le sur la section test

Matrice d'erreurs pour le modèle Random Forest sur Rat_DF1a [test] (comptes) :


Prédiction :

Réel -1 0 1 Erreur

-1 110 3 0 2.7

0 3 221 2 2.2

1 0 2 194 1.0


Matrice d'erreurs pour le modèle Random Forest sur Rat_DF1a [test] (proportions) :


Prédiction :

Réel -1 0 1 Erreur

-1 20.6 0.6 0.0 2.7

0 0.6 41.3 0.4 2.2

1 0.0 0.4 36.3 1.0


Erreur globale : 1,8%, erreur moyenne par classe : 1,96667%.


Horodatage du hochet : 2018-03-14 10:57:23 utilisateur


Le résultat de la formation est confirmé. Graal !


Vérifions à nouveau dans la section de validation.

Matrice d'erreurs pour le modèle Random Forest sur Rat_DF1a [valider] (comptes) :


Prédiction :

Réel -1 0 1 Erreur

-1 105 1 0 0.9

0 1 218 2 1.4

1 0 1 205 0.5


Matrice d'erreurs pour le modèle Random Forest sur Rat_DF1a [valider] (proportions) :


Prédiction :

Réel -1 0 1 Erreur

-1 19.7 0.2 0.0 0.9

0 0.2 40.9 0.4 1.4

1 0.0 0.2 38.5 0.5


Erreur globale : 0,9%, erreur moyenne par classe : 0,9333333%.


Horodatage du hochet : 2018-03-14 10:59:52 utilisateur


Graal ! Vous pouvez courir vers une société de microfinance et emprunter autant d'argent que vous le pouvez !


Mais il y a un MAIS : la division du fichier a été faite par échantillonnage aléatoire des barres, et les échanges se feront strictement par augmentation du temps.

Vérifions le fichier où cette chronologie a été enregistrée - c'est Rat_DF1b.

Et voici le résultat :

Matrice d'erreur pour le modèle Random Forest sur Rat_DF1b (comptes) :


Prédiction :

Réel -1 0 1 Erreur

-1 0 324 237 100.0

0 0 633 540 46.0

1 0 152 697 17.9


Matrice d'erreurs pour le modèle Random Forest sur Rat_DF1b (proportions) :


Prédiction :

Réel -1 0 1 Erreur

-1 0 12.5 9.2 100.0

0 0 24.5 20.9 46.0

1 0 5.9 27.0 17.9


Erreur globale : 48,5%, erreur moyenne par classe : 54,63333%.


Horodatage du hochet : 2018-03-14 11:02:16 utilisateur


CATASTROPHE ! LE MODÈLE EST RÉENTRAÎNÉ ! LES PRÉDICTEURS PAR RAPPORT À LA VARIABLE CIBLE N'EST QUE DU BRUIT, SEUL LE BRUIT PEUT GÉNÉRER DES RÉSULTATS AUSSI ÉTONNANTS.


Je vous ai montré un schéma normal, commun, de niveau étudiant pour ajuster et valider le modèle. Son principal inconvénient : il ne tient pas compte de la relation entre les prédicteurs et la variable cible.

Mais le système devrait TOUJOURS être au moins cela, et il n'est PAS encore complet - vous avez encore besoin d'un test pour confirmer le résultat du test sur un fichier séquentiel ordinaire. Eh bien, et ensuite à la société de microfinance.



 
SanSanych Fomenko:

Je vais donner des calculs qui montrent que tout cela n'est que du bavardage inutile :

  • le surentraînement (overfitting) n'est déterminé que sur les fichiers par TIME en dehors du temps de formation.

C'est étrange que vous ayez obtenu d'aussi bons résultats à votre test. Dans mes expériences et là-bas, c'était bien pire. En faisant une initialisation différente du RNG avant le mélange, j'ai obtenu des résultats différents dans le test et la validation - très différents à différents RNG, à la fois par erreur et par nombre de transactions.

En conséquence, je suis arrivé à la conclusion que le test et la validation ne sont pas du tout nécessaires, et qu'il est nécessaire de s'entraîner sur un site et d'évaluer sur l'autre (vous l'avez dans un fichier séparé). De cette façon, le facteur aléatoire de la "bonne chance" du mélange sera exclu.

 

Les gars, le Graal est-il prêt ?

 
SanSanych Fomenko:

Je vais donner des calculs qui montrent que tout n'est que bavardage inutile :

  • sans justifier soigneusement que les prédicteurs affectent la variable cible
  • le surentraînement (overfitting) n'est déterminé que sur les fichiers à TEMPS en dehors du temps de formation.

Données initiales :

Deux fichiers temporels consécutifs avec 54 prédicteurs et une variable cible sur l'inversion de tendance : short-out-long

Les calculs sont effectués dans rattle, que le premier fichier R Rat_DF1a divise en trois parties : train, test, validation. La division en parties se fait par échantillon, c'est-à-dire qu'une sélection aléatoire de barres du fichier source est effectuée.



Mais il y a un MAIS : la division du fichier se fait par sélection aléatoire des barres, alors que le trading se fera strictement par augmentation du temps.

Vérifions le fichier où cette chronologie a été enregistrée - Rat_DF1b.



Erreur globale : 48,5%, Erreur moyenne par classe : 54,63333%.


Horodatage du hochet : 2018-03-14 11:02:16 utilisateur


CATASTROPHE ! LE MODÈLE EST RÉENTRAÎNÉ ! LES PRÉDICTEURS PAR RAPPORT À LA VARIABLE CIBLE N'EST QUE DU BRUIT, CE N'EST QUE SUR DU BRUIT QUE MO PEUT GÉNÉRER DES RÉSULTATS AUSSI ÉTONNANTS.


Je vous ai montré un schéma normal, commun, de niveau étudiant pour ajuster et valider le modèle. Son principal inconvénient : il ne tient pas compte de la relation entre les prédicteurs et la variable cible.

Mais le système devrait TOUJOURS être au moins cela, et il n'est PAS encore complet - vous avez encore besoin d'un test pour confirmer le résultat du test sur un fichier séquentiel ordinaire. Eh bien, alors à la société de microfinance.



Il s'agit d'une erreur de base dans la division en sous-ensembles (train/val/test). L'ordre doit être le suivant :

  1. Divisez l'ensemble des données ordonnées dans le temps en train/val/test.
  2. Lors de la formation, seul l'ensemble de formation (jamais l'ensemble de validation et l'ensemble de test) doit être mélangé. Je parle bien sûr de la classification.
  3. Tous les paramètres de transformation et de transformation des prédicteurs sont obtenus uniquement sur l'ensemble d'entraînement. Nous les utilisons sur val/test.
  4. Évaluation, sélection et création de prédicteurs uniquement sur le jeu de formation.

Bonne chance,

 

Lorsqu'il s'agit d'estimer des prédicteurs à l'aide de modèles, je pense que le paquet le plus avancé est RandomUniformForest. Il traite de manière très détaillée l'importance des prédicteurs de différents points de vue. Je vous recommande d'y jeter un coup d'œil. Dans un de mes articles, je l'ai décrit en détail.

J'ai refusé d'utiliser la sélection de modèles de prédicteurs. Limitée aux spécificités du modèle utilisé.

Bonne chance

 
Vladimir Perervenko:
  1. Lors de la formation, nous ne mélangeons que l'ensemble de formation (jamais l'ensemble de validation et l'ensemble de test). En parlant de classification, bien sûr.

De Nikopenko S., Kadurin A., Arkhangelskaya E. "Deep Learning" p. 139.


Pour que les données de validation soient de même nature que les données de formation, vous devez les mélanger. Sinon, un morceau de tendance aléatoire ou un appartement peut y apparaître. Par conséquent, nous n'évaluerons pas le modèle pour sa capacité à généraliser, mais pour l'adapter à un certain morceau d'histoire continue à une certaine période de temps (nous nous arrêterons là, après tout).

Mais, comme je l'ai écrit plus haut, après avoir expérimenté avec différentes initialisations de GSF, dans lesquelles différents lots valides ont été obtenus avec succès, - je suis arrivé à la conclusion que le lot valide n'est probablement pas nécessaire. En plus de cela, il est possible d'utiliser d'autres méthodes de régularisation. Cependant, ces expériences ont porté sur une petite quantité de données (5 jours), et si le nombre d'exemples augmente de 10 fois, peut-être que le mélange sera plus uniforme et que les données sur ces sections seront homogènes (c'est-à-dire de même nature) - dans ce cas, la validité peut être utile.

Mise à jour : Dans le cas où il y a beaucoup de données et que plusieurs retournements et tendances dans les deux sens sont inclus dans le graphique valide, le mélange avec l'ensemble d'entraînement peut ne pas être nécessaire.
 
Vladimir Perervenko:

Lorsqu'il s'agit d'estimer des prédicteurs à l'aide de modèles, je pense que le paquet le plus avancé est RandomUniformForest. Il traite de manière très détaillée l'importance des prédicteurs de différents points de vue. Je vous recommande d'y jeter un coup d'œil. Dans un de mes articles, je l'ai décrit en détail.

J'ai refusé d'utiliser la sélection de modèles de prédicteurs. Limitée aux spécificités du modèle utilisé.

Bonne chance

Et je pense que le plus avancé est un produit complètement différent ;-).... Dans lequel il est mis en œuvre d'une manière légèrement différente.

Deux réseaux, où l'échantillon est divisé en 2 sous-échantillons train et test, où pour le réseau B (le deuxième polynôme), le traynôme est le test et le test est le traynôme. Cela compte exclusivement l'échantillon test, où la moitié est travaillée par un polynôme, l'autre par l'autre. Et les classes sont divisées de manière égale. C'est-à-dire que les uns sont divisés de manière égale en plateau et en test, et par conséquent les zéros sont également divisés de manière égale. Malheureusement, il n'y a pas de temps à perdre. Le fichier peut être placé dans n'importe quel ordre de vecteurs. C'est peut-être la clé pour réduire le dépassement.


Vérité que je ne comprends pas bien, peut-être qu'en parlant de la zone de validation il s'agit d'une trace dans mon optimiseur préféré ?

Et dans votre cas, la section de test est un contrôle, lorsque nous laissons le réseau fonctionner pendant un certain temps... Je suis confus par les concepts...

 

Dans tous les cas, je pense que la section de test ne peut en aucun cas influencer la section de formation et qu'elle doit être formée de manière aussi aléatoire que possible pour les tâches de classification, où la section de test, même si elle est ordonnée par le temps, ne dépendra pas de ce même temps. Pourquoi ? Parce qu'en mélangeant toutes les données, nous essayons de tirer le véritable potentiel de cet ensemble, et non un heureux concours de circonstances sous forme d'ordre. Donc quand vous mélangez vos données, vous voyez vraiment ce que vos données peuvent faire... Comme cela....

Avec des optimisations multiples, le résultat devrait sauter dans les 10-20% est juste le même à cause de l'ordonnancement des données, une fois bien ordonné, l'autre fois un peu moins bien, etc etc..... IMHO ! !!

 
elibrarius:

De Nikopenko S., Kadurin A., Arkhangelskaya E. "Deep Learning" p. 139.


Pour que les données de validation soient de même nature que les données de formation, vous devez les mélanger. Sinon, il peut y avoir un morceau de tendance ou un plat aléatoire. Par conséquent, nous n'évaluerons pas le modèle pour sa capacité à généraliser, mais pour l'adapter à un certain morceau d'histoire continue à une certaine section (nous nous arrêterons là, après tout).

Mais, comme je l'ai écrit plus haut, après avoir expérimenté avec différentes initialisations de GSF, dans lesquelles différents lots valides ont été obtenus avec succès, - je suis arrivé à la conclusion que le lot valide n'est probablement pas nécessaire. En plus de cela, il est possible d'utiliser d'autres méthodes de régularisation. Cependant, ces expériences ont porté sur une petite quantité de données (5 jours), et si le nombre d'exemples est multiplié par 10, le mélange sera peut-être plus uniforme et les données sur ces graphiques seront plus homogènes (c'est-à-dire de même nature).

Mise à jour : S'il y a beaucoup de données et que le tracé valide comprend plusieurs cannelures et des tendances dans les deux sens, alors le mélange avec l'ensemble d'entraînement peut ne pas être nécessaire dans ce cas.

L'esprit de contradiction de la jeunesse est indomptable :)

Je parlais de la classification des séries chronologiques. Par exemple pour le M15 deux semaines pour l'entraînement environ 1000 bars. La semaine suivante pour la validation est de 500 barres. Pendant la formation, nous mélangeons l'ensemble de formation, mais pas l'ensemble de validation.

Le mélange de l'ensemble avant la séparation est nécessaire dans deux cas : les ensembles stratifiés et la validation croisée. Dans ce cas également, l'échantillonnage doit se faire sans substitution pour éviter d'inclure les mêmes exemples dans les deux ensembles.

Étant donné que nous n'avons pas de limite sur le nombre d'exemples et qu'il s'agit de séries temporelles, il est préférable de diviser avant de mélanger. IMHO