一、基础概念与公式#
1.1 核心公式#
多元线性回归模型表达为:
其中:
-
Y 是因变量
-
是自变量
-
β0 是截距项
-
βi 是自变量的系数
-
ϵ 是误差项
1.2 关键概念解析#
-
系数解释:βi 表示当其他变量不变时,每增加1单位Y 的预期变化
-
平方误差:,衡量模型预测误差
-
OLS原理:通过最小化平方误差求解最优系数
code
# 平方误差计算示例
Y_actual = np.array([1, 3.5, 4, 8, 12])
Y_pred = np.array([1, 3, 5, 7, 9])
print("平方误差之和:", np.sum((Y_pred - Y_actual)**2))二、模型实现步骤#
2.1 数据准备与可视化#
code
import yfinance as yf
# 下载标普500和个股数据
start = '2014-01-01'
end = '2015-01-01'
spy = yf.download('SPY', start=start, end=end)['Close']
aapl = yf.download('AAPL', start=start, end=end)['Close']
# 数据预处理
data = pd.DataFrame({'SPY': spy, 'AAPL': aapl}).dropna()2.2 模型拟合#
code
import statsmodels.api as sm
# 添加常数项
X = sm.add_constant(data['SPY'])
model = sm.OLS(data['AAPL'], X).fit()2.3 结果解读#
code
print(model.summary())关键输出解析:
-
R-squared:模型解释的方差比例
-
Adj. R-squared:考虑变量数的调整R方
-
coef:系数估计值
-
P>|t|:系数显著性(<0.05显著)
三、模型评估与诊断#
3.1 假设检验#
-
线性性:残差 vs 拟合值图应无趋势
-
正态性:Q-Q图检验残差正态性
-
同方差性:残差分布应均匀
-
无多重共线性:VIF值应<10
code
# 绘制诊断图
import matplotlib.pyplot as plt
fig = plt.figure(figsize=(12,8))
sm.graphics.plot_regress_exog(model, 'SPY', fig=fig)3.2 指标解析#
-
AIC/BIC:越小越好,用于模型比较
-
Durbin-Watson:2附近表示无自相关
-
F-statistic:整体模型显著性
四、实战案例:多因子模型#
4.1 数据准备#
code
# 下载多资产数据
assets = ['AAPL', 'MSFT', 'SPY']
data = yf.download(assets, start=start, end=end)['Close']4.2 多元回归实现#
code
# 设置自变量和因变量
X = sm.add_constant(data[['MSFT', 'SPY']])
y = data['AAPL']
# 拟合模型
multi_model = sm.OLS(y, X).fit()
print(multi_model.summary())4.3 结果对比#
| 模型类型 | β_MSFT | β_SPY | R-squared |
|---|---|---|---|
| 单变量 | 0.85 | - | 0.72 |
| 多变量 | 0.32 | 0.61 | 0.81 |
通过加入SPY,MSFT的系数显著降低,说明部分相关性被市场因素解释
五、模型选择方法#
5.1 逐步回归原理#
通过迭代添加/删除变量,优化AIC指标:
-
初始模型不含变量
-
逐步添加使AIC降低最多的变量
-
直到AIC不再改善
code
from sklearn.feature_selection import SequentialFeatureSelector
selector = SequentialFeatureSelector(
estimator=LinearRegression(),
direction='forward',
scoring='neg_mean_squared_error'
)
selector.fit(X, y)5.2 实践建议#
-
优先选择经济学意义明确的变量
-
使用交叉验证防止过拟合
-
结合统计指标和业务理解
六、练习与思考#
-
用yfinance下载TSLA和NASDAQ数据,建立单变量回归模型
-
添加行业指数(如XLK)作为新变量,比较模型变化
-
计算各变量的VIF值,检测多重共线性
-
尝试使用sklearn的LinearRegression实现相同模型
code
# 练习参考代码框架
from sklearn.linear_model import LinearRegression
# 初始化模型
lr = LinearRegression()
# 拟合数据
lr.fit(X_train, y_train)
# 预测
predictions = lr.predict(X_test)提示:在金融应用中,常使用收益率而非原始价格进行分析。可尝试对数据进行对数差分处理:
code
returns = data.pct_change().dropna()通过本教程,您已掌握:
-
多元线性回归的核心原理
-
Python实现与结果解读
-
模型诊断与选择方法
-
金融数据实战应用技巧
下一步可深入学习:
-
非线性回归模型
-
正则化方法(Lasso/Ridge)
-
时间序列回归特性
-
因子投资中的多因子模型