ts_log_moving_avg_diff.dropna(inplace=True)

test_stationarity(ts_log_moving_avg_diff)

这看起来像一个更好的系列。滚动值似乎略有不同,但没有具体趋势。此外,测试统计量小于5%的临界值,因此我们可以95%的置信度说这是一个固定的序列。

然而,这种特定方法的缺点是必须严格定义时间段。在这种情况下,我们可以采取年平均值,但在复杂的情况下,如预测股票价格,很难得出一个数字。因此,我们采用“加权移动平均线”,其中更近期的值被赋予更高的权重。可以有许多分配权重的技术。一种流行的是指数加权移动平均值,其中权重被分配给具有衰减因子的所有先前值。在此查找详情。这可以在Pandas中实现:

#expwighted_avg = pd.ewma(ts_log, halflife=12)

expwighted_avg = ts_log.ewm(halflife=12, min_periods=0,adjust=True,ignore_na=False).mean()

plt.plot(ts_log)

plt.plot(expwighted_avg, color='red')

注意,这里参数'halflife'用于定义指数衰减量。

ts_log_ewma_diff = ts_log -expwighted_avg

test_stationarity(ts_log_ewma_diff)

该TS的平均值和标准偏差的幅度变化甚至更小。此外,检验统计量小于1%临界值,这比前一种情况更好。

消除趋势和季节性

之前讨论的简单趋势减少技术在所有情况下都不起作用,尤其是具有高季节性的技术。让我们讨论两种消除趋势和季节性的方法:

差异 - 将差异与特定时滞相区分

分解 - 对趋势和季节性进行建模并将其从模型中移除。

差分

在这种技术中,我们将特定时刻的观察值与前一时刻的观察值进行区分。这主要用于改善平稳性。一阶差分可以在Pandas中完成:

ts_log_diff = ts_log -ts_log.shift()

plt.plot(ts_log_diff)

ts_log_diff.dropna(inplace=True)

test_stationarity(ts_log_diff)

我们可以看到均值和标准变量随时间变化很小。此外,Dickey-Fuller检验统计量小于10%临界值,因此TS静止且置信度为90%。

分解

在这种方法中,趋势和季节性都是单独建模的,并返回系列的其余部分。我将跳过统计数据并得出结果:

from statsmodels.tsa.seasonal importseasonal_decompose

decomposition=seasonal_decompose(ts_log)

trend=decomposition.trend

seasonal=decomposition.seasonal

residual=decomposition.resid

plt.subplot(411)

plt.plot(ts_log, label='Original')

plt.legend(loc='best')

plt.subplot(412)

plt.plot(trend, label='Trend')

plt.legend(loc='best')

plt.subplot(413)

plt.plot(seasonal,label='Seasonality')

plt.legend(loc='best')

plt.subplot(414)

plt.plot(residual, label='Residuals')

plt.legend(loc='best')

plt.tight_layout()

在这里我们可以看到趋势,季节性与数据分离,我们可以对残差进行建模。让我们检查残差的平稳性。

ts_log_decompose =residual

ts_log_decompose.dropna(inplace=True)

test_stationarity(ts_log_decompose)

Dickey-Fuller检验统计量显着低于1%临界值。所以这个TS非常接近静止。您也可以尝试高级分解技术,这可以产生更好的结果。此外,您应该注意,在这种情况下,将残差转换为未来数据的原始值并不是非常直观。

5.预测时间序列

我们看到了不同的技术,所有这些技术都使得TS固定不动。让我们在差分后在TS上制作模型,因为它是一种非常流行的技术。此外,在这种情况下,相对容易将噪声和季节性添加回预测残差。执行趋势和季节性估计技术后,可能存在两种情况:

严格固定的系列,不依赖于数值。这是一个简单的情况,我们可以将残差建模为白噪声。但这种情况非常罕见。

一系列重要的价值观依赖。在这种情况下,我们需要使用一些统计模型,如ARIMA来预测数据。

让我简单介绍一下ARIMA。我不会详细介绍技术细节,但如果您希望更有效地应用它们,您应该详细了解这些概念。ARIMA代表自动回归综合移动平均线。 ARIMA对静止时间序列的预测只不过是一个线性(如线性回归)方程。预测变量取决于ARIMA模型的参数(p,d,q):

AR(自回归)项的数量(p):AR项只是因变量的滞后。例如,如果p是5,则x(t)的预测值将是x(t-1)... .x(t-5)。

MA(移动平均线)项的数量(q):MA项是预测方程中的滞后预测误差。例如,如果q为5,则x(t)的预测值将为e(t-1)... .e(t-5),其中e(i)是第i个瞬时的移动平均值与实际值之间的差值。

差异数量(d):这些是非季节性差异的数量,即在这种情况下我们采用了第一阶差异。因此,我们可以传递该变量并将d = 0或传递原始变量并放入d = 1。两者都会产生相同的结果。

这里一个重要的问题是如何确定'p'和'q'的值。我们使用两个图来确定这些数字。让我们先讨论一下。

