Maschinelles Lernen im Handel: Theorie, Modelle, Praxis und Algo-Trading - Seite 261
Sie verpassen Handelsmöglichkeiten:
- Freie Handelsapplikationen
- Über 8.000 Signale zum Kopieren
- Wirtschaftsnachrichten für die Lage an den Finanzmärkte
Registrierung
Einloggen
Sie stimmen der Website-Richtlinie und den Nutzungsbedingungen zu.
Wenn Sie kein Benutzerkonto haben, registrieren Sie sich
Und was sind die Ergebnisse bei der Vorhersage? wage ich zu fragen.
Hier ist das vorbereitete Arbeitsblatt für das Modelltraining.
Preise werden spaltenweise in Deltas umgewandelt; entfernte Spalten ohne Änderungen oder mit NA.
In jede Zeile jeder Spalte wurden 3 Verzögerungen eingefügt (aktuelle Zeile minus vorhergehende; vorhergehende minus vorbestehende; vorbestehende minus vorbestehende)
Ziel - Erhöhung/Verringerung des Wertes in der nächsten Zeile (nächste Zeile minus aktuelle Zeile, gerundet auf +-1, oder 0, wenn keine Änderung; insgesamt 3 Klassen). Alle Ziele haben das Präfix "target_".
*Es dürfen keine anderen Ziele für die Vorhersage eines Ziels verwendet werden, sonst wäre es ein Blick in die Zukunft. Alle Spalten, denen das Präfix "target_" vorangestellt ist, können nicht als Prädiktor oder Intu verwendet werden.
Problem.
Die csv-Datei wurde zeilenweise in zwei Teile geteilt, im Verhältnis 10:1 für Trainingsdaten und Fronttest. Ich habe das Modell für target_SiH7.bid (aus der obigen Tabelle) trainiert und eine Klassifizierungsgenauigkeit von 62 % bei den Trainingsdaten und 74 % bei den neuen Daten erhalten. War glücklich, aber doppelt überprüft, stellte sich heraus, dass Klasse 0 ist sehr unausgewogen in Bezug auf andere, und nur durch den Betrag hat 60% und 74%. Das heißt, das Modell hat gelernt, 0 gut zu erkennen, aber es hat sich bei den Klassen -1 und 1 festgefahren.
Es ist eine andere Bewertung erforderlich. Für zwei unausgewogene Klassen ist diese Metrik großartig -https://en.wikipedia.org/wiki/Cohen's_kappa, aber in unserem Fall gibt es drei unausgewogene Klassen, nicht zwei, gibt es ein Kappa-Analogon für 3?
Wenn Sie mich fragen, kann ich wahrscheinlich keine eindeutige Antwort geben, denn es gibt sehr viele Dinge, die vorhergesagt werden, und alles ist anders. Aber im Durchschnitt sind es etwa 60-65%.
Interessant, können Sie das genauer beschreiben...
Es ist nur so, dass ich jetzt in einem ganz anderen Bereich der Vorhersage tätig bin und ich kann es mir nicht leisten, zerstreut zu sein, also kann ich an diesem Märztermin keine Experimente mit Ihnen machen, aber es ist sehr interessant zu lesen und zu beobachten, schreiben Sie bitte mehr...
Es stellt sich heraus, dass die Klasse 0 im Verhältnis zu den anderen sehr unausgewogen ist und allein in Bezug auf die Menge 60 % und 74 % beträgt. Das heißt, das Modell hat gelernt, 0 sehr gut zu erkennen, hat aber bei den Klassen -1 und 1 aufgegeben.
Ich hatte das gleiche Problem, als ich meinen Random Forest auf U-Turns trainierte, es gab natürlich viel weniger U-Turns als Nicht-U-Turns. Je mehr Bäume ich machte, desto mehr punktete die MO bei den Zugklassen und konzentrierte sich mehr auf die Nicht-Zugklassen.
Es gibt mehrere Methoden in caret , um Klassen auszugleichen, aber alle sind trivial - entweder verdoppeln Sie die Klasse, die weniger Beobachtungen hat, um die Summe der Beobachtungen in allen Klassen anzugleichen, um das Gleiche zu erhalten, oder umgekehrt entfernen Sie überflüssige Beobachtungen aus der Klasse, die mehr Beobachtungen hat.
Keine der Methoden ist rentabler, als überhaupt nicht auszugleichen (aber das gilt nur für meinen Fall).
Interessant, können Sie das genauer beschreiben...
Ich arbeite gerade in einem ganz anderen Bereich der Vorhersage und kann es mir nicht leisten, mich zu verirren, deshalb kann ich keine Experimente mit Ihnen auf diesem Markt machen, aber es ist sehr interessant zu lesen und zu beobachten, bitte schreiben Sie mehr...
Ich hatte das gleiche Problem, als ich für U-Turns trainierte, U-Turns waren natürlich viel weniger als Nicht-U-Turns. Je mehr Bäume ich machte, desto mehr verzettelte sich die MO in der Klasse der U-Turns und konzentrierte sich mehr auf die Klasse der Non-Turns.
Es gibt mehrere Methoden in caret , um Klassen auszugleichen, aber alle sind trivial - entweder verdoppeln Sie die Klasse, die weniger Beobachtungen hat, um die Summe der Beobachtungen in allen Klassen gleich zu machen, oder entfernen Sie unnötige Beobachtungen aus der Klasse, die mehr Beobachtungen hat.
Keine der Methoden ist rentabler als ein Verzicht auf den Ausgleich (aber das gilt nur für meinen Fall)
Alles ist verhandelbar. Ich habe Forts-Futures vorgeschlagen, z. B. Si, RI, BR usw., die im Allgemeinen am liquidesten sind. Ich schlage vor, Signal (-1,0,1)(short,cash,long) als Ergebnis, das Signal ist eindeutig als Wahrscheinlichkeit und nicht verzerrtdurch MM als Aufträge. Die Nachbearbeitung, die Beschilderung und das Targeting können Sie selbst vornehmen oder buchen.
Nach einigem Nachdenken bin ich zu dem Schluss gekommen, dass mindestens ein weiteres Glas hinzugefügt werden sollte{price:vol,...||..., price:vol }, wie es ist, ein letztes pro Sekunde, für jedes vorhergesagte Instrument, dann ist das Delta nicht erforderlich und bid, ask auch, es ist IMHO obligatorisch, wenn mit dem Band pro Sekunde die Split-Volumina und Verschiebung von OM, mehr oder weniger informativ, dann für das Glas ein Delta ist sehr wenig, zumindest muss man verschiedene "Platten" Verteilung, etc. zu sehen, und das ist genug, wie ein Anfang. Fügen Sie einen Becher hinzu und stellen Sie einen Trainingsdatensatz für ein paar Tage ein, dann spielen wir. :)
Schließlich entschied ich mich für ScottsPi-Metrik https://en.wikipedia.org/wiki/Scott's_Pi
Hier sind meine Ergebnisse mit dieser Schätzung, ich trainierte das Modell auf den ersten 91% der Zeilen und führte dann einen Fronttest auf den letzten verbleibenden Daten durch (Verhältnis Backtest : Fronttest = 10:1)
Spalte "class_0_rate" in der Tabelle - Verhältnis der Klasse 0 zu den Klassen -1und1, damit ich in Excel die Ergebnisse aussieben kann, bei denen dieser Wert zu hoch ist.
Die letzten beiden Spalten sind Scotts Pi-Metrik für Training und Test, der Wert liegt zwischen -1 und 1, wobei 0 = Ergebnis zufällig und das Modell unbrauchbar ist, und 1 = alles in Ordnung ist. Ein negatives Ergebnis ist nicht gut, inverse Korrelation, Sie können versuchen, das Ergebnis der Vorhersage zu invertieren. Die umgekehrte Korrelation funktioniert manchmal gut mit zwei Klassen, wenn das genaue Gegenteil der Vorhersage gehandelt wird. Bei drei Klassen ist es jedoch schwierig, das Gegenteil zu finden, denn jede Klasse hat zwei entgegengesetzte Werte, und in diesem Fall ist ein negativer Wert ebenfalls schlecht.
Ich denke, wir müssen die Währung wählen, deren Geld- (oder Brief-) Vorhersagen ähnliche und hohe Werte im Backtest und Fronttest haben, zum Beispiel xagusd. Ein Wert von 0,18 auf einer Skala von 0 bis 1 ist zwar gering. Und Vorhersagen, die einen Tick voraus sind, sind im realen Handel ebenfalls schlecht. Im Allgemeinen gibt es ein Ergebnis, aber es ist nicht anwendbar :)
R-Code für Scotts Pi
if(length(act) != length(pred)){
stop("different length")
}
n_observ <- length(act)
all_levels <- unique(c(act,pred))
n_levels <- length(all_levels)
marginal_matrix <- matrix(NA, ncol=n_levels, nrow=n_levels)
colnames(marginal_matrix) <- all_levels
rownames(marginal_matrix) <- all_levels
for(i in 1:n_levels){
for(j in 1:n_levels){
marginal_matrix[i,j] <- sum((act==all_levels[i]) & (pred==all_levels[j]))
}
}
diagSum <- 0
for(i in 1:n_levels){
diagSum <- diagSum + marginal_matrix[i,i]
}
diagSum <- diagSum / n_observ
marginalSum <- 0
for(i in 1:n_levels){
marginalSum <- marginalSum + ((sum(marginal_matrix[i,]) + sum(marginal_matrix[,i]))/n_observ/2)^2
}
p <- marginalSum
return((diagSum - p)/(1-p))
}
Schließlich entschied ich mich für ScottsPi-Metrik https://en.wikipedia.org/wiki/Scott's_Pi
Hier sind meine Ergebnisse mit dieser Schätzung, ich trainierte das Modell auf den ersten 91% der Zeilen und führte dann einen Fronttest auf den letzten verbleibenden Daten durch (Verhältnis Backtest : Fronttest = 10:1)
Spalte "class_0_rate" in der Tabelle - Verhältnis der Klasse 0 zu den Klassen -1und1, damit ich in Excel die Ergebnisse aussieben kann, bei denen dieser Wert zu hoch ist.
Die letzten beiden Spalten sind Scotts Pi-Metrik für Training und Test, der Wert liegt zwischen -1 und 1, wobei 0 = Ergebnis zufällig und das Modell unbrauchbar ist, und 1 = alles in Ordnung ist. Ein negatives Ergebnis ist nicht gut, inverse Korrelation, Sie können versuchen, das Ergebnis der Vorhersage zu invertieren. Die umgekehrte Korrelation funktioniert manchmal gut mit zwei Klassen, wenn das genaue Gegenteil der Vorhersage gehandelt wird. Aber bei drei Klassen ist es schwer, das Gegenteil zu finden, jede Klasse hat zwei Gegensätze und in diesem Fall ist ein negatives Ergebnis auch schlecht.
Ich denke, wir müssen die Währung wählen, deren Geld- (oder Brief-) Vorhersagen ähnliche und hohe Werte im Backtest und Fronttest haben, zum Beispiel xagusd. Ein Wert von 0,18 auf einer Skala von 0 bis 1 ist zwar gering. Und Vorhersagen, die im realen Handel einen Tick voraus sind, sind ebenfalls schlecht. Im Allgemeinen gibt es ein Ergebnis, aber es ist nicht anwendbar :)
R-Code für Scotts Pi
if(length(act) != length(pred)){
stop("different length")
}
n_observ <- length(act)
all_levels <- unique(c(act,pred))
n_levels <- length(all_levels)
marginal_matrix <- matrix(NA, ncol=n_levels, nrow=n_levels)
colnames(marginal_matrix) <- all_levels
rownames(marginal_matrix) <- all_levels
for(i in 1:n_levels){
for(j in 1:n_levels){
marginal_matrix[i,j] <- sum((act==all_levels[i]) & (pred==all_levels[j]))
}
}
diagSum <- 0
for(i in 1:n_levels){
diagSum <- diagSum + marginal_matrix[i,i]
}
diagSum <- diagSum / n_observ
marginalSum <- 0
for(i in 1:n_levels){
marginalSum <- marginalSum + ((sum(marginal_matrix[i,]) + sum(marginal_matrix[,i]))/n_observ/2)^2
}
p <- marginalSum
return((diagSum - p)/(1-p))
}