/ / /
第15讲:多元线性回归 (Multiple Linear Regression)
🔴
入学要求
💯
能力测试
🛣️
课程安排
🕹️
研究资源

第15讲:多元线性回归 (Multiple Linear Regression)

💡

查看全集:💎Quantopia量化分析56讲

一、基础概念与公式

1.1 核心公式

多元线性回归模型表达为:

Y=β0+β1X1+β2X2+...+βnXn+ϵY = \beta_0 + \beta_1 X_1 + \beta_2 X_2 + ... + \beta_n X_n + \epsilon

其中:

1.2 关键概念解析

# 平方误差计算示例
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 数据准备与可视化

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 模型拟合

import statsmodels.api as sm

# 添加常数项
X = sm.add_constant(data['SPY'])
model = sm.OLS(data['AAPL'], X).fit()

2.3 结果解读

print(model.summary())

关键输出解析:

三、模型评估与诊断

3.1 假设检验

  1. 线性性:残差 vs 拟合值图应无趋势
  1. 正态性:Q-Q图检验残差正态性
  1. 同方差性:残差分布应均匀
  1. 无多重共线性:VIF值应<10
# 绘制诊断图
import matplotlib.pyplot as plt
fig = plt.figure(figsize=(12,8))
sm.graphics.plot_regress_exog(model, 'SPY', fig=fig)

3.2 指标解析

四、实战案例:多因子模型

4.1 数据准备

# 下载多资产数据
assets = ['AAPL', 'MSFT', 'SPY']
data = yf.download(assets, start=start, end=end)['Close']

4.2 多元回归实现

# 设置自变量和因变量
X = sm.add_constant(data[['MSFT', 'SPY']])
y = data['AAPL']

# 拟合模型
multi_model = sm.OLS(y, X).fit()
print(multi_model.summary())

4.3 结果对比

模型类型β_MSFTβ_SPYR-squared
单变量0.85-0.72
多变量0.320.610.81

通过加入SPY,MSFT的系数显著降低,说明部分相关性被市场因素解释

五、模型选择方法

5.1 逐步回归原理

通过迭代添加/删除变量,优化AIC指标:

  1. 初始模型不含变量
  1. 逐步添加使AIC降低最多的变量
  1. 直到AIC不再改善
from sklearn.feature_selection import SequentialFeatureSelector

selector = SequentialFeatureSelector(
    estimator=LinearRegression(),
    direction='forward',
    scoring='neg_mean_squared_error'
)
selector.fit(X, y)

5.2 实践建议

  1. 优先选择经济学意义明确的变量
  1. 使用交叉验证防止过拟合
  1. 结合统计指标和业务理解

六、练习与思考

  1. 用yfinance下载TSLA和NASDAQ数据,建立单变量回归模型
  1. 添加行业指数(如XLK)作为新变量,比较模型变化
  1. 计算各变量的VIF值,检测多重共线性
  1. 尝试使用sklearn的LinearRegression实现相同模型
# 练习参考代码框架
from sklearn.linear_model import LinearRegression

# 初始化模型
lr = LinearRegression()
# 拟合数据
lr.fit(X_train, y_train)
# 预测
predictions = lr.predict(X_test)
提示:在金融应用中,常使用收益率而非原始价格进行分析。可尝试对数据进行对数差分处理:
returns = data.pct_change().dropna()

通过本教程,您已掌握:

下一步可深入学习:

附:练习合集