Backtesting oder Kreuzvalidierung, wenn der Modellbildungsprozess interaktiv war

9

Ich habe einige Vorhersagemodelle, deren Leistung ich zurücktesten möchte (dh ich nehme meinen Datensatz, spule ihn zu einem früheren Zeitpunkt zurück und sehe, wie sich das Modell prospektiv entwickelt hätte).

Das Problem ist, dass einige meiner Modelle über einen interaktiven Prozess erstellt wurden. Zum Beispiel habe ich gemäß den Ratschlägen in Frank Harrells Regressionsmodellierungsstrategien in einem Modell eingeschränkte kubische Splines verwendet, um mögliche nichtlineare Assoziationen zwischen Merkmalen und der Antwort zu behandeln. Ich habe die Freiheitsgrade jedes Splines basierend auf einer Kombination aus Domänenwissen und univariaten Maßstäben für die Assoziationsstärke zugewiesen. Die Freiheitsgrade, die ich meinem Modell erlauben möchte, hängen natürlich von der Größe des Datensatzes ab, die sich beim Backtesting dramatisch ändert. Welche anderen Optionen stehen mir zur Verfügung, wenn ich Freiheitsgrade nicht für jedes Mal, wenn das Modell erneut getestet wird, separat von Hand auswählen möchte?

Als weiteres Beispiel arbeite ich derzeit an der Ausreißererkennung, indem ich Punkte mit hoher Hebelwirkung finde. Wenn ich dies gerne von Hand tun würde, würde ich einfach jeden Datenpunkt mit hohem Hebel prüfen, die Richtigkeit der Daten überprüfen und sie entweder herausfiltern oder von Hand bereinigen. Dies hängt jedoch von einer Reihe von Domänenkenntnissen ab, sodass ich nicht weiß, wie ich den Prozess automatisieren kann.

Ich würde Ratschläge und Lösungen sowohl (a) für das allgemeine Problem der Automatisierung interaktiver Teile des Modellbildungsprozesses als auch (b) spezifische Ratschläge für diese beiden Fälle begrüßen. Vielen Dank!

Ben Kuhn
quelle

Antworten:

4

Zu Ihrer Information, dies mag für SE.DataScience besser geeignet sein, aber vorerst werde ich es hier beantworten.

Mir scheint, Sie befinden sich in einer Situation, in der Sie keine andere Wahl haben, als ein Skript zu schreiben, das Ihre Lösungen implementiert. Da ich noch nie mit Splines gearbeitet habe, sind meine Kenntnisse streng theoretisch. Bitte nehmen Sie Kontakt mit mir auf und lassen Sie mich wissen, wenn ich etwas nicht sehe.

Im Großen und Ganzen scheint es, dass Sie einige verschiedene Elemente haben, die Sie lösen müssen, um dies zu implementieren.

1.) Dynamische Ermittlung der Modellparameter. Sie haben bereits erwähnt, dass Sie eine Kombination aus Domänenwissen und univariaten Kennzahlen verwendet haben. Das scheint mir etwas zu sein, mit dem Sie heuristisch umgehen können sollten. Sie müssen sich zu Beginn auf eine Reihe von Regeln einigen, die Ihr Programm implementieren wird. Dies kann eine triviale Aufgabe sein oder auch nicht, da Sie sich einige Gedanken über die möglichen Auswirkungen dieser Regeln machen müssen. Dies kann erfordern, dass Sie jeden Schritt Ihres Prozesses erneut besuchen und nicht nur die Entscheidungen, sondern auch die Gründe für diese Entscheidungen katalogisieren.

2.) Implementieren Sie Ihr Programm tatsächlich. Um Ihre Leistungstests in Zukunft dynamisch und einfach zu warten und zu ändern, müssen Sie überlegen, wie Sie sie strukturieren möchten. Möglicherweise möchten Sie eine Art Schleife für die prädiktive Leistungsschätzung Ihres Hauptmodells verwenden, vorzugsweise mit einer benutzerdefinierbaren Länge, um in Zukunft eine größere Flexibilität zu ermöglichen. Wahrscheinlich möchten Sie auch separate Funktionen für jede Aktion schreiben, die Ihr Programm ausführen soll, da dies das Testen der Funktionalität sowie das Warten und Ändern Ihres Programms in Zukunft erleichtert. Sie werden wahrscheinlich mindestens Funktionen für die Datensatzauswahl (dh nur Zeiträume, die zum Zeitpunkt des Backtests "vergangen" sind), die Reinigung und Validierung (über die Sie wirklich nachdenken müssen) benötigen.

