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

 
Ich frage mich auch, wie das foreca-Paket die Eingabe/Ausgabe-Beziehung definiert. Vielleicht ist es trivial, vielleicht auch nicht.
 
Alexey Burnakov:
Ich frage mich auch, wie das foreca-Paket die Input-Output-Beziehung bestimmt. Vielleicht ist es dort trivial, vielleicht aber auch nicht.

Ich habe gerade die Zeile durchgesehen, lassen Sie mich korrigieren oder bestätigen, aber nach meinem Verständnis bewertet das Paket auf der Grundlage eines internen Algorithmus die Vorhersagefähigkeit einer bestimmten Zufallsvariablen, d. h. die Fähigkeit, die Werte einer Zufallsvariablen in die Zukunft zu extrapolieren. Wenn es sich um eine Trendkurve handelt, erhalten wir eine, und wenn es sich um Preissteigerungen handelt, erhalten wir 0,83 %, was für mich ziemlich offensichtlich ist. In der Praxis ist das Gegenteil der Fall, da Inkremente viel besser vorhergesagt werden - sie sind viel näher an der Stationarität als Trends in nicht-stationären Zeitreihen. Wir müssen das Werkzeug selbst verstehen und das Werkzeug auf die Objekte anwenden, zu denen es passt.

Im Allgemeinen gibt es Fehler in der Systemanalyse.

Fehler Nr. 1.

Anwendung der richtigen Methode auf das falsche Problem.

Sie ist in der Statistik sehr verbreitet.

 
SanSanych Fomenko:

Im Allgemeinen denke ich, dass die ursprüngliche Botschaft verloren gegangen ist. Die ursprüngliche Idee war, dass wir modellunabhängige Methoden benötigen, um die Fähigkeit der einzelnen Prädiktoren zur Vorhersage der Zielvariablen zu bestimmen.

Ein Beispiel für eine modellunabhängige Auswahl ist das Paket vtreat. Es analysiert die Daten und vergleicht sie dann mit den Zielwerten.

data(iris)
iris[,5] <- as.numeric(iris[,5]) #пакет  не умет факторы, их нужно сконвертировать в числа
iris_rand <- runif(nrow(iris)*10, min(iris[,1:4]), max(iris[,1:4])) #новых 10 предикторов со случайными значениями
dim(iris_rand) <- c(nrow(iris), 10)
colnames(iris_rand) <- paste0("rand_", c(1:10))
iris <- cbind(iris_rand, iris)
library(vtreat)
treatments <- designTreatmentsN(dframe = iris, varlist = colnames(iris)[1:(ncol(iris)-1)], outcomename = colnames(iris)[ncol(iris)], verbose = TRUE)
treatments
format(treatments)
significance <- treatments$scoreFrame[,"sig"]
names(significance) <- treatments$scoreFrame[,"origName"]
barplot(significance)

Für die Blendentabelle werden 10 neue Prädiktoren mit Zufallswerten erstellt. designTreatmentsN bewertet jeden Prädiktor, je niedriger der Wert, desto besser. In diesem Beispiel heben sich die ursprünglichen 4 Prädiktoren (die letzten im Diagramm) deutlich ab, sie haben fast null Punkte, was sehr gut ist. Bei der Auswahl der Prädiktoren wird zunächst derjenige mit den höchsten Werten entfernt.
Wenn es nur 2 Zielwerte gibt (0/1, TRUE/FALSE, -1/1, Faktor mit 2 Stufen, etc...), gibt es für diesen Fall die Funktion designTreatmentsC.


Dieses Paket wird auch in y-aware pca verwendet. Das vtreat-Paket skaliert die Prädiktoren in y-abhängige Intervalle, und die Komponenten werden auf fast übliche Weise erstellt (nur ohne Neuskalierung und Zentrierung). Wenn Sie wollen, können Sie mit diesem Paket also so interessante Dinge wie z. B. einen y-bewussten Randomforest machen.
Lesen Sie hier mehr:https://cran.r-project.org/web/packages/vtreat/vignettes/vtreatScaleMode.html

 
Dr. Trader:

Ein Beispiel für eine modellunabhängige Auswahl ist das Paket vtreat. Es analysiert die Daten in gewisser Weise und gibt ihnen dann eine Zielwertbewertung.

Für die Blendentabelle werden 10 neue Prädiktoren mit Zufallswerten erstellt. designTreatmentsN bewertet jeden Prädiktor, je niedriger der Wert, desto besser. In diesem Beispiel heben sich die ursprünglichen 4 Prädiktoren (die letzten im Diagramm) deutlich ab, sie haben fast null Punkte, was sehr gut ist. Bei der Auswahl der Prädiktoren wird zunächst derjenige mit den höchsten Werten entfernt.
Wenn es nur 2 Zielwerte gibt (0/1, TRUE/FALSE, -1/1, Faktor mit 2 Stufen, etc...), gibt es für diesen Fall die Funktion designTreatmentsC.


Dieses Paket wird auch in y-aware pca verwendet. Das vtreat-Paket skaliert die Prädiktoren in y-abhängige Intervalle, und die Komponenten werden auf fast übliche Weise erstellt (nur ohne Neuskalierung und Zentrierung). Wenn Sie wollen, können Sie mit diesem Paket also so interessante Dinge wie z. B. einen y-bewussten Randomforest machen.
Lesen Sie hier mehr:https://cran.r-project.org/web/packages/vtreat/vignettes/vtreatScaleMode.html

Na also, zurück zu den Grundlagen.

Nächste.

Die Verwendung von Modellen ist NUR möglich, wenn sie von diesen Paketen verarbeitet wurden. Es besteht die Hoffnung, dass die Modelle, wenn sie auf diese Weise vorverarbeitet werden, NICHT unter Übertraining leiden.

 
SanSanych Fomenko:

Die Anwendung der richtigen Methoden auf das falsche Problem.

Ich konnte die CaretFA-Zeitreihe nicht in den Griff bekommen, da in der Beschreibung eine Menge Formeln stehen. Ich habe etwas über die Korrelation der neuen Werte mit den alten Werten und die Analyse der Frequenzdarstellung nach der Fourier-Transformation sowie die Analyse der Veränderungen dieser Darstellung bei neuen Daten mitbekommen. Da muss man mehr von Radiophysik verstehen als von Forex :)

Es gibt Beispiele in der Paketbeschreibung, wo es auf die Indizes DAX, SMI, CAC, FTSE angewendet wird, wobei genau Inkremente auf D1 verwendet werden, d.h. sowohl Paket als auch Aufgaben sind korrekt.
Eine kleine Nuance ist, dass im Beispiel die Zeitreihe der Preise zuerst mit der logarithmischen Funktion log() verarbeitet wird und erst danach die Deltas gefunden werden. diff(log(EuStockMarkets[c(100:200),]) * 100
Aber ich habe keinen Unterschied bemerkt, ob ich log() verwende oder nicht, das Ergebnis der Schätzung hat sich nicht geändert, es wurde eher für eine bequemere Anzeige der Daten im Diagramm gemacht.

 
Dr. Trader:

Ich konnte die CaretFA-Zeitreihe nicht in den Griff bekommen, da in der Beschreibung eine Menge Formeln stehen. Ich habe etwas über die Korrelation der neuen Werte mit den alten Werten und die Analyse der Frequenzdarstellung nach der Fourier-Transformation sowie die Analyse der Veränderungen dieser Darstellung bei neuen Daten mitbekommen. Da muss man mehr von Radiophysik verstehen als von Forex :)

