σμimplied vol · KKmax(S−K,0)udβρᵢⱼfat tailsPnL · drawdownyield · TdSₜ = μSₜ dt + σSₜ dWₜC = S·N(d₁) − K·e⁻ʳᵀ·N(d₂)σₚ² = wᵀΣwd₁ = [ln(S/K) + (r + σ²⁄2)T] ⁄ σ√T∂V/∂t + ½σ²S²·∂²V/∂S² + rS·∂V/∂S − rV = 0Sharpe = (Rₚ − R_f) ⁄ σₚVaR₉₉ = μ − 2.33σρ = Cov(X,Y) ⁄ σₓσᵧE[Rₚ] = Σ wᵢ·E[Rᵢ]φ(x) = e^(−x²/2) ⁄ √2πE[Rᵢ] = R_f + βᵢ(E[Rₘ] − R_f)dXₜ = θ(μ − Xₜ)dt + σ dWₜσ²ₜ = ω + α·ε²ₜ₋₁ + β·σ²ₜ₋₁C − P = S − K·e⁻ʳᵀΔ = ∂V/∂S Γ = ∂²V/∂S²p = (e^(rΔt) − d) ⁄ (u − d)rₜ = ln(Pₜ ⁄ Pₜ₋₁)E[Xₜ₊₁ | ℱₜ] = Xₜf* = (bp − q) ⁄ bz = (x − μ) ⁄ σP(N=k) = λᵏe^(−λ) ⁄ k!Θ = −∂V/∂Tν = S·φ(d₁)·√Tmin wᵀΣw s.t. wᵀμ = μ*∫Σ∂∞λ
σμimplied vol · KKmax(S−K,0)udβρᵢⱼfat tailsPnL · drawdownyield · TdSₜ = μSₜ dt + σSₜ dWₜC = S·N(d₁) − K·e⁻ʳᵀ·N(d₂)σₚ² = wᵀΣwd₁ = [ln(S/K) + (r + σ²⁄2)T] ⁄ σ√T∂V/∂t + ½σ²S²·∂²V/∂S² + rS·∂V/∂S − rV = 0Sharpe = (Rₚ − R_f) ⁄ σₚVaR₉₉ = μ − 2.33σρ = Cov(X,Y) ⁄ σₓσᵧE[Rₚ] = Σ wᵢ·E[Rᵢ]φ(x) = e^(−x²/2) ⁄ √2πE[Rᵢ] = R_f + βᵢ(E[Rₘ] − R_f)dXₜ = θ(μ − Xₜ)dt + σ dWₜσ²ₜ = ω + α·ε²ₜ₋₁ + β·σ²ₜ₋₁C − P = S − K·e⁻ʳᵀΔ = ∂V/∂S Γ = ∂²V/∂S²p = (e^(rΔt) − d) ⁄ (u − d)rₜ = ln(Pₜ ⁄ Pₜ₋₁)E[Xₜ₊₁ | ℱₜ] = Xₜf* = (bp − q) ⁄ bz = (x − μ) ⁄ σP(N=k) = λᵏe^(−λ) ⁄ k!Θ = −∂V/∂Tν = S·φ(d₁)·√Tmin wᵀΣw s.t. wᵀμ = μ*∫Σ∂∞λ
uantCraft AcademySkills
Ctrl K
AO
+1,2 Tsd. Lernende
AnmeldenBeitreten ↗
Skills
AO
+1,2 Tsd. Lernende
Anmelden
  • English
  • Français
  • Español
  • العربية
  • Português
  • Deutsch
  • 日本語
  • 中文
Python-Skill›Modul 3 · Wahrscheinlichkeit & Monte-Carlo-Simulation›Thema 3.5·~55 Min.Mittelstufe

Lineare Regression (OLS)

Position in der SkillModul 3 von 11 · Thema 5 von 12
3.5 Lineare Regression (OLS)
—Lab-Punkte— / 100XP gesamt—Serie—

Eine Rendite durch eine andere erklären

Eine Aktie bewegt sich selten allein: Steigt der Markt, steigt sie meist auch. Die lineare Regression quantifiziert diesen Zusammenhang, indem sie eine Gerade y = alpha + beta * x durch die Renditepaare legt (x: der Markt, y: die Aktie). Die Methode der kleinsten Quadrate (OLS) wählt die Gerade, die die Summe der quadrierten senkrechten Abstände, der Residuen, so klein wie möglich macht. Das Ergebnis hat eine geschlossene Form: Die Steigung beta ist die Kovarianz von x und y geteilt durch die Varianz von x, und der Achsenabschnitt alpha lässt die Gerade durch den Mittelpunkt der Daten laufen.

beta = sum((x - mean_x) * (y - mean_y)) / sum((x - mean_x)^2) alpha = mean_y - beta * mean_x
import numpy as np

market = np.array([0.010, -0.005, 0.004, 0.012, -0.008, 0.003, -0.002, 0.007, 0.001, -0.004])
asset  = np.array([0.013, -0.004, 0.007, 0.016, -0.011, 0.004, -0.001, 0.011, 0.002, -0.007])

dx = market - market.mean()                      # deviations of x from its mean
beta = (dx * (asset - asset.mean())).sum() / (dx ** 2).sum()
alpha = asset.mean() - beta * market.mean()
print(round(beta, 4), round(alpha, 5))           # 1.3271 0.00061   the asset moves 1.33 times as much as the market