自相关函数(ACF):它是TS与其自身滞后版本之间相关性的度量。例如,在滞后5处,ACF将在时刻't1'...'t2'的系列与在时刻't1-5'...'t2-5'(t1-5和t2是终点)的系列进行比较。

部分自相关函数(PACF):它测量TS与其自身的滞后版本之间的相关性,但是在消除了已经通过干预比较解释的变化之后。例如,在滞后5处,它将检查相关性,但是除去已经由滞后1到4解释的效果。

差分后的TS的ACF和PACF图可以绘制为:

#ACF and PACF plots:

from statsmodels.tsa.stattools import acf, pacf

lag_acf = acf(ts_log_diff, nlags=20)

lag_pacf= pacf(ts_log_diff, nlags=20, method='ols')

#Plot ACF:

plt.subplot(121)

plt.plot(lag_acf)

plt.axhline(y=0,linestyle='--',color='gray')

plt.axhline(y=-1.96/np.sqrt(len(ts_log_diff)),linestyle='--',color='gray')

plt.axhline(y=1.96/np.sqrt(len(ts_log_diff)),linestyle='--',color='gray')

plt.title('Autocorrelation Function')

#Plot PACF:

plt.subplot(122)

plt.plot(lag_pacf)

plt.axhline(y=0,linestyle='--',color='gray')

plt.axhline(y=-1.96/np.sqrt(len(ts_log_diff)),linestyle='--',color='gray')

plt.axhline(y=1.96/np.sqrt(len(ts_log_diff)),linestyle='--',color='gray')

plt.title('Partial Autocorrelation Function')

plt.tight_layout()

在这个图中,0两边的两条虚线是置信区间。这些可用于确定'p'和'q'值为:

p - PACF图表首次超过置信区间的滞后值。如果你仔细注意,在这种情况下p = 2。

q - ACF图表第一次超过置信区间的滞后值。如果你仔细注意,在这种情况下q = 2。

现在,让我们考虑个人和组合效果制作3种不同的ARIMA模型。我还将为每个打印RSS。请注意,这里的RSS是残差值,而不是实际序列。

ARModel

from statsmodels.tsa.arima_model importARIMA

model= ARIMA(ts_log, order=(2, 1, 0))

results_AR= model.fit(disp=-1)

plt.plot(ts_log_diff)

plt.plot(results_AR.fittedvalues, color='red')

plt.title('RSS: %.4f'% sum((results_AR.fittedvalues-ts_log_diff)**2))

MRModel

model = ARIMA(ts_log, order=(0, 1, 2))

results_MA= model.fit(disp=-1)

plt.plot(ts_log_diff)

plt.plot(results_MA.fittedvalues, color='red')

plt.title('RSS: %.4f'% sum((results_MA.fittedvalues-ts_log_diff)**2))

Combined Model

model = ARIMA(ts_log, order=(2, 1, 2))

results_ARIMA= model.fit(disp=-1)

plt.plot(ts_log_diff)

plt.plot(results_ARIMA.fittedvalues, color='red')

plt.title('RSS: %.4f'% sum((results_ARIMA.fittedvalues-ts_log_diff)**2))

在这里我们可以看到AR和MA模型具有几乎相同的RSS,但组合明显更好。现在,我们留下最后一步,即将这些值恢复到原始比例。

把它恢复到原始规模

由于组合模型给出了最佳结果,因此我们可以将其缩放回原始值并查看其在那里的表现。第一步是将预测结果存储为单独的系列并观察它。

predictions_ARIMA_diff = pd.Series(results_ARIMA.fittedvalues, copy=True)print predictions_ARIMA_diff.head()

请注意,这些是从'1949-02-01'而不是第一个月开始的。为什么?这是因为我们将滞后加1,并且第一个元素在它减去之前没有任何东西。将差分转换为对数比例的方法是将这些差异连续添加到基数.一种简单的方法是首先确定索引处的累积和,然后将其添加到基数。累计金额可以是:

predictions_ARIMA_diff_cumsum =predictions_ARIMA_diff.cumsum()print predictions_ARIMA_diff_cumsum.head()

predictions_ARIMA_log = pd.Series(ts_log.ix[0], index=ts_log.index)

predictions_ARIMA_log= predictions_ARIMA_log.add(predictions_ARIMA_diff_cumsum,fill_value=0)

predictions_ARIMA_log.head()

这里第一个元素是基数本身,并且从那里累加的值。最后一步是取指数并与原始系列进行比较.

predictions_ARIMA =np.exp(predictions_ARIMA_log)

plt.plot(ts)

plt.plot(predictions_ARIMA)

plt.title('RMSE: %.4f'% np.sqrt(sum((predictions_ARIMA-ts)**2)/len(ts)))