In der Paketbeschreibung gibt es Beispiele, in denen das Paket auf DAX-, SMI-, CAC- und FTSE-Indizes angewendet wird, wobei die D1-Inkremente verwendet werden, d. h. sowohl das Paket als auch die Ziele sind korrekt.
Eine kleine Nuance ist, dass im Beispiel die Zeitreihe der Preise zuerst mit der logarithmischen Funktion log() verarbeitet wird und erst danach die Deltas gefunden werden. diff(log(EuStockMarkets[c(100:200),]) * 100
Aber ich habe keinen Unterschied bemerkt, ob ich log() verwende oder nicht, das Ergebnis der Schätzung hat sich nicht geändert; es wurde eher für die bequeme Datenanzeige im Diagramm gemacht.

Was dieses Paket betrifft, so ist die Frage für mich eine Grundsatzfrage:

  • gibt sie die Vorhersagekraft des einzelnen Prädiktors an,
  • oder die Vorhersagefähigkeit der Zielvariablen unter Verwendung der Prädiktoren?

 
SanSanych Fomenko:

Bei diesem Paket geht es für mich um eine Grundsatzfrage:

  • gibt sie die Vorhersagekraft des einzelnen Prädiktors an,
  • oder die Vorhersagefähigkeit der Zielvariablen unter Verwendung der Prädiktoren?

Es wird nicht nach einer Verbindung zwischen der Zielvariablen und den Prädiktoren gesucht. Der Autor des Pakets schreibt über zwei Anwendungen -.

1) Bewertung einer Zeitreihe, um zu sehen, ob sie überhaupt vorhersagbar ist (auf einer Skala von 0% = "weißes Rauschen" bis 100% = sinusförmig) mit Omega(). Wenn das Ergebnis 0 % ist, kann nicht versucht werden, das Verhalten der Zeitreihe vorherzusagen, egal welche Prädiktoren verwendet werden.
2) Nehmen Sie einige Prädiktoren, werten Sie sie mit derselben Funktion aus und erstellen Sie neue Prädiktoren ähnlich wie pca, so dass die neuen Prädiktoren ein noch besseres Omega()-Ergebnis als die ursprünglichen haben. Ob dies zu einer besseren Vorhersage der Zielwerte beiträgt oder nicht, bleibt Ihrem Glück überlassen, denn das Paket interessiert sich nicht dafür, was diese Vorhersagen vorhersagen sollen. Der Punkt ist, wenn der Prädiktor kein Rauschen ist, werden die Modelle, die ihn verwenden, stabilere Vorhersagen machen.

 
Dr. Trader:

Es wird nicht nach Zusammenhängen zwischen der Zielvariablen und den Prädiktoren gesucht. Der Autor des Pakets schreibt über zwei Anwendungen -

1) Bewerten Sie mit Omega(), ob die Zeitreihe überhaupt vorhersagbar ist (auf einer Skala von 0% = "weißes Rauschen" bis 100% = sinusförmig). Wenn das Ergebnis 0 % beträgt, ist es unmöglich, das Verhalten der Zeitreihe vorherzusagen, egal welche Prädiktoren verwendet werden.
2) Nehmen Sie einige Prädiktoren, werten Sie sie mit derselben Funktion aus und erstellen Sie neue Prädiktoren ähnlich wie pca, so dass die neuen Prädiktoren ein noch besseres Omega()-Ergebnis als die ursprünglichen haben. Ob dies zu einer besseren Vorhersage der Zielwerte beiträgt oder nicht, bleibt Ihrem Glück überlassen, denn das Paket interessiert sich nicht dafür, was diese Prädiktoren vorhersagen müssen. Wenn der Prädiktor kein Rauschen ist, werden die Modelle, die ihn verwenden, stabilere Vorhersagen machen.

Sie haben meinen Verdacht im Wesentlichen bestätigt.

Ich danke Ihnen.

Ich denke, das Paket ist für die Klassifizierung nutzlos.

Aber für die Extrapolation von Vorhersagen kann sie nützlich sein.

