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

如何修改statsmodels中params输出的截距与自变量参数名称

statsmodels 修改params输出参数名实现方案

model.params返回的是标准pandas Series对象,没有提供专门的参数名修改入参,直接操作索引或者按原始键取值即可实现自定义命名,无需生成完整的summary结果。

单组系数重命名方法

如果只需要修改单组params的输出名称,直接替换Series的索引即可,顺序和params默认输出顺序完全对应:

model = smf.ols(f'{t} ~ SP50', data=first52).fit()
coef_and_intercept = model.params
# 替换索引名,截距对应Alpha,SP50系数对应Beta
coef_and_intercept.index = ['Alpha', 'Beta']

修改后输出和预期完全一致:

Alpha    125.682063
Beta      -0.288299
dtype: float64

批量生成Alpha/Beta系数表实现

如果要直接生成所有标的的系数统计表,不需要逐组重命名,循环时直接按原始参数键提取值,存入结构化列表后一次性转DataFrame即可,最终表格样式和参考效果一致,完整代码如下:

import pandas as pd
import statsmodels.formula.api as smf

df = pd.read_excel("dataset\\Special_Proj.xlsx") 
df['Date'] = pd.to_datetime(df['Date'], format='%m/%d/%y')
tickers = ['FDX', 'BRK', 'MSFT', 'NVDA', 'INTC', 'AMD', 'JPM', 'T', 'AAPL', 'AMZN', 'GS']

def rolling_regression_stats():
    first52 = df[(df['Date'] <= '2000-12-22')]
    result_records = []
    for ticker in tickers:
        model = smf.ols(f'{ticker} ~ SP50', data=first52).fit()
        result_records.append({
            'Ticker': ticker,
            'Alpha': model.params['Intercept'],
            'Beta': model.params['SP50']
        })
    return pd.DataFrame(result_records)

# 生成最终系数表
alpha_beta_df = rolling_regression_stats()
print(alpha_beta_df)

注:按键名取值的方式鲁棒性更强,不会因为模型参数顺序变动导致Alpha、Beta赋值错误。

内容的提问来源于stack exchange,提问作者Trevor Seibert

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 22:15:47