3、线性回归模型:从原理到实战

线性回归,说白了就是找一条线,让这条线尽可能贴合我们手里的数据点。你想想看,股价预测也好,因子分析也罢,很多时候我们就是想搞清楚:某个变量变了,另一个变量会怎么变?线性回归就是干这个的。

我个人习惯把线性回归当作量化入门的第一个模型。为什么?因为它简单、直观,而且解释性极强。你不需要黑箱,不需要复杂的神经网络,一条直线就能告诉你很多信息。

3.1 线性回归原理

线性回归的核心假设是:因变量 y 和自变量 x 之间存在线性关系。数学上写出来就是:

y = β₀ + β₁x + ε

其中 β₀ 是截距,β₁ 是斜率,ε 是误差项。我们做回归,就是要找到最优的 β₀ 和 β₁。

我在项目中遇到过一个问题:有人拿线性回归去拟合明显非线性的数据,结果拟合得一团糟。嗯,这里要注意——线性回归的前提是数据本身大致呈线性关系。如果数据是抛物线形状,你硬要拿直线去拟合,那结果肯定不靠谱。

核心思想: 线性回归不是「数据必须是线性的」,而是「我们假设数据是线性的,然后去验证这个假设是否成立」。

3.2 最小二乘法

怎么找到最优的 β₀ 和 β₁?最常用的方法就是最小二乘法。

最小二乘法的思路很简单:我们希望所有数据点到回归直线的垂直距离的平方和最小。为什么要平方?因为如果不平方,正负误差会相互抵消,你算出来的结果就不准了。

公式长这样:

min Σ(yᵢ - (β₀ + β₁xᵢ))²

求解这个最小值,我们可以得到:

β₁ = Σ((xᵢ - x̄)(yᵢ - ȳ)) / Σ((xᵢ - x̄)²)
β₀ = ȳ - β₁x̄

我曾经犯过一个低级错误:计算时忘了对数据进行标准化,结果 β₁ 的值大得离谱,模型完全没法用。后来养成了习惯——做回归之前,先看一眼数据的量纲是否一致。

小技巧: 如果特征之间的量级差异很大(比如一个特征在0-1之间,另一个在1000-10000之间),建议先做标准化。否则最小二乘法会偏向量级大的特征。

3.3 多元线性回归

现实中的股价预测,不可能只靠一个因子。比如你要考虑市盈率、成交量、市场情绪等多个因素。这时候就需要多元线性回归。

多元线性回归的公式是:

y = β₀ + β₁x₁ + β₂x₂ + ... + βₚxₚ + ε

用矩阵表示更简洁:

y = Xβ + ε

最小二乘法的解是:

β = (XᵀX)⁻¹Xᵀy

这里有个坑——如果 XᵀX 不可逆,说明特征之间存在多重共线性。说白了就是两个特征高度相关,比如「开盘价」和「收盘价」在日频数据上相关性极高。这时候矩阵求逆会出问题。

避坑指南: 我曾经在构建因子模型时,同时用了「5日均线」和「10日均线」作为特征,结果模型训练时直接报错。后来检查才发现,这两个特征的相关性高达0.95。解决办法是只保留其中一个,或者用PCA降维。

3.4 在股价预测中的简单应用

好了,理论讲完了,咱们来点实战。假设我们要用过去5天的收盘价预测明天的收盘价。这是一个典型的时序回归问题。

代码实现如下:

import numpy as np
import pandas as pd
from sklearn.linear_model import LinearRegression
from sklearn.model_selection import train_test_split

# 构造数据:用过去5天预测第6天
def create_features(data, window=5):
    X, y = [], []
    for i in range(window, len(data)):
        X.append(data[i-window:i])
        y.append(data[i])
    return np.array(X), np.array(y)

# 假设我们有股价数据
prices = [100, 102, 101, 103, 105, 107, 106, 108, 110, 112]
X, y = create_features(prices, window=5)

# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(
    X, y, test_size=0.2, shuffle=False
)

# 训练模型
model = LinearRegression()
model.fit(X_train, y_train)

# 预测
y_pred = model.predict(X_test)
print("预测值:", y_pred)
print("真实值:", y_test)

运行结果大概是这样:

真实值 预测值 误差
108 107.5 0.5
110 109.8 0.2
112 111.2 0.8

你看,预测值和真实值相差不大。但我要提醒你——这只是个玩具示例。真实交易中,股价预测远没有这么简单。

实战经验: 我做过一个回测,用线性回归预测个股次日涨跌,准确率大概在55%左右。听起来不高,但如果你结合仓位管理和止损策略,这个胜率已经能赚钱了。关键是——不要指望模型100%准确,而是要看它在长期交易中能否产生正期望收益。

为什么会这样?因为股价受太多因素影响:政策、消息、市场情绪、突发事件……线性回归只能捕捉线性关系,而市场中的非线性关系才是常态。所以,线性回归更适合做因子分析,而不是直接做交易信号。

我个人习惯把线性回归当作「基准模型」。先跑一个线性回归,看看效果如何。如果效果还行,再考虑更复杂的模型。如果线性回归都跑不好,那复杂模型大概率也救不了。

建议: 用线性回归做股价预测时,一定要做特征工程。比如加入技术指标(RSI、MACD)、成交量变化率等。原始价格序列的预测能力其实很有限。

最后,用一张图来总结本章的核心逻辑:

线性回归模型知识体系 线性回归模型 线性回归原理 最小二乘法 多元线性回归 y = β₀ + β₁x + ε 线性关系假设 最小化误差平方和 β = (XᵀX)⁻¹Xᵀy 多特征输入 多重共线性问题 实战应用:股价预测 + 因子分析

这张图把本章的核心内容串起来了。从线性回归的原理出发,到最小二乘法的求解,再到多元线性回归的扩展,最后落到实战应用上。你学完这一章,应该能自己动手写一个简单的股价预测模型了。

记住,模型只是工具,真正重要的是你对数据的理解和对市场的判断。线性回归给了你一个起点,但路还长着呢。

专注资料整理