التحليل المالي العام في بيثون (الجزء 3)

بعد كل الحسابات التي قدمت في هذا و هذا المنشور، يمكننا الخوض في التحليل الإحصائي والنظر في طريقة المربعات الصغرى. يتم استخدام مكتبة statsmodels لهذا الغرض ، والتي تسمح للمستخدمين بفحص البيانات وتقييم النماذج الإحصائية وإجراء الاختبارات الإحصائية. هذه المادة وهذه المادة تم اتخاذها كأساس . وصف الوظيفة المستخدمة في اللغة الإنجليزية متاح على الرابط التالي .

أولاً ، نظرية صغيرة:

حول الانحدار الخطي


يستخدم الانحدار الخطي كنموذج تنبئي عند افتراض علاقة خطية بين المتغير التابع (المتغير الذي نحاول التنبؤ به) والمتغير المستقل (المتغير و / أو المتغيرات المستخدمة للتنبؤ).

في أبسط الحالات ، عند التفكير ، يتم استخدام متغير بناءً على ما نحاول التنبؤ به آخر. الصيغة في هذه الحالة هي كما يلي:

Y = C + M * X

  • Y = المتغير التابع (النتيجة / التنبؤ / التقدير)
  • C = ثابت (تقاطع ص)
  • M = منحدر خط الانحدار (منحدر أو ميل الخط المقدر ؛ وهو المبلغ الذي يزداد به Y في المتوسط ​​إذا زدنا X بمقدار وحدة واحدة)
  • X = متغير مستقل (المتنبئ المستخدم في التنبؤ Y)

في الواقع ، قد تكون هناك أيضًا علاقة بين المتغير التابع وعدة متغيرات مستقلة. لهذه الأنواع من النماذج (بافتراض الخطية) ، يمكننا استخدام الانحدار الخطي المتعدد بالصيغة التالية:

Y = C + M1X1 + M2X2 + ...

نسبة بيتا


لقد تم بالفعل كتابة الكثير حول هذا المعامل ، على سبيل المثال ، في هذه الصفحة

لفترة وجيزة ، إذا لم تدخل في التفاصيل ، يمكنك تمييزه على النحو التالي:

الأسهم ذات معامل بيتا:

  • يشير الصفر إلى عدم وجود ارتباط بين الأسهم والمؤشر
  • تشير الوحدة إلى أن السهم لديه نفس تقلبات المؤشر
  • أكثر من واحد - يشير إلى ربحية أعلى (وبالتالي المخاطر) للسهم من المؤشر
  • أقل من واحد - مخزون أقل تقلبًا من المؤشر

بمعنى آخر ، إذا نما السهم بنسبة 14٪ ، بينما نما السوق بنسبة 10٪ فقط ، فإن معامل بيتا للسهم سيكون 1.4. عادةً ، يمكن أن توفر الأسواق ذات الإصدارات التجريبية الأعلى شروطًا أفضل للمكافأة (وبالتالي المخاطرة).

صورة

ممارسة


يتضمن رمز Python التالي مثالًا على الانحدار الخطي ، حيث يكون متغير الإدخال هو العائد على مؤشر بورصة موسكو ، والمتغير المقدر هو العائد على أسهم Aeroflot.

لتجنب الحاجة إلى تذكر كيفية تنزيل البيانات وإحضار البيانات إلى النموذج الضروري للحساب ، يتم إعطاء الرمز من لحظة تنزيل البيانات وحتى الحصول على النتائج. إليك الصيغة الكاملة لإجراء الانحدار الخطي في Python باستخدام statsmodels:

# 
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())

صورة

على موقع ياهو ومعامل بيتا Mosbirzhi يختلف قليلا لأعلى. ولكن يجب أن أعترف بصدق أن حساب بعض الأسهم الأخرى من البورصة الروسية أظهر اختلافات أكثر أهمية ، ولكن خلال الفترة.

صورة

نفس التحليل لمؤشر FB ومؤشر SP500. هنا ، يتم الحساب ، كما هو الحال في الأصل ، من خلال العائد الشهري.

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())

صورة

صورة

في هذه الحالة ، تزامن كل شيء وأكدت إمكانية استخدام statsmodels لتحديد معامل بيتا.

حسنًا ، وكمكافأة - إذا كنت ترغب في الحصول على بيتا فقط - فأنت تريد ترك المعامل وبقية الإحصاءات جانبًا ، ثم يتم اقتراح رمز آخر لحسابه:

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

print(slope)

1.0568997978702754

صحيح ، هذا لا يعني أنه يجب تجاهل جميع القيم الأخرى التي تم الحصول عليها ، ولكن هناك حاجة إلى معرفة الإحصاءات لفهمها. سأقدم مقتطفًا صغيرًا من القيم التي تم الحصول عليها:

  • مربع R ، وهو معامل التحديد ويأخذ القيم من 0 إلى 1. كلما كانت قيمة المعامل أقرب إلى 1 ، كلما كان الاعتماد أقوى ؛
  • صفة R- مربع - مربع R المعدل حسب عدد المشاهدات وعدد درجات الحرية ؛
  • خطأ معياري - الخطأ المعياري لتقدير المعامل ؛
  • P> | t | - p- قيمة أقل من 0.05 تعتبر ذات دلالة إحصائية ؛
  • 0.025 و 0.975 هي القيم الدنيا والعليا لفاصل الثقة.
  • إلخ

هذا كل شئ حتى الان. بالطبع ، من المهم البحث عن علاقة بين القيم المختلفة من أجل التنبؤ بالآخر من خلال واحدة والحصول على الربح. في أحد المصادر الأجنبية ، تم التنبؤ بالمؤشر من خلال سعر الفائدة ومعدل البطالة. ولكن إذا كان يمكن أخذ التغيير في سعر الفائدة في روسيا من الموقع الإلكتروني للبنك المركزي ، فأنا أواصل البحث عن الآخرين. لسوء الحظ ، لم يتمكن موقع Rosstat من العثور على المواقع ذات الصلة. هذا هو المنشور النهائي في مقالات التحليل المالي العام.

All Articles