<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"><summary>Teil III: Nichtlinearität, Unsicherheit und mehrperiodige D
<navclass="breadcrumb"aria-label="Breadcrumb"><ahref="index.html">Start</a>›<span>Teil IV</span>›<span>Kapitel 18: Finanzdaten-Modellierung — Renditen, Kovarianz und Shrinkage</span></nav>
<navclass="prev-next"><aclass="prev-next-knopf prev-next-prev"href="supplychain.html"><svgclass="icon"aria-hidden="true"><usehref="#icon-chevron-left"></use></svg><span><small>Zurück</small>Kapitel 17: Supply-Chain und Energieeinsatz unter Unsicherheit</span></a><aclass="prev-next-knopf prev-next-next"href="markowitz.html"><span><small>Weiter</small>Kapitel 19: Die moderne Portfoliotheorie nach Markowitz</span><svgclass="icon"aria-hidden="true"><usehref="#icon-chevron-right"></use></svg></a></nav>
<article>
<h1id="kap-finanzdaten">Kapitel 18: Finanzdaten-Modellierung — Renditen, Kovarianz und Shrinkage</h1>
<divclass="card card-blick">
<blockquote>
<p><strong>📌 Kapitel auf einen Blick</strong></p>
<p><strong>Worum geht es?</strong> Um die Eingangsdaten der Portfoliooptimierung — und darum, warum sie trügerisch sind. Wer historische Kovarianzen ungefiltert in einen Optimierer gibt, optimiert Rauschen.</p>
<p><strong>Voraussetzungen:</strong><ahref="qp-nlp.html#kap-qp-nlp">Kapitel 11</a> (Eigenwerte, positive Definitheit), Grundlagen der Statistik.</p>
<p><strong>Danach können Sie:</strong> Kursdaten korrekt laden, diskrete und logarithmische Renditen unterscheiden, das Schätzfehlerproblem erklären, Ledoit-Wolf-Shrinkage anwenden — und erkennen, wann eine Kovarianzmatrix aus zu wenigen Beobachtungen stammt.</p>
<p><strong>Zeitbedarf:</strong> ca. 5 Stunden.</p>
<p><strong>Programme:</strong><br/>
<code>Renditen_Vergleich.py</code><br/>
<code>Schaetzrauschen_Demo.py</code><br/>
<code>Finanzdaten_Ledoit_Wolf.py</code><br/>
<code>Kovarianz_Falle.py</code></p>
<p><strong>⚠️ Überspringen Sie dieses Kapitel nicht.</strong> Wer direkt bei Markowitz (<ahref="markowitz.html#kap-markowitz">Kapitel 19</a>) einsteigt, erhält absurde Portfoliogewichte und weiß nicht, warum.</p>
<p><strong>Die durchschnittliche Rendite beträgt 20 % pro Periode — bei einer Anlage, die insgesamt 20 % gewonnen hat.</strong> Wer damit vier Perioden hochrechnet, landet bei 207,36 statt bei den tatsächlichen 120,00.</p>
<p>Der Grund steckt in der ersten Zeile: Ein Verlust von 50 % und ein Gewinn von 50 % heben sich <strong>nicht</strong> auf. Aus 100 werden 50, daraus 75 — nicht wieder 100. Diskrete Renditen darf man deshalb nicht mitteln und nicht addieren; sie multiplizieren sich.</p>
<p>Logarithmische Renditen dagegen <strong>addieren</strong> sich. Ihre Summe beträgt hier 18,23 %, und <spanclass="math inline">100 \cdot e^{0{,}1823} = 120{,}00</span> — exakt der beobachtete Endkurs.</p>
<td>Portfoliogewichtung, Kennzahlen je Periode</td>
<td>Zeitreihenanalyse, Volatilität, Modelle</td>
</tr>
</tbody>
</table>
<blockquote>
<p><strong>🎯 Merksatz</strong> Beide Renditearten sind richtig — für <strong>verschiedene Richtungen</strong>. Diskrete Renditen addieren sich über die <strong>Anlagen</strong> eines Portfolios, logarithmische über die <strong>Zeit</strong>. Wer sie verwechselt, bekommt keine Fehlermeldung, sondern eine plausible falsche Zahl.</p>
</blockquote>
<p><strong>Warum funktioniert das?</strong> Weil der Logarithmus aus einem Produkt eine Summe macht: <spanclass="math inline">\ln(a \cdot b) = \ln a + \ln b</span>. Genau diese Eigenschaft braucht man, wenn sich Renditen über die Zeit aufmultiplizieren. Der Preis dafür: Über mehrere Anlagen hinweg funktioniert es nicht mehr, denn der Logarithmus einer Summe ist nicht die Summe der Logarithmen. Der Rest dieses Kapitels behandelt die zweite große Fehlerquelle bei Finanzdaten — die <strong>Kovarianzmatrix</strong>, deren Schätzung noch weit trügerischer ist als die Rendite selbst.</p>
<li>… erklären, wann man diskrete und wann logarithmische Renditen verwendet.</li>
<li>… beschreiben, warum die Stichproben-Kovarianzmatrix bei vielen Titeln unbrauchbar wird.</li>
<li>… den <strong>Error-Maximizer-Effekt</strong> an einem Experiment nachweisen.</li>
<li>… Ledoit-Wolf-Shrinkage anwenden und ihre Wirkung an Eigenwerten und Konditionszahl messen.</li>
<li>… Kursdaten so laden, dass die Spaltenreihenfolge garantiert stimmt.</li>
<li>… begründen, warum eine Schätzung aus <spanclass="math inline">T < N</span> Beobachtungen dem Optimierer risikofreie Richtungen vorgaukelt — und welche drei Gegenmittel es gibt.</li>
<li>… ein Portfolio <strong>außerhalb</strong> des Schätzzeitraums bewerten statt darin.</li>
</ol>
<hr/>
<h2id="sec:finanzdaten-diskrete-und-logarithmische-renditen">18.3 Diskrete und logarithmische Renditen</h2>
<p>Sei <spanclass="math inline">P_{i,t}</span> der <strong>bereinigte</strong> Schlusskurs (<em>adjusted close</em>) von Titel <spanclass="math inline">i</span> zum Zeitpunkt <spanclass="math inline">t</span>. „Bereinigt“ heißt: um Dividenden und Aktiensplits korrigiert — sonst erscheint jede Dividendenzahlung als Kurssturz.</p>
<p><strong>Eigenschaft — über die Zeit additiv:</strong></p>
<p><spanclass="math display">
r_{i,0\to T} = \sum_{t=1}^T r_{i,t}
</span></p>
<blockquote>
<p><strong>🎯 Die Merkregel</strong><strong>Diskrete Renditen addieren sich über das Portfolio</strong> (mehrere Titel, ein Zeitpunkt) — deshalb braucht man sie für die <strong>Allokation</strong>. <strong>Logarithmische Renditen addieren sich über die Zeit</strong> (ein Titel, mehrere Perioden) — deshalb braucht man sie für <strong>Zeitreihenanalyse und Volatilitätsschätzung</strong>.</p>
<p>Man kann nicht beides gleichzeitig haben: Die gewichtete Summe von Log-Renditen ist <strong>nicht</strong> die Log-Rendite des Portfolios.</p>
</blockquote>
<blockquote>
<p><strong>✏️ Handrechnung 18.1: Der Unterschied in Zahlen</strong></p>
<p>Ein Kurs steigt von 100 auf 150, dann fällt er zurück auf 100.</p>
<p>Die diskreten Renditen <strong>suggerieren einen Gewinn von 16,7 %</strong>, obwohl der Kurs exakt dort steht, wo er begann. Die Log-Renditen heben sich korrekt auf.</p>
<p><strong>Deshalb ist die Aussage „im Mittel 5 % Rendite“ mehrdeutig.</strong> Das arithmetische Mittel diskreter Renditen überschätzt systematisch, was ein Anleger tatsächlich verdient hätte. Für Wachstumsaussagen nimmt man das <strong>geometrische</strong> Mittel — oder rechnet gleich in Log-Renditen.</p>
<spanid="cb3-5"><ahref="#cb3-5"aria-hidden="true"tabindex="-1"></a><spanclass="co">Kapitel Finanzdaten: Diskrete vs. logarithmische Renditen.</span></span>
<spanid="cb3-6"><ahref="#cb3-6"aria-hidden="true"tabindex="-1"></a><spanclass="co">Zeigt an einem simulierten Kursverlauf, welche Eigenschaft wo gilt -</span></span>
<spanid="cb3-7"><ahref="#cb3-7"aria-hidden="true"tabindex="-1"></a><spanclass="co">und warum das arithmetische Mittel diskreter Renditen in die Irre fuehrt.</span></span>
<spanid="cb3-14"><ahref="#cb3-14"aria-hidden="true"tabindex="-1"></a> kurse <spanclass="op">=</span> np.array([<spanclass="fl">100.0</span>, <spanclass="fl">150.0</span>, <spanclass="fl">100.0</span>, <spanclass="fl">120.0</span>, <spanclass="fl">90.0</span>, <spanclass="fl">135.0</span>])</span>
<spanid="cb3-15"><ahref="#cb3-15"aria-hidden="true"tabindex="-1"></a> tage <spanclass="op">=</span> [<spanclass="ss">f"t</span><spanclass="sc">{</span>i<spanclass="sc">}</span><spanclass="ss">"</span><spanclass="cf">for</span> i <spanclass="kw">in</span><spanclass="bu">range</span>(<spanclass="bu">len</span>(kurse))]</span>
<spanid="cb3-21"><ahref="#cb3-21"aria-hidden="true"tabindex="-1"></a><spanclass="bu">print</span>(<spanclass="st">" DISKRETE UND LOGARITHMISCHE RENDITEN IM VERGLEICH"</span>)</span>
<spanid="cb3-24"><ahref="#cb3-24"aria-hidden="true"tabindex="-1"></a><spanclass="st">"Periode"</span>: [<spanclass="ss">f"</span><spanclass="sc">{</span>tage[i]<spanclass="sc">}</span><spanclass="ss"> -></span><spanclass="sc">{</span>tage[i<spanclass="op">+</span><spanclass="dv">1</span>]<spanclass="sc">}</span><spanclass="ss">"</span><spanclass="cf">for</span> i <spanclass="kw">in</span><spanclass="bu">range</span>(<spanclass="bu">len</span>(diskret))],</span>
<spanid="cb3-38"><ahref="#cb3-38"aria-hidden="true"tabindex="-1"></a><spanclass="bu">print</span>(<spanclass="st">"</span><spanclass="ch">\n</span><spanclass="st">--- Aggregation ueber die Zeit ---"</span>)</span>
<spanid="cb3-49"><ahref="#cb3-49"aria-hidden="true"tabindex="-1"></a><spanclass="bu">print</span>(<spanclass="st">"</span><spanclass="ch">\n</span><spanclass="st">--- Welcher Mittelwert ist der richtige? ---"</span>)</span>
<spanid="cb3-56"><ahref="#cb3-56"aria-hidden="true"tabindex="-1"></a><spanclass="co"># Probe: Endkapital mit dem jeweiligen Mittelwert hochgerechnet</span></span>
<spanid="cb3-57"><ahref="#cb3-57"aria-hidden="true"tabindex="-1"></a> n <spanclass="op">=</span><spanclass="bu">len</span>(diskret)</span>
<spanid="cb3-64"><ahref="#cb3-64"aria-hidden="true"tabindex="-1"></a><spanclass="bu">print</span>(<spanclass="ss">f" Volatilitaet aus Log-Renditen: "</span></span>
<spanid="cb3-66"><ahref="#cb3-66"aria-hidden="true"tabindex="-1"></a><spanclass="bu">print</span>(<spanclass="st">" (Die Wurzel-Zeit-Regel gilt nur bei unabhaengigen Renditen -"</span>)</span>
<spanid="cb3-67"><ahref="#cb3-67"aria-hidden="true"tabindex="-1"></a><spanclass="bu">print</span>(<spanclass="st">" fuer reale Maerkte ist sie eine Naeherung.)"</span>)</span>
<h2id="sec:finanzdaten-das-schaetzfehler-problem">18.4 Das Schätzfehler-Problem</h2>
<p>Sei <spanclass="math inline">\mathbf{X}\in\mathbb{R}^{T\times N}</span> die Matrix zentrierter Renditen von <spanclass="math inline">N</span> Titeln über <spanclass="math inline">T</span> Handelstage. Die <strong>Stichproben-Kovarianzmatrix</strong> lautet:</p>
<p>Das Problem: <spanclass="math inline">\mathbf{S}</span> hat <spanclass="math inline">\frac{N(N+1)}{2}</span> zu schätzende Parameter, aber nur <spanclass="math inline">T \cdot N</span> Datenpunkte. Bei <spanclass="math inline">N = 50</span> Titeln sind das <strong>1275 Parameter</strong> — geschätzt aus einem Jahr Daten (<spanclass="math inline">T = 252</span>).</p>
<td><spanclass="math inline">\mathbf{S}</span> ist <strong>singulär</strong> — nicht invertierbar, Rang <spanclass="math inline">< N</span></td>
</tr>
</tbody>
</table>
<p>Die <strong>Zufallsmatrizentheorie</strong> (<em>Random Matrix Theory</em>, Marchenko-Pastur-Gesetz) zeigt: Die kleinsten Eigenwerte von <spanclass="math inline">\mathbf{S}</span> werden <strong>systematisch unterschätzt</strong>, die größten überschätzt. Und genau das ist fatal, denn:</p>
<blockquote>
<p><strong>🎯 Der Error-Maximizer-Effekt</strong> Ein Risikominimierer sucht die Richtungen mit der <strong>kleinsten</strong> Varianz — also genau jene Eigenrichtungen, deren Eigenwerte am stärksten <strong>nach unten verzerrt</strong> sind. Die Optimierung greift damit zielsicher in das Schätzrauschen hinein. Markowitz-Optimierung ist deshalb kein Fehlerdämpfer, sondern ein <strong>Fehlerverstärker</strong>.</p>
<spanid="cb4-5"><ahref="#cb4-5"aria-hidden="true"tabindex="-1"></a><spanclass="co">Kapitel Finanzdaten: Der Error-Maximizer-Effekt im Experiment.</span></span>
<spanid="cb4-7"><ahref="#cb4-7"aria-hidden="true"tabindex="-1"></a><spanclass="co">Aufbau: Wir KENNEN die wahre Kovarianzmatrix, weil wir die Daten selbst</span></span>
<spanid="cb4-8"><ahref="#cb4-8"aria-hidden="true"tabindex="-1"></a><spanclass="co">erzeugen. Dann schaetzen wir sie aus endlich vielen Beobachtungen und</span></span>
<spanid="cb4-9"><ahref="#cb4-9"aria-hidden="true"tabindex="-1"></a><spanclass="co">vergleichen, wie gut das daraus optimierte Portfolio in der WAHREN Welt</span></span>
<spanid="cb4-10"><ahref="#cb4-10"aria-hidden="true"tabindex="-1"></a><spanclass="co">abschneidet - mit und ohne Shrinkage.</span></span>
<spanid="cb4-12"><ahref="#cb4-12"aria-hidden="true"tabindex="-1"></a><spanclass="co">Das ist der einzige saubere Weg, Schaetzfehler zu messen: Man braucht eine</span></span>
<spanid="cb4-13"><ahref="#cb4-13"aria-hidden="true"tabindex="-1"></a><spanclass="co">Wahrheit zum Vergleich, und die gibt es nur in der Simulation.</span></span>
<spanid="cb4-44"><ahref="#cb4-44"aria-hidden="true"tabindex="-1"></a> N <spanclass="op">=</span><spanclass="dv">40</span><spanclass="co"># Anzahl Titel</span></span>
<spanid="cb4-52"><ahref="#cb4-52"aria-hidden="true"tabindex="-1"></a><spanclass="bu">print</span>(<spanclass="st">" ERROR-MAXIMIZER: WIE TEUER IST SCHAETZRAUSCHEN?"</span>)</span>
<spanid="cb4-81"><ahref="#cb4-81"aria-hidden="true"tabindex="-1"></a><spanclass="co"># Bewertung IMMER mit der wahren Kovarianz - das ist der Punkt</span></span>
<spanid="cb4-92"><ahref="#cb4-92"aria-hidden="true"tabindex="-1"></a><spanclass="bu">print</span>(<spanclass="st">"'Aufschlag' = wie viel mehr Risiko das Portfolio in der WAHREN Welt traegt,"</span>)</span>
<spanid="cb4-93"><ahref="#cb4-93"aria-hidden="true"tabindex="-1"></a><spanclass="bu">print</span>(<spanclass="st">"verglichen mit dem Portfolio bei perfektem Wissen."</span>)</span>
<spanid="cb4-94"><ahref="#cb4-94"aria-hidden="true"tabindex="-1"></a><spanclass="bu">print</span>(<spanclass="st">"Lesart: Je kleiner T/N, desto teurer das Schaetzrauschen - und desto mehr"</span>)</span>
<p><strong>Diese Tabelle ist das Kernargument des ganzen Kapitels.</strong> Lesen Sie die erste Zeile: Bei nur 60 Beobachtungen für 40 Titel trägt das „risikominimale“ Portfolio in Wahrheit <strong>75,5 % mehr Risiko</strong> als nötig. Der Optimierer hat nicht das Risiko minimiert, sondern das <strong>geschätzte</strong> Risiko — und die Differenz ist der Schätzfehler, in den er hineinoptimiert hat.</p>
<p>Drei Beobachtungen:</p>
<oltype="1">
<li><strong>Der Schaden wächst dramatisch, je knapper die Daten.</strong> Von <spanclass="math inline">T/N = 31{,}5</span> (+1,6 %) bis <spanclass="math inline">T/N = 1{,}5</span> (+75,5 %) ist es kein gleitender Übergang, sondern eine Explosion.</li>
<li><strong>Shrinkage halbiert den Schaden dort, wo er groß ist</strong> (75,5 % → 30,4 %) und schadet dort nichts, wo er klein ist (1,6 % → 1,6 %). Sie ist damit praktisch risikolos einzusetzen.</li>
<li><strong><spanclass="math inline">\delta</span> passt sich automatisch an:</strong> viel Schrumpfung bei wenig Daten (0,093), fast keine bei vielen (0,005). Man muss nichts von Hand einstellen.</li>
</ol>
<blockquote>
<p><strong>🎯 Die Praxisregel</strong> Faustregel für Aktienportfolios: <strong><spanclass="math inline">T \ge 5N</span></strong> sollte man mindestens haben, besser <spanclass="math inline">T \ge 10N</span>. Bei 50 Titeln sind das 250 bis 500 Handelstage — ein bis zwei Jahre. Wer weniger hat, sollte entweder das Universum verkleinern oder mit Shrinkage arbeiten. Am besten beides.</p>
<p><strong>📐 Formel-Lesehilfe</strong> * <spanclass="math inline">\mathbf{S}</span> — die Stichprobenmatrix: <strong>unverzerrt</strong>, aber verrauscht. * <spanclass="math inline">\mathbf{F}</span> — das <strong>Schrumpfungsziel</strong>: verzerrt, aber stabil und rauschfrei. * <spanclass="math inline">\delta \in [0,1]</span> — wie weit man vom Rauschen zur Struktur zieht.</p>
<p><strong>Ohne Formel gesagt:</strong> Man mischt eine zappelige, aber im Mittel richtige Schätzung mit einer ruhigen, aber etwas schiefen. Die Mischung ist besser als beide Bestandteile einzeln — ein klassischer <strong>Bias-Varianz-Kompromiss</strong>. Ledoit und Wolf berechnen dabei dasjenige <spanclass="math inline">\delta</span>, das den erwarteten quadratischen Fehler zur unbekannten wahren Matrix <strong>minimiert</strong> — analytisch, ohne Kreuzvalidierung.</p>
</blockquote>
<h3id="welches-ziel-mathbff">Welches Ziel <spanclass="math inline">\mathbf{F}</span>?</h3>
<p>Ein häufiges Missverständnis: Es gibt nämlich <strong>mehrere</strong> Ledoit-Wolf-Varianten, und Text und Code müssen sich konsistent auf dieselbe beziehen:</p>
<td>Ledoit/Wolf 2003, <em>„Honey, I shrunk the sample covariance matrix“</em></td>
<td>oft in der Praxis, z. B. <code>PyPortfolioOpt</code></td>
</tr>
<trclass="odd">
<td><strong>Ein-Faktor-Modell</strong></td>
<td>aus Marktbeta geschätzt</td>
<td>Ledoit/Wolf 2003</td>
<td>Faktormodell-Ansätze</td>
</tr>
</tbody>
</table>
<p><strong>Wichtig ist, Text und Code konsistent auf dieselbe Variante zu beziehen</strong> — zum Beispiel <code>sklearn.covariance.LedoitWolf</code>, das die skalierte Einheitsmatrix verwendet, versus eine manuelle Implementierung des Konstant-Korrelations-Ziels. Dieses Buch nennt beide und macht transparent, welches wo zum Einsatz kommt.</p>
<blockquote>
<p><strong>💡 Welches Ziel ist besser?</strong> Es kommt darauf an. Die <strong>Einheitsmatrix</strong> unterstellt, dass alle Titel gleich riskant und unkorreliert sind — eine starke, aber sehr stabile Annahme. Das <strong>Konstant-Korrelations-Ziel</strong> behält die geschätzten Einzelvarianzen und glättet nur die Korrelationen; das ist bei Aktien meist realistischer, weil Titel tatsächlich sehr unterschiedliche Volatilitäten haben. In Übung 11.5 implementieren Sie es selbst und vergleichen.</p>
</blockquote>
<p>Das Ergebnis ist in jedem Fall garantiert <strong>positiv definit</strong>, wohlkonditioniert und stabil invertierbar.</p>
<hr/>
<h2id="sec:finanzdaten-praxis-datenpipeline-mit-korrekter-spaltenreihenfolge">18.6 Praxis: Datenpipeline mit korrekter Spaltenreihenfolge</h2>
<blockquote>
<p><strong>⚠️ Die wichtigste Zeile dieses Kapitels</strong></p>
<p><code>yfinance</code> liefert die Kursspalten <strong>alphabetisch sortiert</strong>, nicht in der Reihenfolge Ihrer Ticker-Liste:</p>
<p>Wer danach mit Positionsindizes arbeitet, beschriftet Ergebnisse falsch und beschränkt falsche Sektoren. <strong>Die Abhilfe ist eine Zeile:</strong></p>
<divclass="sourceCode"id="cb7"><preclass="sourceCode python"><codeclass="sourceCode python"><spanid="cb7-1"><ahref="#cb7-1"aria-hidden="true"tabindex="-1"></a>prices <spanclass="op">=</span> raw[<spanclass="st">"Close"</span>][tickers].dropna() <spanclass="co"># erzwingt die eigene Reihenfolge</span></span>
<spanid="cb8-8"><ahref="#cb8-8"aria-hidden="true"tabindex="-1"></a><spanclass="co"> * Spaltenreihenfolge wird erzwungen und per assert geprueft</span></span>
<spanid="cb8-9"><ahref="#cb8-9"aria-hidden="true"tabindex="-1"></a><spanclass="co"> * beide Shrinkage-Ziele werden berechnet und verglichen</span></span>
<spanid="cb8-11"><ahref="#cb8-11"aria-hidden="true"tabindex="-1"></a><spanclass="co"> * Eigenwertspektrum wird ausgewiesen, nicht nur die Konditionszahl</span></span>
<spanid="cb8-23"><ahref="#cb8-23"aria-hidden="true"tabindex="-1"></a><spanclass="co">"""Laedt bereinigte Schlusskurse und garantiert die Spaltenreihenfolge."""</span></span>
<spanid="cb8-24"><ahref="#cb8-24"aria-hidden="true"tabindex="-1"></a><spanclass="bu">print</span>(<spanclass="ss">f"Lade </span><spanclass="sc">{</span><spanclass="bu">len</span>(tickers)<spanclass="sc">}</span><spanclass="ss"> Ticker von </span><spanclass="sc">{</span>start<spanclass="sc">}</span><spanclass="ss"> bis </span><spanclass="sc">{</span>ende<spanclass="sc">}</span><spanclass="ss"> ..."</span>)</span>
<spanid="cb8-30"><ahref="#cb8-30"aria-hidden="true"tabindex="-1"></a><spanclass="co"># [tickers] erzwingt die gewuenschte Spaltenreihenfolge</span></span>
<spanid="cb8-31"><ahref="#cb8-31"aria-hidden="true"tabindex="-1"></a> kurse <spanclass="op">=</span> roh[<spanclass="st">"Close"</span>][tickers].dropna()</span>
<spanid="cb8-33"><ahref="#cb8-33"aria-hidden="true"tabindex="-1"></a> kurse <spanclass="op">=</span> roh[[<spanclass="st">"Close"</span>]].dropna()</span>
<spanid="cb8-43"><ahref="#cb8-43"aria-hidden="true"tabindex="-1"></a><spanclass="co">"""Faengt die haeufigsten Datenprobleme ab, bevor sie ins Modell gelangen."""</span></span>
<spanid="cb8-44"><ahref="#cb8-44"aria-hidden="true"tabindex="-1"></a> T, N <spanclass="op">=</span> kurse.shape</span>
<spanid="cb8-45"><ahref="#cb8-45"aria-hidden="true"tabindex="-1"></a><spanclass="bu">print</span>(<spanclass="ss">f"</span><spanclass="ch">\n</span><spanclass="ss">Datenqualitaet: </span><spanclass="sc">{</span>T<spanclass="sc">}</span><spanclass="ss"> Handelstage, </span><spanclass="sc">{</span>N<spanclass="sc">}</span><spanclass="ss"> Titel (T/N = </span><spanclass="sc">{</span>T<spanclass="op">/</span>N<spanclass="sc">:.1f}</span><spanclass="ss">)"</span>)</span>
<spanid="cb8-46"><ahref="#cb8-46"aria-hidden="true"tabindex="-1"></a><spanclass="cf">if</span> T <spanclass="op"><</span> mindest_tage:</span>
<spanid="cb8-47"><ahref="#cb8-47"aria-hidden="true"tabindex="-1"></a><spanclass="cf">raise</span><spanclass="pp">SystemExit</span>(<spanclass="ss">f"Zu wenige Beobachtungen (</span><spanclass="sc">{</span>T<spanclass="sc">}</span><spanclass="ss"><</span><spanclass="sc">{</span>mindest_tage<spanclass="sc">}</span><spanclass="ss">)."</span>)</span>
<spanid="cb8-48"><ahref="#cb8-48"aria-hidden="true"tabindex="-1"></a><spanclass="cf">if</span> T <spanclass="op"><</span> N:</span>
<spanid="cb8-49"><ahref="#cb8-49"aria-hidden="true"tabindex="-1"></a><spanclass="bu">print</span>(<spanclass="st">" WARNUNG: T < N - die Stichprobenkovarianz ist singulaer!"</span>)</span>
<spanid="cb8-50"><ahref="#cb8-50"aria-hidden="true"tabindex="-1"></a><spanclass="cf">elif</span> T <spanclass="op"><</span><spanclass="dv">3</span><spanclass="op">*</span> N:</span>
<spanid="cb8-51"><ahref="#cb8-51"aria-hidden="true"tabindex="-1"></a><spanclass="bu">print</span>(<spanclass="st">" WARNUNG: T < 3N - erhebliches Schaetzrauschen zu erwarten."</span>)</span>
<spanid="cb8-57"><ahref="#cb8-57"aria-hidden="true"tabindex="-1"></a><spanclass="ss">f"(Splits, Sondersituationen oder Datenfehler pruefen)."</span>)</span>
<spanid="cb8-64"><ahref="#cb8-64"aria-hidden="true"tabindex="-1"></a><spanclass="co"> Shrinkage-Ziel nach Ledoit/Wolf 2003: Einzelvarianzen behalten,</span></span>
<spanid="cb8-65"><ahref="#cb8-65"aria-hidden="true"tabindex="-1"></a><spanclass="co"> alle Korrelationen durch ihren Mittelwert ersetzen.</span></span>
<spanid="cb8-66"><ahref="#cb8-66"aria-hidden="true"tabindex="-1"></a><spanclass="co"> (sklearn nutzt stattdessen die skalierte Einheitsmatrix - siehe oben.)</span></span>
<spanid="cb8-90"><ahref="#cb8-90"aria-hidden="true"tabindex="-1"></a><spanclass="bu">print</span>(<spanclass="st">" FINANZDATEN-PIPELINE UND MATRIX-KONDITIONIERUNG"</span>)</span>
<spanid="cb8-95"><ahref="#cb8-95"aria-hidden="true"tabindex="-1"></a><spanclass="ss">f"(</span><spanclass="sc">{</span>delta<spanclass="op">*</span><spanclass="dv">100</span><spanclass="sc">:.1f}</span><spanclass="ss"> % Gewicht auf dem strukturierten Ziel)"</span>)</span>
<spanid="cb8-108"><ahref="#cb8-108"aria-hidden="true"tabindex="-1"></a><spanclass="bu">print</span>(<spanclass="st">"</span><spanclass="ch">\n</span><spanclass="st">Die Konditionszahl misst, wie stark sich kleine Datenaenderungen auf"</span>)</span>
<spanid="cb8-109"><ahref="#cb8-109"aria-hidden="true"tabindex="-1"></a><spanclass="bu">print</span>(<spanclass="st">"die Inverse auswirken. Je kleiner, desto stabiler die Portfoliogewichte."</span>)</span>
<spanid="cb8-111"><ahref="#cb8-111"aria-hidden="true"tabindex="-1"></a><spanclass="co"># --- Vergleich der beiden Shrinkage-Ziele ----------------------------</span></span>
<spanid="cb8-116"><ahref="#cb8-116"aria-hidden="true"tabindex="-1"></a><spanclass="bu">print</span>(<spanclass="st">"</span><spanclass="ch">\n</span><spanclass="st">--- Die beiden Shrinkage-Ziele im Vergleich ---"</span>)</span>
<spanid="cb8-117"><ahref="#cb8-117"aria-hidden="true"tabindex="-1"></a><spanclass="cf">for</span> name, F <spanclass="kw">in</span> [(<spanclass="st">"skalierte Einheitsmatrix (sklearn)"</span>, F_identitaet),</span>
<spanid="cb8-122"><ahref="#cb8-122"aria-hidden="true"tabindex="-1"></a><spanclass="ss">f"kleinster EW </span><spanclass="sc">{</span>eig<spanclass="sc">.</span><spanclass="bu">min</span>()<spanclass="sc">:.6f}</span><spanclass="ss">"</span>)</span>
<spanid="cb8-141"><ahref="#cb8-141"aria-hidden="true"tabindex="-1"></a><spanclass="co"># Relatives 2-Jahres-Fenster, damit das Beispiel nicht "altert"</span></span>
<spanid="cb8-142"><ahref="#cb8-142"aria-hidden="true"tabindex="-1"></a> ende <spanclass="op">=</span> pd.Timestamp.today().normalize()</span>
<spanid="cb8-143"><ahref="#cb8-143"aria-hidden="true"tabindex="-1"></a> start <spanclass="op">=</span> ende <spanclass="op">-</span> pd.DateOffset(years<spanclass="op">=</span><spanclass="dv">2</span>)</span>
<p><strong>⚠️ Zur Reproduzierbarkeit</strong> Dieses Programm lädt <strong>Live-Daten</strong>. Ihre Zahlen werden von den hier abgedruckten abweichen — je nach Abrufdatum. Das ist beabsichtigt und selbst eine Lektion: Wenn sich das optimale Portfolio zwischen zwei Abrufen deutlich ändert, obwohl nur ein paar Tage vergangen sind, sehen Sie den Schätzfehler direkt. Prüfen Sie das ruhig einmal.</p>
<p><strong>Aufgabe 18.1 ⭐ — Renditeart wählen.</strong> Welche Renditeart nehmen Sie und warum? (a) Portfoliorendite aus Einzelrenditen berechnen. (b) Volatilität über 5 Jahre schätzen. (c) Kumulierte Wertentwicklung über 10 Jahre darstellen. (d) Korrelationen zwischen Titeln schätzen.</p>
<p><strong>Aufgabe 18.2 ⭐ — Mittelwertfalle.</strong> Ein Fonds meldet Jahresrenditen von <spanclass="math inline">+60\,\%</span>, <spanclass="math inline">-40\,\%</span>, <spanclass="math inline">+60\,\%</span>, <spanclass="math inline">-40\,\%</span>. (a) Wie hoch ist das arithmetische Mittel? (b) Wie viel Kapital hat ein Anleger nach 4 Jahren aus 10 000 €? (c) Welche jährliche Rendite entspricht dem tatsächlich?</p>
<p><strong>Aufgabe 18.3 ⭐⭐ — Konditionszahl verstehen.</strong> Erzeugen Sie eine Kovarianzmatrix für <spanclass="math inline">N = 30</span> Titel aus <spanclass="math inline">T = 40</span>, <spanclass="math inline">T = 100</span> und <spanclass="math inline">T = 1000</span> simulierten Beobachtungen. Berechnen Sie jeweils kleinsten Eigenwert und Konditionszahl. Ab welchem <spanclass="math inline">T</span> wird die Matrix brauchbar?</p>
<p><strong>Aufgabe 18.4 ⭐⭐ — Spaltenreihenfolge prüfen.</strong> Laden Sie fünf Ticker in einer bewusst unsortierten Reihenfolge. Zeigen Sie, dass <code>raw["Close"].columns</code> abweicht, und dass <code>raw["Close"][tickers]</code> das behebt. Was passiert, wenn ein Ticker nicht existiert?</p>
<p><strong>Aufgabe 18.5 ⭐⭐⭐ — Beide Shrinkage-Ziele vergleichen.</strong> Implementieren Sie das Konstant-Korrelations-Ziel vollständig (inklusive eigener Berechnung von <spanclass="math inline">\delta</span> nach Ledoit/Wolf 2003 oder per Kreuzvalidierung). Vergleichen Sie mit <code>sklearn</code> anhand: (a) der Konditionszahl, (b) der Out-of-Sample-Volatilität eines GMV-Portfolios (nach dem Muster von <code>Schaetzrauschen_Demo.py</code>), (c) der Stabilität der Gewichte über rollierende Fenster.</p>
<p><strong>Aufgabe 18.6 ⭐⭐⭐ — Error-Maximizer selbst messen.</strong> Erweitern Sie <code>Schaetzrauschen_Demo.py</code> um eine dritte Variante: die <strong>Gleichgewichtung</strong> (<spanclass="math inline">w_i = 1/N</span>), die überhaupt keine Schätzung benötigt. (a) Ab welchem <spanclass="math inline">T/N</span> schlägt die Stichproben-Optimierung die Gleichgewichtung? (b) Ab welchem <spanclass="math inline">T/N</span> schlägt Ledoit-Wolf sie? (c) Was folgt daraus für die Praxis?</p>
<hr/>
<h2id="sec:finanzdaten-denkfehler">18.8 Finde den Denkfehler</h2>
<p>Ein Analyst stellt ein Portfolio aus <strong>30 Titeln</strong> zusammen. Für die Kovarianzmatrix nimmt er das letzte Quartal — bei Wochendaten sind das <strong>20 Beobachtungen</strong>. Dann minimiert er die Varianz.</p>
<p>Das Ergebnis begeistert ihn: Das Portfolio hat ein Risiko von <strong>0,000 %</strong>. Er hat ein risikofreies Aktienportfolio gefunden.</p>
<p><strong>Ihre Aufgabe:</strong> (a) Wie hoch ist der Rang einer Kovarianzmatrix, die aus <spanclass="math inline">T</span> Beobachtungen für <spanclass="math inline">N > T</span> Anlagen geschätzt wurde — und was folgt daraus geometrisch? (b) Warum findet ausgerechnet ein <strong>Minimum</strong>-Varianz-Optimierer diese Stelle so zuverlässig? (c) Sehen Sie sich unten die Spalte „Hebel“ an. Was sagt ein Wert von 3,8 über das Portfolio aus? (d) Warum schlägt die simple Gleichgewichtung den Optimierer — und was folgt daraus für Ihre eigenen Modelle, auch außerhalb der Finanzwelt?</p>
<p>Das folgende Programm führt den Fall vor. Es arbeitet mit <strong>synthetischen</strong> Daten, damit das Ergebnis reproduzierbar ist und kein Internetzugang nötig wird — mit echten Kursdaten sieht es genauso aus.</p>
<spanid="cb9-5"><ahref="#cb9-5"aria-hidden="true"tabindex="-1"></a><spanclass="co">Kapitel Finanzdaten: Warum die historische Kovarianzmatrix den Optimierer belaeugt.</span></span>
<spanid="cb9-7"><ahref="#cb9-7"aria-hidden="true"tabindex="-1"></a><spanclass="co">Ein Portfolio aus 30 Anlagen soll das Risiko minimieren. Geschaetzt wird die</span></span>
<spanid="cb9-8"><ahref="#cb9-8"aria-hidden="true"tabindex="-1"></a><spanclass="co">Kovarianzmatrix aus 20 Beobachtungen - in der Praxis ein voellig ueblicher</span></span>
<spanid="cb9-9"><ahref="#cb9-9"aria-hidden="true"tabindex="-1"></a><spanclass="co">Fall (30 Titel, ein Quartal Wochendaten).</span></span>
<spanid="cb9-11"><ahref="#cb9-11"aria-hidden="true"tabindex="-1"></a><spanclass="co">Das Ergebnis ist ein Portfolio mit einem gemessenen Risiko von 0,000 %. Der</span></span>
<spanid="cb9-12"><ahref="#cb9-12"aria-hidden="true"tabindex="-1"></a><spanclass="co">Optimierer haelt es fuer risikofrei. Ausserhalb des Schaetzzeitraums ist es</span></span>
<spanid="cb9-13"><ahref="#cb9-13"aria-hidden="true"tabindex="-1"></a><spanclass="co">das schlechteste der drei untersuchten Portfolios - schlechter sogar als</span></span>
<spanid="cb9-16"><ahref="#cb9-16"aria-hidden="true"tabindex="-1"></a><spanclass="co">Der Grund ist nicht Zufall, sondern Struktur: Bei N Anlagen und T < N</span></span>
<spanid="cb9-17"><ahref="#cb9-17"aria-hidden="true"tabindex="-1"></a><spanclass="co">Beobachtungen hat die Stichproben-Kovarianzmatrix hoechstens Rang T-1. Es gibt</span></span>
<spanid="cb9-18"><ahref="#cb9-18"aria-hidden="true"tabindex="-1"></a><spanclass="co">dann ganze Richtungen im Gewichtsraum, in denen sie exakt null Varianz misst -</span></span>
<spanid="cb9-19"><ahref="#cb9-19"aria-hidden="true"tabindex="-1"></a><spanclass="co">Richtungen, die es in Wirklichkeit nicht gibt. Der Optimierer findet sie</span></span>
<spanid="cb9-20"><ahref="#cb9-20"aria-hidden="true"tabindex="-1"></a><spanclass="co">zuverlaessig, denn er sucht ja genau danach.</span></span>
<spanid="cb9-22"><ahref="#cb9-22"aria-hidden="true"tabindex="-1"></a><spanclass="co">Die Daten sind synthetisch (ein Marktfaktor plus Eigenrauschen), damit das</span></span>
<spanid="cb9-23"><ahref="#cb9-23"aria-hidden="true"tabindex="-1"></a><spanclass="co">Ergebnis reproduzierbar ist und kein Internetzugang noetig wird. Mit echten</span></span>
<spanid="cb9-24"><ahref="#cb9-24"aria-hidden="true"tabindex="-1"></a><spanclass="co">Kursdaten sieht es genauso aus.</span></span>
<spanid="cb9-36"><ahref="#cb9-36"aria-hidden="true"tabindex="-1"></a>BEOBACHTUNGEN_SCHAETZUNG <spanclass="op">=</span><spanclass="dv">20</span><spanclass="co"># weniger als Anlagen - genau darum geht es</span></span>
<spanid="cb9-37"><ahref="#cb9-37"aria-hidden="true"tabindex="-1"></a>BEOBACHTUNGEN_TEST <spanclass="op">=</span><spanclass="dv">2000</span><spanclass="co"># der "spaetere Verlauf"</span></span>
<spanid="cb9-40"><ahref="#cb9-40"aria-hidden="true"tabindex="-1"></a><spanclass="co"># Jede Anlage reagiert unterschiedlich stark auf den Gesamtmarkt.</span></span>
<spanid="cb9-45"><ahref="#cb9-45"aria-hidden="true"tabindex="-1"></a><spanclass="co">"""Ein Marktfaktor, auf den alle reagieren, plus Eigenrauschen je Anlage."""</span></span>
<spanid="cb9-52"><ahref="#cb9-52"aria-hidden="true"tabindex="-1"></a><spanclass="co">"""Minimum-Varianz-Portfolio: Gewichte summieren sich zu 1, sonst frei.</span></span>
<spanid="cb9-54"><ahref="#cb9-54"aria-hidden="true"tabindex="-1"></a><spanclass="co"> cp.psd_wrap() sagt CVXPY: 'Ich weiss, dass diese Matrix numerisch nicht</span></span>
<spanid="cb9-55"><ahref="#cb9-55"aria-hidden="true"tabindex="-1"></a><spanclass="co"> exakt positiv semidefinit ist - rechne trotzdem.' Das ist hier bewusst so</span></span>
<spanid="cb9-56"><ahref="#cb9-56"aria-hidden="true"tabindex="-1"></a><spanclass="co"> gewaehlt, denn genau diese Eigenschaft wollen wir vorfuehren. Im</span></span>
<spanid="cb9-57"><ahref="#cb9-57"aria-hidden="true"tabindex="-1"></a><spanclass="co"> Produktivbetrieb waere die DCP-Fehlermeldung das Warnsignal, dem man</span></span>
<spanid="cb9-58"><ahref="#cb9-58"aria-hidden="true"tabindex="-1"></a><spanclass="co"> nachgehen muss (siehe den Denkfehler im Kapitel Quadratische und</span></span>
<spanid="cb9-62"><ahref="#cb9-62"aria-hidden="true"tabindex="-1"></a> problem <spanclass="op">=</span> cp.Problem(cp.Minimize(cp.quad_form(gewichte, cp.psd_wrap(kovarianz))),</span>
<spanid="cb9-76"><ahref="#cb9-76"aria-hidden="true"tabindex="-1"></a><spanclass="bu">print</span>(<spanclass="st">" DIE KOVARIANZ-FALLE"</span>)</span>
<spanid="cb9-78"><ahref="#cb9-78"aria-hidden="true"tabindex="-1"></a><spanclass="bu">print</span>(<spanclass="ss">f"</span><spanclass="sc">{</span>ANZAHL_ANLAGEN<spanclass="sc">}</span><spanclass="ss"> Anlagen, geschaetzt aus </span><spanclass="sc">{</span>BEOBACHTUNGEN_SCHAETZUNG<spanclass="sc">}</span><spanclass="ss">"</span></span>
<spanid="cb9-80"><ahref="#cb9-80"aria-hidden="true"tabindex="-1"></a><spanclass="bu">print</span>(<spanclass="ss">f"Rang der Stichprobenmatrix: "</span></span>
<spanid="cb9-84"><ahref="#cb9-84"aria-hidden="true"tabindex="-1"></a><spanclass="bu">print</span>(<spanclass="st">"Es gibt also Richtungen, in denen diese Matrix EXAKT null Varianz"</span>)</span>
<spanid="cb9-85"><ahref="#cb9-85"aria-hidden="true"tabindex="-1"></a><spanclass="bu">print</span>(<spanclass="st">"misst. Genau dort sucht ein Minimum-Varianz-Optimierer."</span>)</span>
<spanid="cb9-88"><ahref="#cb9-88"aria-hidden="true"tabindex="-1"></a><spanclass="bu">print</span>(<spanclass="ss">f"</span><spanclass="sc">{</span><spanclass="st">'Schaetzer'</span><spanclass="sc">:<26}</span><spanclass="ss"></span><spanclass="sc">{</span><spanclass="st">'Risiko im Zeitraum'</span><spanclass="sc">:>19}</span><spanclass="ss">"</span></span>
<spanid="cb9-110"><ahref="#cb9-110"aria-hidden="true"tabindex="-1"></a><spanclass="bu">print</span>(<spanclass="st">"1. Die rohe Schaetzung meldet 0,000 % Risiko - und liefert spaeter das"</span>)</span>
<spanid="cb9-111"><ahref="#cb9-111"aria-hidden="true"tabindex="-1"></a><spanclass="bu">print</span>(<spanclass="st">" SCHLECHTESTE Ergebnis der drei. Sie hat kein Portfolio optimiert,"</span>)</span>
<spanid="cb9-112"><ahref="#cb9-112"aria-hidden="true"tabindex="-1"></a><spanclass="bu">print</span>(<spanclass="st">" sondern eine Luecke in den eigenen Daten gefunden."</span>)</span>
<spanid="cb9-113"><ahref="#cb9-113"aria-hidden="true"tabindex="-1"></a><spanclass="bu">print</span>(<spanclass="st">"2. Die Gleichgewichtung, die gar nicht optimiert, schlaegt den rohen"</span>)</span>
<spanid="cb9-114"><ahref="#cb9-114"aria-hidden="true"tabindex="-1"></a><spanclass="bu">print</span>(<spanclass="st">" Optimierer deutlich. Das ist kein Zufallsbefund, sondern in der"</span>)</span>
<spanid="cb9-116"><ahref="#cb9-116"aria-hidden="true"tabindex="-1"></a><spanclass="bu">print</span>(<spanclass="st">"3. Ledoit-Wolf ist im Schaetzzeitraum EHRLICHER (0,441 statt 0,000 %)"</span>)</span>
<spanid="cb9-117"><ahref="#cb9-117"aria-hidden="true"tabindex="-1"></a><spanclass="bu">print</span>(<spanclass="st">" und spaeter am besten. Der Hebel faellt von 3,8 auf 1,8 - das"</span>)</span>
<spanid="cb9-118"><ahref="#cb9-118"aria-hidden="true"tabindex="-1"></a><spanclass="bu">print</span>(<spanclass="st">" Portfolio wird auch praktisch handelbarer."</span>)</span>
<spanid="cb9-120"><ahref="#cb9-120"aria-hidden="true"tabindex="-1"></a><spanclass="bu">print</span>(<spanclass="st">"Merksatz: Ein Optimierer glaubt seinen Eingabedaten vollstaendig."</span>)</span>
<spanid="cb9-121"><ahref="#cb9-121"aria-hidden="true"tabindex="-1"></a><spanclass="bu">print</span>(<spanclass="st">"Je mehr Freiheit Sie ihm geben, desto gruendlicher findet er deren"</span>)</span>
<spanid="cb9-122"><ahref="#cb9-122"aria-hidden="true"tabindex="-1"></a><spanclass="bu">print</span>(<spanclass="st">"Fehler. Das gilt fuer Kovarianzmatrizen wie fuer Lieferzeiten,"</span>)</span>
<spanid="cb9-123"><ahref="#cb9-123"aria-hidden="true"tabindex="-1"></a><spanclass="bu">print</span>(<spanclass="st">"Ausfallraten und jede andere geschaetzte Groesse."</span>)</span>
<td>„Es bleiben 11 Richtungen übrig, über die die Daten <strong>nichts</strong> sagen.“</td>
</tr>
<trclass="even">
<td>$,</td>
<td></td>
</tr>
</tbody>
</table>
</blockquote>
</div>
<p>e 0: ^ op = 0$ | „In genau diesen Richtungen misst die Matrix null Risiko — nicht weil keines da ist, sondern weil sie blind ist.“ | > | <spanclass="math inline">\min_{\mathbf{w}} \mathbf{w}^ op\mathbf{S}\mathbf{w}</span> | „Und der Optimierer sucht zielsicher genau dort.“ | >><strong>Die Faustregel:</strong> Für eine halbwegs verlässliche Kovarianzschätzung braucht man <spanclass="math inline">T \gtrsim 10 \cdot N</span> Beobachtungen. Bei 30 Titeln also rund 300 Perioden — mehr als ein Jahr Tagesdaten. Wer weniger hat, <strong>muss</strong> schrumpfen.</p>
<p>Genau eine Antwort ist jeweils richtig. Auflösung in <ahref="anhang-loesungen.html#quiz-loesung-finanzdaten">Anhang A</a>.</p>
<p><strong>1. Ein Kurs fällt um 50 % und steigt danach um 50 %. Wo steht er?</strong> (a) Wieder beim Ausgangswert — die Prozente heben sich auf. (b) Bei 75 % des Ausgangswerts. Diskrete Renditen verknüpfen sich multiplikativ, nicht additiv: <spanclass="math inline">1{,}0 \cdot 0{,}5 \cdot 1{,}5 = 0{,}75</span>. (c) Bei 25 % des Ausgangswerts.</p>
<p><strong>2. Wofür nimmt man logarithmische Renditen, wofür diskrete?</strong> (a) Logarithmische sind grundsätzlich genauer und daher immer vorzuziehen. (b) Logarithmische addieren sich über die <strong>Zeit</strong>, diskrete über die <strong>Anlagen</strong> eines Portfolios. Man wählt nach der Richtung, in der summiert wird. (c) Diskrete für kurze, logarithmische für lange Zeiträume.</p>
<p><strong>3. Sie schätzen eine Kovarianzmatrix für 50 Anlagen aus 40 Wochenrenditen. Was ist zu tun?</strong> (a) Nichts — 40 Beobachtungen sind eine ordentliche Stichprobe. (b) Die Matrix ist singulär und gaukelt dem Optimierer risikofreie Richtungen vor. Entweder mehr Daten beschaffen oder einen Shrinkage-Schätzer verwenden, der positive Definitheit garantiert. (c) Die Anzahl der Anlagen auf 40 reduzieren, dann passt es.</p>
<li><strong>Diskret über das Portfolio, logarithmisch über die Zeit</strong> — die Wahl der Renditeart ist keine Geschmacksfrage.</li>
<li><strong>Das arithmetische Mittel diskreter Renditen überschätzt</strong> die tatsächliche Wertentwicklung systematisch.</li>
<li><strong>Die Stichprobenkovarianz ist bei <spanclass="math inline">T \approx N</span> unbrauchbar</strong> und bei <spanclass="math inline">T < N</span> singulär.</li>
<li><strong>Markowitz verstärkt Schätzfehler</strong>, statt sie auszugleichen — der Error-Maximizer-Effekt.</li>
<li><strong>Shrinkage</strong> mischt Rauschen mit Struktur und liefert eine stabil invertierbare Matrix. Es gibt mehrere Ziele; <code>sklearn</code> verwendet die skalierte Einheitsmatrix.</li>
<li><strong>Erzwingen Sie die Spaltenreihenfolge</strong> nach jedem Datenimport und prüfen Sie sie per <code>assert</code>.</li>
<li><strong>Faustregel für die Datenmenge:</strong><spanclass="math inline">T \gtrsim 10 \cdot N</span>. Bei 30 Titeln also rund 300 Perioden. Wer weniger hat, muss schrumpfen — oder die Freiheit des Optimierers begrenzen.</li>
<li><strong>Bewerten Sie außerhalb des Schätzzeitraums.</strong> Ein Portfolio, das im eigenen Datenfenster 0,000 % Risiko meldet, ist kein gutes Portfolio, sondern ein Beleg dafür, dass die Daten nicht ausreichen.</li>
<li><strong>Das gilt weit über Finanzdaten hinaus.</strong> Bearbeitungszeiten, Ausfallraten, Nachfrageprognosen: Ein Optimierer sucht nicht die beste Lösung, sondern den größten Fehler in Ihren Schätzungen.</li>
</ul>
<p><strong>Ausblick.</strong> Mit stabilen Schätzungen können wir in <ahref="markowitz.html#kap-markowitz">Kapitel 19</a> endlich optimieren: die Markowitz-Effizienzgrenze mit realistischen institutionellen Restriktionen.</p>
<navclass="prev-next"><aclass="prev-next-knopf prev-next-prev"href="supplychain.html"><svgclass="icon"aria-hidden="true"><usehref="#icon-chevron-left"></use></svg><span><small>Zurück</small>Kapitel 17: Supply-Chain und Energieeinsatz unter Unsicherheit</span></a><aclass="prev-next-knopf prev-next-next"href="markowitz.html"><span><small>Weiter</small>Kapitel 19: Die moderne Portfoliotheorie nach Markowitz</span><svgclass="icon"aria-hidden="true"><usehref="#icon-chevron-right"></use></svg></a></nav>