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

 
mytarmailS #:
Et il sera vide de toute façon

Oui, si vous ne voulez pas.

 
mytarmailS #:
Il est triste de constater que l'apprentissage automatique avec ciblage ne fonctionne pas et que l'apprentissage unique ne fonctionne pas....

supprimer les caractéristiques symétriques pour réduire les biais.

Par exemple, remplacer les incréments par des incréments absolus (volatilité).

Cela aide parfois

 
Maxim Dmitrievsky #:

supprimer les caractéristiques symétriques pour réduire le biais

par exemple, remplacer les incréments par des incréments absolus (volatilité)

Cela peut parfois être utile.

Non, c'est beaucoup plus compliqué que cela.
 
Aleksey Vyazmikin #:

Mon idée est d'obtenir un modèle qui sélectionnera les segments quantiques stables en fonction d'un certain nombre de caractéristiques statistiques. Tout le monde est invité à se joindre à ce projet.

Pourquoi êtes-vous si obsédé par ces quanta ?... ?

Ils n'ont rien d'intellectuel. Il suffit de diviser, par exemple, 10000 lignes en 100 morceaux, c'est-à-dire de les trier et de compter 100 lignes à partir du bas, si les suivantes coïncident avec la centième ligne (c'est-à-dire qu'elles se répètent), alors nous les renvoyons toutes au premier morceau. Si les doublons sont dépassés, on commence à taper les lignes dans le deuxième quantum - les 100 lignes suivantes + les doublons s'il y en a. Et ainsi de suite jusqu'à ce que nous soyons à court de lignes.

Même un arbre contient des ordres de grandeur d'informations plus utiles (parce qu'il est formé sur des données) que ces segments quantiques (juste 100 chaînes triées avec des doublons).

 
Forester #:

Pourquoi vous intéressez-vous tant à ces quants ? ....

Il n'y a rien d'intellectuel là-dedans. Il suffit de diviser, par exemple, 10000 lignes en 100 morceaux, c'est-à-dire de les trier et de compter 100 lignes à partir du bas, si les suivantes coïncident avec la centième ligne (c'est-à-dire les répétitions), alors nous les renvoyons toutes au premier morceau. Si les doublons sont dépassés, on commence à taper les lignes dans le deuxième quantum - les 100 lignes suivantes + les doublons s'il y en a. Et ainsi de suite jusqu'à ce que nous soyons à court de lignes.

Même un arbre contient des ordres de grandeur d'informations plus utiles (parce qu'il est formé sur des données) que ces segments quantiques (juste 100 lignes triées avec des doublons).

Les segments quantiques sont les briques à partir desquelles le modèle CatBoost est construit. Initialement, d'après ce que j'ai compris, cette méthode a permis d'économiser de la mémoire et d'accélérer les calculs en général. Un gain secondaire est la réduction des variantes de combinaisons d'indicateurs prédicteurs, un pas est fait vers la réduction de la multicollinéarité, ce qui en général contribue à la rapidité et à la qualité de la formation. En outre, le problème de la dérive des données est en partie résolu.

