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

 
Maxim Dmitrievsky #:
En génétique, on prend des variables et on maximise sur un critère. Ce n'est pas possible ici, car il s'agit d'une classification. Il n'y a pas de relation entre le profit et les étiquettes de classe. Au mieux, vous obtiendrez des absurdités. C'est pourquoi de tels critères sont placés dans eval_metrics

Il n'y a pas de bonheur dans la vie).

 
Aleksey Nikolayev #:

Il n'y a pas de bonheur dans la vie)

La perte f-ma est la perte f-ma entre les valeurs de référence et le modèle.

De quel côté se trouve la manche sous forme de profit ?
 
Maxim Dmitrievsky #:
Même à partir du nom perte ph-y est la perte ph-y entre les valeurs de référence et le modèle

De quel côté se trouve le manchon de profit ici

En fait, nous passons du domaine de la MO au domaine plus général de l'optimisation. Cependant, "gagner le plus possible" n'est pas tout à fait la même chose que "avoir raison le plus souvent possible".

 
Andrey Dik #:

1. v

2. voici une figure, comme une courbe d'une fonction d'apprentissage hypothétique.

Êtes-vous sûr que la grille s'arrêtera à l'extremum local 1 ? Ou peut-être 2 ? Ou quoi, 3, comme au milieu ? Nous ne savons donc pas à l'avance combien il y a d'extrema locaux, il peut y en avoir 100500 ou même plus. C'est pourquoi il est important d'essayer de trouver le plus élevé de tous les extrema locaux que l'algorithme est capable d'atteindre.

C'est très beau et prouvable dans le sens où cela justifie la recherche d'un maximum global.

Mais c'est de l'histoire ancienne.

Que se passerait-il si nous ajoutions une barre sur la droite ? Serait-ce toujours aussi beau ? Ou s'effondrerait-il ? Le marché n'est pas stationnaire. Croyez-vous le testeur ? Il trouve, c'est beau, en couleur...

 
Maxim Dmitrievsky #:
En génétique, on prend des variables et on maximise sur un critère. Ce n'est pas possible ici, car il s'agit d'une classification. Il n'y a pas de relation entre le profit et les étiquettes de classe. Au mieux, vous obtiendrez des absurdités. C'est pourquoi de tels critères sont placés dans eval_metrics.
La qualité de la classification peut être évaluée d'une manière ou d'une autre, et maximiser cette évaluation est donc l'objectif de l'optimisation.
 
Maxim Dmitrievsky #:
Même à partir du nom perte ph-y est la perte ph-y entre les valeurs de référence et le modèle

De quel côté se trouve le manchon de profit ici

il y a un manchon

 
Andrey Dik #:
La qualité de la classification peut être évaluée d'une manière ou d'une autre, c'est pourquoi l'optimisation vise à maximiser cette évaluation
Eh bien, la perte entre l'original et l'apprentissage est minimisée. Il est possible d'ajouter une petite déduction sous forme de profit normalisé, bien sûr, pour essayer, mais est-ce nécessaire ?
 
СанСаныч Фоменко #:

Très bien et prouvable dans le sens où cela justifie la recherche d'un maximum global.

Mais c'est de l'histoire ancienne.

Et si on ajoutait une barre à droite ? La beauté demeurerait-elle ? Ou s'effondrerait-elle ? Le marché n'est pas stationnaire. Croyez-vous le testeur ? Il la trouve, elle est belle, en couleur...

Peu importe que ce soit dans l'histoire ou dans le futur. Et le testeur lui-même n'a rien à voir là-dedans.

Ce qui compte, c'est la propriété d'un algorithme (un algorithme d'optimisation individuel ou faisant partie d'une grille) à trouver l'optimum global d'un critère d'évaluation. J'insiste sur le critère d'évaluation. Le critère d'évaluation n'est pas nécessairement et/ou uniquement le profit. Il peut s'agir de n'importe quoi, par exemple, le critère d'évaluation du travail sur les OOS n'est pas un critère (minimiser la différence entre l'échantillon et les OOS) ? - c'est juste une idée. Les critères peuvent être n'importe quoi et de n'importe quelle complexité. Il est important de comprendre que le critère "Profit" est une chose très goulue, discrète, donc les gens essaient de trouver des critères d'évaluation plus lisses, plus monotones, ce qui améliore généralement la qualité de l'optimisation elle-même et de la formation en neuronique en particulier.

Pour en revenir à ce que j'ai dessiné sur l'image hautement artistique, il s'agit d'une illustration claire du fait que dans des conditions où l'on ne connaît ni le nombre ni les caractéristiques des extrema locaux, la seule solution consiste à rechercher autant que possible celui qui est tout à fait possible dans des conditions de capacités de calcul limitées.

Plateau - oui, cette notion existe, mais elle n'est pas liée à l'optimisation, il s'agit de classer des ensembles de paramètres similaires en fonction de certains attributs. La recherche d'un plateau stable est une tâche complexe distincte.

 

J'ai finalement obtenu ma propre fonction de perte, la dérivée est représentée comme un produit de Sharpe, d'erreur et de poids.

is_max_optimal=False indique que la valeur est décroissante, mais comme j'ai aussi multiplié par -1, c'est l'inverse qui est vrai.

class SharpeObjective(object):
  def calc_ders_range(self, approxes, targets, weights):
    assert len(approxes) == len(targets)
    if weights is not None:
      assert len(weights) == len(approxes)

    result = []
    for index in range(len(targets)):
      preds = [approxes[i] for i in range(len(targets))]
      preds = [i if i>0 else -1*i for i in preds]
      sharpe = np.mean(preds)/np.std(preds)
      der1 = targets[index] - approxes[index]
      der2 = -1

      if weights is not None:
        der1 = -1 * sharpe * der1 * weights[index]
        der2 = der2 * weights[index]

      result.append((der1, der2))
    return result

class Sharpe(object):
    def get_final_error(self, error, weight):
        return error

    def is_max_optimal(self):
        return False

    def evaluate(self, approxes, target, weight):
        assert len(approxes) == 1
        assert len(target) == len(approxes[0])
        preds = np.array(approxes[0])
        target = np.array(target)
        preds = [i if i > 0 else -1*i for i in preds]
        sharpe = np.mean(preds)/np.std(preds)
        return sharpe, 0

model = CatBoostRegressor(learning_rate=0.1, loss_function=SharpeObjective(), eval_metric=Sharpe())
 
Evgeni Gavrilovi #:

Enfin, il dispose de sa propre fonction de perte, la dérivée étant représentée comme un produit de Sharpe, d'erreur et de poids.

is_max_optimal=False indique que la valeur est décroissante, mais comme j'ai aussi multiplié par -1, c'est l'inverse qui est vrai.

Les résultats de la formation se sont-ils améliorés ?)