pandas: ewm的参数设置

pandas 指数加权滑动(ewm), 指数加权滑动平均(ewma)

pandas.DataFrame.ewm()

import pandas as pd
import numpy as np

df = pd.DataFrame([0.0, np.nan, 1.0, 2.0, np.nan, 3.0])
print(df)
    0
0   0.0
1   NaN
2   1.0
3   2.0
4   NaN
5   3.0
print('span=2,ignore_na=False, adjust= True :\n', df.ewm(span=2,ignore_na=False, adjust= True).mean())
print('\n span=2,ignore_na=True, adjust= True :\n', df.ewm(span=2,ignore_na=True, adjust= True).mean())
  • 忽略nan,就是从计算yt时候向前看,nan值不看,加权向历史走去
  • 不忽略nan时候,nan处也付给权重,但是最后算的结果nan位置的权重被占掉了。
  • 我们应该选择ignore_na=True合理一些。
  • nan数据的那个时刻的ewma由其前面历史数据计算得到,只有历史数据包括子自己全是nan,结果才是nan,这其实相当于是将平均的结果用其前面一个值填充!!!!

我们看下计算结果:

span=2,ignore_na=False, adjust= True :
           0
0  0.000000
1  0.000000
2  0.900000
3  1.702703
4  1.702703
5  2.828571

 span=2,ignore_na=True, adjust= True :
           0
0  0.000000
1  0.000000
2  0.750000
3  1.615385
4  1.615385
5  2.550000

滑动平均ewa时如何计算的?

When adjust=True we have y 0 = x 0 and from the last representation above we have y t = α x t + ( 1 α ) y t 1 , therefore there is an assumption that x 0 is not an ordinary value but rather an exponentially weighted moment of the infinite series up to that point.

adjust=True:

y t = x t + ( 1 α ) x t 1 + ( 1 α ) 2 x t 2 + . . . + ( 1 α ) t x 0 1 + ( 1 α ) + ( 1 α ) 2 + . . . + ( 1 α ) t

这是考虑到历史数据的有限性,如果历史数据趋于无限的话,这个表达式的分母会变为 1 1 ( 1 α )

adjust=False:

y 0 = x 0 , y t = ( 1 α ) y t 1 + α x t

等价于
w i = α ( 1 α ) i i f i < t ( 1 α ) i i f i = t

这种情况下,假定历史数据是无限长的。

参考链接:

http://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.ewm.html
http://pandas.pydata.org/pandas-docs/stable/computation.html#exponentially-weighted-windows

猜你喜欢

转载自blog.csdn.net/Papageno_Xue/article/details/82705157