pandas.DataFrame.emw是计算指数移动平均的函数。其中,衰减速度有alpha,halflife,com和span四种,本文对以上四种衰减速度的含义进行说明。
3.5 Exponentially Weighted Windows — Pandas Doc
计算基础:等比数列(首项,比例q,项数n)求和:
目录
指数移动平均基本计算公式和 alpha
「EMA系列之I」如何理解EMA指数移动平均值以及Python实现 - 知乎
Exponentially Weighted Moving Average (EWMA) - Formula, Applications
指数移动平均有迭代式和加权平均式两种。据pandas文档,emw函数的adjust设为True时,计算方法为加权平均式,否则为迭代式,默认为加权平均式。我们假设有个时间序列。与之对应,指数移动平均为
迭代式
的含义即为:在平均值中最近的数据占的权重。
越大,则衰减越快,反之亦然。
令 ,把
拆开,可以将迭代式推导到无穷:
类比加权平均公式,权值为 。
经过计算,这些权值加起来等于1:
加权平均式
加权平均式应用于确定的估计窗口上,例如最近的n个值:
令权重序列为:,而权重之和并非1,故还需进行归一。
则指数平均为:
如果估计窗口趋向于无限长,则会收敛到迭代式:
固定n的话,可以称其为N天指数加权平均(N-day Exponential Weighted Moving Average)。关于迭代式的初始化与加权平均式之间的关系以及调整方法,可见
「EMA系列之II」如何初始化EMA指数移动平均值以及Python实现 - 知乎
Halflife 半衰期
考虑迭代式,项数无穷,权重为
随着 的增加,权重越来越小,考虑以
为分界点,分界点前的总权重会越来越大,分界点后的总权重会越来越小。那么,
等于多少的时候,分界点前的总权重占所有权重的一半呢?这个分界点被称为半衰期,可以知道过了半衰期,分界点后的权重量小于1/2,且越来越不重要。
以下推导和半衰期h之间的转换关系,方程左边为分界点前的总权重,右边为1/2
半衰期可以调整权重的衰减速度,半衰期越长,则衰减速度越慢。这一点可以通过半衰期-的转换公式验证:半衰期越长,
越小,则衰减速度越小。
COM 质心
考虑迭代式,项数无穷,权重为
是第一个点的权重,
是第二个点的权重,以此类推。那么指数平均值平均在第几个点上呢?用物理的概念类比,假设一维空间中有无穷个质点,分别分布在自然数点上,在自然数
上的质点的质量为
,即以上问题转化为:求整个系统的质心C。因为质心称为Center of Mass,故衰减参数也被称为com。从时间序列的角度看,下标 i 为该数据点的历史,也称age,故质心也可以理解为平均历史,weighted age。
以下为质心的计算公式:
另外说一句,这个式子的形式有点像债券久期公式。高中学过这个类等比数列怎么求和。首先(1)式乘以公比 :
(1)式减去(2)式,化成普通等比数列:
由定义域,
。直观理解下,质心越小,意味着指数平均值平均在越近的点,则说明质心后面剩下非常多的点,而这些点的权重量却仅仅与质心前非常少的点的权重量相当,衰减速度很快。反过来,指数平均值平均在越远的点,说明质心后剩下较少(尽管是无穷个)的点的权重量与质心前较多的点的权重量相当,衰减速度较慢。简而言之,质心越小,衰减速度越快。通过转换式可以验证:C越小,
越大,则衰减速度越快。
Span
Brown, Robert Goodell. Smoothing, forecasting and prediction of discrete time series. Courier Corporation, 2004.
上书的107-108页介绍了Span-的算法。
span的含义是范围、区间,对应于加权平均式中的n。然而确定了要计算多少个历史值的平均值后,我们却不知道应该是多少。
对于一个长度为n的区间,编号分别为0,1,2,...,n-1。我们先计算普通移动平均的质心是多少:
上文我们知道迭代式的质心为:
两者质心重合时,可以求得和n之间的关系:
因此,我们认为对于N天指数移动平均数而言,合理的为:
带入质心的公式,可看到,上述的公式使得加权平均区间的中间大致是质心的位置:
与COM的关系可以发现,span越大,衰减速度越快。 直观理解,加权平均式是迭代式的截断+断点后尾部权重的重新分配,尾部权重量越小两者越接近。因此计算范围越小,越需要提高衰减速度,不然在最后一个值之后,还剩下很多的权重需要重新分配到前面去,导致计算结果与迭代式的差别变大。