什么原数据更容易平稳_【时间序列】-航空数据预测相关推荐

  1. 什么原数据更容易平稳_为什么老年人更容易患上艾滋病?

    说起艾滋病,大家眼中浮现的都是年轻群体的高发病,其实不然,经过近几年的新闻报告得 知,老年群体的艾滋病患病率直线上升,到2017年,老年人就已经列入了艾滋病疾病防控 的重点名单,截至目前,老年人的发病 ...

  2. 时间序列预测 时间因果建模_时间序列建模以预测投资基金的回报

    时间序列预测 时间因果建模 Time series analysis, discussed ARIMA, auto ARIMA, auto correlation (ACF), partial aut ...

  3. pci数据捕获和信号处理_通过更改数据捕获处理上游数据更改

    pci数据捕获和信号处理 Anyone who has managed a data pipeline would be aware of how the upstream data can chan ...

  4. 数据治理 主数据 元数据_我们对数据治理的误解

    数据治理 主数据 元数据 Data governance is top of mind for many of my customers, particularly in light of GDPR, ...

  5. 昆仑通态触摸屏数据转发上传_嵌_ModbusTcpIp数据转发 昆仑通态屏与屏之间通讯 - 下载 - 搜珍网...

    嵌_ModbusTcpIp数据转发/通_通/发送方.MCG 嵌_ModbusTcpIp数据转发/通_通/接收方.MCG 嵌_ModbusTcpIp数据转发/通_通/驱动路径说明.txt 嵌_Modbu ...

  6. 用spss进行数据的标准化处理_什么是数据标准化、中心化、归一化?SPSS又如何实现?...

    在统计分析.数据挖掘过程中,经常性的接触到数据的标准化处理.数据中心化处理,还有数据归一化处理,那么它们各自是什么意思?如何通过SPSS软件实现呢? 大型数据分析项目中,数据来源不同,量纲及量纲单位不 ...

  7. 大数据 智能交通调度_基于大数据技术的智能交通管理模式探析

    龙源期刊网 http://www.qikan.com.cn 基于大数据技术的智能交通管理模式探析 作者:熊姗姗 张昆 来源:<科学与信息化> 2020 年第 20 期 摘 要 随着社会的不 ...

  8. android数据包放在,安卓游戏数据包是什么_安卓游戏数据包放在哪里

    现在随着各大游戏厂商的游戏效果越来越华丽,各种游戏也越来越大了.越来越多的游戏也需要用到游戏数据包了,今天小编就和机友们说说关于安卓游戏数据包是什么. 安卓游戏可以分为含数据包的和不含数据包的两个大类 ...

  9. python 大数据开发框架有哪些_入门大数据开发行业!必备的十大基础

    现在由于人工智能的大热,这方面的人才稀缺,薪资水平不用说,行业中的NO.1,所以各路人马纷纷集结互联网行业,有转行的,有转岗的.对于初学者在学习这方面肯定有许多疑问,是什么疑问呢,我在这里一 一给你解 ...

最新文章

  1. jsp页面取整数 和Java页面取整数
  2. citrix创建虚拟机服务器,在 ESXi 服务器上安装并配置 Citrix SD-WAN Center
  3. 洛谷 - P1433 - 吃奶酪 - dfs
  4. matlab连续信号离散化_MATLAB开发自动驾驶第八课-控制信号帧的回放以进行标签化处理...
  5. Centos7+nginx1.12+mysql5.7+php7环境安装
  6. Golang 性能优化实战
  7. J2ee eclipse中配置 本地配置的maven
  8. 2 引入失败_苦等2年!总投资2800万!镇江首个民国风商场,来了!
  9. mysql c api 函数 linux下 mysql_query_Linux C 调用MYSQL API 函数mysql_escape_string()转义插入数据...
  10. 心电信号越界怎么回事_心电监护仪常见故障分析与排除
  11. IIS7的FTP出错: 451 No mapping for the unicode character exists in the target multi-byte code page
  12. spss方差分析_交叉设计及SPSS多因素方差分析
  13. Python游戏篇:细节之大型游戏爆炸效果(附代码)
  14. 2021数学建模国赛b题思路总结
  15. Python12306自动抢票下单,五一旅游回家就选Python
  16. 计算机语言26个字母,C 语言实例 - 循环输出26个字母
  17. 定位“良心优品”,国民手机Z5能否让联想重回辉煌?
  18. 细胞亚器文章阅读ER-to-Plasma Membrane Tethering Proteins Regulate Cell Signaling and ER Morphology
  19. 大数据面试常见问题(七)——面试部分
  20. 用Windows内置工具测试硬盘速度

热门文章

  1. linux wget命令详解
  2. 微服务网关解决方案调研和使用总结 专题
  3. tRNAscan-SE 预测tRNA基因
  4. 2017.4.2号总结
  5. iphone相关总结
  6. 转 Android自动测试之monkeyrunner工具(二)
  7. Sublime注释插件--DocBlockr
  8. Android   Fragmnet的使用新体会
  9. SharePoint Project Item Replaceable Parameters
  10. 联想拯救者y7000怎么配置Java环境_联想拯救者y7000重装系统教程