Allgemeine Finanzanalyse in Python (Teil 3)

Nach all den in dieser und dieser Veröffentlichung vorgestellten Berechnungen können wir uns mit der statistischen Analyse befassen und die Methode der kleinsten Quadrate betrachten. Zu diesem Zweck wird die Statistikmodellbibliothek verwendet, mit der Benutzer Daten untersuchen, statistische Modelle auswerten und statistische Tests durchfĂŒhren können. Dieser Artikel und dieser Artikel wurden als Grundlage genommen . Die Beschreibung der in Englisch verwendeten Funktion finden Sie unter folgendem Link .

ZunÀchst eine kleine Theorie:

Über lineare Regression


Die lineare Regression wird als Vorhersagemodell verwendet, wenn eine lineare Beziehung zwischen der abhĂ€ngigen Variablen (der Variablen, die wir vorhersagen möchten) und der unabhĂ€ngigen Variablen (der Variablen und / oder den Variablen, die fĂŒr die Vorhersage verwendet werden) angenommen wird.

Im einfachsten Fall wird bei der Betrachtung eine Variable verwendet, auf deren Grundlage wir versuchen, eine andere vorherzusagen. Die Formel in diesem Fall lautet wie folgt:

Y = C + M * X.

  • Y = abhĂ€ngige Variable (Ergebnis / Prognose / SchĂ€tzung)
  • C = Konstante (Y-Achsenabschnitt)
  • M = Steigung der Regressionslinie (Steigung oder Gradient der geschĂ€tzten Linie; dies ist der Betrag, um den Y im Durchschnitt zunimmt, wenn wir X um eine Einheit erhöhen).
  • X = unabhĂ€ngige Variable (PrĂ€diktor in Prognose Y verwendet)

TatsĂ€chlich kann es auch eine Beziehung zwischen der abhĂ€ngigen Variablen und mehreren unabhĂ€ngigen Variablen geben. FĂŒr diese Modelltypen (unter der Annahme einer LinearitĂ€t) können wir mehrere lineare Regressionen der folgenden Form verwenden:

Y = C + M1X1 + M2X2 + ...

Beta-VerhÀltnis


Über diesen Koeffizienten wurde bereits viel geschrieben, zum Beispiel auf dieser Seite

. Wenn Sie nicht auf Details eingehen, können Sie ihn wie folgt charakterisieren:

Aktien mit einem Beta-Koeffizienten:

  • Null bedeutet, dass keine Korrelation zwischen Aktie und Index besteht
  • Die Einheit gibt an, dass die Aktie die gleiche VolatilitĂ€t wie der Index aufweist
  • mehr als eins - zeigt eine höhere RentabilitĂ€t (und damit höhere Risiken) der Aktie als der Index an
  • weniger als eine - weniger volatile Aktie als der Index

Mit anderen Worten, wenn die Aktie um 14% wĂ€chst, wĂ€hrend der Markt nur um 10% wĂ€chst, betrĂ€gt der Beta-Koeffizient der Aktie 1,4. In der Regel bieten MĂ€rkte mit einem höheren Beta bessere Bedingungen fĂŒr die Belohnung (und damit fĂŒr das Risiko).

Bild

Trainieren


Der folgende Python-Code enthĂ€lt ein Beispiel fĂŒr eine lineare Regression, bei der die Eingabevariable die Rendite des Moskauer Börsenindex und die geschĂ€tzte Variable die Rendite von Aeroflot-Aktien ist.

Um zu vermeiden, dass Sie sich daran erinnern mĂŒssen, wie Daten heruntergeladen und in die fĂŒr die Berechnung erforderliche Form gebracht werden, wird der Code ab dem Zeitpunkt des Herunterladens der Daten und bis zum Erhalt der Ergebnisse angegeben. Hier ist die vollstĂ€ndige Syntax fĂŒr die lineare Regression in Python mithilfe von Statistikmodellen:

# 
import pandas as pd
import yfinance as yf
import numpy as np
import matplotlib.pyplot as plt
import statsmodels.api as sm

# 
ticker = ['AFLT.ME','IMOEX.ME']
stock = yf.download(ticker)

#    
all_adj_close = stock[['Adj Close']]

#   
all_returns = np.log(all_adj_close / all_adj_close.shift(1))

