Maschinelles Lernen im Handel: Theorie, Modelle, Praxis und Algo-Trading - Seite 2835

 
Maxim Dmitrievsky #:
In der Genetik nehmen wir Variablen und maximieren sie anhand eines Kriteriums. Das ist hier nicht möglich, weil es sich um eine Klassifizierung handelt. Es gibt keine Beziehung zwischen dem Gewinn und den Klassenbezeichnungen. Im besten Fall erhält man Unsinn. Deshalb werden solche Kriterien in eval_metrics platziert

Es gibt kein Glück im Leben.)

 
Aleksey Nikolayev #:

Es gibt kein Glück im Leben)

Schon vom Namen her ist Verlust f-ma der Verlust f-ma zwischen den Referenzwerten und dem Modell.

Auf welcher Seite ist die Hülse in Form von Gewinn
 
Maxim Dmitrievsky #:
Auch aus dem Namen Verlust ph-y ist der Verlust ph-y zwischen den Referenzwerten und dem Modell

Auf welcher Seite befindet sich hier die Gewinnhülse

In der Tat bewegen wir uns von dem Bereich der MO zu dem allgemeineren Bereich der Optimierung. Dennoch ist "so viel wie möglich verdienen" nicht ganz dasselbe wie "so oft wie möglich richtig liegen".

 
Andrey Dik #:

1. v

2. Hier ist eine Abbildung, wie eine Kurve einer hypothetischen Lernfunktion.

Sind Sie davon überzeugt, dass das Gitter am lokalen Extremum 1 aufhört? Oder vielleicht 2? Oder was, 3, etwa in der Mitte? Wir wissen also nicht im Voraus, wie viele lokale Extrema es gibt, es können 100500 oder noch mehr sein. Deshalb ist es wichtig zu versuchen, das höchste aller lokalen Extrema zu finden, das der Algorithmus erreichen kann.

Das ist sehr schön und beweisbar in dem Sinne, dass es die Suche nach einem globalen Maximum rechtfertigt.

Aber das ist nur die Geschichte.

Was wäre, wenn wir einen Balken auf der rechten Seite hinzufügen würden? Wäre es dann immer noch schön? Oder würde es zusammenbrechen? Der Markt ist nicht stationär. Glaubst du dem Prüfer? Er findet es, es ist schön, in Farbe...

 
Maxim Dmitrievsky #:
In der Genetik nehmen wir Variablen und maximieren sie anhand eines Kriteriums. Das ist hier nicht möglich, weil es sich um eine Klassifizierung handelt. Es gibt keine Beziehung zwischen dem Gewinn und den Klassenbezeichnungen. Im besten Fall erhält man Unsinn. Deshalb sind solche Kriterien in eval_metrics untergebracht.
Die Qualität der Klassifizierung kann irgendwie bewertet werden, und die Maximierung dieser Bewertung ist das Ziel der Optimierung.
 
Maxim Dmitrievsky #:
Auch aus dem Namen Verlust ph-y ist der Verlust ph-y zwischen den Referenzwerten und dem Modell

Auf welcher Seite befindet sich hier die Gewinnhülse

befindet sich eine Hülse

 
Andrey Dik #:
Die Qualität der Klassifizierung kann in irgendeiner Weise bewertet werden, und daher ist die Maximierung dieser Bewertung das Ziel der Optimierung
Nun, der Verlust zwischen dem Original und dem trainierten Ergebnis wird minimiert. Es ist möglich, einen kleinen Abzug in Form eines normalisierten Gewinns hinzuzufügen, aber ist das notwendig?
 
СанСаныч Фоменко #:

Sehr schön und beweisbar im Sinne einer Rechtfertigung der Suche nach einem globalen Maximum.

Aber das liegt in der Geschichte.

Was wäre, wenn wir einen Balken auf der rechten Seite hinzufügen würden? Würde die Schönheit erhalten bleiben? Oder würde sie zusammenbrechen? Der Markt ist nicht stationär. Glaubst du dem Prüfer? Er findet es, es ist schön, in Farbe...

Es spielt keine Rolle, ob es in der Vergangenheit oder in der Zukunft liegt. Und der Tester selbst hat damit nichts zu tun.

Was zählt, ist die Eigenschaft eines Algorithmus (eines Optimierungsalgorithmus einzeln oder als Teil eines Gitters), das globale Optimum eines Bewertungskriteriums zu finden. Ich betone - das Bewertungskriterium. Das Bewertungskriterium ist nicht unbedingt und/oder nur der Gewinn. Es kann alles sein, zum Beispiel ist das Bewertungskriterium der Arbeit an OOS kein Kriterium (Minimierung der Differenz zwischen Probe und OOS)? - Es ist nur ein Gedanke. Die Kriterien können alles Mögliche und von beliebiger Komplexität sein. Es ist wichtig zu verstehen, dass das Kriterium "Gewinn" eine sehr unregelmäßige, diskrete Sache ist, so dass man versucht, glattere, monotonere Bewertungskriterien zu entwickeln, was im Allgemeinen die Qualität der Optimierung selbst und insbesondere des neuronalen Trainings verbessert.

Um also auf das hochkünstlerische Bild zurückzukommen, das ich gezeichnet habe - eine klare Veranschaulichung der Tatsache, dass unter Bedingungen, in denen weder die Anzahl noch die Eigenschaften der lokalen Extrema bekannt sind, der einzige Ausweg darin besteht, so weit wie möglich nach demjenigen zu suchen, der unter den Bedingungen begrenzter Rechenkapazitäten überhaupt möglich ist.

Plateau - ja, es gibt einen solchen Begriff, aber er hat nichts mit Optimierung zu tun, sondern mit der Klassifizierung ähnlicher Parametersätze anhand bestimmter Merkmale. Die Suche nach einem stabilen Plateau ist eine eigene komplexe Aufgabe.

 

Ich habe endlich meine eigene Verlustfunktion, die Ableitung wird als Produkt aus Sharpe, Fehler und Gewichten dargestellt.

is_max_optimal=False bedeutet, dass der Wert abnimmt, aber da ich auch mit -1 multipliziert habe, ist das Gegenteil der Fall.

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 #:

Schließlich bekam eine eigene Verlustfunktion, die Ableitung wird als Produkt aus Sharpe, Fehler und Gewichten dargestellt.

is_max_optimal=False bedeutet, dass der Wert abnimmt, aber da ich auch mit -1 multipliziert habe, ist das Gegenteil der Fall.

Haben sich die Trainingsergebnisse verbessert?)