Maschinelles Lernen im Handel: Theorie, Modelle, Praxis und Algo-Trading - Seite 101
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
Vieles davon wissen Sie selbst und haben es getan, aber ich werde ausführlicher schreiben, um alle Annahmen auszuschließen, dass wir über das Gleiche reden, aber anders handeln.
All dies aus Ratschlägen aus diesem Forum und aus Erfahrung.
Ich danke Ihnen.
Ich werde Punkt für Punkt antworten.
Zur Schätzung der Modellparameter ist eine sorgfältig ausgearbeitete Fitnessfunktion erforderlich. Wenn die Funktion bestimmte Modellparameter und ausgewählte Prädiktoren mit einer hohen Punktzahl bewertet, sollte es beim Test mit neuen Daten gute Ergebnisse geben.
(Ich werde bei jeder Schätzung berücksichtigen, dass sie umso besser ist, je höher sie ist)
Es gibt eine solche Funktion. Ich brauche kein R^2 (auch wenn ich zunächst bestätigen wollte, dass der Markt in Bezug auf die Regression dummerweise vorhersehbar ist). Ich verwende eine geschriebene Funktion, um MO und die Summe der Punkte mit dem Spread zu schätzen. Diese Funktion wird innerhalb der CV-Schleife ausgeführt und wählt die besten Parameter zum Trainieren des Modells aus.
Die Fitnessfunktion sollte sich mindestens 50 Mal in einem Zyklus wiederholen:
1) Teilen Sie die Daten in 2 Teile, 50%/50%. Es sollte sowohl Zufallsstichproben mit Stichproben als auch sequentielle Stichproben geben (der Teil für das Training liegt irgendwo in der Mitte, und für die Validierung das, was ihn am Anfang und Ende der Rohdaten umgibt). Einschließlich extremer Versionen, bei denen das Training auf der ersten Hälfte der Tabelle stattfindet und die Validierung auf der letzten und umgekehrt. Ich denke, dass es wichtig ist, sowohl sequentiell gezogene Stichproben als auch Zufallsstichproben für das Training zu haben. In der Abbildung sehen Sie einige Beispiele für zufällige und sequentielle Partitionierung, die grünen Linien sind für das Training, die gelben sind für die Validierung.
Das ist nicht ganz klar. Ich verstehe nur nicht, auf welche Wiederholungen Sie sich beziehen.
Auch hier habe ich 99 Ausbildungssätze (jeweils 10 Jahre). Jeder Satz ist einzigartig in Bezug auf die Beispiele, aber sie stammen alle aus dem gleichen Zeitraum "davor".
Bei jedem Satz führe ich einen Lebenslauf mit 2 bis 10 Fehlern durch (ich gehe sie auch zyklisch durch).
Aber ich habe alle Fouls streng nach Zeit getrennt. Ich denke, das ist eine unantastbare Methode.
Also 99 * Anzahl der CV-Parameterkombinationen (Hunderte) = Hunderte von trainierten Modellen, die die beste Qualitätsmetrik bei Validierungsfehlern aufweisen.
Dann gibt es die gleiche Anzahl verzögerter Proben aus dem "Nachher"-Zeitraum (also 5 Jahre). Auch sie sind einzigartig. Ich führe einen verschachtelten Lebenslauf durch: Ich prüfe jedes sich ergebende Modell auf Lebenslauferfahrung in der zurückgestellten Stichprobe. Ich erhalte zwei Vektoren von Qualitätsmetrikwerten: für den Lebenslauf und für die zeitversetzte Stichprobe.
Frage für Kenner:
Falls ich konstante Daten und ein geeignetes Modell (Paket) habe, was erwarte ich bei aufgeschobenen Stichproben zu erhalten?
Antwort: Die Qualitätsmetrik (QM) der zurückgestellten Proben sollte mit der Qualitätsmetrik der Validierungsfouls korreliert werden.
In Wirklichkeit ist es ein großes Problem, dies zu erreichen.
Warum brauche ich es? So kann ich mit Sicherheit die besten Modelle auswählen, indem ich mich einfach auf meine Kreuzvalidierung verlasse. Ich habe nämlich bereits festgestellt, dass die Ergebnisse mit der Zukunft übereinstimmen.
Ausschüsse und andere Spitzenmodelle müssen den Eignungstest auch an der zeitversetzten Stichprobe bestehen, an der sie in keiner Weise trainiert wurden.
2) Trainieren Sie das Modell anhand der Trainingsstichprobe (die verwendeten Modellparameter und Prädiktoren sind während des gesamten Zyklus die gleichen, die Sie zu schätzen versuchen), sagen Sie dann genau diese Daten mit diesem Modell voraus und bewerten Sie die Vorhersage - Genauigkeit, r^2 oder etwas anderes. Ich zum Beispiel runde das Regressionsergebnis auf Klassen und verwende Cohens Kappa-Funktion für die Schätzung, sie stammt von caret und gefällt mir besser als die Klassifizierungsgenauigkeit oder die Regressionsgenauigkeit. Aber es funktioniert nur für zwei Klassen. Bei drei Klassen finde ich es schwierig, irgendetwas vorzuschlagen. Es ist wichtig, dass die Schätzung die Genauigkeit jeder einzelnen Klasse berücksichtigt und auf dieser Grundlage eine Gesamteinschätzung abgibt.
3) Wenden Sie ein trainiertes Modell an, um Daten aus einer Validierungsstichprobe vorherzusagen, und schätzen Sie die Vorhersage mit der gleichen Funktion.
4) Beide Schätzungen (Training und Validierung) sollten nahe beieinander liegen und so hoch wie möglich sein. Ich verwende diesen Code für die Endnote - (min(score1,score2) - (max(score1,score2)-min(score1,score2)) - vom Min-Wert wird ihr Delta abgezogen.
Am Ende jeder Iteration erhalten wir eine Punktzahl, die aufgrund der zufälligen Aufteilung der Daten zwischen -1 und 1 variieren kann (oder in einem anderen Intervall, je nach der verwendeten Funktion). Wir berechnen ihren Durchschnittswert und geben ihn als Ergebnis der Fitnessfunktion zurück. Zusätzlich ziehe ich für jeden verwendeten Prädiktor eine kleine Zahl (0,0001) vom Fitnesswert ab, um das Modell für eine zu große Menge an erforderlichen Daten zu bestrafen.
Bitte klären Sie, ob sich die Ausbildung auf die Bewertung von Kreuzvalidierungsfouls bezieht.
Die Nähe von Trainings- und Validierungsschätzungen - bedeutet dies eine Korrelation der verzögerten Probenahme mit dem Ergebnis der Kreuzvalidierung?
Wenn das der Fall ist, dann sind wir ganz nah dran.
Bitte klären Sie, ob sich das Training auf die Bewertung von Kreuzvalidierungsfouls bezieht.
Die Nähe von Trainings- und Validierungsschätzungen - bedeutet dies eine Korrelation der verzögerten Probenahme mit dem Ergebnis der Kreuzvalidierung?
Wenn das der Fall ist, dann sind wir ganz nah dran.
Was bedeutet "Korrelation"? "+1"? "-1"? Was mit was?
Hier sind 50 Ergebnisse des Laufs, die ich nachvollziehen kann. Bei 50 Ergebnissen können Sie bereits Statistiken anwenden, den Mittelwert, die Abweichungen und vor allem das Konfidenzintervall zählen....
Kann ich das Handelsergebnis von gestern sehen?
Ү Nicht perfekt, aber immerhin 80 % des Modells sind verallgemeinert....
Was bedeutet "Korrelation"? "+1"? "-1"? Was mit was?
Hier sind 50 Ergebnisse des Laufs, die ich nachvollziehen kann. Bei 50 Ergebnissen können Sie bereits Statistiken anwenden, den Mittelwert, die Varianz und vor allem das Konfidenzintervall zählen....
Nein, du hast es nicht verstanden, CC.
Korrelation der Qualitätsmetrik der verschobenen Stichprobe mit der Qualitätsmetrik der Kreuzvalidierung (wie eine Teststichprobe, die das trainierte Modell bewertet). Wenn wir Hunderte von trainierten Modellen haben, erhalten wir zwei Vektoren von Qualitätsmetriken.
Beispiel: Die Klassifizierungsgenauigkeit bei Kreuzvalidierung beträgt 57 %, bei verzögerter Stichprobe 50 %. Und es gibt Hunderte (Tausende) von solchen Werten. Aber es gibt Hunderte und Tausende von ausgebildeten Modellen. Es stellt sich also die Frage.
Bitte klären Sie, ob sich die Ausbildung auf die Bewertung von Kreuzvalidierungsfouls bezieht.
Die Nähe von Trainings- und Validierungsschätzung - bedeutet dies die Korrelation der verzögerten Probenahme mit dem Ergebnis der Kreuzvalidierung?
Wenn das der Fall ist, dann sind wir ganz nah dran.
Im Code sieht das ungefähr so aus:
fitness <- function(inputTestPredictors, inputTestModelParams) { allScores <- c() for(i in 1:50){ rowSampleTrain <- sample(nrow(trainData), round(nrow(trainData)*0.5)) rowSampleValidate <- setdiff(1:nrow(trainData), rowSampleTrain) #ещё нужно добавить с вероятностью 50% - деление строк просто по порядку, без sample model <- TrainModel(target ~., data=trainData[rowSampleTrain, inputTestPredictors], p1 = inputTestModelParams$parameter1, p2 = inputTestModelParams$parameter2) #вместо TrainModel - какойто пакет из R - rf, gbm, nnet, lm, ... predictResultsForTrain <- predict(object = model, newdata=trainData[rowSampleTrain, inputTestPredictors]) predictResultsForValidate <- predict(object = model, newdata=trainData[rowSampleValidate, inputTestPredictors]) score1 <- CalcPreditionQuality(predictResultsForTrain, trainData[rowSampleTrain, "target"])) score2 <- CalcPreditionQuality(predictResultsForValidate , trainData[rowSampleValidate, "target"])) score_final <- min(score1,score2) - (max(score1,score2) - min(score1, score2)) allScores <- c(allScores, score_final) # CalcPreditionQuality - функция для оценки качества прогноза относительно ожидаемых значений. Например точность, или F-score, или каппа } predictorCountPenalty <- sum(inputTestPredictors==TRUE) * 0.0001 return(mean(allScores) - predictorCountPenalty) }Im Code sieht das ungefähr so aus:
Ja, sagen Sie mir nur in Worten, welche Proben Sie vergleichen? Es gibt Training und Test (mehrfaches Training und Test = Kreuzvalidierung). Es gibt eine Validierung (verzögerte Probenahme).
Ich habe drei Spalten:
alle ausbilden. ---- test fouls crossvalidation. ----- ausstehende Beobachtungen
0,7 0,65 0,55
... .... ....
Die Tatsache, dass das Training mit dem Test korreliert, ist unsinnig, denn das gewählte Modell wird auf der gesamten Menge trainiert, deren Teile in den Test eingeflossen sind.
Aber die Tatsache, dass die Testschätzungen mit aufgeschobenen Schätzungen korrelieren, ist für mich wichtig.
In Ihren Worten: Ich vergleiche Ausbildung und Prüfung.
Beim Training des Modells habe ich keine (verzögerte) Validierungsstichprobe. Die aufgeschobene Stichprobe sind die neuen Daten, mit denen das Modell nach dem Training handeln wird.
Die Tatsache, dass die Ausbildung mit dem Test korreliert, ist Unsinn.
Aus diesem Grund führe ich eine mehrfache Datenpartitionierung und ein mehrfaches Neutraining der Modelle durch. Wenn die Modellparameter nicht erfolgreich sind, dann wird das durchschnittliche Ergebnis der Testproben viel niedriger sein als das durchschnittliche Ergebnis der Übungsproben
In Ihren Worten: Ich vergleiche Ausbildung und Prüfung.
Es hat sich herausgestellt, dass ich beim Training des Modells keine (verzögerten) Validierungsstichproben genommen habe. Die neuen Daten, mit denen das Modell nach dem Training arbeiten wird, sind zeitversetzte Stichproben.
Aus diesem Grund führe ich eine mehrfache Partitionierung der Daten und ein mehrfaches Training des Modells durch. Wenn die Modellparameter nicht erfolgreich sind, dann wird das durchschnittliche Ergebnis der Testproben viel niedriger sein als das durchschnittliche Ergebnis der Übungsproben
In dem, was Sie tun, steckt Zimus.
Sie sollten jedoch auch eine zeitversetzte Probenahme versuchen. Dies ist ein Klassiker. Trainieren, Testen, Validieren.
Und machen das Verfahren noch komplexer. Für jedes Modell, das beim Training und beim Testen gut funktioniert, nennen wir es Modell X, führen Sie eine Validierung mit den verzögerten Daten durch. So erhalten Sie eine Vorstellung davon, ob Sie das richtige Modell wählen, indem Sie nur trainieren und testen. Erstellen Sie mehrere Modelle mit verschiedenen Parametern und wählen Sie die besten aus (10, 100, 1000). Scheitern. Sie werden verstehen, ob sich Ihre "beste" Kennzahl in zukünftigen Daten widerspiegelt oder nicht. Erst danach geht es in die Schlacht.