#      
aflt_returns = all_returns['Adj Close'][['AFLT.ME']].fillna(0)

#      
moex_returns = all_returns['Adj Close'][['IMOEX.ME']].fillna(0)


#   DataFrame

return_data = pd.concat([aflt_returns, moex_returns], axis=1)[1:]
return_data.columns = ['AFLT.ME', 'IMOEX.ME']


#      X  y
X = sm.add_constant(return_data['IMOEX.ME'])
y = return_data['AFLT.ME']


#  
model_moex = sm.OLS(y,X).fit()

#  
print(model_moex.summary())

Bild

Auf der Yahoo-Website und Mosbirzhi Beta-Koeffizient unterscheidet sich leicht nach oben. Aber ich muss ehrlich zugeben, dass die Berechnung fĂŒr einige andere Aktien der russischen Börse grĂ¶ĂŸere Unterschiede ergab, jedoch innerhalb des Intervalls.

Bild

Die gleiche Analyse fĂŒr die FB-Aktie und den SP500-Index. Hier erfolgt die Berechnung wie im Original ĂŒber die monatliche Rendite.

sp_500 = yf.download('^GSPC')
fb = yf.download('FB')

#    
fb = fb.resample('BM').apply(lambda x: x[-1])
sp_500 = sp_500.resample('BM').apply(lambda x: x[-1])

monthly_prices = pd.concat([fb['Close'], sp_500['Close']], axis=1)
monthly_prices.columns = ['FB', '^GSPC']

monthly_returns = monthly_prices.pct_change(1)
clean_monthly_returns = monthly_returns.dropna(axis=0)  

X = clean_monthly_returns['^GSPC']
y = clean_monthly_returns['FB']

X1 = sm.add_constant(X)

model_fb_sp_500 = sm.OLS(y, X1)

results_fb_sp_500 = model_fb_sp_500.fit()
print(results_fb_sp_500.summary())

Bild

Bild

In diesem Fall stimmte alles ĂŒberein und bestĂ€tigte die Möglichkeit, Statistikmodelle zur Bestimmung des Beta-Koeffizienten zu verwenden.

Nun, und als Bonus - wenn Sie nur Beta erhalten möchten - möchten Sie den Koeffizienten und den Rest der Statistik beiseite lassen, wird ein anderer Code zur Berechnung vorgeschlagen:

from scipy import stats
slope, intercept, r_value, p_value, std_err = stats.linregress(X, y)

print(slope)

1.0568997978702754

Dies bedeutet zwar nicht, dass alle anderen erhaltenen Werte ignoriert werden sollten, aber Kenntnisse ĂŒber Statistiken sind erforderlich, um sie zu verstehen. Ich werde einen kleinen Auszug aus den erhaltenen Werten geben:

  • R-Quadrat, das der Bestimmungskoeffizient ist und Werte von 0 bis 1 annimmt. Je nĂ€her der Wert des Koeffizienten an 1 liegt, desto stĂ€rker ist die AbhĂ€ngigkeit;
  • Adj. R-Quadrat - angepasstes R-Quadrat basierend auf der Anzahl der Beobachtungen und der Anzahl der Freiheitsgrade;
  • Standardfehler - Standardfehler der KoeffizientenschĂ€tzung;
  • P> | t | - p-Wert Ein Wert von weniger als 0,05 wird als statistisch signifikant angesehen.
  • 0,025 und 0,975 sind die unteren und oberen Werte des Konfidenzintervalls.
  • usw.

Das ist alles fĂŒr jetzt. NatĂŒrlich ist es von Interesse, nach einer Beziehung zwischen verschiedenen Werten zu suchen, um den anderen durch einen vorherzusagen und einen Gewinn zu erzielen. In einer der auslĂ€ndischen Quellen wurde der Index anhand des Zinssatzes und der Arbeitslosenquote vorhergesagt. Aber wenn die Änderung des Zinssatzes in Russland von der Website der Zentralbank ĂŒbernommen werden kann, suche ich weiterhin nach anderen. Leider konnte die Rosstat-Website die relevanten nicht finden. Dies ist die endgĂŒltige Veröffentlichung in den Artikeln der allgemeinen Finanzanalyse.

All Articles