Ihre Frage zur Erkennung und Behandlung von Ausreißern fällt ebenfalls unter diese beiden Bedenken, und ich würde sie implementieren, indem ich kleinere Schleifen in Ihre Hauptprogrammschleife schreibe, die das Modell weiter "bereinigen" und neu anpassen, bis es einen Punkt erreicht hat, an dem Sie zufrieden wären es (was Sie wiederum selbst definieren müssen).

Wenn dies nach einer großen Aufgabe klingt, liegt es daran, dass es so ist; Leute haben ganze Softwarebibliotheken geschrieben (manchmal sehr lukrativ), um diese Art von Aufgabe auszuführen. Darüber hinaus ist es schwierig, spezifischere Ratschläge zu geben, ohne mehr über Ihre Prozesse, Datenstruktur und die Programmiersprache zu wissen, in der Sie Ihre Arbeit bisher ausgeführt haben.

Wenn irgendetwas davon für Sie nützlich ist und Sie möchten, dass ich etwas davon erläutere, kommentieren Sie es, lassen Sie es mich wissen, und ich würde es gerne tun.

habu
quelle
Ich brauche keine Hilfe beim Schreiben des Codes, danke - unsere Backtesting-Infrastruktur ist bereits vorhanden und ziemlich stark. Ich bin nur daran interessiert, welche statistischen Verfahren man verwenden könnte. In Bezug auf die heuristische Automatisierung des interaktiven Teils des Modellbaus: Wurde etwas darüber geschrieben? Ich habe in der Literatur keine Erwähnungen dieser Art von Prozessen gesehen. Sie erwähnen "Leute haben ganze Softwarebibliotheken geschrieben" - haben Sie Referenzen?
Ben Kuhn
@ BenKuhn - Aufgrund Ihres Kommentars bin ich mir ein wenig unklar, welche Schwierigkeiten Sie genau haben. Bitte helfen Sie mir, etwas mehr Klarheit zu bekommen. Die Verwendung von Heuristiken beim automatisierten Modellbau ist weit verbreitet. Die grundlegendste Anwendung, an die ich derzeit denken kann, ist die bescheidene schrittweise Regression. Da mir die genauen Details Ihres Modells fehlen, kann ich nicht auf die genauen Literaturstellen verweisen, die Ihnen helfen könnten, aber eine flüchtige Google-Suche enthält mehrere Artikel, in denen Methoden zur automatischen Parameterauswahl untersucht werden, insbesondere zum Glätten und Bestrafen von Splines. Siehe meinen nächsten Kommentar für ein paar Links
habu
@ BenKuhn - Was genau meinst du, wenn du statistische Verfahren sagst, die du verwenden könntest? Meiner Meinung nach könnte der Backtest ziemlich einfach durchgeführt werden, indem Zugtest-Stichproben mit einem rollierenden oder einem erweiterten Fenster der Datenauswahl verwendet werden. Alle Daten, die Sie bis zum Zeitpunkt des Backtests erfasst haben, sind Ihr Trainingssatz, während die Daten, die Sie im nächsten Zeitraum erwarten würden, bevor Sie die Möglichkeit haben, Ihr Modell neu anzupassen, Ihr Testsatz sind. Alle üblichen Messungen der Vorhersageleistung und der Anpassungsgüte könnten verwendet werden, um die tatsächliche Bewertung durchzuführen.
Habu
@BenKuhn - Um den eigentlichen Teil des Geschäftswissens zu implementieren, müssen Sie ihn kodifizieren und sicherstellen, dass die für solche Bestimmungen erforderlichen Daten bei Bedarf verfügbar sind. Außerdem verwende ich den Begriff "Softwarebibliothek" als Sammelbegriff, der alles von Erweiterungen über vorhandene Modellierungsbibliotheken, die die Modellbildung für bestimmte Anwendungen automatisieren sollen, bis hin zu proprietären Experten- und Entscheidungsunterstützungssystemen in Industriequalität abdeckt.
Habu
3

