You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Python循环批量对多支股票执行线性回归分析?

批量执行线性回归分析股票均值回归

完全可以通过for循环遍历所有股票代码,批量完成线性回归分析,高效筛选出均值回归程度最高的股票。以下是完整实现方案:

核心思路

对每只股票动态提取当日收益率(X)和前一日收益率(Y),拟合简单线性回归模型后,收集关键参数(斜率、R²等)。其中负斜率的绝对值越大,说明股票收益率的均值回归倾向越显著。

修正后的完整代码

import yfinance as yf
import numpy as np
import pandas as pd
from datetime import date, timedelta
from sklearn.linear_model import LinearRegression

# 日期范围设置(修正原代码中未定义的end变量)
enddt = date.today()
startdt = enddt - timedelta(days=90)

# 股票列表(实际使用时替换为标普500完整代码列表)
symbols = ['MMM', 'AOS', 'ABT']

# 获取行情数据并计算日收益率
data = yf.download(" ".join(symbols), start=startdt, end=enddt)
daily_returns = data['Adj Close'].pct_change()
df2 = pd.DataFrame(daily_returns)

# 生成每只股票的滞后收益率列
for symbol in symbols:
    df2[f'{symbol}_lag'] = df2[symbol].shift(1)

# 移除包含NaN的前两行数据
df3 = df2.drop(df2.index[[0, 1]])

# 初始化列表存储所有股票的回归结果
regression_results = []

# 批量执行线性回归
for symbol in symbols:
    # 动态提取当前股票的X和Y变量
    x = np.array(df3[symbol]).reshape((-1, 1))
    y = np.array(df3[f'{symbol}_lag'])
    
    # 拟合线性回归模型
    model = LinearRegression().fit(x, y)
    
    # 计算R²值(修正原代码中错误的model.score_属性)
    r_squared = model.score(x, y)
    
    # 收集当前股票的回归参数
    regression_results.append({
        '股票代码': symbol,
        '截距': model.intercept_,
        '斜率': model.coef_[0],
        'R²': r_squared
    })

# 将结果转换为DataFrame,方便排序和查看
results_df = pd.DataFrame(regression_results)

# 按斜率升序排序——负斜率绝对值越大,均值回归程度越高
results_df_sorted = results_df.sort_values(by='斜率', ascending=True)

# 输出排序后的结果
print("批量回归结果(按均值回归程度从高到低排序):")
display(results_df_sorted)

关键说明

  1. 动态变量提取:通过df3[symbol]和df3[f'{symbol}_lag']实现循环中自动切换不同股票的X、Y变量,无需手动编写单支股票的回归代码。
  2. 结果整理:用字典列表收集每只股票的参数,最终转为DataFrame后可直接排序筛选,快速定位均值回归最强的股票。
  3. 均值回归判断逻辑:当回归斜率为负时,说明当日收益率会反向修正前一日的偏离(即向均值回归),斜率绝对值越大,回归力度越强。

内容的提问来源于stack exchange,提问作者Ean Bigelow

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 06:50:53