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

如何从Pandas EWM函数提取/重建权重矩阵以实现滚动WLS回归

提取Pandas EWM权重矩阵或手动生成(基于span参数)

一、手动生成EWM滚动权重矩阵

Pandas的EWM对象确实没有直接暴露权重矩阵,但可以基于span参数的指数衰减规则手动生成。EWM的核心衰减系数为 alpha = 2/(span+1),权重随时间向后(旧数据方向)指数衰减,最新数据权重最高。

实现函数

import pandas as pd
import numpy as np

def generate_ewm_weight_matrix(df, span):
    alpha = 2 / (span + 1)
    n_rows = len(df)
    weight_matrix = np.zeros((n_rows, n_rows))
    
    for current_idx in range(n_rows):
        # 确定当前滚动窗口的起始索引(窗口长度匹配span,不足span时取到数据开头)
        start_idx = max(0, current_idx - span + 1)
        window_size = current_idx - start_idx + 1
        
        # 生成窗口内的衰减权重:从旧到新,衰减因子为(1-alpha)的幂次
        decay_values = np.power(1 - alpha, np.arange(window_size)[::-1])
        # 归一化权重,确保窗口内权重和为1
        normalized_weights = decay_values / decay_values.sum()
        
        # 将权重填充到矩阵对应行
        weight_matrix[current_idx, start_idx:current_idx+1] = normalized_weights
    
    return weight_matrix

二、验证与使用

1. 和Pandas EWM结果对齐验证

可以用EWM均值来验证手动生成的权重是否正确:

# 示例数据
df = pd.DataFrame({'value': np.arange(10)})
span = 5
weights = generate_ewm_weight_matrix(df, span)

# 手动计算EWM均值
manual_ewm_mean = weights.dot(df['value'].values)
# Pandas原生EWM均值
pandas_ewm_mean = df['value'].ewm(span=span).mean().values

# 验证浮点精度内一致
print(np.allclose(manual_ewm_mean, pandas_ewm_mean))  # 输出True

2. 传入WLS工具使用

生成的weight_matrix每行对应一个回归时刻的权重向量。例如使用statsmodels的WLS时,可针对每个滚动窗口提取对应行的权重:

import statsmodels.api as sm

# 假设X是特征矩阵,y是目标变量
X = df[['feature1', 'feature2']].values
y = df['target'].values

for idx in range(len(df)):
    # 获取当前窗口的X、y和权重
    window_start = max(0, idx - span + 1)
    X_window = X[window_start:idx+1]
    y_window = y[window_start:idx+1]
    weights_window = weight_matrix[idx, window_start:idx+1]
    
    # 拟合WLS回归
    model = sm.WLS(y_window, sm.add_constant(X_window), weights=weights_window)
    results = model.fit()
    # 处理回归结果(如提取系数)

三、自定义说明

  • 上述函数默认滚动窗口长度等于span,如果需要固定窗口长度(比如不管数据量多少都用固定N个点),修改start_idx = current_idx - window_length + 1即可(注意处理边界)。
  • 权重的归一化确保了窗口内权重和为1,符合WLS的权重输入要求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 10:27:12