Anstatt herauszufinden, wie Sie Ihre manuellen Modelloptimierungsbemühungen automatisieren können, würde ich dieses Problem insgesamt umgehen, indem ich Lernende mit geringerer Varianz untersuche, die weitaus weniger Optimierungen erfordern, selbst wenn dies mit Kosten einer erhöhten Modellverzerrung verbunden ist. Sie möchten Vertrauen in Ihre Backtest-Ergebnisse, die größtenteils auf eine geringe Stichprobenvarianz in Ihren Vorhersagen zurückzuführen sind, und die Einführung eines automatisierten Abstimmungsprozesses zusätzlich zu einem Lernenden, der bereits eine Stichprobenvarianz aufweist, wirkt diesem Ziel entgegen. Es mag so aussehen, als würde der Schwanz hier mit dem Hund wedeln, aber alles, was viel sorgfältiges Tuning erfordert (manuell oder automatisiert), ist kein großartiger Kandidat für eine wirklich ehrliche Backtest-Umgebung IMO.

Andrew
quelle
Warum wäre automatisiertes Tuning (mit einem separaten Tuning-Lauf zu jedem Backtest-Zeitpunkt) keine "wirklich ehrliche Backtest-Umgebung"?
Ben Kuhn
Eine Verringerung der Varianz durch Fallenlassen der Splines würde leider zu einem inakzeptablen Verlust an Vorhersagekraft führen. Haben Sie daran gedacht, als Sie vorgeschlagen haben, einen Lerner mit geringerer Varianz zu verwenden? Wenn nicht, woran haben Sie gedacht?
Ben Kuhn
@BenKuhn - Ich teile Andrews Bedenken, ob ein Backtest ein wirklich "ehrlicher" Test für die Vorhersagekraft des Modells außerhalb der Stichprobe wäre, wenn auch aus keinem anderen Grund als der Tatsache, dass Sie anscheinend Ihre Tuning-Parameter für das Modell entwickelt haben gesamter Datensatz, der Ihnen zur Verfügung steht; Selbst wenn Sie die Uhr zurückdrehen und Ihr Modell dynamisch neu erstellen, wurde die Methode, mit der Sie dies tun, unter Bezugnahme auf den gesamten Datensatz entwickelt, sodass das Risiko besteht, dass das Modell auch dann noch überpasst, wenn dies der Fall ist auf eine Teilmenge der verfügbaren Daten umgeschult.
Habu
1
Zur Verdeutlichung würde eine automatisierte Abstimmung es in dem Sinne ehrlich machen, dass Vorhersagen zum Zeitpunkt nicht von Daten aus einer Zeit abhängen, die größer als . Bis zu @ habus Punkt wird es immer eine irreduzible Menge an In-Sample-Bias geben, die sich aus der iterativen Verbesserung Ihres Modells basierend auf der Backtest-Leistung ergibt, und ich sehe keinen Weg, dies zu umgehen (ich gehe davon aus, dass dies ein ist Finanzierungsantrag). Der Punkt, den ich angesprochen habe, war, dass Ihr Konfidenzintervall bezüglich Ihrer Backtest-Ergebnisse mit der Stichprobenvarianz des Prädiktors und dem darüber liegenden Abstimmungsprozess zusammenhängt. tt
Andrew
1
Und in einer so lauten Domäne wie der Finanzbranche möchten Sie sicherstellen, dass Sie, wenn sich die Geschichte etwas anders entwickelt hätte (aber immer noch aus einer zugrunde liegenden Verteilung stammt), immer noch zu einem ähnlichen Modell gelangen würden. Wenn Sie sicher sind, dass Ihr Prozess gegenüber Stichprobenvarianzen robust ist, sind Sie meiner Meinung nach gut. Nach meiner Erfahrung können automatisierte Abstimmungsverfahren jedoch sehr empfindlich auf Stichprobenabweichungen reagieren.
Andrew