Strava

ARMR模型简单实践作业(2)log()

1.现状

上一篇看了均值,方差,自协方差,然后直接进行df检验,简单分析return的值得出数据不平稳结论,

不平稳就没办法拟合测试。所以我继续进行数据处理。

 

2.让数据变稳定的方法

(1)

  1. 趋势(trend)-数据随着时间变化。比如说升高或者降低。
  2. 进行差分,使数据增量,放宽平稳要求
  3. 季节性(seasonality)-数据在特定的时间段内变动。比如说节假日,或者活动导致数据的异常。

(2)

由于原数据值域范围比较大,为了缩小值域,同时保留其他信息,常用的方法是对数化,取log。

ts_log = np.log(ts)
检测和去除趋势
通常有三种方法:

聚合 : 将时间轴缩短,以一段时间内星期/月/年的均值作为数据值。使不同时间段内的值差距缩小。
平滑: 以一个滑动窗口内的均值代替原来的值,为了使值之间的差距缩小
多项式过滤:用一个回归模型来拟合现有数据,使得数据更平滑。
我这里使用平滑方法:rolling

(3)rolling方法补充

DataFrame.rolling(window, min_periods=None, freq=None, center=False, win_type=None, on=None, axis=0, closed=None)

window:表示时间窗的大小,注意有两种形式(int or offset)。如果使用int,则数值表示计算统计量的观测值的数量即几个数据为一组(window)。如果是offset类型,表示时间窗的大小。pandas offset相关可以参考https://docs.scipy.org/doc/scipy/reference/signal.html#window-functions

 

 

min_periods:最少需要有值的观测点的数量,对于int类型,默认与window相等。对于offset类型,默认为1。

freq:从0.18版本中已经被舍弃。

center:是否使用window的中间值作为label,默认为false。只能在window是int时使用。

win_type:窗口类型,默认为None一般不特殊指定,了解支持的其他窗口类型,参考这里。

on:对于DataFrame如果不使用index(索引)作为rolling的列,那么用on来指定使用哪列。

closed:定义区间的开闭,曾经支持int类型的window,新版本已经不支持了。对于offset类型默认是左开右闭的即默认为right。可以根据情况指定为left both等。

axis:方向(轴),一般都是0。

 

 

 

 

 

3.取对数

对数据处理的时候我大致经历过这几个步骤:

(1)对数化处理、逐期差分消除趋势性、季节差分消除季节性、检验其平稳性、建立模型进行预测

(2)参考查的一些东西我的浅薄理解就是:

       根据你要处理的数据情况来具体判断将用什么方法。


1.考虑到月度数据存在季节波动的干扰,可采用季节差分消除季节性、X-12 季节调整法等方法处理。
2.考虑到原始数据可能带来异方差,所以采用季节调整后时间序列数据的对数序列进行相关检验和相关模型的估计。
3.如果存在趋势性,这个好像用个趋势项变量时间T有时就可以解决.
4.检验其平稳,时间序列的平稳性通常是时间序列分析的基础,本文选用单位根检验来验证时间序列的平稳性。

        

对于时序数据,1.取对数可克服异方差;2.将宏观变量由非线性变为线性的;3.变量取对数后,再取差分,可计算近似增长率。4.取对数后,可得出弹性系数。

从而使是数据更加平稳。

 

def draw_moving(timeSeries, size):
    f = plt.figure(facecolor='white')
    rol_mean = timeSeries.rolling(window=size).mean()
    rol_weigthed_mean = timeSeries.ewm(span=size).mean()  # 指数平均线
    timeSeries.plot(color='b', label='对数交换之后的数据')
    rol_mean.plot(color="r", label="对数变换后的移步指数平均值")
    rol_weigthed_mean.plot(color='g', label='对数变换后移步指数加权平均值')
    plt.legend(loc='best')
    plt.title("处理后的时序")
    plt.show()

 

似乎平滑了一些。

 

#下面的相减,只是为了对比没有log之前的数据的趋势变化
    # draw_moving(ts_log, 12)
    # rol_mean = ts_log.rolling(window=12).mean()
    # ts_log2=ts_log-rol_mean
    # ts_log2.plot()
    # plt.show()

  

 

 似乎降低了趋势

 

 

4.对去对数的数据再进差分之前应该还要去除季节性波动,接下一篇。

 

以上部分有refer:https://www.cnblogs.com/bradleon/p/6832867.html

 

 

 

 

 

 

posted @ 2020-05-29 21:27  cheflone  阅读(509)  评论(0编辑  收藏  举报