Residuen und R-Quadrat

Ein Residuum ist das, was die Gerade bei einer Beobachtung nicht erklärt: y - (alpha + beta * x). OLS-Residuen summieren sich immer zu null und sind mit x unkorreliert, eine praktische Kontrolle Ihres eigenen Codes. R-Quadrat sagt, welchen Teil der Variation von y die Gerade erklärt: 1 - sum(Residuen²) / sum((y - mean_y)²). Es reicht von 0 (die Gerade ist nicht besser als der Durchschnitt) bis 1 (alle Punkte liegen auf der Geraden) und ist bei einfacher Regression gleich der quadrierten Korrelation von x und y.

residuals = asset - (alpha + beta * market)
print(abs(residuals.sum()) < 1e-12, abs((residuals * market).sum()) < 1e-12)   # True True   the OLS fingerprints

ss_res = (residuals ** 2).sum()
ss_tot = ((asset - asset.mean()) ** 2).sum()
print(round(1 - ss_res / ss_tot, 4))                  # 0.9785
print(round(np.corrcoef(market, asset)[0, 1] ** 2, 4))   # 0.9785   the squared correlation

CAPM: Beta und Alpha

In der Finanzwelt hat die Regression einen Namen. Beta ist die Sensitivität gegenüber dem Markt: Ein Beta von 1,3 heißt, die Aktie bewegt sich tendenziell 30 % stärker als der Markt, nach oben wie nach unten. Alpha ist die durchschnittliche Rendite, die bleibt, wenn man diese Markt-Exposure berücksichtigt hat, und das reklamiert ein Manager als Können. Um den risikofreien Zins herauszuhalten, nutzt die CAPM-Regression Überschussrenditen: die Rendite minus risikofreier Zins, für Wert und Markt. Eine Strategie mit Alpha nahe null ist nur verkleidete Markt-Exposure.

risk_free = 0.0001                                 # risk-free return of one day
x = market - risk_free                             # excess returns of the market
y = asset - risk_free                              # excess returns of the asset

beta = ((x - x.mean()) * (y - y.mean())).sum() / ((x - x.mean()) ** 2).sum()
alpha = y.mean() - beta * x.mean()
print(round(beta, 4), round(alpha, 6))             # 1.3271 0.000644   a daily alpha of 0.064%, on 10 days of data
# Points exactly on y = 1 + 2x: the fit recovers the line
x = np.array([1.0, 2.0, 3.0, 4.0])
y = 1 + 2 * x
dx = x - x.mean()
slope = (dx * (y - y.mean())).sum() / (dx ** 2).sum()
print(y.mean() - slope * x.mean(), slope)      # 1.0 2.0
Eine Gerade ist keine UrsacheEine Regression beschreibt, wie sich zwei Reihen in der Stichprobe gemeinsam bewegten; sie beweist nicht, dass die eine die andere antreibt, und ihre Zahlen sind Schätzungen mit eigener Unsicherheit. Bei 10 Tagen ist das Beta grob und das Alpha geht im Rauschen unter. Beta ändert sich außerdem mit der Zeit und dem Marktregime: Schätzen Sie es auf einem gleitenden Fenster neu, statt einer Zahl für immer zu trauen.
  • OLS minimiert die quadrierten Residuen: beta = cov(x, y) / var(x) (Summen zentrierter Produkte) und alpha = mean_y - beta * mean_x.
  • Die Residuen y - (alpha + beta * x) summieren sich zu null; R-Quadrat 1 - ss_res / ss_tot ist der erklärte Varianzanteil.
  • CAPM: Regressieren Sie die Überschussrenditen des Werts auf die des Marktes; Beta ist die Markt-Exposure, Alpha der Rest.

Als Nächstes: Volatilität, um zu messen und vorherzusagen, wie stark Renditen schwanken.

Lab: Was bewertet wird

  • Mit ols_fit die Gerade durch die Punkte legen25 Pkt.
  • Mit residuals messen, was die Gerade verfehlt25 Pkt.
  • Mit r_squared die Anpassung bewerten25 Pkt.
  • Mit capm_alpha_beta einen Wert in Marktexposure und Können aufteilen25 Pkt.
Explorer · lab-58-1
▾ lab-58-1
…
bash · im Browser
learner@quantcraft:~/lab-58-1$
Python noch nicht geladenPythonLn 1, Col 1Spaces: 4UTF-8

Dieses Thema zurücksetzen?

Alles in lab-58-1 wird auf die Startdateien zurückgesetzt und das Terminal geleert. Ihre aktuelle Lösung geht verloren – das lässt sich nicht rückgängig machen.

Wird zurückgesetzt
  • main.py → Startcode
  • Terminal-Verlauf und Testausgabe
  • Nicht eingereichte Änderungen
Bleibt erhalten
  • Beste Lab-Punktzahl
  • Ihre XP und Ihre Serie
  • Vorlesungsfortschritt und Notizen

Melde dich an, um deinen Code auszuführen.

Alle Lektionen kannst du kostenlos lesen. Erstelle ein Konto oder melde dich an, um Code auszuführen, Tests zu starten und dieses Lab abzugeben.

  • IDE im Browser mit Bash-Terminal — nichts zu installieren
  • Sofortige Bewertung, XP und dein Platz auf der Skill
Konto erstellenAnmelden
ODER
Weiter mit GitHub