跳到主内容
研究主线模型诊断与稳定性 · 第14–19讲2/6模块导览 →
讲义

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

构建含市场和行业变量的多元回归,解释系数、拟合优度与信息准则,并用共线性诊断筛选变量。

完成状态保存在当前浏览器,可随时取消。

一、基础概念与公式#

1.1 核心公式#

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

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

其中:

  • Y 是因变量

  • XiXi是自变量

  • β0 是截距项

  • βi 是自变量的系数

  • ϵ 是误差项

1.2 关键概念解析#

  • 系数解释:βi 表示当其他变量不变时,XiXi每增加1单位Y 的预期变化

  • 平方误差(Y预测Y实际)2∑(Y预测−Y实际)^2,衡量模型预测误差

  • 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 假设检验#

  1. 线性性:残差 vs 拟合值图应无趋势

  2. 正态性:Q-Q图检验残差正态性

  3. 同方差性:残差分布应均匀

  4. 无多重共线性: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β_SPYR-squared
单变量0.85-0.72
多变量0.320.610.81

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

五、模型选择方法#

5.1 逐步回归原理#

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

  1. 初始模型不含变量

  2. 逐步添加使AIC降低最多的变量

  3. 直到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 实践建议#

  1. 优先选择经济学意义明确的变量

  2. 使用交叉验证防止过拟合

  3. 结合统计指标和业务理解

六、练习与思考#

  1. 用yfinance下载TSLA和NASDAQ数据,建立单变量回归模型

  2. 添加行业指数(如XLK)作为新变量,比较模型变化

  3. 计算各变量的VIF值,检测多重共线性

  4. 尝试使用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)

  • 时间序列回归特性

  • 因子投资中的多因子模型