<aclass="brand"href="index.html"><svgclass="icon"aria-hidden="true"><usehref="#icon-book"></use></svg><span>Optimierte Entscheidungsfindung mit Python</span></a>
<navclass="sidebar"id="sidebar"aria-label="Kapitelnavigation"><divclass="sidebar-inhalt"><detailsclass="sidebar-gruppe"><summary>Einstieg</summary><ul><lidata-kapitel="vorwort.html"><ahref="vorwort.html"><spanclass="fortschritt-haken"><svgclass="icon"aria-hidden="true"><usehref="#icon-check"></use></svg></span><span>Vorwort & Lesehilfe</span></a></li><lidata-kapitel="notation.html"><ahref="notation.html"><spanclass="fortschritt-haken"><svgclass="icon"aria-hidden="true"><usehref="#icon-check"></use></svg></span><span>Notation & Abkürzungen</span></a></li></ul></details><detailsclass="sidebar-gruppe"><summary>Teil I: Grundlagen des Operations Research</summary><ul><lidata-kapitel="einfuehrung.html"><ahref="einfuehrung.html"><spanclass="fortschritt-haken"><svgclass="icon"aria-hidden="true"><usehref="#icon-check"></use></svg></span><span>Kapitel 1: Einführung in Operations Research — Vom Ursprung zur mathematischen Entscheidungsfindung</span></a></li><lidata-kapitel="fundament.html"><ahref="fundament.html"><spanclass="fortschritt-haken"><svgclass="icon"aria-hidden="true"><usehref="#icon-check"></use></svg></span><span>Kapitel 2: Das mathematische Fundament — Vektoren, Matrizen, Konvexität</span></a></li><lidata-kapitel="oekosystem.html"><ahref="oekosystem.html"><spanclass="fortschritt-haken"><svgclass="icon"aria-hidden="true"><usehref="#icon-check"></use></svg></span><span>Kapitel 3: Das Python-Ökosystem für OR — Solver, Bindings und Modellierungsschichten</span></a></li><lidata-kapitel="modellierung.html"><ahref="modellierung.html"><spanclass="fortschritt-haken"><svgclass="icon"aria-hidden="true"><usehref="#icon-check"></use></svg></span><span>Kapitel 4: Vom Management-Wunsch zum Modell</span></a></li><lidata-kapitel="synthese-grundlagen.html"><ahref="synthese-grundlagen.html"><spanclass="fortschritt-haken"><svgclass="icon"aria-hidden="true"><usehref="#icon-check"></use></svg></span><span>Synthese Teil I</span></a></li></ul></details><detailsclass="sidebar-gruppe"><summary>Teil II: Die Kernverfahren der deterministischen Optimierung</summary><ul><lidata-kapitel="lp.html"><ahref="lp.html"><spanclass="fortschritt-haken"><svgclass="icon"aria-hidden="true"><usehref="#icon-check"></use></svg></span><span>Kapitel 5: Lineare Programmierung — Simplex, Dualität und Schattenpreise</span></a></li><lidata-kapitel="milp.html"><ahref="milp.html"><spanclass="fortschritt-haken"><svgclass="icon"aria-hidden="true"><usehref="#icon-check"></use></svg></span><span>Kapitel 6: Gemischt-ganzzahlige Optimierung — Diskrete Entscheidungen und Branch-and-Bound</span></a></li><lidata-kapitel="cpsat.html"><ahref="cpsat.html"><spanclass="fortschritt-haken"><svgclass="icon"aria-hidden="true"><usehref="#icon-check"></use></svg></span><span>Kapitel 7: Constraint Programming mit CP-SAT — Logik, Scheduling und Zuweisung</span></a></li><lidata-kapitel="graphen.html"><ahref="graphen.html"><spanclass="fortschritt-haken"><svgclass="icon"aria-hidden="true"><usehref="#icon-check"></use></svg></span><span>Kapitel 8: Graphen, Flüsse und Touren — Min-Cost-Flow, Matching und VRP</span></a></li><lidata-kapitel="metaheuristiken.html"><ahref="metaheuristiken.html"><spanclass="fortschritt-haken"><svgclass="icon"aria-hidden="true"><usehref="#icon-check"></use></svg></span><span>Kapitel 9: Metaheuristiken — wenn der exakte Solver aussteigt</span></a></li><lidata-kapitel="dekomposition.html"><ahref="dekomposition.html"><spanclass="fortschritt-haken"><svgclass="icon"aria-hidden="true"><usehref="#icon-check"></use></svg></span><span>Kapitel 10: Spaltengenerierung — das Modell umbauen statt die Lösung raten</span></a></li><lidata-kapitel="synthese-kernverfahren.html"><ahref="synthese-kernverfahren.html"><spanclass="fortschritt-haken"><svgclass="icon"aria-hidden="true"><usehref="#icon-check"></use></svg></span><span>Synthese Teil II</span></a></li></ul></details><detailsclass="sidebar-gruppe"open><summary>Teil III: Nichtlinearität, Unsicherheit und mehrperiod
<h1id="kap-prognose">Kapitel 15: Predict-then-Optimize — die bessere Prognose, die schlechtere Entscheidung</h1>
<divclass="card card-blick">
<blockquote>
<p><strong>📌 Kapitel auf einen Blick</strong></p>
<p><strong>Worum geht es?</strong> Um die Naht zwischen zwei Welten, die in getrennten Abteilungen sitzen: Ein Modell <strong>prognostiziert</strong>, ein anderes <strong>entscheidet</strong>. Beide arbeiten sauber — und genau an der Naht entsteht ein Fehler, den keine der beiden Seiten sieht.</p>
<p><strong>Voraussetzungen:</strong><ahref="unsicherheit.html#kap-unsicherheit">Kapitel 12</a>, insbesondere das Newsvendor-Problem und das kritische Verhältnis. Etwas Regression hilft, ist aber nicht nötig.</p>
<p><strong>Danach können Sie:</strong> begründen, warum ein Prognosemodell mit kleinerem MSE teurere Entscheidungen erzeugen kann; die richtige <strong>Zielgröße</strong> einer Prognose bestimmen; und Prognosemodelle an Entscheidungskosten statt an Fehlermaßen bewerten.</p>
<p><strong>Zeitbedarf:</strong> ca. 3,5 Stunden.</p>
<p><strong>Notebook:</strong><ahref="Notebooks_04/prognose.ipynb">prognose.ipynb</a> — herunterladen und in Jupyter öffnen, in Colab hochladen oder mit dem Kurs-Image starten</p>
<p><strong>Und jetzt der Punkt.</strong> Der Durchschnitt ist perfekt bestimmt — es ist der Mittelwert derselben Daten, aus denen auch das Quantil kommt. Trotzdem kostet er <strong>7,20 € je Tag mehr</strong>, gut 10 %.</p>
<p>Der Grund steht in den Preisen: Ein fehlendes Brot kostet doppelt so viel wie ein übriges. Bei asymmetrischen Kosten liegt die optimale Menge nicht in der Mitte der Verteilung, sondern beim <strong>kritischen Verhältnis</strong><spanclass="math inline">c_-/(c_- + c_+) = 6/9 = 66{,}7\,\%</span> — das kennen Sie aus <ahref="unsicherheit.html#kap-unsicherheit">Kapitel 12</a>.</p>
<p>Bemerkenswert ist die dritte Zeile: Die Quantilregel trifft mit 137 fast genau die beste überhaupt mögliche feste Menge (138). Sie ist nicht ungefähr richtig, sie ist richtig.</p>
<blockquote>
<p><strong>🎯 Merksatz</strong> Eine Prognose ist kein Selbstzweck. Sie liefert eine Zahl, die in eine Entscheidung eingeht — und <strong>welche</strong> Zahl das sein muss, bestimmt die Entscheidung, nicht die Statistik.</p>
</blockquote>
<p><strong>Warum funktioniert das?</strong> Weil die Kostenfunktion des Newsvendors geknickt und unsymmetrisch ist. Der Mittelwert minimiert den <em>quadratischen</em> Fehler; die Kosten sind aber stückweise linear mit verschiedenen Steigungen nach oben und unten. Zwei verschiedene Zielfunktionen haben zwei verschiedene Optima — das ist kein Paradox, sondern Arithmetik.</p>
<p>Beide Seiten arbeiten sorgfältig. Die Prognoseabteilung optimiert ihr Modell auf ein <strong>Fehlermaß</strong> — meist den mittleren quadratischen Fehler (MSE) oder MAPE — und berichtet stolz eine Verbesserung von 12 %. Die Disposition nimmt die Zahl entgegen und rechnet ihre Bestellmenge aus.</p>
<p>Der Fehler steckt nicht in einer der beiden Hälften, sondern in der Naht:</p>
<p>Das übliche zweistufige Vorgehen: erst eine unbekannte Größe schätzen, dann mit der Schätzung optimieren, als wäre sie die Wahrheit.</p>
<p>Das Problem: Die erste Stufe wird auf ein <strong>statistisches</strong> Maß trainiert, die zweite erzeugt <strong>ökonomische</strong> Kosten. Niemand garantiert, dass ein besseres statistisches Maß zu geringeren Kosten führt — und in diesem Kapitel ist es nachweislich umgekehrt.</p>
</blockquote>
<blockquote>
<p><strong>⚠️ Warum das nicht auffällt</strong></p>
<p>Beide Abteilungen erfüllen ihre Kennzahl. Die Prognose wird besser (MSE sinkt), die Disposition arbeitet korrekt (sie wendet die Formel richtig an). Es gibt keinen Ort, an dem der Verlust sichtbar würde — außer man misst die Entscheidungskosten, und das ist niemandes Kennzahl.</p>
<p>Das ist dieselbe Struktur wie in <ahref="testing.html#sec:testing-denkfehler">Abschnitt 23.9</a>: Der Fehler entsteht zwischen zwei Zuständigkeiten und wird deshalb von keiner Prüfung gefunden, die innerhalb einer der beiden liegt.</p>
</blockquote>
<hr/>
<h2id="sec:prognose-programm">15.4 Das Programm</h2>
<p>Dieselbe Bäckerei, aber mit Merkmalen: Wochentag, Temperatur, Aktionstage. Die Nachfrage muss jetzt <strong>modelliert</strong> werden.</p>
<p>Eine Eigenschaft der Daten ist dabei entscheidend und in der Praxis der Normalfall: An Aktionstagen ist die Nachfrage nicht nur höher, sondern auch <strong>viel unsicherer</strong> (heteroskedastisch).</p>
<spanid="cb4-5"><ahref="#cb4-5"aria-hidden="true"tabindex="-1"></a><spanclass="co">Kapitel Prognose: Die bessere Prognose trifft die schlechtere Entscheidung.</span></span>
<spanid="cb4-7"><ahref="#cb4-7"aria-hidden="true"tabindex="-1"></a><spanclass="co">Eine Baeckerei muss jeden Abend entscheiden, wie viel sie fuer den naechsten Tag</span></span>
<spanid="cb4-8"><ahref="#cb4-8"aria-hidden="true"tabindex="-1"></a><spanclass="co">ansetzt. Zu wenig kostet die Marge des entgangenen Verkaufs, zu viel kostet den</span></span>
<spanid="cb4-9"><ahref="#cb4-9"aria-hidden="true"tabindex="-1"></a><spanclass="co">Einkaufspreis der Retoure. Das ist das Newsvendor-Problem aus dem Kapitel</span></span>
<spanid="cb4-10"><ahref="#cb4-10"aria-hidden="true"tabindex="-1"></a><spanclass="co">Unsicherheit - nur dass die Nachfrage diesmal nicht aus einer Verteilung kommt,</span></span>
<spanid="cb4-11"><ahref="#cb4-11"aria-hidden="true"tabindex="-1"></a><spanclass="co">sondern PROGNOSTIZIERT werden muss: aus Wochentag, Temperatur und Aktionstagen.</span></span>
<spanid="cb4-13"><ahref="#cb4-13"aria-hidden="true"tabindex="-1"></a><spanclass="co">Damit zerfaellt die Aufgabe in zwei Schritte, und genau an der Naht entsteht der</span></span>
<spanid="cb4-14"><ahref="#cb4-14"aria-hidden="true"tabindex="-1"></a><spanclass="co">Fehler, um den es hier geht:</span></span>
<spanid="cb4-19"><ahref="#cb4-19"aria-hidden="true"tabindex="-1"></a><spanclass="co">Der Prognostiker optimiert seinen Modellfehler, meist den MSE. Der Planer traegt</span></span>
<spanid="cb4-20"><ahref="#cb4-20"aria-hidden="true"tabindex="-1"></a><spanclass="co">die Kosten. Beide messen etwas anderes - und die beiden Masse widersprechen</span></span>
<spanid="cb4-21"><ahref="#cb4-21"aria-hidden="true"tabindex="-1"></a><spanclass="co">einander. Das Programm zeigt:</span></span>
<spanid="cb4-23"><ahref="#cb4-23"aria-hidden="true"tabindex="-1"></a><spanclass="co"> 1. Vier Verfahren, verglichen nach MSE UND nach Entscheidungskosten. Das</span></span>
<spanid="cb4-24"><ahref="#cb4-24"aria-hidden="true"tabindex="-1"></a><spanclass="co"> Verfahren mit dem BESTEN MSE hat die HOECHSTEN Kosten.</span></span>
<spanid="cb4-25"><ahref="#cb4-25"aria-hidden="true"tabindex="-1"></a><spanclass="co"> 2. Warum ein pauschaler Sicherheitszuschlag zu kurz greift - die Streuung der</span></span>
<spanid="cb4-26"><ahref="#cb4-26"aria-hidden="true"tabindex="-1"></a><spanclass="co"> Nachfrage haengt selbst von den Merkmalen ab.</span></span>
<spanid="cb4-27"><ahref="#cb4-27"aria-hidden="true"tabindex="-1"></a><spanclass="co"> 3. Eine Messfalle, in die der Autor dieses Programms zuerst selbst getappt</span></span>
<spanid="cb4-28"><ahref="#cb4-28"aria-hidden="true"tabindex="-1"></a><spanclass="co"> ist: Bei kurzen Testzeitraeumen ist der MSE-Vergleich nicht stabil.</span></span>
<spanid="cb4-51"><ahref="#cb4-51"aria-hidden="true"tabindex="-1"></a><spanclass="co">"""Taegliche Nachfrage mit Wochentag, Temperatur und Aktionstagen.</span></span>
<spanid="cb4-53"><ahref="#cb4-53"aria-hidden="true"tabindex="-1"></a><spanclass="co"> Die entscheidende Eigenschaft steckt in 'streuung': An Aktionstagen ist die</span></span>
<spanid="cb4-54"><ahref="#cb4-54"aria-hidden="true"tabindex="-1"></a><spanclass="co"> Nachfrage nicht nur hoeher, sondern auch viel UNSICHERER. Solche</span></span>
<spanid="cb4-55"><ahref="#cb4-55"aria-hidden="true"tabindex="-1"></a><spanclass="co"> heteroskedastischen Daten sind der Normalfall - und der Grund, warum ein</span></span>
<spanid="cb4-56"><ahref="#cb4-56"aria-hidden="true"tabindex="-1"></a><spanclass="co"> pauschaler Sicherheitszuschlag nicht genuegt.</span></span>
<spanid="cb4-67"><ahref="#cb4-67"aria-hidden="true"tabindex="-1"></a><spanclass="op">+</span><spanclass="fl">1.8</span><spanclass="op">*</span> temperatur <spanclass="op">+</span><spanclass="dv">45</span><spanclass="op">*</span> aktion)</span>
<spanid="cb4-74"><ahref="#cb4-74"aria-hidden="true"tabindex="-1"></a><spanclass="co">"""Die Zahl, auf die es ankommt - und die kein Prognosemass kennt."""</span></span>
<spanid="cb4-87"><ahref="#cb4-87"aria-hidden="true"tabindex="-1"></a><spanclass="bu">print</span>(<spanclass="st">" DIE BESSERE PROGNOSE TRIFFT DIE SCHLECHTERE ENTSCHEIDUNG"</span>)</span>
<spanid="cb4-91"><ahref="#cb4-91"aria-hidden="true"tabindex="-1"></a><spanclass="ss">f"</span><spanclass="sc">{</span>KOSTEN_UEBERHANG<spanclass="sc">:.0f}</span><spanclass="ss"> EUR je Stueck."</span>)</span>
<spanid="cb4-92"><ahref="#cb4-92"aria-hidden="true"tabindex="-1"></a><spanclass="bu">print</span>(<spanclass="ss">f"Kritisches Verhaeltnis: </span><spanclass="sc">{</span>KRITISCHES_VERHAELTNIS<spanclass="sc">:.3f}</span><spanclass="ss"> - der Planer sollte "</span></span>
<spanid="cb4-94"><ahref="#cb4-94"aria-hidden="true"tabindex="-1"></a><spanclass="bu">print</span>(<spanclass="ss">f"</span><spanclass="sc">{</span>KRITISCHES_VERHAELTNIS<spanclass="sc">:.1%}</span><spanclass="ss">-Quantil der Nachfrage bestellen, nicht ihren "</span></span>
<spanid="cb4-96"><ahref="#cb4-96"aria-hidden="true"tabindex="-1"></a><spanclass="bu">print</span>(<spanclass="ss">f"</span><spanclass="ch">\n</span><spanclass="ss">Training: Tag 1 bis </span><spanclass="sc">{</span>TRAINING<spanclass="sc">}</span><spanclass="ss">. Bewertung: die restlichen "</span></span>
<spanid="cb4-99"><ahref="#cb4-99"aria-hidden="true"tabindex="-1"></a><spanclass="co"># --- Die vier Verfahren ----------------------------------------------</span></span>
<spanid="cb4-106"><ahref="#cb4-106"aria-hidden="true"tabindex="-1"></a><spanclass="co"># Ein Zuschlag, der nicht aus der Normalverteilung kommt, sondern direkt</span></span>
<spanid="cb4-107"><ahref="#cb4-107"aria-hidden="true"tabindex="-1"></a><spanclass="co"># auf den Trainingsdaten die Kosten minimiert.</span></span>
<spanid="cb4-113"><ahref="#cb4-113"aria-hidden="true"tabindex="-1"></a><spanclass="co"># Und das Verfahren, das von vornherein das richtige Quantil schaetzt.</span></span>
<spanid="cb4-120"><ahref="#cb4-120"aria-hidden="true"tabindex="-1"></a> (<spanclass="st">"bestelle die Punktprognose"</span>, punktprognose, punktprognose),</span>
<spanid="cb4-121"><ahref="#cb4-121"aria-hidden="true"tabindex="-1"></a> (<spanclass="st">"+ Zuschlag aus der Normalverteilung"</span>,</span>
<spanid="cb4-143"><ahref="#cb4-143"aria-hidden="true"tabindex="-1"></a><spanclass="bu">print</span>(<spanclass="ss">f" beste Kosten: </span><spanclass="sc">{</span>beste_kosten<spanclass="sc">}</span><spanclass="ss">"</span>)</span>
<spanid="cb4-144"><ahref="#cb4-144"aria-hidden="true"tabindex="-1"></a><spanclass="bu">print</span>(<spanclass="ss">f"</span><spanclass="ch">\n</span><spanclass="ss"> Das Verfahren mit dem besten MSE hat die HOECHSTEN Kosten, und das"</span>)</span>
<spanid="cb4-145"><ahref="#cb4-145"aria-hidden="true"tabindex="-1"></a><spanclass="bu">print</span>(<spanclass="ss">f" Verfahren mit den besten Kosten hat einen um "</span></span>
<spanid="cb4-147"><ahref="#cb4-147"aria-hidden="true"tabindex="-1"></a><spanclass="bu">print</span>(<spanclass="st">" Wer Prognosemodelle nach MSE auswaehlt, waehlt hier das falsche."</span>)</span>
<spanid="cb4-149"><ahref="#cb4-149"aria-hidden="true"tabindex="-1"></a><spanclass="co"># --- Warum der pauschale Zuschlag zu kurz greift ---------------------</span></span>
<spanid="cb4-151"><ahref="#cb4-151"aria-hidden="true"tabindex="-1"></a><spanclass="bu">print</span>(<spanclass="st">"Warum ein pauschaler Zuschlag nicht genuegt</span><spanclass="ch">\n</span><spanclass="st">"</span>)</span>
<spanid="cb4-156"><ahref="#cb4-156"aria-hidden="true"tabindex="-1"></a> normal <spanclass="op">=</span> tageskosten(bestellung[<spanclass="op">~</span>ist_aktion], nachfrage[pruefen][<spanclass="op">~</span>ist_aktion])</span>
<spanid="cb4-162"><ahref="#cb4-162"aria-hidden="true"tabindex="-1"></a> z <spanclass="op">=</span> norm.ppf(KRITISCHES_VERHAELTNIS)</span>
<spanid="cb4-163"><ahref="#cb4-163"aria-hidden="true"tabindex="-1"></a> richtig_normal <spanclass="op">=</span> z <spanclass="op">*</span> restfehler[<spanclass="op">~</span>aktion_training].std()</span>
<spanid="cb4-164"><ahref="#cb4-164"aria-hidden="true"tabindex="-1"></a> richtig_aktion <spanclass="op">=</span> z <spanclass="op">*</span> restfehler[aktion_training].std()</span>
<spanid="cb4-165"><ahref="#cb4-165"aria-hidden="true"tabindex="-1"></a><spanclass="bu">print</span>(<spanclass="ss">f"</span><spanclass="ch">\n</span><spanclass="ss"> Der pauschale Zuschlag betraegt </span><spanclass="sc">{</span>pauschalzuschlag<spanclass="sc">:.1f}</span><spanclass="ss"> Stueck. Aus den"</span>)</span>
<spanid="cb4-166"><ahref="#cb4-166"aria-hidden="true"tabindex="-1"></a><spanclass="bu">print</span>(<spanclass="ss">f" Trainingsresten getrennt nach Tagesart waere richtig:"</span>)</span>
<spanid="cb4-167"><ahref="#cb4-167"aria-hidden="true"tabindex="-1"></a><spanclass="bu">print</span>(<spanclass="ss">f" normale Tage : </span><spanclass="sc">{</span>richtig_normal<spanclass="sc">:5.1f}</span><spanclass="ss"> Stueck"</span>)</span>
<spanid="cb4-169"><ahref="#cb4-169"aria-hidden="true"tabindex="-1"></a><spanclass="bu">print</span>(<spanclass="ss">f" Ein Zuschlag fuer alle Tage kann nur einen Mittelweg treffen - hier"</span>)</span>
<spanid="cb4-170"><ahref="#cb4-170"aria-hidden="true"tabindex="-1"></a><spanclass="bu">print</span>(<spanclass="ss">f" ist er an normalen Tagen </span><spanclass="sc">{</span>pauschalzuschlag <spanclass="op">/</span> richtig_normal<spanclass="sc">:.1f}</span><spanclass="ss">-mal zu gross und an"</span>)</span>
<spanid="cb4-171"><ahref="#cb4-171"aria-hidden="true"tabindex="-1"></a><spanclass="bu">print</span>(<spanclass="ss">f" Aktionstagen nur </span><spanclass="sc">{</span>pauschalzuschlag <spanclass="op">/</span> richtig_aktion<spanclass="sc">:.0%}</span><spanclass="ss"> dessen, was noetig waere."</span>)</span>
<spanid="cb4-172"><ahref="#cb4-172"aria-hidden="true"tabindex="-1"></a><spanclass="bu">print</span>(<spanclass="ss">f"</span><spanclass="ch">\n</span><spanclass="ss"> Die Quantilregression schaetzt das </span><spanclass="sc">{</span>KRITISCHES_VERHAELTNIS<spanclass="sc">:.1%}</span><spanclass="ss">-Quantil "</span></span>
<spanid="cb4-173"><ahref="#cb4-173"aria-hidden="true"tabindex="-1"></a><spanclass="ss">f"direkt aus den"</span>)</span>
<spanid="cb4-174"><ahref="#cb4-174"aria-hidden="true"tabindex="-1"></a><spanclass="bu">print</span>(<spanclass="ss">f" Merkmalen und darf deshalb an verschiedenen Tagen verschieden weit"</span>)</span>
<spanid="cb4-175"><ahref="#cb4-175"aria-hidden="true"tabindex="-1"></a><spanclass="bu">print</span>(<spanclass="ss">f" ueber dem Erwartungswert liegen. Genau das ist der Unterschied"</span>)</span>
<spanid="cb4-176"><ahref="#cb4-176"aria-hidden="true"tabindex="-1"></a><spanclass="bu">print</span>(<spanclass="ss">f" zwischen 'ein Modell und danach eine Formel' und 'ein Modell, das"</span>)</span>
<spanid="cb4-177"><ahref="#cb4-177"aria-hidden="true"tabindex="-1"></a><spanclass="bu">print</span>(<spanclass="ss">f" weiss, wofuer es gebraucht wird'."</span>)</span>
<spanid="cb4-179"><ahref="#cb4-179"aria-hidden="true"tabindex="-1"></a><spanclass="co"># --- Die Messfalle ---------------------------------------------------</span></span>
<spanid="cb4-181"><ahref="#cb4-181"aria-hidden="true"tabindex="-1"></a><spanclass="bu">print</span>(<spanclass="st">"Eine Messfalle, in die der Autor zuerst selbst getappt ist</span><spanclass="ch">\n</span><spanclass="st">"</span>)</span>
<spanid="cb4-182"><ahref="#cb4-182"aria-hidden="true"tabindex="-1"></a><spanclass="bu">print</span>(<spanclass="st">" Der erste Entwurf dieses Programms bewertete auf 230 Testtagen - ein"</span>)</span>
<spanid="cb4-183"><ahref="#cb4-183"aria-hidden="true"tabindex="-1"></a><spanclass="bu">print</span>(<spanclass="st">" realistischer Zeitraum. Dort hatte die Quantilregression den BESSEREN"</span>)</span>
<spanid="cb4-184"><ahref="#cb4-184"aria-hidden="true"tabindex="-1"></a><spanclass="bu">print</span>(<spanclass="st">" MSE, und die ganze Aussage des Kapitels stand auf dem Kopf."</span>)</span>
<spanid="cb4-185"><ahref="#cb4-185"aria-hidden="true"tabindex="-1"></a><spanclass="bu">print</span>(<spanclass="st">"</span><spanclass="ch">\n</span><spanclass="st"> Wie oft das passiert, laesst sich ausmessen:</span><spanclass="ch">\n</span><spanclass="st">"</span>)</span>
<spanid="cb4-200"><ahref="#cb4-200"aria-hidden="true"tabindex="-1"></a><spanclass="bu">print</span>(<spanclass="ss">f"</span><spanclass="sc">{</span>fenster<spanclass="sc">:>10}</span><spanclass="ss"> Tage </span><spanclass="sc">{</span>treffer <spanclass="op">/</span> versuche<spanclass="sc">:>24.1%}</span><spanclass="ss">"</span>)</span>
<spanid="cb4-202"><ahref="#cb4-202"aria-hidden="true"tabindex="-1"></a><spanclass="bu">print</span>(<spanclass="st">"</span><spanclass="ch">\n</span><spanclass="st"> Bei einem halben Jahr Testdaten sieht das schlechtere Modell in gut"</span>)</span>
<spanid="cb4-203"><ahref="#cb4-203"aria-hidden="true"tabindex="-1"></a><spanclass="bu">print</span>(<spanclass="st">" jedem zehnten Fall besser aus. Das ist keine grosse Zahl - aber wer"</span>)</span>
<spanid="cb4-204"><ahref="#cb4-204"aria-hidden="true"tabindex="-1"></a><spanclass="bu">print</span>(<spanclass="st">" EINMAL misst, hat genau eine Ziehung aus dieser Verteilung."</span>)</span>
<spanid="cb4-205"><ahref="#cb4-205"aria-hidden="true"tabindex="-1"></a><spanclass="bu">print</span>(<spanclass="st">"</span><spanclass="ch">\n</span><spanclass="st"> Die Lehre ist nicht 'nimm 4.000 Testtage' - die hat niemand. Sie"</span>)</span>
<spanid="cb4-206"><ahref="#cb4-206"aria-hidden="true"tabindex="-1"></a><spanclass="bu">print</span>(<spanclass="st">" lautet: Ein Kennzahlenvergleich ohne Angabe seiner Streuung ist keine"</span>)</span>
<spanid="cb4-207"><ahref="#cb4-207"aria-hidden="true"tabindex="-1"></a><spanclass="bu">print</span>(<spanclass="st">" Aussage. Bei kurzen Zeitraeumen gehoert eine Kreuzvalidierung dazu."</span>)</span>
<spanid="cb4-210"><ahref="#cb4-210"aria-hidden="true"tabindex="-1"></a><spanclass="bu">print</span>(<spanclass="st">" WAS MAN DARAUS MITNIMMT"</span>)</span>
<spanid="cb4-212"><ahref="#cb4-212"aria-hidden="true"tabindex="-1"></a><spanclass="bu">print</span>(<spanclass="st">"Der Prognostiker optimiert den MSE, der Planer traegt die Kosten - und"</span>)</span>
<spanid="cb4-213"><ahref="#cb4-213"aria-hidden="true"tabindex="-1"></a><spanclass="bu">print</span>(<spanclass="st">"die beiden Masse zeigen hier in verschiedene Richtungen. Drei Saetze:"</span>)</span>
<spanid="cb4-215"><ahref="#cb4-215"aria-hidden="true"tabindex="-1"></a><spanclass="bu">print</span>(<spanclass="st">" 1. Sagen Sie nicht den Erwartungswert vorher, sondern die Groesse, die"</span>)</span>
<spanid="cb4-216"><ahref="#cb4-216"aria-hidden="true"tabindex="-1"></a><spanclass="bu">print</span>(<spanclass="st">" in die Entscheidung eingeht. Beim Newsvendor ist das das kritische"</span>)</span>
<spanid="cb4-217"><ahref="#cb4-217"aria-hidden="true"tabindex="-1"></a><spanclass="bu">print</span>(<spanclass="st">" Quantil - und das kann man direkt schaetzen."</span>)</span>
<spanid="cb4-218"><ahref="#cb4-218"aria-hidden="true"tabindex="-1"></a><spanclass="bu">print</span>(<spanclass="st">" 2. Bewerten Sie Prognosemodelle an den ENTSCHEIDUNGSKOSTEN. Die sind"</span>)</span>
<spanid="cb4-219"><ahref="#cb4-219"aria-hidden="true"tabindex="-1"></a><spanclass="bu">print</span>(<spanclass="st">" in Euro und damit vergleichbar; ein MSE ist es nicht."</span>)</span>
<spanid="cb4-220"><ahref="#cb4-220"aria-hidden="true"tabindex="-1"></a><spanclass="bu">print</span>(<spanclass="st">" 3. Ein pauschaler Sicherheitszuschlag ist besser als nichts und"</span>)</span>
<spanid="cb4-221"><ahref="#cb4-221"aria-hidden="true"tabindex="-1"></a><spanclass="bu">print</span>(<spanclass="st">" schlechter als ein Modell, das die Unsicherheit selbst aus den"</span>)</span>
<spanid="cb4-224"><ahref="#cb4-224"aria-hidden="true"tabindex="-1"></a><spanclass="bu">print</span>(<spanclass="st">"Der naechste Schritt - Prognosemodelle so zu trainieren, dass sie die"</span>)</span>
<spanid="cb4-225"><ahref="#cb4-225"aria-hidden="true"tabindex="-1"></a><spanclass="bu">print</span>(<spanclass="st">"Entscheidungskosten direkt minimieren (Smart Predict-then-Optimize,"</span>)</span>
<spanid="cb4-226"><ahref="#cb4-226"aria-hidden="true"tabindex="-1"></a><spanclass="bu">print</span>(<spanclass="st">"differenzierbare Optimierungsschichten) - ist Forschungsstand und"</span>)</span>
<spanid="cb4-227"><ahref="#cb4-227"aria-hidden="true"tabindex="-1"></a><spanclass="bu">print</span>(<spanclass="st">"erfordert Bibliotheken wie cvxpylayers. Die dritte Zeile der Tabelle"</span>)</span>
<spanid="cb4-228"><ahref="#cb4-228"aria-hidden="true"tabindex="-1"></a><spanclass="bu">print</span>(<spanclass="st">"oben ist seine einfachste denkbare Form: ein einziger Parameter, auf"</span>)</span>
<spanid="cb4-229"><ahref="#cb4-229"aria-hidden="true"tabindex="-1"></a><spanclass="bu">print</span>(<spanclass="st">"Kosten statt auf Fehler trainiert."</span>)</span>
<p><strong>Das Modell mit dem besten MSE hat die höchsten Kosten.</strong> Das kostenbeste Modell hat einen um 13 % schlechteren MSE — und spart 10,7 % der Kosten.</p>
<p>Wer Prognosemodelle nach MSE auswählt (und das ist die Voreinstellung jeder Modellauswahl-Bibliothek), wählt hier das falsche.</p>
<divclass="card card-formel">
<blockquote>
<p><strong>🔤 Formel-Übersetzer: zwei Zielfunktionen</strong></p>
<td>Der ganze Grund, warum die beiden Optima auseinanderfallen.</td>
</tr>
</tbody>
</table>
<p>Wären <spanclass="math inline">c_-</span> und <spanclass="math inline">c_+</span> gleich groß, läge das Optimum beim <strong>Median</strong> — immer noch nicht beim Mittelwert, aber wenigstens in der Mitte. Erst die Asymmetrie schiebt es ans Quantil.</p>
</blockquote>
</div>
<h3id="warum-ein-pauschaler-zuschlag-zu-kurz-greift">Warum ein pauschaler Zuschlag zu kurz greift</h3>
<p>Die zweite Zeile der Tabelle ist die verbreitete Praxis: Punktprognose plus Sicherheitsbestand. Sie hilft (−7,3 %), bleibt aber hinter der Quantilregression zurück. Das Programm rechnet nach, warum:</p>
<p>Ein einziger Wert kann nur einen Mittelweg treffen: An normalen Tagen ist er 1,7-mal zu groß, an Aktionstagen erreicht er nur 48 % dessen, was nötig wäre.</p>
<p>Die Quantilregression schätzt das 66,7-%-Quantil <strong>direkt aus den Merkmalen</strong> und darf deshalb an verschiedenen Tagen verschieden weit über dem Erwartungswert liegen. Das ist der Unterschied zwischen <em>„ein Modell und danach eine Formel”</em> und <em>„ein Modell, das weiß, wofür es gebraucht wird”</em>.</p>
<blockquote>
<p><strong>🎯 Merksatz</strong> Sagen Sie nicht den Erwartungswert vorher, sondern <strong>die Größe, die in die Entscheidung eingeht</strong>. Beim Newsvendor ist das das kritische Quantil — und das lässt sich direkt schätzen, statt es nachträglich aus einer Punktprognose zu basteln.</p>
</blockquote>
<hr/>
<h2id="sec:prognose-messfalle">15.6 Eine Messfalle, in die der Autor selbst getappt ist</h2>
<p>Der erste Entwurf dieses Programms bewertete auf <strong>230 Testtagen</strong> — ein realistischer Zeitraum, gut sieben Monate. Dort hatte die Quantilregression den <em>besseren</em> MSE, und die ganze Aussage dieses Kapitels stand auf dem Kopf.</p>
<p>Das war kein Denkfehler, sondern Zufall. Wie viel Zufall, lässt sich ausmessen:</p>
<p>Bei einem halben Jahr Testdaten sieht das (bezogen auf den MSE) schlechtere Modell in gut jedem zehnten Fall besser aus. Das ist keine große Zahl — aber <strong>wer einmal misst, hat genau eine Ziehung aus dieser Verteilung.</strong></p>
<blockquote>
<p><strong>⚠️ Was daraus folgt — und was nicht</strong></p>
<p>Die Lehre ist <strong>nicht</strong> „nimm 4 000 Testtage”. Die hat niemand; das Programm arbeitet deshalb mit simulierten Daten und sagt das auch.</p>
<p>Die Lehre ist: <strong>Ein Kennzahlenvergleich ohne Angabe seiner Streuung ist keine Aussage.</strong> Bei kurzen Zeiträumen gehört eine Kreuzvalidierung dazu, und der Unterschied zwischen zwei Modellen muss größer sein als die Schwankung zwischen zwei Zeitfenstern.</p>
<p>Verwandt, aber nicht dasselbe: <ahref="handelsmaschine.html#kap-handelsmaschine">Kapitel 21</a>, <code>Data_Snooping.py</code>. Dort geht es um die Zahl der <em>Versuche</em>, hier um die Zahl der <em>Beobachtungen</em>. Beide Male führt eine weggelassene Angabe zu einer Aussage, die nicht trägt.</p>
</blockquote>
<hr/>
<h2id="sec:prognose-ausblick">15.7 Wie weit das Verfahren reicht</h2>
<p>Die dritte Zeile der Ergebnistabelle — „Zuschlag auf Kosten trainiert” — ist die einfachste denkbare Form einer Idee, die derzeit erforscht wird: <strong>das Prognosemodell direkt auf die Entscheidungskosten zu trainieren</strong> statt auf ein Fehlermaß.</p>
<p>Hier war es ein einziger Parameter, mit einer Rasterschleife bestimmt. Der allgemeine Fall ist schwieriger, weil die Optimierung zwischen Modell und Kosten steht: Um den Gradienten der Kosten nach den Modellparametern zu bilden, muss man <strong>durch das Optimierungsproblem hindurch ableiten</strong>.</p>
<td>Das Optimierungsproblem wird eine Schicht im neuronalen Netz</td>
<td><code>cvxpylayers</code></td>
</tr>
</tbody>
</table>
<blockquote>
<p><strong>💡 Womit man anfängt</strong></p>
<p>Nicht mit <code>cvxpylayers</code>. Der Ertrag der ersten Zeile ist in der Praxis meist der größte und kostet einen Nachmittag: Fragen Sie, welche Größe die Entscheidung wirklich braucht, und schätzen Sie diese. In diesem Kapitel bringt das 10,7 % — die aufwendigen Verfahren ringen danach um die letzten Prozentpunkte.</p>
<p><strong>Aufgabe 15.1 ⭐ — Andere Preise.</strong> Die Bäckerei kann übrige Ware am Folgetag zum halben Preis abgeben; der Überhang kostet dann nur noch 1,50 € statt 3 €. Wie ändert sich das kritische Verhältnis, und in welche Richtung verschiebt sich die Bestellmenge?</p>
<p><strong>Aufgabe 15.2 ⭐ — Wann ist der Mittelwert richtig?</strong> Nennen Sie die Bedingung, unter der Erwartungswert und optimale Bestellmenge zusammenfallen. Wie realistisch ist sie?</p>
<p><strong>Aufgabe 15.3 ⭐⭐ — Die Kennzahl der Prognoseabteilung.</strong> Ersetzen Sie im Programm den MSE durch den MAPE (mittlerer absoluter prozentualer Fehler). Ändert sich die Rangfolge der vier Verfahren? Begründen Sie, warum das kein Zufall ist.</p>
<p><strong>Aufgabe 15.4 ⭐⭐ — Zwei Quantile.</strong> Schätzen Sie zusätzlich das 5-%- und das 95-%-Quantil und zeichnen Sie für 30 Testtage ein Band um die Punktprognose. An welchen Tagen ist es breit — und passt das zu Ihrer Erwartung?</p>
<p><strong>Aufgabe 15.5 ⭐⭐⭐ — Der Wert der Merkmale.</strong> Entfernen Sie das Merkmal „Aktion” aus dem Modell. Wie verschlechtern sich MSE und Kosten — und zwar <strong>in unterschiedlichem Ausmaß</strong>? Was sagt das über den Wert eines Merkmals aus?</p>
<hr/>
<h2id="sec:prognose-denkfehler">15.9 Finde den Denkfehler</h2>
<divclass="card card-denkfehler">
<blockquote>
<p><strong>🐛 „Wir haben die Prognose um 18 % verbessert”</strong></p>
<p>Ein Data-Science-Team stellt sein Quartalsergebnis vor:</p>
<blockquote>
<p><em>„Wir haben das alte lineare Modell durch ein Gradient-Boosting-Modell ersetzt. Der MSE > auf den Testdaten ist um 18 % gesunken, der MAPE um 14 %. Das ist die größte > Prognoseverbesserung, die wir je erreicht haben. Die Disposition bekommt ab nächstem > Monat die neuen Werte.”</em></p>
</blockquote>
<p>Sechs Wochen später meldet die Disposition, die Retouren seien gestiegen.</p>
<p>Das Team prüft alles nach: Die Modellgüte stimmt, die Testdaten waren sauber getrennt, es gibt kein Leck. Das neue Modell prognostiziert die Nachfrage tatsächlich deutlich besser als das alte.</p>
<p><strong>Wie kann eine bessere Prognose zu schlechteren Ergebnissen führen — und was hätte das Team messen müssen?</strong></p>
<p>Ein zweiter Hinweis für den zweiten Teil der Antwort: Die Disposition rechnet mit Punktprognose plus einem Sicherheitszuschlag, der aus den <strong>Residuen des alten Modells</strong> stammt und seit Jahren unverändert ist.</p>
</blockquote>
</div>
<hr/>
<h2id="sec:prognose-quiz">15.10 Micro-Quiz</h2>
<divclass="card card-quiz">
<blockquote>
<p><strong>❓ Drei Fragen</strong></p>
<p><strong>1. Warum ist der Erwartungswert beim Newsvendor die falsche Bestellmenge?</strong> a) Weil er statistisch unzuverlässig geschätzt wird. b) Weil die Kosten für Fehlmenge und Überhang verschieden hoch sind und das Optimum deshalb am kritischen Quantil liegt. c) Weil die Nachfrage nicht normalverteilt ist.</p>
<p><strong>2. Ein Kollege schlägt vor, den Sicherheitszuschlag jährlich aus den Residuen neu zu berechnen. Was löst das nicht?</strong> a) Nichts — das ist die richtige Lösung. b) Der Zuschlag bleibt für alle Tage gleich, obwohl die Unsicherheit von den Merkmalen abhängt. c) Residuen sind grundsätzlich ungeeignet, um Unsicherheit zu schätzen.</p>
<p><strong>3. Bei 180 Testtagen sieht das MSE-schlechtere Modell in 11,8 % der Fälle besser aus. Was folgt daraus für die Praxis?</strong> a) Man braucht mindestens 730 Testtage, sonst ist jeder Vergleich wertlos. b) Ein einzelner Kennzahlenvergleich ohne Streuungsangabe ist keine belastbare Aussage; bei kurzen Zeiträumen gehört eine Kreuzvalidierung dazu. c) Der MSE ist grundsätzlich unbrauchbar.</p>
<li><strong>Predict-then-Optimize</strong> trennt Schätzen und Entscheiden. Die erste Stufe wird auf ein statistisches Maß trainiert, die zweite erzeugt ökonomische Kosten — und die beiden Maße können in verschiedene Richtungen zeigen.</li>
<li>Im Beispiel hat das Verfahren mit dem <strong>besten MSE die höchsten Kosten</strong>; das kostenbeste Verfahren hat einen um 13 % schlechteren MSE und spart 10,7 %.</li>
<li>Der Grund ist die <strong>Asymmetrie</strong> der Kosten: Fehlmenge und Überhang kosten verschieden viel, deshalb liegt das Optimum am kritischen Quantil und nicht am Erwartungswert.</li>
<li>Ein <strong>pauschaler Sicherheitszuschlag</strong> hilft, greift aber zu kurz, wenn die Unsicherheit selbst von den Merkmalen abhängt: Hier wäre er an normalen Tagen 1,7-mal zu groß und an Aktionstagen halb so groß wie nötig.</li>
<li><strong>Bewerten Sie Prognosemodelle an den Entscheidungskosten.</strong> Sie sind in Euro und damit vergleichbar; ein MSE ist es nicht.</li>
<li>Ein Kennzahlenvergleich braucht eine <strong>Streuungsangabe</strong>. Bei 180 Testtagen sah das schlechtere Modell in gut jedem zehnten Fall besser aus — und wer einmal misst, hat genau eine Ziehung.</li>