Nehmen wir zum Beispiel das Prognosepaket. Sie zerlegt die Reihe in drei Komponenten, extrapoliert dann vorwärts und summiert. Sie ermöglicht eine Vorhersage, die einen Schritt oder mehr voraus ist.

Jetzt stellt sich die Frage: Welches Währungspaar soll ich nehmen? Wir nehmenCaretFA und verwenden es, um die Vorhersagekraft verschiedener Währungspaare zu berechnen. Ich vermute, dass sich diese Vorhersagefähigkeit in einem begrenzten Zeitfenster ändert, wenn sich das Fenster bewegt. Wir wählen ein Währungspaar, sagen es voraus (oder ein anderes Paket - davon gibt es viele), handeln es, und nachdem wir alle Positionen geschlossen haben, wählen wir das Währungspaar erneut.

 
Dr. Trader:

Ein Beispiel für eine modellunabhängige Auswahl ist das Paket vtreat. Es analysiert die Daten in gewisser Weise und wertet sie dann anhand der Zielwerte aus.

Für die Blendentabelle werden 10 neue Prädiktoren mit Zufallswerten erstellt. designTreatmentsN wird jeden Prädiktor bewerten, je niedriger die Punktzahl, desto besser. In diesem Beispiel heben sich die ursprünglichen 4 Prädiktoren (die letzten im Diagramm) deutlich ab, sie haben fast null Punkte, was sehr gut ist. Bei der Auswahl der Prädiktoren wird zunächst derjenige mit den höchsten Werten entfernt.
Wenn es nur 2 Zielwerte gibt (0/1, TRUE/FALSE, -1/1, Faktor mit 2 Stufen, etc...), gibt es für diesen Fall die Funktion designTreatmentsC.


Dieses Paket wird auch in y-aware pca verwendet. Das vtreat-Paket skaliert die Prädiktoren in y-abhängige Intervalle, und die Komponenten werden auf fast übliche Weise erstellt (nur ohne Neuskalierung und Zentrierung). Wenn Sie wollen, können Sie mit diesem Paket also so interessante Dinge wie z. B. einen y-bewussten Randomforest machen.
Lesen Sie hier mehr:https://cran.r-project.org/web/packages/vtreat/vignettes/vtreatScaleMode.html

Wenn ich mir Ihren Code mit Iris und zufälligen Prädiktoren ansehe, verstehe ich, dass ich überhaupt nicht programmieren kann, denn was bei Ihnen 10 Zeilen in Anspruch nahm, passt bei Ihnen in drei Zeilen....

Und diese Auswahl durch vtreat, unterscheidet sie sich von der gleichen, in RF eingebauten Importense?

 
mytarmailS:

Unterscheidet sich diese Behandlungsauswahl von der in RF eingebauten Importense?

Vtreat ist besser. Dabei wird statistisch ausgewertet, wie gut/schlecht der Prädiktor die Zielvariable insgesamt vorhersagt, ohne dass ein bestimmtes Vorhersagemodell berücksichtigt wird. Es wird empfohlen, Prädiktoren mit einer maximalen Punktzahl von 1/(Anzahl der Prädiktoren) zu verwenden. Wenn es beispielsweise 200 Prädiktoren gibt, können Sie nur diejenigen auswählen, deren Bewertung unter 1/200 liegt. Es ist möglich, Prädiktoren zu schätzen, und wenn alle Schätzungen über dem Schwellenwert liegen, ist es besser, nach anderen Prädiktoren zu suchen, anstatt erfolglos zu versuchen, das Modell zu lernen und neue Daten vorherzusagen.

Es gibt einige Nachteile - das Paket arbeitet mit einzelnen Prädiktoren und berücksichtigt nicht deren Interaktion. Mir gefällt auch nicht, dass vtreat selbst bei völlig identischen oder hoch korrelierten Prädiktoren die sich wiederholenden Prädiktoren nicht entfernt, was manchmal sehr ärgerlich ist.