3D splines

Gradient Boosting – Identifikation nichtlinearer autokorrelativer Einflüsse

André Bleier Blog, Data Science

Autokorrelation ist ein zentrales Element der Zeitreihenanalyse. Um den Nutzen greifen zu können, sollten wir zunächst einmal klären, was Autokorrelation überhaupt ist.

Autokorrelation

Korrelation beschreibt Einflüsse bzw. Abhängigkeiten von Zufallszahlen. Eine Autokorrelation hingegen beschreibt den Einfluss einer Zufallszahl auf vergangene Zeitpunkte. Das bedeutet, man vermutet bei solch einer Untersuchung, dass bei einer Zufallszahl zeitliche Abhängigkeiten bzw. Einflüsse vorzufinden sind.

Autokorrelation ist eine zentrale statistische Kennzahl der Zeitreihenanalyse, da bei Zeitreihenmodellen Vorhersagen meist nur auf Basis vergangener Zeitpunkte getroffen werden. Dementsprechend hängt die Güte der Vorhersage maßgeblich von der Autokorrelation ab.

Stellen wir uns einfach einmal vor, wir sind Hersteller von Faxgeräten. Eine zentrale Frage in unserem Unternehmen ist der Absatz im folgenden Monat, da wir somit die Produktion besser steuern und unsere Kosten minimieren können. Der einfachste und wohl logischste Weg den Absatz des Folgemonats zu schätzen, wäre den Absatz desselben Monats im Vorjahr anzunehmen. Dieser Ansatz ist nichts Weiteres als die Vermutung von Autokorrelation, da wir annehmen, dass der Absatz des Folgemonats in etwa so hoch sein wird wie der Absatz des äquivalenten Monats im Vorjahr.

Oft sind die Zusammenhänge aber komplexer, da die Autokorrelation nicht nur von einem vergangenen Zeitpunkt ausgeht, sondern von vielen vergangenen Zeitpunkten. Zudem kann sich die Autokorrelation über die Zeit maßgeblich ändern.

Identifikation

Es gibt viele Methoden relevante vergangene Zeitpunkte mithilfe von Autokorrelation bei einer Zeitreihe zu identifizieren. Die wohl bekannteste Methode ist die Bestimmung durch visuelles Beurteilen der (partiellen) Autokorrelationsfunktion. Hierbei wird die autokorrelative Struktur der Zeitreihe zu jedem vergangenen Zeitpunkt untersucht und jene Zeitpunkte als „signifikante“ Einflüsse deklariert, bei denen die Korrelation zum aktuellen Zeitpunkt über einer gewissen Schwelle (bspw. 0,05) liegt.

Diese Methode ist effektiv, aber mühsam, da man oft sehr viele Zeitreihen vorhersagen will. Des Weiteren muss man beurteilen, ab wann ein Einfluss „signifikant“ ist. Im R erweiternden Paket \texttt{forecast} gibt es eine Funktion (\texttt{auto.arima()}), welche die autokorrelative Struktur automatisch schätzt. Problem hierbei, sowie auch beim visuellen Beurteilen, ist allerdings, dass man nicht über die Form des Zusammenhangs urteilen kann. Bei beiden Methoden wissen wir nicht ob der Zusammenhang zwischen vergangenen Zeitpunkten und dem jetzigen linear oder nichtlinear ist.

Mithilfe von Gradient Boosting und Penalized Splines kann man die funktionale Form sowie die autokorrelative Struktur schätzen.(1)

Penalized Splines (P-Splines) transformieren unsere Einflussgrößen in ein stückweise zusammengesetztes Polynom mit beliebigem Grad. Das bedeutet diese Transformation ermöglicht es uns nichtlineare Zusammenhänge vergangener Zeitpunkte zu schätzen. Da wir nun lineare und nichtlineare Zusammenhänge schätzen können, fehlt nur noch ein Kriterium relevante Zeitpunkte herauszufiltern. Die Herangehensweise hier ist relativ simpel, da der Machine Learning Algorithmus Gradient Boosting automatisch nicht relevante Einflüsse ausschließt. Das bedeutet, dass wir dem Algorithmus lediglich alle relevanten vergangenen Zeitpunkte transformierter und nicht transformierter Version zur Verfügung stellen müssen.

Simulation

Simulieren wir uns mal zwei Zeitreihen und schauen ob das klappt:

(1)    \begin{equation*}\begin{split}Y_{t} &= \big(0.1-2.3\cos{(70Y_{t-6})}\exp{(-20Y_{t-6}^{2})}\big)Y_{t-6} \\  &+ \big(0.55 - 0.25\sin{(80Y_{t-10})}\exp{(-50Y_{t-10}^{2})}\big)Y_{t-10} + \epsilon_{t} \end{split}\end{equation*} \\

(2)    \begin{equation*}Y_{t} = 0.8\sin{(\frac{\pi}{8}Y_{t-4})} - 0.73\sin{(\frac{\pi}{8}Y_{t-5})} + 0.82\sin{(\frac{\pi}{4}Y_{t-6})}  + 0.51\sin{(\frac{\pi}{4}Y_{t-7})} + \epsilon_{t} \end{equation*} \\

In der ersten Formel sehen wir, dass vier vergangene Zeitpunkte unsere Zielgröße beeinflussen. Zudem vermerken wir, dass dieser Einfluss nichtlinear ist. In der zweiten Simulation vermerken wir zwei nichtlineare Einflussgrößen, nämlich  Y_{t-6} und  Y_{t-10} . Nun versuchen wir mithilfe von Gradient Boosting diese Einflussgrößen zu identifizieren. Dies geschieht in dem wir den Einfluss von vergangenen Zeitpunkten in linearer und nichtlinearer Form auf die Zielgröße  Y_{t} schätzen. Mathematisch können wir unser Problem folgendermaßen formulieren:

(3)    \begin{equation*}Y_{t} = \beta_0 + \beta_1 Y_{t-1} + \beta_2 Y_{t-2} + \ldots + \beta_{12} Y_{t-12} + \beta_{13} f(Y_{t-1}) + \beta_{14} f(Y_{t-2}) + \ldots + \beta_{24} f(Y_{t-12}) + \epsilon_{t} \end{equation*} \\

wobei die Koeffizienten  \beta_{12}, \ldots, \beta_{24} alle nichtlinearen Funktionen markieren.

Da der Algorithmus beim Schätzen der Effekte nur für ihn relevante Einflüsse schätzt, können wir uns irrelevante und relevante Effekte in Form von einer Einflussbedeutung ansehen. In Abbildung 1 sehen wir die Relevanz der Einflüsse. Alle relevanten Zeitpunkte werden in beiden Funktionen selektiert. Wohingegen weder fälschlicherweise lineare Zusammenhänge noch andere vergangene Zeitpunkte jeglicher Form selektiert werden.

Abbildung zur Relevanz der Variablen

Abbildung 1: Nichtlinearer und linearer Variableneinfluss vergangener Zeitpunkte

Generalisierbarkeit

Mithilfe dieser Methode können relevante Zeitpunkte in linearer sowie nichtlinearer Form identifiziert werden und zur Vorhersage genutzt werden, ohne das Modell unnötig zu überspezifizieren. Zusätzlich kann man diesen Ansatz problemlos automatisieren und kann somit auf eine visuelle Beurteilung von Autokorrelationsfunktionen verzichten. Umsetzen kann man diese Methode bspw. mit dem R Paket  \texttt{mboost} .(2)

Zum Paket selbst gibt es ein Tutorial in dem man leicht alle Funktionen, sowie die Spezifikation von linearen und nichtlinearen Einflussfaktoren kennen lernt.(3) Das Paket wurde mithilfe von  \texttt{Rcpp} (hier eine kleine Einführung) erstellt und ist somit sehr effizient und schnell.

Für alle Interessierten Leser zu dieser Thematik empfehle ich die wissenschaftliche Arbeit von Tutz und Shafik (2007), bei welcher die Thematik und Umsetzung im Detail vorgestellt wird.

Referenzen

  1. Bühlmann, Peter, and Torsten Hothorn. „Boosting algorithms: Regularization, prediction and model fitting.“ Statistical Science(2007): 477-505.
  2. Hothorn, Torsten, et al. „mboost: Model-based boosting.“ R package version (2012): 2-1.
  3. Hofner, Benjamin, et al. „Model-based boosting in R: a hands-on tutorial using the R package mboost.“ Computational statistics29.1-2 (2014): 3-35.
  4. Shafik, Nivien, and Gerhard Tutz. „Boosting nonlinear additive autoregressive time series.“ Computational Statistics & Data Analysis 53.7 (2009): 2453-2464.
Über den Autor
André Bleier

André Bleier

The most exciting part of being a data scientist at STATWORX is to find this unique solution to a problem by fusing machine learning, statistics and business knowledge.