查看全集:💎Quantopia量化分析56讲
线性回归是用于量化两个变量间线性关系的统计方法。给定自变量X和因变量Y,我们试图找到最佳拟合直线Y = α + βX,其中:
关键公式:
其中ε为误差项,服从均值为0的正态分布
特征 | 线性回归 | 相关性分析 |
输出结果 | 具体线性模型 | 相关系数(-1到1) |
关系类型 | 仅捕捉线性关系 | 捕捉任意单调关系 |
变量关系 | 可处理多变量 | 仅限两变量关系 |
应用场景 | 预测和解释变量关系 | 衡量变量关联强度 |
import numpy as np
import yfinance as yf
import statsmodels.api as sm
import matplotlib.pyplot as plt
import seaborn as sns
# 获取特斯拉和标普500数据
start = '2014-01-01'
end = '2015-01-01'
data = yf.download(['TSLA', 'SPY'], start=start, end=end)['Close']
# 计算日收益率
returns = data.pct_change().dropna()
r_tsla = returns['TSLA']
r_spy = returns['SPY']
这段代码实现了一个简单的线性回归分析,用于研究特斯拉股票(TSLA)与标普500指数(SPY)收益率之间的关系:
linear_regression
函数接受自变量X(SPY收益率)和因变量Y(TSLA收益率)def linear_regression(X, Y):
# 添加常数项
X_const = sm.add_constant(X)
# 建立模型
model = sm.OLS(Y, X_const).fit()
# 绘制结果
plt.figure(figsize=(10,6))
sns.regplot(x=X, y=Y, line_kws={'color':'red'})
plt.xlabel('SPY Returns')
plt.ylabel('TSLA Returns')
plt.title('TSLA vs SPY Returns Regression')
return model.summary()
# 执行回归分析
results = linear_regression(r_spy, r_tsla)
print(results)
结果解读要点:
这种分析在金融中非常重要,可用于:
Beta值1.927表明特斯拉是一只波动性较大的成长型股票,对市场变动非常敏感。
这段代码实现了滚动窗口Beta系数估计,用于分析特斯拉(TSLA)对市场(SPY)敏感度的时间变化:
window_size = 60
betas = []
for i in range(window_size, len(returns)):
X = r_spy[i-window_size:i]
Y = r_tsla[i-window_size:i]
model = sm.OLS(Y, sm.add_constant(X)).fit()
betas.append(model.params[1])
plt.plot(betas)
plt.title('Rolling Beta Estimation')
plt.xlabel('Trading Day')
plt.ylabel('Beta Value')
这种滚动窗口分析能够揭示一个重要现象:Beta系数并非恒定不变,而是随时间波动的。这种分析对投资者和风险管理非常有价值,因为:
图表上的波动可能反映了特斯拉在不同时期的不同发展阶段、重大公司事件或市场环境变化对公司系统性风险敏感度的影响。
这是一种比单一Beta估计更深入的分析方法,展示了金融数据中的动态特性。
目标函数:最小化残差平方和
其中:
通过对α和β求偏导数并令其等于零,得到正规方程(normal equations),解这些方程得到的封闭解公式:
其中:
标准误差公式展示了回归参数估计的不确定性度量:
其中:
这个公式有几个关键点:
置信区间构建:
其中:
在CAPM模型中,这些公式的金融解释为:
回归分析在金融中的应用广泛,从简单的市场Beta计算到多因子模型的构建,这些数学基础都是必不可少的。您的推导非常规范,体现了对线性回归本质的深刻理解。
# 生成随机数据
np.random.seed(42)
X_random = np.random.randn(100)
Y_random = np.random.randn(100)
# 运行回归
random_results = linear_regression(X_random, Y_random)
print(random_results)
关键观察:即使数据完全随机,仍可能得到看似显著的回归结果(p<0.05的概率约5%),强调统计检验的重要性
小练习
# 练习2参考答案
X = np.random.normal(0, 1, 100)
Y = 2*X + np.random.normal(0, 0.5, 100)
exercise_model = sm.OLS(Y, sm.add_constant(X)).fit()
print(exercise_model.summary())
给定观测数据及线性模型,残差平方和可表示为:
对α求偏导:
整理得:
对β求偏导:
可得:
观察到重要关系:
以及:
β的表达式:
α的表达式:
这说明:最优拟合直线一定经过点,且斜率β等于协方差与方差之比。在金融领域中,这个β系数用于衡量个股相对于市场的系统性风险。