L'apprentissage automatique dans la négociation : théorie, modèles, pratique et algo-trading - page 1276

 
Maxim Dmitrievsky:

tous les castors construisent le même barrage, même s'ils ne le savent pas.

mais chacun s'entête à croire qu'il a inventé quelque chose de nouveau.

Le castor est une créature travailleuse et vertueuse, tout autre chose ,un castor étudiant est une créature méchante, chassez-le avec un balai de partout, ou mieux ignorez-le tout simplement.

 
Kesha Rutov:

Le castor est une créature correcte et travailleuse, tout autre chose ,l'apprenti cavalier est une créature méchante, chassez-le avec un balai de partout, ou mieux encore, ignorez-le tout simplement.

"Analyste dans un bocal" :)) lave-vaisselle, va te faire foutre.

 
Aleksey Vyazmikin:

Le point est que même si 50% de tous sont pris, alors plus loin il y a une sélection claire de ces 50% à la première division de racine (ou dans Alglib il n'est pas ainsi ?). CatBoost a non seulement une sélection aléatoire des prédicteurs, mais aussi une répartition aléatoire (les poids sont ajoutés de manière aléatoire aux calculs) sur les premiers arbres.

J'obtiens des résultats différents, et mon objectif n'est pas d'estimer le modèle entier, mais d'obtenir des feuilles qui ont de fortes chances de décrire la majorité de l'échantillon. Ensuite, ces feuilles sont testées sur l'historique année par année et on en fait une composition, qui ne décrit peut-être pas l'ensemble du marché, mais je pense qu'il vaut mieux avoir des réponses plus précises à ce que l'on sait que de deviner avec une probabilité de 50% dans la plupart des cas.

Selon les prévisions, il y en aura environ 600 aujourd'hui, de sorte qu'une surenchère totale n'est pas réaliste.

Alglib passe en revue tous les prédicteurs restants de 50%, divise chacun d'eux en 4 parties par quartiles, et choisit la division avec la meilleure erreur parmi toutes les variantes.

En principe, le partitionnement aléatoire n'est pas difficile à réaliser.
Je n'ai pas vu d'arbres individuels avec de bons résultats (45-50%), mais une forêt d'arbres est plus intéressante).


 
En termes d'importance des prédicteurs examinés :
Les paquets xgboost, lightGBM avaient des méthodes intégrées pour estimer l'importance des caractéristiques pour les "modèles en bois" :

  1. Gain
    Cette mesure montre la contribution relative de chaque caractéristique au modèle. Pour la calculer, nous parcourons chaque arbre, nous regardons pour chaque nœud de l'arbre quelle caractéristique conduit à une division du nœud, et de combien l'incertitude du modèle est réduite selon la métrique (impureté de Gini, gain d'information).
    Pour chaque caractéristique, sa contribution est additionnée sur tous les arbres.
  2. Couverture
    Indique le nombre d'observations pour chaque caractéristique. Par exemple, vous avez 4 éléments, 3 arbres. Supposons que le fichier 1 comporte 10, 5 et 2 observations dans les nœuds 1, 2 et 3 de l'arbre respectivement, l'importance de ce fichier serait de 17 (10 + 5 + 2).
  3. Fréquence
    Montre combien de fois une caractéristique donnée est trouvée dans les nœuds de l'arbre, c'est-à-dire que le nombre total de nœuds d'arbre divisés pour chaque caractéristique dans chaque arbre est compté.
Ils ne divisent pas vraiment l'importance correctement.
J'ai une forêt formée sur 5 barres qui donne de meilleurs résultats dans un test que 100. Mais lorsqu'on enseigne par 100, les 5 premiers ne sont pas marqués comme importants, mais certains très éloignés.
Lors de l'entraînement à 100, l'erreur des arbres individuels et des forêts est plus faible - manifestement en raison du surentraînement et de l'importance accordée aux barres 30-100. Mais il est évident qu'ils ne sont pas importants selon la logique habituelle, mais parce que la forêt à 5 barres donne de meilleurs résultats.
 
Au fait, je ne comprends pas la différence entre Couverture et Fréquence ? Plus précisément, qu'est-ce qu'une observation de fonctionnalité dans Cover ? (Je comprends avec la ventilation par une puce en Fréquence). Les arbres semblent être divisés par des caractéristiques, non observées.
 
Aleksey Vyazmikin:

Il y a un script R avec un algorithme génétique pour créer un arbre, sélectionner les générations par amélioration de l'entropie. Ensuite, il y a une sorte de sélection finale. Je prends tous les arbres pour la sélection finale et j'en retire les feuilles pour d'autres mesures séparées dans MT5. Le scénario n'a pas été rendu public, il n'y a donc pas non plus de description détaillée. Apparemment, c'est comme sélectionner le meilleur arbre de la forêt, mais il y a une limitation de la profondeur pour éviter le surentraînement, ainsi le processus prend environ 2 jours sur tous les noyaux sur le dernier échantillon, où pas toutes les barres, mais seulement les signaux à entrer, et si toutes les barres pour 3 ans, alors le calcul prend 1,5 mois là. Après le calcul, j'ai divisé l'arbre, c'est-à-dire que j'ai enlevé la colonne avec le prédicteur racine du meilleur arbre de population et j'ai tout recommencé, il est apparu que même avec 40 procédures de ce type, de très bonnes feuilles peuvent être formées, j'en suis donc venu à la conclusion que le meilleur arbre mathématique n'est pas toujours le plus efficace, et qu'une information interfère avec une autre, ce qui est apparu plus tard utilisé dans le même CatBoost, quand on choisit au hasard des prédicteurs de tous les échantillons pour construire un arbre.

Après un rapide examen du code, j'ai vu une sélection génétique de fonctionnalités pour la construction d'un arbre à partir du paquet rpart. Ainsi, chaque arbre s'est vu proposer d'apprendre son propre ensemble de caractéristiques. En raison de la génétique, cet ensemble de caractéristiques est plus rapide que la force brute complète.
Mais l'arbre n'est pas magique, c'est celui proposé par rpart. Je pense que c'est la norme là-bas.
 
Maxim Dmitrievsky:

Entraînez d'abord le modèle sur toutes les caractéristiques et sauvegardez les erreurs.

Puis, un par un, randomisez chacun des prédicteurs, disons par une distribution normale, et vérifiez à nouveau l'erreur sur toutes les caractéristiques, y compris celle qui a été randomisée (modifiée), et comparez-la à l'erreur initiale. Il n'est pas nécessaire de réentraîner le modèle. Et ainsi vérifier chacun des prédicteurs. Si le prédicteur était bon, l'erreur sur l'ensemble de l'échantillon (y compris tous les autres prédicteurs originaux) augmentera considérablement par rapport à l'original. Enregistrez les différences d'erreurs et sélectionnez les meilleures fiches en fonction de celles-ci. Puis, à la fin, ne former que les meilleurs et les mettre en production. Les mauvais prédicteurs sont du bruit pour le modèle, nous n'en avons pas besoin avec leur 1%. Les bons restent généralement 5 à 10, l'importance des autres diminue de manière exponentielle (loi de Zipf).

J'ai essayé d'enseigner les filtres, mais pas beaucoup, je n'y vois pas beaucoup de sens, il vaut mieux tout mettre dans un modèle à la fois

Si vous pouvez, juste au sujet de la sélection des prédicteurs TRES compétent(déjà jeté plus tôt)

J'ai trouvé votre article sur la permutation.
C'est une variante intéressante. Je vais devoir l'essayer.
Je crains cependant que si je l'applique à un modèle sur 100 barres, et que j'essaie de supprimer 95 barres et de laisser les 5 premières, le résultat sera de 50%. Après tout, ces 5 premiers n'ont guère été impliqués dans les scissions (en moyenne, seuls 5% des nœuds sont construits sur eux).
 
elibrarius:
J'ai trouvé votre article sur la permutation.
Variante intéressante. Je dois essayer.
Je crains cependant que si je l'applique à un modèle de 100 barres et que j'essaie de supprimer 95 barres en laissant les 5 premières, le résultat sera de 50 %. Après tout, ces 5 premiers n'ont guère été impliqués dans les scissions (en moyenne, seuls 5% des nœuds sont construits sur eux).

Je ne sais pas ce que vous faites avec 100 barres, vous devriez probablement l'appliquer correctement et vous serez bien.

 
Maxim Dmitrievsky:

Je ne sais pas ce que vous faites avec 100 barres, vous devez probablement l'appliquer correctement et cela fonctionnera.

Je veux automatiser le processus d'élimination des prédicteurs non importants.)

 
Maxim Dmitrievsky:

Entraînez d'abord le modèle sur toutes les caractéristiques et sauvegardez les erreurs.

Puis, un par un, randomisez chacun des prédicteurs, disons par une distribution normale, et vérifiez à nouveau l'erreur sur toutes les caractéristiques, y compris celle qui a été randomisée (modifiée), et comparez-la à l'erreur initiale. Il n'est pas nécessaire de réentraîner le modèle. Et ainsi vérifier chacun des prédicteurs. Si le prédicteur était bon, l'erreur sur l'ensemble de l'échantillon (y compris tous les autres prédicteurs originaux) augmentera considérablement par rapport à l'original. Enregistrez les différences d'erreurs et sélectionnez les meilleures fiches en fonction de celles-ci. Puis, à la fin, ne former que les meilleurs et les mettre en production. Les mauvais prédicteurs sont du bruit pour le modèle, nous n'en avons pas besoin avec leur 1%. Les bons restent généralement 5 à 10, l'importance des autres diminue de manière exponentielle (loi de Zipf).

J'ai essayé d'enseigner les filtres, mais pas beaucoup, je n'y vois pas beaucoup de sens, il vaut mieux tout mettre dans un modèle à la fois

Si vous pouvez, juste au sujet de la sélection des prédicteurs TRES compétent(déjà jeté plus tôt)

J'ai compris cette méthode différemment.
Pour le prédicteur étudié, nous ne devons pas introduire des valeurs aléatoires avec une distribution normale, mais simplement mélanger les lignes de cette colonne.

Quoi qu'il en soit, les résultats de l'article sont impressionnants. Je devrais l'essayer en pratique.