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

咨询pandas中EWMA计算结果与手动推导不符的原因

Pandas EWM计算结果与手动公式的差异分析

核心差异来源

你手动使用的是递归式未调整EWMA公式,但Pandas的ewm().mean()默认启用了调整式EWMA(adjust=True),两者的计算逻辑完全不同。

1. Pandas默认的调整式EWMA逻辑

当adjust=True(默认值)时,EWMA的计算是对所有历史数据做加权求和后归一化:

y[t] = (x[t] + (1-α)*x[t-1] + (1-α)²*x[t-2] + ... + (1-α)^t*x[0]) / (1 + (1-α) + (1-α)² + ... + (1-α)^t)

其中α = 2/(span+1),这里span=2,所以α=2/3,1-α=1/3。

2. 手动验证Pandas的计算结果

用调整式公式重新计算,完全匹配Pandas输出:

  • t=0:y[0] = x[0] = 17.39
  • t=1:
    (8.7 + (1/3)*17.39) / (1 + 1/3) = (8.7 + 5.7967) / 1.3333 ≈ 10.87
    
  • t=2:
    (2.9 + (1/3)*8.7 + (1/3)²*17.39) / (1 + 1/3 + (1/3)²) ≈ (2.9+2.9+1.932) / 1.4444 ≈5.35
    
  • t=3:
    (1.45 + (1/3)*2.9 + (1/3)²*8.7 + (1/3)³*17.39) / (1 + 1/3 + 1/9 +1/27) ≈4.0274/1.4815≈2.71
    
  • t=4:
    (1.45 + (1/3)*1.45 + (1/3)²*2.9 + (1/3)³*8.7 + (1/3)^4*17.39) / (1+1/3+1/9+1/27+1/81)≈2.7924/1.4938≈1.86
    

3. 你的错误点

你使用的是递归式未调整EWMA的公式:y[t] = (1-α)*y[t-1] + α*x[t],这对应Pandas中adjust=False的设置。如果想要让Pandas输出和你的手动计算一致,只需显式关闭调整:

x.ewm(span=2, adjust=False).mean()

此时结果为:17.39, 11.59, 5.55, 2.75, 1.95,和你的手动计算完全匹配。

总结

  • Pandas默认adjust=True:对所有历史数据的加权和做归一化,保证权重总和为1
  • 你的手动公式对应adjust=False:递归计算,权重随时间指数衰减,不做归一化
  • 两者的核心区别在于是否对历史权重做归一化处理

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 11:18:19