{"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-08-07T13:42:47","modified_gmt":"2026-08-07T11:42:47","slug":"var-modell-pipeline","status":"publish","type":"post","link":"https:\/\/liora.io\/de\/var-modell-pipeline","title":{"rendered":"VAR-Modell Data Science: Pipeline :  Gesch\u00e4ftsansatz bis zum Plotten der Ergebnisse"},"content":{"rendered":"\n<p><strong>Das VAR-Modell: Eine umfassende Pipeline vom Gesch\u00e4ftsansatz bis zum Plotten der Ergebnisse<\/strong><\/p>\n\n\n\n<div class=\"wp-block-buttons is-layout-flex wp-block-buttons-is-layout-flex is-content-justification-center wp-container-core-buttons-is-layout-5ee10de4\" style=\"margin-top:32px;margin-bottom:32px\"><div class=\"wp-block-button\"><a class=\"wp-block-button__link wp-element-button\" href=\"https:\/\/liora.io\/de\/weiterbildung\/data-ki\/data-scientist\">Unsere Kurse entdecken<\/a><\/div><\/div>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"prasentation-und-dankeschon\">Pr\u00e4sentation und Dankesch\u00f6n<\/h2>\n\n\n\n<p>Hallo 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!<\/p>\n\n\n\n<p>Zun\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.<\/p>\n\n\n\n<p>F\u00fcr den Rest des Artikels wird jeder der folgenden Teile wie folgt aufgeteilt:<\/p>\n\n\n\n<p>Mathematische und statistische Erkl\u00e4rungen unserer Entscheidungen und Beschr\u00e4nkungen.<\/p>\n\n\n\n<p>Realisierung 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<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"was-ist-das-var-modell\">Was ist das VAR-Modell?<\/h2>\n\n\n\n<p>Das 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:<\/p>\n\n\n\n<p>Es seien zwei Variablen, Y und X, und (t) ein Zeitpunkt in der Zeit.<\/p>\n\n\n\n<p>Y(t+1) = f(Y(t), X(t))<\/p>\n\n\n\n<p>X(t+1) = f(X(t), Y(t))<\/p>\n\n\n\n<p>Y(t+1) = \u03b11 + \u03b21Y(t) + \u03b22X(t) + \u03b51<\/p>\n\n\n\n<p>X(t+1) = \u03b12 + \u03b23X(t) + \u03b24Y(t) + \u03b52.<\/p>\n\n\n\n<p>Mit \u03b1 als Konstanten, \u03b2 als den Variablen zugeordneten Koeffizienten, \u03b5 als Fehler.<\/p>\n\n\n\n<div class=\"wp-block-buttons is-layout-flex wp-block-buttons-is-layout-flex is-content-justification-center wp-container-core-buttons-is-layout-5ee10de4\" style=\"margin-top:32px;margin-bottom:32px\"><div class=\"wp-block-button\"><a class=\"wp-block-button__link wp-element-button\" href=\"https:\/\/liora.io\/de\/weiterbildung\/data-ki\/data-scientist\">Data Scientist Weiterbildung entdecken<\/a><\/div><\/div>\n\n\n\n<p>Das 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.<\/p>\n\n\n\n<p>Hier findet sich die Erkl\u00e4rung f\u00fcr den Namen wieder: Ein selbstregulierender Vektor.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"welchen-nutzen-hat-das-var-modell\">Welchen Nutzen hat das VAR-Modell?<\/h3>\n\n\n\n<p>Das<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).<\/p>\n\n\n\n<p>Der 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.<\/p>\n\n\n\n<p>Das <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.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"definition-des-problems-und-des-vorhersagefensters\">Definition des Problems und des Vorhersagefensters<\/h2>\n\n\n\n<p>Bevor wir etwas vorhersagen k\u00f6nnen, brauchen wir ein Problem ,  und Variablen!<\/p>\n\n\n\n<p>Es 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.<\/p>\n\n\n\n<p>Angenommen, dein Beruf verlangt von dir ein Modell, mit dem du eine Zahl vorhersagen kannst (Regressionstyp in der Datenwissenschaft).<\/p>\n\n\n\n<p><strong>-&gt; Ist diese Variable abh\u00e4ngig oder wird sie im Laufe der Zeit beobachtet?<\/strong><strong>bh<\/strong><strong>-&gt; Ist diese Variable von vornherein mit anderen Variablen verkn\u00fcpft?<\/strong><strong>mp,g<\/strong><strong>-&gt; Sind diese anderen Variablen auch im Laufe der Zeit beobachtbar?<\/strong><\/p>\n\n\n\n<div class=\"wp-block-buttons is-layout-flex wp-block-buttons-is-layout-flex is-content-justification-center wp-container-core-buttons-is-layout-5ee10de4\" style=\"margin-top:32px;margin-bottom:32px\"><div class=\"wp-block-button\"><a class=\"wp-block-button__link wp-element-button\" href=\"https:\/\/liora.io\/de\/weiterbildung\/data-ki\/data-scientist\">Data Scientist Weiterbildung entdecken<\/a><\/div><\/div>\n\n\n\n<p>Wenn du diese drei Fragen mit Ja beantwortet hast, dann k\u00f6nnte das VAR-Modell deinem Bedarf entsprechen.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"wie-wahlt-man-das-vorhersagefenster\">Wie w\u00e4hlt man das Vorhersagefenster?<\/h3>\n\n\n\n<p>Dies 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?<\/p>\n\n\n\n<p>Ich 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.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"die-erklarenden-variablen\">Die erkl\u00e4renden Variablen :<\/h3>\n\n\n\n<p>Versuche erstens, so viele Variablen wie m\u00f6glich zu identifizieren, die deine Zielvariable beeinflussen k\u00f6nnten.<\/p>\n\n\n\n<p>Je 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.<\/p>\n\n\n\n<p>Achte 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!<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"die-verwaltung-von-nan\">Die Verwaltung von NaN<\/h3>\n\n\n\n<p>Wenn 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><\/p>\n\n\n\n<p>F\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.<\/p>\n\n\n\n<div class=\"wp-block-buttons is-layout-flex wp-block-buttons-is-layout-flex is-content-justification-center wp-container-core-buttons-is-layout-5ee10de4\" style=\"margin-top:32px;margin-bottom:32px\"><div class=\"wp-block-button\"><a class=\"wp-block-button__link wp-element-button\" href=\"https:\/\/liora.io\/de\/weiterbildung\/data-ki\/data-scientist\">Data Scientist Weiterbildung entdecken<\/a><\/div><\/div>\n\n\n\n<p>Hier sind einige Funktionen, um die Daten in einen einzigen Dataframe zu integrieren: def <strong>agreg_df<\/strong> (siehe den GIT-Link).<\/p>\n\n\n\n<p>Und eine Funktion zum Ersetzen: <strong>def replace_na<\/strong> (siehe GIT-Link).<\/p>\n\n\n\n<p>Und dann f\u00fchren wir den Code aus:<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"statistischer-bedarf-und-geeignete-umwandlungen\">Statistischer Bedarf und geeignete Umwandlungen<\/h2>\n\n\n\n<p>Unsere Zeitreihen m\u00fcssen ein grundlegendes Kriterium erf\u00fcllen: die Stationarit\u00e4t.<\/p>\n\n\n\n<p>Unabh\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.<\/p>\n\n\n\n<p>Ich empfehle diesen Feed auf researchgate f\u00fcr weitere Details \u00fcber die Notwendigkeit der Stationarit\u00e4t.<\/p>\n\n\n\n<p>Nun, da das Problem gestellt ist, was tun wir?<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"transformation-mithilfe-von-box-cox\">Transformation mithilfe von Box-Cox<\/h3>\n\n\n\n<p>Es 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><\/p>\n\n\n\n<p>Was 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.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"der-stationaritatstest-und-die-differenzierung\">Der Stationarit\u00e4tstest und die Differenzierung<\/h3>\n\n\n\n<p>Mit dem erweiterten Dickey-Fuller-Test kann die Stationarit\u00e4t einer Zeitreihe getestet werden.<\/p>\n\n\n\n<p>Die Hypothese H0 des Tests lautet: &#8222;Die Daten weisen eine Einheitswurzel auf, die Reihe ist also nicht station\u00e4r&#8220;.<\/p>\n\n\n\n<p>Wir 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.<\/p>\n\n\n\n<div class=\"wp-block-buttons is-layout-flex wp-block-buttons-is-layout-flex is-content-justification-center wp-container-core-buttons-is-layout-5ee10de4\" style=\"margin-top:32px;margin-bottom:32px\"><div class=\"wp-block-button\"><a class=\"wp-block-button__link wp-element-button\" href=\"https:\/\/liora.io\/de\/weiterbildung\/data-ki\/data-scientist\">Data Scientist Weiterbildung entdecken<\/a><\/div><\/div>\n\n\n\n<p>Ich schlage dir die folgende Funktion f\u00fcr eine Formatierung des Tests vor<\/p>\n\n\n\n<p>def dickey_fuller_test (siehe GIT-Link).<\/p>\n\n\n\n<p>F\u00fcr den Fall, dass mindestens eine der Variablen nicht station\u00e4r ist, werden wir eine Differenzierung vornehmen:<\/p>\n\n\n\n<p>Data_diff(t) = observation(t)  \u2212  observation(t-1).<\/p>\n\n\n\n<p>Mit (t) einem Zeitpunkt in der Zeit.<\/p>\n\n\n\n<p>Differenzieren ist eine Form der Transformation, und sie funktioniert sehr gut, um zur Stationarit\u00e4t von Reihen zu gelangen.<\/p>\n\n\n\n<p>Es gibt eine Pandas-Methode auf Dataframes, um zu differenzieren: df.diff()<\/p>\n\n\n\n<p>F\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.<\/p>\n\n\n\n<p>Kommen wir nun zur Ausf\u00fchrung des Codes f\u00fcr diesen Teil!<\/p>\n\n\n\n<p>Es 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:<\/p>\n\n\n\n<p>Problem: Alle Variablen sind nicht-station\u00e4r&#8230;<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter size-full is-resized\" style=\"width:512px;max-width:100%;margin-top:32px;margin-right:auto;margin-bottom:32px;margin-left:auto\"><img alt=\"Illustration zu \u201eDer Stationarit\u00e4tstest und die Differenzierung\u201c\" decoding=\"async\" height=\"354\" loading=\"lazy\" sizes=\"(max-width: 512px) 100vw, 512px\" src=\"https:\/\/liora.io\/app\/uploads\/sites\/8\/2023\/02\/unnamed.png\" 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\" style=\"width:512px;max-width:100%;height:auto\" width=\"512\"\/><\/figure>\n\n\n\n<p>Dieses Mal ist alles in Ordnung! Meine Reihen sind station\u00e4r.<\/p>\n\n\n\n<p>JEDOCH, Achtung: Es ist zu beachten, dass eine zweite Differenzierung dazu f\u00fchrt, dass unsere Variablen Informationen verlieren.<\/p>\n\n\n\n<p>Wenn also nach einer ersten Differenzierung nicht alle deine Reihen station\u00e4r sind, musst du zwei Familien von Modellen optimieren und vergleichen:<\/p>\n\n\n\n<p>Eine erste Familie auf den EINMAL differenzierten Daten, OHNE die nicht-station\u00e4ren Variablen.<\/p>\n\n\n\n<p>Eine zweite Familie auf den ZWEIMAL differenzierten Daten, MIT den Variablen, die station\u00e4r geworden sind.<\/p>\n\n\n\n<p>In 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<\/p>\n\n\n\n<div class=\"wp-block-buttons is-layout-flex wp-block-buttons-is-layout-flex is-content-justification-center wp-container-core-buttons-is-layout-5ee10de4\" style=\"margin-top:32px;margin-bottom:32px\"><div class=\"wp-block-button\"><a class=\"wp-block-button__link wp-element-button\" href=\"https:\/\/liora.io\/de\/weiterbildung\/data-ki\/data-scientist\">Data Scientist Weiterbildung entdecken<\/a><\/div><\/div>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"auswahl-der-variablen-und-des-maxlags-iteration-durch-den-granger-test\">Auswahl der Variablen und des Maxlags: Iteration durch den Granger-Test<\/h2>\n\n\n\n<p>Nicht 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?<\/p>\n\n\n\n<p>Es 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.<\/p>\n\n\n\n<p>Was 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.<\/p>\n\n\n\n<p>Ich schlage den folgenden Code f\u00fcr eine Funktion des grangers test vor:<\/p>\n\n\n\n<p>def grangers_test (siehe GIT-Link).<\/p>\n\n\n\n<p>Wie lesen wir den DF, der an uns zur\u00fcckgegeben wird?<\/p>\n\n\n\n<p>Die 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.<\/p>\n\n\n\n<div class=\"wp-block-buttons is-layout-flex wp-block-buttons-is-layout-flex is-content-justification-center wp-container-core-buttons-is-layout-5ee10de4\" style=\"margin-top:32px;margin-bottom:32px\"><div class=\"wp-block-button\"><a class=\"wp-block-button__link wp-element-button\" href=\"https:\/\/liora.io\/de\/weiterbildung\/data-ki\/data-scientist\">Data Scientist Weiterbildung entdecken<\/a><\/div><\/div>\n\n\n\n<p>Unser 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.<\/p>\n\n\n\n<p>Aber bevor wir unsere Variablen mit dieser Funktion testen, m\u00fcssen wir den Maxlag bestimmen.<\/p>\n\n\n\n<p>Dazu 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.<\/p>\n\n\n\n<p>Dazu gehen wir in Iterationen wie folgt vor:<\/p>\n\n\n\n<p>Wir 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.<\/p>\n\n\n\n<div class=\"wp-block-buttons is-layout-flex wp-block-buttons-is-layout-flex is-content-justification-center wp-container-core-buttons-is-layout-5ee10de4\" style=\"margin-top:32px;margin-bottom:32px\"><div class=\"wp-block-button\"><a class=\"wp-block-button__link wp-element-button\" href=\"https:\/\/liora.io\/de\/weiterbildung\/data-ki\/data-scientist\">Data Scientist Weiterbildung entdecken<\/a><\/div><\/div>\n\n\n\n<p>Hier ist der<strong> Code<\/strong>, der mit dieser Passage verbunden ist, mit einigen Iterationen und Screenshots zur Veranschaulichung :<\/p>\n\n\n\n<p>Hier ist ein Screenshot von dem, was ich erhalte (Achtung, dieser Vorgang ist der l\u00e4ngste in unserer Modellierung).<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter size-full is-resized\" style=\"width:512px;max-width:100%;margin-top:32px;margin-right:auto;margin-bottom:32px;margin-left:auto\"><img alt=\"Les r\u00e9sultats du premier test de Granger\" decoding=\"async\" height=\"267\" loading=\"lazy\" sizes=\"(max-width: 512px) 100vw, 512px\" src=\"https:\/\/liora.io\/app\/uploads\/sites\/8\/2023\/02\/unnamed-3.png\" 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\" style=\"width:512px;max-width:100%;height:auto\" width=\"512\"\/><figcaption class=\"wp-element-caption\"> Les r\u00e9sultats du premier test de Granger<\/figcaption><\/figure>\n\n\n\n<p>Zur Erinnerung: Unsere Variable 1 ist die Zielvariable des Projekts, wir m\u00fcssen sie behalten.<\/p>\n\n\n\n<p>Auf 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.<\/p>\n\n\n\n<p>Wir droppen sie, \u00e4ndern die Sets :<\/p>\n\n\n\n<p>Wir suchen nach einem neuen optimalen Maxlag (so hoch wie m\u00f6glich), indem wir den vorherigen Codeblock erneut ausf\u00fchren (maxlag, model_var, res).<\/p>\n\n\n\n<p>In meinem Fall steigt er auf 19. Ich f\u00fchre den Granger-Test erneut durch:<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter size-full is-resized\" style=\"width:512px;max-width:100%;margin-top:32px;margin-right:auto;margin-bottom:32px;margin-left:auto\"><img alt=\"Les r\u00e9sultats du second test de Granger\" decoding=\"async\" height=\"240\" loading=\"lazy\" sizes=\"(max-width: 512px) 100vw, 512px\" src=\"https:\/\/liora.io\/app\/uploads\/sites\/8\/2023\/02\/unnamed-4.png\" 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\" style=\"width:512px;max-width:100%;height:auto\" width=\"512\"\/><figcaption class=\"wp-element-caption\">Les r\u00e9sultats du second test de Granger<\/figcaption><\/figure>\n\n\n\n<p>Jetzt ist es die Variable 6, die der beste Kandidat ist.<\/p>\n\n\n\n<p>Ich werde sie droppen und die vorherigen Schritte wiederholen, bis der DF so aussieht (kein p-Wert &gt;0,05):<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter size-full is-resized\" style=\"width:512px;max-width:100%;margin-top:32px;margin-right:auto;margin-bottom:32px;margin-left:auto\"><img alt=\"DF de Granger final\" decoding=\"async\" height=\"254\" loading=\"lazy\" sizes=\"(max-width: 512px) 100vw, 512px\" src=\"https:\/\/liora.io\/app\/uploads\/sites\/8\/2023\/02\/unnamed-5.png\" 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\" style=\"width:512px;max-width:100%;height:auto\" width=\"512\"\/><figcaption class=\"wp-element-caption\">DF de Granger final<\/figcaption><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"iteriere-durch-den-maxlag-um-das-beste-modell-zu-finden\">Iteriere durch den Maxlag, um das beste Modell zu finden.<\/h3>\n\n\n\n<p>Nachdem wir den df_granger bereinigt haben, holen wir uns unseren h\u00f6chsten maxlag (also den letzten). In meinem Fall ist maxlag = 67.<\/p>\n\n\n\n<p>Wir werden eine Vorlage pro maxlag erstellen und jedes Mal die folgenden Elemente abrufen:<\/p>\n\n\n\n<p><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.<\/p>\n\n\n\n<p>Einige Spezifikationen zur Normalit\u00e4t und Wei\u00dfe:<\/p>\n\n\n\n<p>Residuen, 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!<\/p>\n\n\n\n<div class=\"wp-block-buttons is-layout-flex wp-block-buttons-is-layout-flex is-content-justification-center wp-container-core-buttons-is-layout-5ee10de4\" style=\"margin-top:32px;margin-bottom:32px\"><div class=\"wp-block-button\"><a class=\"wp-block-button__link wp-element-button\" href=\"https:\/\/liora.io\/de\/weiterbildung\/data-ki\/data-scientist\">Data Scientist Weiterbildung entdecken<\/a><\/div><\/div>\n\n\n\n<p>Ein 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!<\/p>\n\n\n\n<p>Man kann ein Modell leicht verbessern, indem man zu allen Vorhersagen den Mittelwert der Verzerrungen hinzuf\u00fcgt, was in unserer Pipeline geschieht.<\/p>\n\n\n\n<p>Die 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\/.<\/p>\n\n\n\n<p>Ich schlage dir folgende Funktion f\u00fcr unsere konkrete Pipeline vor:<\/p>\n\n\n\n<p>def pipeline_var (siehe GIT-Link).<\/p>\n\n\n\n<p>Die 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.<\/p>\n\n\n\n<p>Jetzt 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!<\/p>\n\n\n\n<p>Nachdem wir den df_granger bereinigt haben, holen wir uns unseren h\u00f6chsten maxlag (also den letzten). In meinem Fall ist maxlag = 67.<\/p>\n\n\n\n<p>Wir werden eine Vorlage pro maxlag erstellen und jedes Mal die folgenden Elemente abrufen:<\/p>\n\n\n\n<p>Den MAE (oder deine Zielmetrik), den p-Wert des Tests auf Normalit\u00e4t der Residuen, den p-Wert des Tests auf Wei\u00dfe der Residuen.<\/p>\n\n\n\n<div class=\"wp-block-buttons is-layout-flex wp-block-buttons-is-layout-flex is-content-justification-center wp-container-core-buttons-is-layout-5ee10de4\" style=\"margin-top:32px;margin-bottom:32px\"><div class=\"wp-block-button\"><a class=\"wp-block-button__link wp-element-button\" href=\"https:\/\/liora.io\/de\/weiterbildung\/data-ki\/data-scientist\">Data Scientist Weiterbildung entdecken<\/a><\/div><\/div>\n\n\n\n<p>Einige Spezifikationen zur <strong>Normalit\u00e4t und Wei\u00dfe:<\/strong><\/p>\n\n\n\n<p>Residuen, 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!<\/p>\n\n\n\n<p>Ein 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!<\/p>\n\n\n\n<p>Man kann ein Modell leicht verbessern, indem man zu allen Vorhersagen den Mittelwert der Verzerrungen hinzuf\u00fcgt, was in unserer Pipeline geschieht.<\/p>\n\n\n\n<p>Die 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\/.<\/p>\n\n\n\n<p>Ich schlage dir folgende Funktion f\u00fcr unsere konkrete Pipeline vor:<\/p>\n\n\n\n<p>def pipeline_var (siehe GIT-Link).<\/p>\n\n\n\n<p>Die <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.<\/p>\n\n\n\n<p>Jetzt 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!<\/p>\n\n\n\n<div class=\"wp-block-buttons is-layout-flex wp-block-buttons-is-layout-flex is-content-justification-center wp-container-core-buttons-is-layout-5ee10de4\" style=\"margin-top:32px;margin-bottom:32px\"><div class=\"wp-block-button\"><a class=\"wp-block-button__link wp-element-button\" href=\"https:\/\/liora.io\/de\/weiterbildung\/data-ki\/data-scientist\">Data Scientist Weiterbildung entdecken<\/a><\/div><\/div>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"uberprufung-des-granger-tests-fur-den-neuen-optimalen-lag\">\u00dcberpr\u00fcfung des Granger-Tests f\u00fcr den neuen optimalen Lag<\/h3>\n\n\n\n<p>Da 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:<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter size-full is-resized\" style=\"width:512px;max-width:100%;margin-top:32px;margin-right:auto;margin-bottom:32px;margin-left:auto\"><img alt=\"R\u00e9sultat du test de Granger avec un maxlag de 44\" decoding=\"async\" height=\"263\" loading=\"lazy\" sizes=\"(max-width: 512px) 100vw, 512px\" src=\"https:\/\/liora.io\/app\/uploads\/sites\/8\/2023\/02\/unnamed-6.png\" 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\" style=\"width:512px;max-width:100%;height:auto\" width=\"512\"\/><figcaption class=\"wp-element-caption\">R\u00e9sultat du test de Granger avec un maxlag de 44<\/figcaption><\/figure>\n\n\n\n<p>Da keiner meiner P-Werte den Test versagt, kann ich beruhigt schlussfolgern, dass mein bestes Modell mit lag = 44 erzielt wird.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"ergebnisse-grafiken-metriken\">Ergebnisse, Grafiken, Metriken<\/h2>\n\n\n\n<p>Ich schlage Dir die folgenden zwei Funktionen vor, um deine Vorhersagen gegen die Realit\u00e4t zu plotten:<\/p>\n\n\n\n<p><strong>def plot_pred_true<\/strong><strong>def plot_pred_true_total<\/strong><\/p>\n\n\n\n<p>Wir trainieren das beste Modell und zeigen die Grafiken an:<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter size-full is-resized\" style=\"width:512px;max-width:100%;margin-top:32px;margin-right:auto;margin-bottom:32px;margin-left:auto\"><img alt=\"Illustration zu \u201eErgebnisse, Grafiken, Metriken\u201c\" decoding=\"async\" height=\"341\" loading=\"lazy\" sizes=\"(max-width: 512px) 100vw, 512px\" src=\"https:\/\/liora.io\/app\/uploads\/sites\/8\/2023\/02\/unnamed-7.png\" 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\" style=\"width:512px;max-width:100%;height:auto\" width=\"512\"\/><\/figure>\n\n\n\n<figure class=\"wp-block-image aligncenter size-full is-resized\" style=\"width:512px;max-width:100%;margin-top:32px;margin-right:auto;margin-bottom:32px;margin-left:auto\"><img alt=\"Illustration zu \u201eErgebnisse, Grafiken, Metriken\u201c\" decoding=\"async\" height=\"341\" loading=\"lazy\" sizes=\"(max-width: 512px) 100vw, 512px\" src=\"https:\/\/liora.io\/app\/uploads\/sites\/8\/2023\/02\/unnamed-9.png\" 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\" style=\"width:512px;max-width:100%;height:auto\" width=\"512\"\/><\/figure>\n\n\n\n<p>Ich 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.<\/p>\n\n\n\n<p>Vielen Dank, dass du mich bis hierher gelesen hast! Ich hoffe, dass dieser Artikel dir helfen kann. Bitte kommentiere oder kontaktiere mich bei Fragen!<\/p>\n\n\n\n<p>Wenn Du, genau wie Victor, gerne lernen m\u00f6chtest, wie man mit Daten umgeht, dann sind wir f\u00fcr Dich da!<\/p>\n\n\n\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":5,"href":"https:\/\/liora.io\/de\/wp-json\/wp\/v2\/posts\/168557\/revisions"}],"predecessor-version":[{"id":224830,"href":"https:\/\/liora.io\/de\/wp-json\/wp\/v2\/posts\/168557\/revisions\/224830"}],"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}]}}