Hồi quy tuyến tính beta Python

Tài chính tràn ngập các chữ cái Hy Lạp nghe có vẻ lạ mắt như alpha, beta, delta, rho, v.v. Cá nhân tôi thích nhất là Theta [khái niệm “Theta Bleed” trong vũ trụ của các công cụ phái sinh rất hấp dẫn và tôi khuyến khích tất cả các bạn đọc thêm về nó tại đây]. Nhưng đừng sợ các bạn của tôi…mặc dù có vẻ ngoài phức tạp nhưng những biểu tượng này đều có thể giải thích dễ dàng

Blog này đi sâu hơn vào phiên bản beta công bằng bằng cách sử dụng các gói phân tích và trực quan hóa tuyệt vời có sẵn trong Python;

Vốn chủ sở hữu Beta là gì?

Nói một cách đơn giản, hệ số beta của cổ phiếu có thể được coi là thước đo mức độ biến động của hoạt động của cổ phiếu so với thị trường. Nói cách khác, beta là mức chúng ta có thể mong đợi một cổ phiếu tăng [hoặc giảm, nếu âm] cho mỗi mức tăng 1% trong chỉ số vốn chủ sở hữu cơ bản [để đơn giản, tôi sẽ sử dụng S&P 500 [“thị trường” . Nói cách khác, beta là hệ số góc của đường phù hợp nhất nếu chúng ta hồi quy cổ phiếu nói trên trên thị trường

Hãy xem một ví dụ

Hồi quy cổ phiếu có hệ số beta cao trong lịch sử và cổ phiếu có hệ số beta thấp trong lịch sử trên thị trường

Chúng tôi sẽ sử dụng dữ liệu hiệu suất hàng tháng có giá trị trong hai mươi năm để hồi quy NVIDIA, cổ phiếu có hệ số beta cao trong lịch sử và Verizon, cổ phiếu có hệ số beta thấp trong lịch sử, đối với S&P 500

Đầu tiên, hãy nhập các gói của chúng tôi

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline
from sklearn.linear_model import LinearRegression

Kiểm tra tuyến tính

df_spy['pct_return'].plot.kde[color='red', label='S&P 500 Index'];
df_nvda['pct_return'].plot.kde[color='green', label='NVIDIA Corp'];
df_vz['pct_return'].plot.kde[color='blue', label='Verizon Inc'];
plt.title['Check for Linearity'];
plt.legend[loc='upper right', fontsize='large'];
plt.grid[True, which='both'];
plt.axvline[x=0, color='black', linestyle=':'];

Phân bố mật độ với trung bình xoay quanh 0

Có vẻ như chúng ta có ba phân phối mật độ phân phối bình thường với μ = 0 và phương sai = σ² [hay còn gọi là một số hằng số mà chúng ta không quan tâm đến vì mục đích của blog này. ]

Bây giờ, hãy sử dụng .LinearRegression[].fit[] của Scikit-learn để tính toán các đường phù hợp nhất. Điều quan trọng cần lưu ý là bạn phải định hình lại dữ liệu của mình bằng cách sử dụng .reshape[-1,1] để các mảng được định dạng đúng cho lệnh gọi .fit[]. Xem ví dụ về khối mã bên dưới — Tôi đã định hình lại dữ liệu thành một mảng [240 x 1] để phù hợp hơn với LinearRegression[].fit[]

#Build data frames and drop unnecessary columns
df_spy = pd.DataFrame[pd.read_csv['spy.csv']].drop[['High', 'Low', 'Adj Close', 'Volume'], axis=1]
df_nvda = pd.DataFrame[pd.read_csv['nvda.csv']].drop[['High', 'Low', 'Adj Close', 'Volume'], axis=1]
df_vz = pd.DataFrame[pd.read_csv['vz.csv']].drop[['High', 'Low', 'Adj Close', 'Volume'], axis=1]
#Get performance data as arrays
spy = np.array[df_spy['pct_return']]
nvda = np.array[df_nvda['pct_return']]
vz = np.array[df_vz['pct_return']]
#Define regression lines
reg_spy = LinearRegression[].fit[spy.reshape[-1,1], spy.reshape[-1,1]]
reg_nvda = LinearRegression[].fit[spy.reshape[-1,1], nvda.reshape[-1,1]]
reg_vz = LinearRegression[].fit[spy.reshape[-1,1], vz.reshape[-1,1]]

Tóm lại, nếu chúng ta đang phân tích danh mục đầu tư thay vì chứng khoán riêng lẻ, thì hệ số chặn, hoặc alpha, sẽ rất có ý nghĩa. Alpha là thước đo hiệu suất vượt trội được điều chỉnh theo rủi ro so với thị trường [i. e. , danh mục đầu tư hoạt động như thế nào khi S&P 500 là 0%]. Nhiều người sử dụng alpha như một thước đo kỹ năng của người quản lý, nhưng tôi lạc đề…

Chúng ta có thể sử dụng

df_spy['pct_return'].plot.kde[color='red', label='S&P 500 Index'];
df_nvda['pct_return'].plot.kde[color='green', label='NVIDIA Corp'];
df_vz['pct_return'].plot.kde[color='blue', label='Verizon Inc'];
plt.title['Check for Linearity'];
plt.legend[loc='upper right', fontsize='large'];
plt.grid[True, which='both'];
plt.axvline[x=0, color='black', linestyle=':'];
0 và
df_spy['pct_return'].plot.kde[color='red', label='S&P 500 Index'];
df_nvda['pct_return'].plot.kde[color='green', label='NVIDIA Corp'];
df_vz['pct_return'].plot.kde[color='blue', label='Verizon Inc'];
plt.title['Check for Linearity'];
plt.legend[loc='upper right', fontsize='large'];
plt.grid[True, which='both'];
plt.axvline[x=0, color='black', linestyle=':'];
1 để kéo hệ số góc và hệ số chặn [i. e. , beta và alpha]

#Calculate intercept coefficient [aka Alpha]
A_spy = round[float[reg_spy.intercept_], 3]
A_nvda = round[float[reg_nvda.intercept_], 3]
A_vz = round[float[reg_vz.intercept_], 3]
#Calculate slope coefficient [aka Beta]
B_spy = round[float[reg_spy.coef_], 1]
B_nvda = round[float[reg_nvda.coef_], 1]
B_vz = round[float[reg_vz.coef_], 1]

Hoan hô, chúng tôi đã tính được hệ số beta là 2. 2 và cho NVIDIA và hệ số beta là 0. 6 cho Verizon

Cuối cùng, hãy vẽ biểu đồ phân tán của chúng ta. Chúng tôi sẽ đặt biến độc lập của mình là mảng hiệu suất S&P 500 và biến phụ thuộc là mảng hiệu suất NVIDIA và VZ

#Plot data and regression lines
fig = plt.figure[figsize=[18,6]];
fig.suptitle['Monthly Performance: 10/31/1999 - 10/31/2019', fontsize=22];
#nvda
ax1 = fig.add_subplot[121];
ax1.scatter[spy, nvda, color='blue', alpha=0.3];ax1.plot[spy.reshape[-1,1], reg_spy.predict[spy.reshape[-1,1]], color='red', linewidth=2, label=f"S&P 500 Index"];
ax1.plot[spy.reshape[-1,1], reg_nvda.predict[spy.reshape[-1,1]], color='blue', linewidth=2, label=f"NVIDIA Corp"];
ax1.set_title[f"High Beta: {B_nvda}", {'fontsize': 16}];
ax1.set_ylabel['Percent Return of Individual Securities', {'fontsize': 16}];
ax1.set_xlabel['Percent Return of the S&P 500 Index', {'fontsize': 16}, labelpad=10];
ax1.set_xlim[-0.1, 0.1];
ax1.set_ylim[-0.5, 0.5];
ax1.set_yticks[[-0.5, -0.25, 0, 0.25, 0.5]];
ax1.grid[True, which='both'];
ax1.axhline[y=0, color='black', linestyle=':'];
ax1.axvline[x=0, color='black', linestyle=':'];
ax1.legend[loc='upper right', fontsize='large'];
#vz
ax2 = fig.add_subplot[122];
ax2.scatter[spy, vz, color='green', alpha=0.3];ax2.plot[spy.reshape[-1,1], reg_spy.predict[spy.reshape[-1,1]], color='red', linewidth=2, label=f"S&P 500 Index"];
ax2.plot[spy.reshape[-1,1], reg_vz.predict[spy.reshape[-1,1]], color='green', linewidth=2, label=f"Verizon Inc"];
ax2.set_title[f"Low Beta: {B_vz}", {'fontsize': 16}];
ax2.set_xlim[-0.1, 0.1];
ax2.set_ylim[-0.5, 0.5];
ax2.set_yticks[[-0.5, -0.25, 0, 0.25, 0.5]];
ax2.grid[True, which='both'];
ax2.axhline[y=0, color='black', linestyle=':'];
ax2.axvline[x=0, color='black', linestyle=':'];
ax2.legend[loc='upper right', fontsize='large'];

Bây giờ, hãy tập trung vào sự chú ý của chúng ta đối với chính các mô hình hồi quy và xác định mức độ phù hợp của chúng. Như chúng ta đã biết, mục tiêu của đường hồi quy là giảm tổng sai số bình phương trung bình [MSE]. Công thức cho MSE có thể được tìm thấy ở đây. Các mô hình của chúng tôi đã tạo ra MSE bằng 0. 025 cho NVIDIA và 0. 031 cho Verizon. Khá, xinh, khá tốt [chèn gif của Larry David]

Tuy nhiên, mô hình của chúng tôi giải thích không tốt sự thay đổi trong hoạt động của chứng khoán cơ sở [biến phụ thuộc] theo dự đoán của thị trường chứng khoán [biến độc lập]. Hay nói cách khác, các mẫu NVIDIA và Verizon của chúng tôi có giá trị R² nhỏ [xem tại đây] lần lượt là 23% và 5% [i. e. , 23% sự thay đổi trong hiệu suất của NVDA có thể được giải thích bằng hiệu suất của thị trường]. Vì vậy, mô hình của chúng tôi là rác, phải không?

Không quá nhanh...hãy nghĩ về điều này trong giây lát. Thông thường hồi quy được chạy để đưa ra dự đoán. Tuy nhiên, trong mô hình của chúng tôi, sẽ không hợp lý nếu cố gắng dự đoán hiệu suất của cổ phiếu cơ bản bằng cách sử dụng hiệu suất của thị trường như một biến độc lập vì hiệu suất của thị trường được xác định bởi hiệu suất của cổ phiếu cơ sở [chứ không phải ngược lại - những người theo chủ nghĩa cơ bản vui mừng và . Vậy tại sao chạy hồi quy này?

Chúng tôi thực hiện các loại hồi quy này bởi vì, bất chấp những thiếu sót đã nói ở trên, beta, với tư cách là thước đo mức độ biến động của cổ phiếu so với thị trường, là một điểm dữ liệu quan trọng trong chính nó [xem Mô hình định giá tài sản vốn]

Vậy chúng ta có quan tâm đến R² ở đây không? . Không. ]

Lời cuối [mặc dù vội vàng]

Beta là độ dốc của đường hồi quy khi chứng khoán cơ sở được hồi quy trên thị trường. Nó có thể được coi là thước đo mức độ biến động của cổ phiếu so với thị trường [hệ số beta lớn hơn 1. 0 ngụ ý cổ phiếu dễ bay hơi và rủi ro hơn]. Beta có thể đặc biệt hiệu quả, khi được kết hợp với phần bù rủi ro thị trường vốn cổ phần, trong việc thực hiện quản lý rủi ro và tính toán lợi nhuận kỳ vọng. Tuy nhiên, giống như tất cả các chỉ báo/số liệu, đó không phải là kết thúc tất cả. Tương tự như kết luận trong blog trước đây của tôi về đường trung bình động, công việc của chúng tôi với tư cách là nhà khoa học dữ liệu là hiểu tất cả các công cụ trong bộ công cụ của chúng tôi trước khi đưa ra bất kỳ đề xuất nào [và phiên bản beta là một trong những công cụ đó]

Chủ Đề