{"id":168557,"date":"2026-01-28T16:59:43","date_gmt":"2026-01-28T15:59:43","guid":{"rendered":"https:\/\/liora.io\/de\/?p=168557"},"modified":"2026-02-06T04:21:22","modified_gmt":"2026-02-06T03:21:22","slug":"var-modell-pipeline","status":"publish","type":"post","link":"https:\/\/liora.io\/de\/var-modell-pipeline","title":{"rendered":"VAR-Modell Data Science: Pipeline \u2013 Gesch\u00e4ftsansatz bis zum Plotten der Ergebnisse"},"content":{"rendered":"<h2 class=\"wp-block-heading\" id=\"h-das-var-modell-eine-umfassende-pipeline-vom-geschaftsansatz-bis-zum-plotten-der-ergebnisse\">Das VAR-Modell: Eine umfassende Pipeline vom Gesch\u00e4ftsansatz bis zum Plotten der Ergebnisse<\/h2>\n<h3 class=\"wp-block-heading\" id=\"h-prasentation-und-dankeschon\">Pr\u00e4sentation und Dankesch\u00f6n<\/h3>\nHallo zusammen und willkommen zu diesem Artikel, der darauf abzielt, mit Dir eine Pipeline f\u00fcr die Ausf\u00fchrung eines VAR-Modells unter <a href=\"https:\/\/liora.io\/de\/top-10-der-nativen-python-funktionen\">Python<\/a> zu entwickeln, von der Integration der Daten bis zum Plotten der Ergebnisse. Nach meiner Ausbildung in Management und Marktfinanzierung (ESCP BS) hatte ich das Vergn\u00fcgen, eine Ausbildung in Data Science bei Liora zu absolvieren, die heute freundlicherweise diesen Artikel ver\u00f6ffentlichen!\n\nZun\u00e4chst m\u00f6chte ich dem Unternehmen<strong> &#8222;Les Mousquetaires&#8220;<\/strong> danken, mit dem ich eine Version dieses Modells entwickeln konnte, um Vorhersagen \u00fcber den Erdgasmarkt zu machen. In diesem Zusammenhang begr\u00fc\u00dfe ich besonders <strong>H\u00e9l\u00e8ne Laroche,<\/strong> Leiterin des Gaseinkaufs, Quentin Pailloux, Direktor f\u00fcr neue Energien, Arnaud de Ligniville, Brett Chauchard &amp; Ellias Ouidir von der Abteilung f\u00fcr Finanzierung und Treasury, Christelle Schneider, Virginie Hyppolite von der Abteilung f\u00fcr Risiken.\n\nF\u00fcr den Rest des Artikels wird jeder der folgenden Teile wie folgt aufgeteilt:\n\nMathematische und statistische Erkl\u00e4rungen unserer Entscheidungen und Beschr\u00e4nkungen.\n\nRealisierung der Funktionen (verf\u00fcgbar \u00fcber den <a href=\"https:\/\/liora.io\/de\/gitlab-alles-ueber-das-git-repository-fuer-devops\">Git<\/a>-Link).\nAusf\u00fchrung der Funktionen und Output&nbsp;\n<h3 class=\"wp-block-heading\" id=\"h-was-ist-das-var-modell\">Was ist das VAR-Modell?<\/h3>\nDas VAR-Modell f\u00fcr Vector Autoregression ist ein Zeitreihenmodell, das mehrere Variablen im Zeitverlauf vorhersagt. Jede der Vorhersagen jeder Variablen tr\u00e4gt zur Vorhersage der anderen bei. Wenn wir es also in einem linearen Format schreiben w\u00fcrden, w\u00fcrden wir Folgendes erhalten:\n\nEs seien zwei Variablen, Y und X, und (t) ein Zeitpunkt in der Zeit.\n\nY(t+1) = f(Y(t), X(t))\n\nX(t+1) = f(X(t), Y(t))\n\nY(t+1) = \u03b11 + \u03b21Y(t) + \u03b22X(t) + \u03b51\n\nX(t+1) = \u03b12 + \u03b23X(t) + \u03b24Y(t) + \u03b52.\n\nMit \u03b1 als Konstanten, \u03b2 als den Variablen zugeordneten Koeffizienten, \u03b5 als Fehler.\n\nDas Modell berechnet auf der Grundlage der Historie die Konstanten, Koeffizienten f\u00fcr jede Variable.\nAu\u00dferdem enth\u00e4lt das Modell &#8222;Lags&#8220; (\u03bb), die es erm\u00f6glichen, in die Berechnung von X(t+1), Y(t+1) alle Werte von X, Y bis zu X(t- \u03bb), Y(t- \u03bb) einzubeziehen.\n\nHier findet sich die Erkl\u00e4rung f\u00fcr den Namen wieder: Ein selbstregulierender Vektor.\n<h3 class=\"wp-block-heading\" id=\"h-welchen-nutzen-hat-das-var-modell\">Welchen Nutzen hat das VAR-Modell?<\/h3>\nDas<strong> VAR-Modell<\/strong> kann sehr interessant sein, um mit maschinellen Lernmodellen wie dem RandomForestRegressor oder dem <strong>XGBoostRegressor<\/strong> zu konkurrieren, wenn deine Variable eine Zeitreihe ist. Die Grundlagen seiner Literatur sind solide, obwohl einige Aspekte noch diskutiert werden (wir kommen sp\u00e4ter darauf zur\u00fcck).\n\nDer Vorteil dieses Modells ist, dass es den Berufen sehr leicht erkl\u00e4rt werden kann, da es auf statistischen Grundlagen beruht, die leicht zu erkl\u00e4ren und zu verstehen sind.\n\nDas <strong>VAR-Modell<\/strong> kann verwendet werden, um eine Reihe von Variablen vorherzusagen, aber man kann es auch verwenden, um sich auf eine einzige Variable zu konzentrieren, was hier unser Fall ist.\n<h3 class=\"wp-block-heading\" id=\"h-definition-des-problems-und-des-vorhersagefensters\">Definition des Problems und des Vorhersagefensters<\/h3>\nBevor wir etwas vorhersagen k\u00f6nnen, brauchen wir ein Problem &#8211; und Variablen!\n\nEs ist mir nicht m\u00f6glich, mein Dataset zu enth\u00fcllen, aber ich werde dich in die Methodik der Variablenauswahl einf\u00fchren, damit du sie in allen F\u00e4llen anwenden kannst.\n\nAngenommen, dein Beruf verlangt von dir ein Modell, mit dem du eine Zahl vorhersagen kannst (Regressionstyp in der Datenwissenschaft).\n\n<strong>-&gt; Ist diese Variable abh\u00e4ngig oder wird sie im Laufe der Zeit beobachtet?<\/strong>\n\n<strong>bh<\/strong>\n\n<strong>-&gt; Ist diese Variable von vornherein mit anderen Variablen verkn\u00fcpft?<\/strong>\n\n<strong>mp,g<\/strong>\n\n<strong>-&gt; Sind diese anderen Variablen auch im Laufe der Zeit beobachtbar?<\/strong>\n\nWenn du diese drei Fragen mit Ja beantwortet hast, dann k\u00f6nnte das VAR-Modell deinem Bedarf entsprechen.\n<h3 class=\"wp-block-heading\" id=\"h-wie-wahlt-man-das-vorhersagefenster\">Wie w\u00e4hlt man das Vorhersagefenster?<\/h3>\nDies ist eine knifflige, aber sehr interessante Frage: Wie viele Tage soll (und kann!) ich vorhersagen? Die Branche hat vielleicht einen konkreten Bedarf, z. B. 30 Tage, 120 Tage, 360 Tage&#8230; Aber vielleicht hast Du nicht die n\u00f6tige Menge an Daten?\n\nIch empfehle Dir, mit dem Bedarf der Branche zu beginnen und dann das Tempo zu drosseln, wenn Du mit statistischen Tests nicht so weit kommst. Umgekehrt, wenn alles f\u00fcr den Zeitraum funktioniert, den dein Gesch\u00e4ft von dir verlangt, warum nicht weiter in die Zukunft gehen? Im Allgemeinen kann ich nur empfehlen, deine Pipeline auf verschiedenen Zeitzielen zu testen.\n<h3 class=\"wp-block-heading\" id=\"h-die-erklarenden-variablen\">Die erkl\u00e4renden Variablen :<\/h3>\nVersuche erstens, so viele Variablen wie m\u00f6glich zu identifizieren, die deine Zielvariable beeinflussen k\u00f6nnten.\n\nJe mehr Variablen du hast, desto wahrscheinlicher ist es, dass du diejenigen entdeckst, die deine Zielvariable beeinflussen. Wir argumentieren hier im <strong>Design-Thinking-Modus<\/strong>: Qualit\u00e4t durch Quantit\u00e4t. Keine Sorge, wir werden dann die interessantesten Variablen ausw\u00e4hlen, um sie in das endg\u00fcltige Modell aufzunehmen.\n\nAchte darauf, dass deine Daten die gleiche<strong> Zeiteinheit<\/strong> haben: Wenn deine Zielvariable in Tageseinheiten ausgedr\u00fcckt ist, achte darauf, dass der Rest auch in Tageseinheiten ausgedr\u00fcckt ist!\n<h3 class=\"wp-block-heading\" id=\"h-die-verwaltung-von-nan\">Die Verwaltung von NaN<\/h3>\nWenn dein Datensatz einige L\u00fccken aufweist, kannst Du nat\u00fcrlich auf die fillna()-Methoden von<strong> Python<\/strong> zur\u00fcckgreifen. F\u00fcr einen vielleicht solideren Ansatz, insbesondere wenn die Anzahl der NaNs zu gro\u00df wird, empfehle ich Dir etwas Lekt\u00fcre und das <strong>MICE-Modell.<\/strong>\n\nF\u00fcr den Fall, dass Du \u00fcber einen l\u00e4ngeren Zeitraum Daten \u00fcber bestimmte Reihen hast, \u00fcber andere aber nicht, empfehle ich Dir, dar\u00fcber nachzudenken, sie entweder ganz zu droppen oder Deinen<strong> Datensatz<\/strong> so zu k\u00fcrzen, dass Du in deiner ersten Zeile alle Deine Variablen vollst\u00e4ndig hast.\n\nHier sind einige Funktionen, um die Daten in einen einzigen Dataframe zu integrieren: def <strong>agreg_df<\/strong> (siehe den GIT-Link).\n\nUnd eine Funktion zum Ersetzen: <strong>def replace_na<\/strong> (siehe GIT-Link).\n\nUnd dann f\u00fchren wir den Code aus:\n<h3 class=\"wp-block-heading\" id=\"h-statistischer-bedarf-und-geeignete-umwandlungen\">Statistischer Bedarf und geeignete Umwandlungen<\/h3>\nUnsere Zeitreihen m\u00fcssen ein grundlegendes Kriterium erf\u00fcllen: die Stationarit\u00e4t.\n\nUnabh\u00e4ngig vom Zeitpunkt (t) in der Zeit ist der Erwartungswert unserer Variable immer derselbe. Es gibt keinen Trend und ihre Varianz ist immer gleich und nicht unendlich, und die Autokorrelation zwischen zwei Zeitpunkten h\u00e4ngt nur von der zeitlichen Verschiebung ab.\n\nIch empfehle diesen Feed auf researchgate f\u00fcr weitere Details \u00fcber die Notwendigkeit der Stationarit\u00e4t.\n\nNun, da das Problem gestellt ist, was tun wir?\n<h3 class=\"wp-block-heading\" id=\"h-transformation-mithilfe-von-box-cox\">Transformation mithilfe von Box-Cox<\/h3>\nEs kann sehr n\u00fctzlich sein, unsere Daten zu transformieren, bevor wir ihre Stationarit\u00e4t testen. <strong>Transformationen<\/strong> haben viele Vorteile, wie z. B. das Entfernen (oder Verringern) des saisonalen Aspekts, des Trends. Eine sehr praktische Transformation ist die Box-Cox-Transformation: Abh\u00e4ngig von einem bestimmten Lambda-Parameter zwischen [-1 ;1] wird die Serie auf unterschiedliche Weise transformiert, hier die Dokumentation der <strong>Funktion in Python.<\/strong>\n\nWas uns besonders interessieren wird, ist das Lambda-Argument und sein Wert &#8222;None&#8220;: In diesem Fall w\u00e4hlt die Funktion selbstst\u00e4ndig den optimalen Parameter aus! In diesem Fall ist das zweite Element, das die Funktion zur\u00fcckgibt, das <strong>&#8222;Lambda&#8220;<\/strong>, das mit der transformierten Reihe verkn\u00fcpft ist.&nbsp;\n<h3 class=\"wp-block-heading\" id=\"h-der-stationaritatstest-und-die-differenzierung\">Der Stationarit\u00e4tstest und die Differenzierung<\/h3>\nMit dem erweiterten Dickey-Fuller-Test kann die Stationarit\u00e4t einer Zeitreihe getestet werden.\n\nDie Hypothese H0 des Tests lautet: &#8222;Die Daten weisen eine Einheitswurzel auf, die Reihe ist also nicht station\u00e4r&#8220;.\n\nWir werden uns also darauf konzentrieren, diese Hypothese mit einem Vertrauensniveau von 95% abzulehnen. Das bedeutet, dass der Test einen p-Wert von weniger als 0,05 zur\u00fcckgeben muss. Hier ist die Dokumentation der Funktion.&nbsp;\n\nIch schlage dir die folgende Funktion f\u00fcr eine Formatierung des Tests vor\n\ndef dickey_fuller_test (siehe GIT-Link).\n\nF\u00fcr den Fall, dass mindestens eine der Variablen nicht station\u00e4r ist, werden wir eine Differenzierung vornehmen:\n\nData_diff(t) = observation(t) &#8211; observation(t-1).\n\nMit (t) einem Zeitpunkt in der Zeit.\n\nDifferenzieren ist eine Form der Transformation, und sie funktioniert sehr gut, um zur Stationarit\u00e4t von Reihen zu gelangen.\n\nEs gibt eine Pandas-Methode auf Dataframes, um zu differenzieren: df.diff()\n\nF\u00fcr den Fall, dass eine erste Differenzierung nicht ausreicht, um Stationarit\u00e4t in unseren Reihen zu erreichen, k\u00f6nnen wir ein zweites Mal differenzieren. Wenn das immer noch nicht ausreicht, ist es besser, die Variable aufzugeben oder nach anderen Methoden zur Stationarisierung zu suchen.\n\nKommen wir nun zur Ausf\u00fchrung des Codes f\u00fcr diesen Teil!\n\nEs kann sein, dass du &#8222;0&#8220; in deinen Daten hast: Dann musst du dem gesamten DF eine &#8222;1&#8220; hinzuf\u00fcgen, damit die Transformation funktioniert:\n\nProblem: Alle Variablen sind nicht-station\u00e4r&#8230;\n<figure>\n\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" width=\"512\" height=\"354\" src=\"https:\/\/liora.io\/app\/uploads\/sites\/8\/2023\/02\/unnamed.png\" alt=\"\" loading=\"lazy\" srcset=\"https:\/\/liora.io\/app\/uploads\/sites\/8\/2023\/02\/unnamed.png 512w, https:\/\/liora.io\/app\/uploads\/sites\/8\/2023\/02\/unnamed-300x207.png 300w\" sizes=\"(max-width: 512px) 100vw, 512px\"><figcaption><\/figcaption><\/figure>\nDieses Mal ist alles in Ordnung! Meine Reihen sind station\u00e4r.\n\nJEDOCH, Achtung: Es ist zu beachten, dass eine zweite Differenzierung dazu f\u00fchrt, dass unsere Variablen Informationen verlieren.\n\nWenn also nach einer ersten Differenzierung nicht alle deine Reihen station\u00e4r sind, musst du zwei Familien von Modellen optimieren und vergleichen:\n\nEine erste Familie auf den EINMAL differenzierten Daten, OHNE die nicht-station\u00e4ren Variablen.\n\nEine zweite Familie auf den ZWEIMAL differenzierten Daten, MIT den Variablen, die station\u00e4r geworden sind.\n\nIn meinem Fall wei\u00df ich, dass das zweimal differenzierte Modell im Vergleich zum Hinzuf\u00fcgen der beiden neuen station\u00e4ren Variablen zu viel Signal verliert. Ich werde also mit den einmal differenzierten Daten arbeiten, ohne die beiden Variablen, die nicht differenziert sind. Wir werden sie also droppen, dann den Zug erstellen und test set\n<h3 class=\"wp-block-heading\" id=\"h-auswahl-der-variablen-und-des-maxlags-iteration-durch-den-granger-test\">Auswahl der Variablen und des Maxlags: Iteration durch den Granger-Test<\/h3>\nNicht alle Variablen, die wir ausgew\u00e4hlt haben, sind f\u00fcr unser Modell geeignet. Die Frage, die wir uns stellen m\u00fcssen, lautet: Beteiligen sich alle Variablen effektiv an der Vorhersage der anderen, insbesondere der Zielvariablen?\n\nEs gibt einen Test, der diese Frage beantworten kann: der Granger-Test. Mit ihm wird getestet, ob die Vorhersagen der Variablen X die Vorhersagen der <strong>Variablen Y signifikant beeinflussen<\/strong>. Die HO-Hypothese des Tests lautet: &#8222;Die Vorhersagen der Variable X beeinflussen die Vorhersagen der Variable Y nicht&#8220;. Wir wollen also, bei einem Konfidenzniveau von 95%, p-Werte unter 0,05. Die Wikipedia-Seite des Tests erkl\u00e4rt dies aus meiner Sicht sehr gut. Und hier ist die Dokumentation des Tests unter Python.\n\nWas hier besonders interessant ist und beachtet werden sollte, ist das Argument &#8222;maxlag&#8220;: Es wird bestimmen, wie viele Lags unser Test maximal in Anspruch nehmen wird. Und hier werden wir iterative Tests durchf\u00fchren m\u00fcssen, da maxlag die p-Werte ver\u00e4ndert, und zwar potenziell drastisch: Variablen, die den Test bei maxlag = 10 nicht bestehen, k\u00f6nnen ihn bei maxlag 20 vollst\u00e4ndig bestehen.\n\nIch schlage den folgenden Code f\u00fcr eine Funktion des grangers test vor:\n\ndef grangers_test (siehe GIT-Link).\n\nWie lesen wir den DF, der an uns zur\u00fcckgegeben wird?\n\nDie Variablen in der Spalte (die X) sind diejenigen, deren Vorhersagegewicht auf die Vorhersagen der Y-Variablen getestet wird (wir werden uns weiter unten ein Beispiel ansehen). Wenn der Wert kleiner als 0,05 ist, dann wird tats\u00e4chlich H0 verworfen und somit beeinflussen die Vorhersagen von X die Vorhersagen von Y.\n\nUnser Ziel ist es, eine Tabelle zu haben, in der alle Werte (au\u00dfer der Diagonale) kleiner als 0,05 sind: Das bedeutet, dass alle Variablenpaare die Hypothese H0 ablehnen.\n\nAber bevor wir unsere Variablen mit dieser Funktion testen, m\u00fcssen wir den Maxlag bestimmen.\n\nDazu werden wir unser VAR-Modell mit einem zuf\u00e4llig ausgew\u00e4hlten Maxlag trainieren. Wenn das Training funktioniert, erh\u00f6hen wir den Maxlag, bis der Code abst\u00fcrzt: Ein zu hoher Maxlag f\u00fchrt zu einem Problem mit den Gleichungen. Wenn wir den <strong>Maxlag<\/strong> bestimmt haben, gehen wir zur Auswahl der Variablen \u00fcber.\n\nDazu gehen wir in Iterationen wie folgt vor:\n\nWir testen mit unserer Funktion und dem Maxlag und zeigen den DF an.\nWir schauen uns die Spalte ODER die Zeile an, die die meisten Werte &gt;0,05 enth\u00e4lt. Im Fall der Spalten bedeutet dies: Meine Variable X bestimmt zu wenig von Y. Im Fall von Zeilen: Meine Variable Y wird zu wenig von X bestimmt. Wenn wir eine Variable finden, die sowohl in der Zeile als auch in der Spalte viele 0,05-Werte enth\u00e4lt, ist das perfekt, da wir dann eine Variable, die die anderen Variablen nur wenig erkl\u00e4rt und wenig erkl\u00e4rt, auf einen Schlag entfernen.\nWir entfernen die ausgew\u00e4hlte Variable aus unserem aktuellen DF, aber auch aus dem Basis-DF, da wir ihn sp\u00e4ter f\u00fcr die R\u00fccktransformationen verwenden werden, brauchen wir die gleichen Spalten.\nWir trainieren unser Modell, um den neuen &#8222;Maxlag&#8220; zu finden, der das Modell nicht zum Absturz bringt.\nWir kehren zu Schritt 1 zur\u00fcck, bis der DF nur noch Werte &lt;0,05 enth\u00e4lt.&nbsp;\n\nHier ist der<strong> Code<\/strong>, der mit dieser Passage verbunden ist, mit einigen Iterationen und Screenshots zur Veranschaulichung :\n\nHier ist ein Screenshot von dem, was ich erhalte (Achtung, dieser Vorgang ist der l\u00e4ngste in unserer Modellierung).\n<figure>\n\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" width=\"512\" height=\"267\" src=\"https:\/\/liora.io\/app\/uploads\/sites\/8\/2023\/02\/unnamed-3.png\" alt=\"\" loading=\"lazy\" srcset=\"https:\/\/liora.io\/app\/uploads\/sites\/8\/2023\/02\/unnamed-3.png 512w, https:\/\/liora.io\/app\/uploads\/sites\/8\/2023\/02\/unnamed-3-300x156.png 300w\" sizes=\"(max-width: 512px) 100vw, 512px\">\n\n<figcaption> Les r\u00e9sultats du premier test de Granger<\/figcaption><\/figure>\nZur Erinnerung: Unsere Variable 1 ist die Zielvariable des Projekts, wir m\u00fcssen sie behalten.\n\nAuf einen Blick denke ich, dass die Variable 8 ein guter Kandidat ist: Hier ist die Anzahl der p-Werte &gt;0,05 am gr\u00f6\u00dften.\n\nWir droppen sie, \u00e4ndern die Sets :\n\nWir suchen nach einem neuen optimalen Maxlag (so hoch wie m\u00f6glich), indem wir den vorherigen Codeblock erneut ausf\u00fchren (maxlag, model_var, res).\n\nIn meinem Fall steigt er auf 19. Ich f\u00fchre den Granger-Test erneut durch:\n<figure>\n\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" width=\"512\" height=\"240\" src=\"https:\/\/liora.io\/app\/uploads\/sites\/8\/2023\/02\/unnamed-4.png\" alt=\"\" loading=\"lazy\" srcset=\"https:\/\/liora.io\/app\/uploads\/sites\/8\/2023\/02\/unnamed-4.png 512w, https:\/\/liora.io\/app\/uploads\/sites\/8\/2023\/02\/unnamed-4-300x141.png 300w\" sizes=\"(max-width: 512px) 100vw, 512px\">\n\n<figcaption>Les r\u00e9sultats du second test de Granger<\/figcaption><\/figure>\nJetzt ist es die Variable 6, die der beste Kandidat ist.\n\nIch werde sie droppen und die vorherigen Schritte wiederholen, bis der DF so aussieht (kein p-Wert &gt;0,05):\n<figure>\n\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" width=\"512\" height=\"254\" src=\"https:\/\/liora.io\/app\/uploads\/sites\/8\/2023\/02\/unnamed-5.png\" alt=\"\" loading=\"lazy\" srcset=\"https:\/\/liora.io\/app\/uploads\/sites\/8\/2023\/02\/unnamed-5.png 512w, https:\/\/liora.io\/app\/uploads\/sites\/8\/2023\/02\/unnamed-5-300x149.png 300w\" sizes=\"(max-width: 512px) 100vw, 512px\">\n\n<figcaption>DF de Granger final<\/figcaption><\/figure>\n<h3 class=\"wp-block-heading\" id=\"h-iteriere-durch-den-maxlag-um-das-beste-modell-zu-finden\">Iteriere durch den Maxlag, um das beste Modell zu finden.<\/h3>\nNachdem wir den df_granger bereinigt haben, holen wir uns unseren h\u00f6chsten maxlag (also den letzten). In meinem Fall ist maxlag = 67.\n\nWir werden eine Vorlage pro maxlag erstellen und jedes Mal die folgenden Elemente abrufen:\n\n<strong>Den MAE (oder deine Zielmetrik)<\/strong>, den p-Wert des Tests auf Normalit\u00e4t der Residuen, den p-Wert des Tests auf Wei\u00dfe der Residuen.\n\nEinige Spezifikationen zur Normalit\u00e4t und Wei\u00dfe:\n\nResiduen, die den Test auf Normalit\u00e4t bestehen, bedeuten, dass die Fehler einer Normalverteilung folgen. Dies ist eine notwendige Bedingung, um die klassischen Konfidenzintervalle zu erstellen. Falls die Residuen den Test nicht bestehen, m\u00fcssen wir mit Bootstraping arbeiten, was das Thema eines zuk\u00fcnftigen Artikels sein wird!\n\nEin erfolgreicher Test auf <strong>Wei\u00dfe der Residuen<\/strong> bedeutet, dass die Residuen die Form von wei\u00dfem Rauschen haben, was bedeutet, dass aus unseren Variablen keine Informationen mehr (oder nur noch am Rande) zu gewinnen sind. Man kann ein Modell, das den Test auf wei\u00dfe Residuen nicht besteht, immer noch verbessern, aber nur weil ein Modell den Test besteht, bedeutet das nicht, dass es nicht verbesserungsw\u00fcrdig ist!\n\nMan kann ein Modell leicht verbessern, indem man zu allen Vorhersagen den Mittelwert der Verzerrungen hinzuf\u00fcgt, was in unserer Pipeline geschieht.\n\nDie vorherigen Punkte sind fast eine Paraphrase der ausgezeichneten Arbeit von Rob J Hyndman und George Athanasopoulos in &#8222;Forecasting, principles and practice&#8220;, die du hier kostenlos finden kannst und die ich dir w\u00e4rmstens empfehlen kann: https:\/\/otexts.com\/fpp2\/.\n\nIch schlage dir folgende Funktion f\u00fcr unsere konkrete Pipeline vor:\n\ndef pipeline_var (siehe GIT-Link).&nbsp;\n\nDie Aufmerksameren unter euch werden bemerkt haben, dass wir die Funktion &#8222;inv_diff&#8220; innerhalb von &#8222;pipeline_var&#8220; verwenden, die auch im git verf\u00fcgbar ist. Achte auf den Parameter &#8222;second_diff&#8220;! False, wenn wir einmalig differenzierte Daten verwenden, True andernfalls.&nbsp;\n\nJetzt f\u00fchren wir das Ganze aus und speichern unsere MAEs und p-Werte aus den Tests. Ich drucke &#8222;i&#8220;, um die Ausf\u00fchrung zu verfolgen. Vergiss nicht, im Fitting des Modells verschiedene Werte f\u00fcr die Parameter &#8222;ic&#8220; und &#8222;trend&#8220; zu testen!\n\nNachdem wir den df_granger bereinigt haben, holen wir uns unseren h\u00f6chsten maxlag (also den letzten). In meinem Fall ist maxlag = 67.\n\nWir werden eine Vorlage pro maxlag erstellen und jedes Mal die folgenden Elemente abrufen:\n\nDen MAE (oder deine Zielmetrik), den p-Wert des Tests auf Normalit\u00e4t der Residuen, den p-Wert des Tests auf Wei\u00dfe der Residuen.\n\nEinige Spezifikationen zur <strong>Normalit\u00e4t und Wei\u00dfe:<\/strong>\n\nResiduen, die den Test auf Normalit\u00e4t bestehen, bedeuten, dass die Fehler einer Normalverteilung folgen. Dies ist eine notwendige Bedingung, um die klassischen Konfidenzintervalle zu erstellen. Falls die Residuen den Test nicht bestehen, m\u00fcssen wir mit Bootstraping arbeiten, was das Thema eines zuk\u00fcnftigen Artikels sein wird!\n\nEin erfolgreicher Test auf <strong>Wei\u00dfe der Residuen<\/strong> bedeutet, dass die Residuen die Form von wei\u00dfem Rauschen haben, was bedeutet, dass aus unseren Variablen keine Informationen mehr (oder nur noch am Rande) zu gewinnen sind. Man kann ein Modell, das den Test auf wei\u00dfe Residuen nicht besteht, immer noch verbessern, aber nur weil ein Modell den Test besteht, bedeutet das nicht, dass es nicht verbesserungsw\u00fcrdig ist!\n\nMan kann ein Modell leicht verbessern, indem man zu allen Vorhersagen den Mittelwert der Verzerrungen hinzuf\u00fcgt, was in unserer Pipeline geschieht.\n\nDie vorherigen Punkte sind fast eine Paraphrase der ausgezeichneten Arbeit von Rob J Hyndman und George Athanasopoulos in &#8222;Forecasting, principles and practice&#8220;, die du hier kostenlos finden kannst und die ich dir w\u00e4rmstens empfehlen kann: https:\/\/otexts.com\/fpp2\/.\n\nIch schlage dir folgende Funktion f\u00fcr unsere konkrete Pipeline vor:\n\ndef pipeline_var (siehe GIT-Link).&nbsp;\n\nDie <strong>Aufmerksameren<\/strong> unter euch werden bemerkt haben, dass wir die Funktion &#8222;inv_diff&#8220; innerhalb von &#8222;pipeline_var&#8220; verwenden, die auch im git verf\u00fcgbar ist. Achte auf den Parameter &#8222;second_diff&#8220;! False, wenn wir einmalig differenzierte Daten verwenden, True andernfalls.&nbsp;\n\nJetzt f\u00fchren wir das Ganze aus und speichern unsere MAEs und p-Werte aus den Tests. Ich drucke &#8222;i&#8220;, um die<strong> Ausf\u00fchrung zu verfolgen<\/strong>. Vergiss nicht, im Fitting des Modells verschiedene Werte f\u00fcr die Parameter &#8222;ic&#8220; und &#8222;trend&#8220; zu testen!\n<h3 class=\"wp-block-heading\" id=\"h-uberprufung-des-granger-tests-fur-den-neuen-optimalen-lag\">\u00dcberpr\u00fcfung des Granger-Tests f\u00fcr den neuen optimalen Lag<\/h3>\nDa mein bester MAE bei einem maxlag von weniger als 67 erzielt wurde, d.h. dem h\u00f6chsten lag, mit dem ich meine Granger-Tests durchgef\u00fchrt habe, muss ich meine Granger-Matrix mit einem lag von 44 erneut testen. Wir werden also unsere df mit maxlag = 44 erneut testen, und ich erhalte folgendes Ergebnis:\n<figure>\n\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" width=\"512\" height=\"263\" src=\"https:\/\/liora.io\/app\/uploads\/sites\/8\/2023\/02\/unnamed-6.png\" alt=\"\" loading=\"lazy\" srcset=\"https:\/\/liora.io\/app\/uploads\/sites\/8\/2023\/02\/unnamed-6.png 512w, https:\/\/liora.io\/app\/uploads\/sites\/8\/2023\/02\/unnamed-6-300x154.png 300w\" sizes=\"(max-width: 512px) 100vw, 512px\">\n\n<figcaption>R\u00e9sultat du test de Granger avec un maxlag de 44<\/figcaption><\/figure>\nDa keiner meiner P-Werte den Test versagt, kann ich beruhigt schlussfolgern, dass mein bestes Modell mit lag = 44 erzielt wird.\n<h3 class=\"wp-block-heading\" id=\"h-ergebnisse-grafiken-metriken\">Ergebnisse, Grafiken, Metriken<\/h3>\nIch schlage Dir die folgenden zwei Funktionen vor, um deine Vorhersagen gegen die Realit\u00e4t zu plotten:\n\n<strong>def plot_pred_true<\/strong>\n\n<strong>def plot_pred_true_total<\/strong>\n\nWir trainieren das beste Modell und zeigen die Grafiken an:\n<figure>\n\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" width=\"512\" height=\"341\" src=\"https:\/\/liora.io\/app\/uploads\/sites\/8\/2023\/02\/unnamed-7.png\" alt=\"\" loading=\"lazy\" srcset=\"https:\/\/liora.io\/app\/uploads\/sites\/8\/2023\/02\/unnamed-7.png 512w, https:\/\/liora.io\/app\/uploads\/sites\/8\/2023\/02\/unnamed-7-300x200.png 300w\" sizes=\"(max-width: 512px) 100vw, 512px\">\n\n<figcaption><\/figcaption><\/figure>\n<figure>\n\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" width=\"512\" height=\"341\" src=\"https:\/\/liora.io\/app\/uploads\/sites\/8\/2023\/02\/unnamed-9.png\" alt=\"\" loading=\"lazy\" srcset=\"https:\/\/liora.io\/app\/uploads\/sites\/8\/2023\/02\/unnamed-9.png 512w, https:\/\/liora.io\/app\/uploads\/sites\/8\/2023\/02\/unnamed-9-300x200.png 300w\" sizes=\"(max-width: 512px) 100vw, 512px\">\n\n<figcaption><\/figcaption><\/figure>\nIch erhalte also \u00fcber 120 Tage eine Vorhersage mit einem MAE von 1,44. Mein <strong>Wei\u00dfheitstest<\/strong> besteht nicht, was bedeutet, dass es noch Informationen in meinen Variablen gibt. Der Normalit\u00e4tstest besteht ebenfalls nicht, sodass ich die klassischen Konfidenzintervalle nicht verwenden kann.\n\nVielen Dank, dass du mich bis hierher gelesen hast! Ich hoffe, dass dieser Artikel dir helfen kann. Bitte kommentiere oder kontaktiere mich bei Fragen!\n\nWenn Du, genau wie Victor, gerne lernen m\u00f6chtest, wie man mit Daten umgeht, dann sind wir f\u00fcr Dich da!\n\n\n<div class=\"wp-block-buttons is-layout-flex wp-block-buttons-is-layout-flex is-content-justification-center\"><div class=\"wp-block-button \"><a class=\"wp-block-button__link wp-element-button \" href=\"https:\/\/liora.io\/de\/unsere-aus-und-weiterbildungen\">Unsere Kurse entdecken<\/a><\/div><\/div>\n","protected":false},"excerpt":{"rendered":"<p>Das VAR-Modell: Eine umfassende Pipeline vom Gesch\u00e4ftsansatz bis zum Plotten der Ergebnisse Pr\u00e4sentation und Dankesch\u00f6n Hallo zusammen und willkommen zu diesem Artikel, der darauf abzielt, mit Dir eine Pipeline f\u00fcr die Ausf\u00fchrung eines VAR-Modells unter Python zu entwickeln, von der Integration der Daten bis zum Plotten der Ergebnisse. Nach meiner Ausbildung in Management und Marktfinanzierung [\u2026]<\/p>\n","protected":false},"author":47,"featured_media":169203,"comment_status":"open","ping_status":"open","sticky":false,"template":"elementor_theme","format":"standard","meta":{"_acf_changed":false,"editor_notices":[],"footnotes":""},"categories":[2472],"class_list":["post-168557","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-data-ki"],"acf":[],"_links":{"self":[{"href":"https:\/\/liora.io\/de\/wp-json\/wp\/v2\/posts\/168557","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/liora.io\/de\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/liora.io\/de\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/liora.io\/de\/wp-json\/wp\/v2\/users\/47"}],"replies":[{"embeddable":true,"href":"https:\/\/liora.io\/de\/wp-json\/wp\/v2\/comments?post=168557"}],"version-history":[{"count":3,"href":"https:\/\/liora.io\/de\/wp-json\/wp\/v2\/posts\/168557\/revisions"}],"predecessor-version":[{"id":216330,"href":"https:\/\/liora.io\/de\/wp-json\/wp\/v2\/posts\/168557\/revisions\/216330"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/liora.io\/de\/wp-json\/wp\/v2\/media\/169203"}],"wp:attachment":[{"href":"https:\/\/liora.io\/de\/wp-json\/wp\/v2\/media?parent=168557"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/liora.io\/de\/wp-json\/wp\/v2\/categories?post=168557"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}