J'y vois également une incitation à explorer le potentiel de l'estimation probabiliste dans les données des segments quantiques. Si nous prenons la méthode de quantification que vous proposez (en fait, il est préférable d'imaginer que le but du processus est de trier les groupes homogènes - analogue - clustering), et que nous divisons les données en 20 segments quantiques égaux en fonction du nombre d'exemples, il s'avère que dans chaque segment quantique, il ne reste que 5% de données. CatBoost crée par défaut 254 séparateurs - 255 segments. Les arbres sont ensuite construits à partir de ces segments. On suppose que tous les segments quantiques sont également utiles et que leur interposition doit être déterminée en partitionnant le groupe en sous-groupes, par la méthode de construction d'un arbre de décision. Le partitionnement se fait à la fois par la racine et par d'autres prédicteurs. Même si nous prenons un seul arbre, combien d'exemples originaux de la classe positive "1" resteront dans la liste finale après 6 divisions ? Nous devons tenir compte du fait que la sélection des divisions est basée sur la métrique du nombre cumulé de divisions quantiques. Si l'on tient compte de la méthode de construction de l'arbre elle-même, il devient évident que plus la partition du prédicteur en segments quantiques est qualitative, moins il faudra de divisions pour obtenir la même précision dans la feuille. Je note que chaque division est une hypothèse, et que toutes les hypothèses ne peuvent pas être vraies. Par conséquent, si nous procédons à la division en tenant compte du potentiel d'un segment quantique à appartenir davantage à l'une des classes, nous réduisons le nombre de divisions pour obtenir une précision similaire, et donc le nombre d'hypothèses potentiellement fausses (divisions). En outre, si nous pouvons immédiatement diviser le prédicteur en trois régions globales - deux pour l'appartenance à une classe et une pour l'incertitude, les modèles seront en moyenne plus petits et présenteront de meilleures performances statistiques - et je m'attends à ce qu'ils soient également plus robustes.

Par exemple, imaginons que le prédicteur soit l'oscillateur RSI - les actions significatives des participants se produisent autour des niveaux 70, 50, 30 - tout ce qui est au-delà - disons, n'affecte pas la prise de décision des participants au marché. Il est donc raisonnable de construire une table quantique de manière à séparer ces trois valeurs du reste de la population. Sinon, l'une des divisions aura aléatoirement plus d'exemples dans le segment quantique de l'appartenance à la classe et vous obtiendrez une règle erronée sur une hypothèse erronée.

Vous pouvez dessiner un diagramme à barres avec des scores prédictifs quantifiés et tracer une courbe des probabilités d'appartenance à la classe "1" pour chaque colonne. Si la courbe est plus susceptible d'être une ligne droite, alors je mettrais ce prédicteur au banc. Un bon prédicteur, à mon avis, aura soit une ligne inclinée, soit des pics sur certaines colonnes.

Nous pouvons dire que, par la quantification, je recherche des événements discrets qui influencent la probabilité d'un mouvement de prix.

 
La règle est exactement ce qui divisera
rsi>69 & rsi<71....
C'est de la quantification.
Vous prenez un AMO en bois, vous le divisez en arbres et vous en retirez les bons.

Quelle quantification ? Vous êtes d'une telle bêtise que c'en est pathétique.

Tout est résolu en trois lignes de code...
Et vous travaillez sur cette quantification depuis des années, comme un professeur fou.
 
mytarmailS #:
La règle se contente de diviser
rsi>69 & rsi<71....
C'est toute la quantification...
Vous prenez un AMO en bois, vous le divisez en arbres et vous en retirez les bons...

Quelle quantification ? Vous dites de telles bêtises, c'est pathétique.

Tout est résolu en trois lignes de code...
Et cela fait des années que vous bricolez avec ce moyen de quantification, comme un professeur à la noix.

Il y a différentes façons de créer un tableau de quantification. Je pense en effet qu'il est possible de le faire à l'aide d'un logiciel prêt à l'emploi qui construit des arbres sur un prédicteur unique avec des contraintes données dans la feuille sur le pourcentage d'exemples. Je ne sais pas quel est ce logiciel et comment obtenir les données dans le format dont j'ai besoin.

Ce qui est important, ce n'est pas seulement le partitionnement, mais de trouver des critères d'évaluation de cette division quantique qui augmenteront la probabilité que l'appartenance à une classe soit préservée sur les nouvelles données.

Pourquoi je fais cela - parce que c'est la clé de la construction d'un modèle qualitatif.

Pourquoi cela prend beaucoup de temps - beaucoup d'expériences et de scripts de test. J'ai une petite compréhension d'OpenCL et le code est maintenant partiellement compté sur une carte vidéo - cela prend du temps - je dois étudier beaucoup de choses.

 
Aleksey Vyazmikin #:

L'important n'est pas seulement de partitionner, mais de trouver des critères d'évaluation de cette coupure quantique qui augmenteront la probabilité que l'appartenance à une classe persiste sur les nouvelles données.

Avez-vous déjà regardé le code dans le même bac à cartes ? Vous l'utilisez. Il n'utilise pas de paquets tiers. Mais il s'agit d'une si petite fonction (elle est même plus simple que ce que j'ai décrit, elle ne décale pas le point de séparation en fonction du nombre de doublons).
J'ai écrit des commentaires sur ce qui se passe. L'entrée est une colonne triée.

static THashSet<float> GenerateMedianBorders(
    const TVector<float>& featureValues, const TMaybe<TVector<float>>& initialBorders, int maxBordersCount) {
    THashSet<float> result;
    ui64 total = featureValues.size(); //число строк в столбце
    if (total == 0 || featureValues.front() == featureValues.back()) { // проверки
        return result;
    }

    for (int i = 0; i < maxBordersCount; ++i) { // цикл по числу квантов
        ui64 i1 = (i + 1) * total / (maxBordersCount + 1); // номер строки начала кванта номер i
        i1 = Min(i1, total - 1); // не больше числа строк 
        float val1 = featureValues[i1]; // значение в строке i1
        if (val1 != featureValues[0]) { // если != значению в 0-й строке, чтобы не было дубля с 0-й строкой
            result.insert(RegularBorder(val1, featureValues, initialBorders)); // сохранить значение в массив границ разделяющих кванты (не смотрел, но очевидно, что дубликаты пропустит и не создаст им квант)
        }
    }
    return result;
}

Comme vous pouvez le voir, tout est très simple et il n'y a rien d'intellectuel ici - il suffit de compter par exemple 100 lignes et c'est tout.
Des variantes légèrement plus complexes peuvent se décaler en fonction du nombre de doublons, vous pouvez également optimiser la taille des quanta (par exemple, si sur 10000 lignes il y a 9000 doublons, la fonction simple sera de 11 quanta : 10 des 1000 premières lignes et dans la 11ème les 9000 doublons restants, ou vous pouvez diviser les 1000 premières lignes en 99 quanta + 1 quantum avec 9000 doublons).
Mais ils n'ont rien d'intellectuel non plus - le même comptage simple du nombre requis de chaînes est la base.

L'original (il existe des variantes plus compliquées) https://github.com/catboost/catboost/blob/3cde523d326e08b32caf1b8b138c2c5303dc52e5/library/cpp/grid_creator/binarization.cpp
Étudiez les fonctions de cette page pendant une semaine et gagnez plusieurs années.

P.s. La raison principale pour laquelle le prochain quantum n'a pas exactement 100 chaînes, mais 315 ou 88 ou 4121 n'est pas dans une formule super délicate (où les chaînes sont combinées en fonction du pouvoir prédictif, que vous voulez utiliser pour rechercher des critères d'évaluation de ce segment quantique ), mais simplement dans le nombre de doublons.
catboost/binarization.cpp at 3cde523d326e08b32caf1b8b138c2c5303dc52e5 · catboost/catboost
catboost/binarization.cpp at 3cde523d326e08b32caf1b8b138c2c5303dc52e5 · catboost/catboost
  • catboost
  • github.com
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode characters
 
Est-il nécessaire de secourir une personne qui se noie manifestement mais qui aime se suicider ?
Lorsque vous lui tendez une main secourable, il la rejette, se dispute avec vous, n'essaie pas de faire quoi que ce soit pour s'en sortir lui-même et impose ses propres conditions, comme par exemple :
"Soit tu me sauves toi-même, tu me portes hors de l'eau en me tenant par-dessus ta tête au son de ma musique préférée, soit tu ne le fais pas.
Et dans ce cas, tu n'as aucune envie de me sauver.


 
Forester #:

Avez-vous au moins regardé le code dans les mêmes catbusters ? Vous l'utilisez. Il n'utilise pas de paquets tiers. Mais il s'agit d'une si petite fonction (elle est même plus simple que ce que j'ai décrit, elle ne décale pas le point de séparation en fonction du nombre de doublons).
J'ai écrit des commentaires sur ce qui se passe. L'entrée est une colonne triée.

Je l'ai bien sûr examinée. En outre, je suis prêt à payer pour le travail de reproduction de toutes les méthodes de quantification dans MQL5. Jusqu'à présent, les tentatives ont été infructueuses, voudriez-vous essayer ?

Forestier #:

Comme vous pouvez le constater, tout est très simple et il n'y a rien d'intellectuel ici - il suffit de compter par exemple 100 lignes et c'est tout.

Vous avez donné la méthode la plus simple - oui, ce n'est pas difficile.

D'ailleurs, ai-je écrit qu'il existe des méthodes de quantification ingénieuses ou quelque chose de ce genre ? En quoi cela contredit-il ce que j'ai écrit ?