1

Ich verwende das randomForest-Paket in R mit einem rollenden Fenster, um Renditen für eine finanzielle Zeitreihe (eine Aktie) vorherzusagen. Ich habe zu diesem Zweck einen Korb von Features entwickelt und mein Ziel ist es, ihre relative Vorhersagekraft zu verstehen.Variable Wichtigkeit für die Zeitreihen von Random Forests in R

Meine Herausforderung ist, dass ich die variable Wichtigkeitsfunktion von Random Forest nicht verwenden kann, da die meisten meiner Features einen hohen Grad an Korrelation mit ihrer jüngsten Vergangenheit haben. Zum Beispiel erstreckt sich ein gleitender Durchschnitt über ein Fenster von mehreren Tagen, was bedeutet, dass er Informationen über mehrere Beobachtungen in meinem Datensatz enthält.

Dies bedeutet, dass die Out-of-Bag-Stichproben, die durch zufällige Gesamtstruktur generiert werden, mit den In-Sample-Features korreliert werden, die zufällige Fortsätze zum Trainieren meines Modells verwenden. Daher wäre die variable Bedeutung, die ich daraus ziehen würde, sehr optimistisch und übersteuert.

Die Lösung, die ich sehe, besteht darin, eine variable Bedeutung für eine Testgruppe außerhalb der Stichprobe zu berechnen, anstatt die OOB-Kreuzvalidierung zu verwenden. Ziel ist es, absolut keine Korrelation mit dem Trainingssatz zu gewährleisten.

Meine Frage: Existiert ein Paket in R, um Variablenbedeutung aus einem Testsatz zu berechnen und zu extrahieren, anstatt aus dem Standard-OOB-Kreuzvalidierungssatz? Wenn nicht, können Sie einen Ansatz vorschlagen, um dieses Ziel zu erreichen? Danke für Ihre Hilfe.

Antwort

0

Wow, toll, dass Sie an diese Korrelationen mit den In-Sample-Funktionen gedacht haben.

In der Tat ist es sinnvoller, Ihre Variablen auf einem Testset zu verwenden. Ich denke, du kannst das selbst programmieren. Hier einig Pseudo-Code

check baseline performance metric 
for variable in variables: 
    random shuffle variable 
    check performance metric 
    save performance metric to disk 
barplot(performance metrics) 

Ihre Performance-Metrik kann alles sein: Quer Entropie, Genauigkeit, ROC-AUC und so weiter

+0

Vielen Dank für Ihre Gedanken zu diesem Thema. In der Tat sieht es so aus, als müsste ich es vielleicht selbst programmieren. Ich hatte gehofft, diesen Schritt zu retten. Das R-Paket Caret hat eine Funktion für RFE (Rekursive Feature Elimination), die interessant ist, aber es sieht aus wie Sie Cross-Validierung verwenden müssen, die ein Problem aufgrund der zeitlichen Korrelation der Features ist. Der Algorithmus 2, der unten erwähnt wird, klang wie meine Lösung (externes Resampling), aber wieder sieht es so aus, als müsste ich eine Kreuzvalidierung durchführen. http://topepo.github.io/caret/rfe.html Danke für die Einsicht! –