移动平均

移动平均法是用一组最近的实际数据来预测未来一期或几期内目标值的常用方法。移动平均法适用于即期预测,当时间序列不会快速变化,且不存在季节性因素的时候,移动平均法能有效地消除预测中的随机波动,对序列具有修匀或平滑作用。

简单移动平均

是下一期的预测值,代表移动窗口大小,代表的是前n期实际值

公式浅显易懂

缺点也显而易见,历史所有时间点对现在的影响权重都一样

加权移动平均

代表第t期的权重

权重的选择是个分析活,需要根据数据的特点进行选择,考虑数据的时间粒度,是否具有周期性等等。一般来说,近期数据对未来更有预测意义,但是如果近期数据存在异常数据,则预测的时候会出现问题,但是期数变多的话,虽然会使得序列更平滑,但是也使得预测值对数据的实际波动不敏感。

如果序列具有季节性,移动平均的项数N与季节波动长度一致才可以消除季节波动,当序列具有周期性的时候同样道理。

移正平均

移动平均项数k为奇数,其移动平均值为移动平均项数中间一期的数值。如果是偶数,则再需要对相邻两个平均值的移动平均,就能使得平均值对正某一时期了。(对于简单移动平均来说)

很简单的,序列13579,移动平均值就是5

移动平均线

移动平均最常见的使用就是在股市中了,将一定时期内的证券价格(指数)「加以平均」,并把不同时间的平均值连接起来,形成一根MA,用以观察证券价格变动趋势的一种技术指标

image-20200925174725577

很有趣的是,可以从股市规律来学习移动平均的数学规律。

「滞后性」

因为移动平均是根据历史数据来计算的,存在一定滞后性,所以有可能错过一些股价变动的信号

「趋势性」

移动平均线最大的特点是能够消除一些季节或周期波动,直观地显示趋势,所以可以从大趋势去进行鞠策

指数加权移动平均

指数加权移动平均(ewma)是以指数级递减加权的移动平均,各数值的权重随时间呈指数式递减,时间越靠近当前时刻的数据加权影响力越大。

ewma与MA的区别是,MA通常是以某个大小的时间窗口去计算,而ewma是计算所有样本的,但是会强调当前样本的重要性,逐渐淡化历史样本的重要程度。

「公式:」

python代码

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt#生成均匀分布数据
data = pd.DataFrame()
data['sample'] = np.random.normal(size=100)#简单移动平均
data['MA5'] = data['sample'].rolling(window=5).mean()
data['MA10'] = data['sample'].rolling(window=10).mean()
#指数加权移动平均
data['EWMA5'] = data['sample'].ewm(span=5).mean()
data['EWMA10'] = data['sample'].ewm(span=10).mean()data[['sample','MA5','MA10','EWMA5','EWMA10']].plot(subplots=False, figsize=(12,6), grid=True)

image-20200925181921625

指数平滑

一次指数平滑

当时间序列无明显的趋势变化,可用一次指数平滑预测。

代表t期平滑值

代表平滑常数

代表t-1期实际值

二次指数平滑

一次指数平滑直接利用平滑值作为预测值,二次指数平滑法则利用平滑值对趋势进行修正得到一个线性平滑模型,适用于具有线性趋势的时间序列

,是线性平滑模型参数

是第t期二次指数平滑值

是第t+m期的预测值

m为预测超前期数

三次指数平滑

三次指数平滑是在二次的基础上再平滑

最后这里的则是三次指数平滑法的t+m期预测值

「趋势调整」

一段时间内收集到的数据如果呈现出上升或下降趋势将导致指数预测滞后于实际需求,通过趋势调整,添加趋势修正项,可以在一定程度上改进指数预测效果。

进行趋势调整的指数平滑预测有三个步骤:

1、 利用前面介绍的方法计算第t期的简单指数平滑预测;

2、 计算趋势。其公式为:

其中,

=第t期经过平滑的趋势;

=第t期上期经过平滑的趋势;

b=选择的趋势平滑系数;

=对第t期简单指数平滑预测;

=对第t期上期简单指数平滑预测。

3、计算趋势调整后的指数平滑预测值.计算公式为:

「的确定」

α值是根据时间序列的变化特性来选取的。若时间序列的波动不大,比较平稳,则α应取小一些,如0.1 ~ 0.3 ;若时间序列具有迅速且明显的变动倾向, 则α应取大一些,如0.6 ~ 0.9。实质上,α是一个经验数据,通过多个值进行试算比较而定,哪个α值引起的预测误差小,就采用哪个。

ps:发现网络上都是把三次指数平滑法和holt-winters当同一个东西,但是有的三次指数平滑公式又不一样0-0,稍微查了一下资料,上面的三次指数平滑法是布朗指数平滑。下面的又是另一种。

Holt-Winters

Holt-Winters季节性方法包括预测方程和三个平滑方程-一个水平(level)的,一个趋势方程,一个用于季节性成分 ,具有相应的平滑参数 ,,。我们用表示季节性的频率,即一年中的季节数。例如,对于季度数据L=4,对于每年的中的月则是

「加法模型」

「乘法模型」

其中是数据平滑因子,0 <<1,β是趋势平滑因子,0 <β<1,是季节变化平滑因子,0 <<1-a(这里是数据平滑因子alpha)。

以加法模型来解释一下几条平滑公式,乘法在意义上是一样的。

首先是,代表的是经过季节修正的观测值()和无季节项预测值()之间的加权平均

趋势方程是基于的估计趋势与上一期估计趋势的加权平均

季节方程是当前季节和上一个季节同期值的加权平均值,我个人对季节项的前半部分理解是独立出季节分量

预测方程的部分下标意思是确保用于预测的季节性指数的估算值来自样本的最后一组观测数据。

初始趋势估计的一般公式为:

为i = 1,2,...,L设置季节性指数的初始估计会涉及更多。如果N是数据中存在的完整循环数(the number of complete cycles),则:

其中为

一个是平均值在个数据的周期。

「衰减模型」

增加阻尼系数作用与趋势,随着预测时间长度的增加而减弱趋势。这通常会提高预测的准确性。

python代码

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
#导入库
from statsmodels.tsa.holtwinters import ExponentialSmoothing#生成sin数据
data = pd.DataFrame()
a = np.linspace(-10, 10, 100)
b = np.sin(a)
data['sin']=btrain,test = data.iloc[:80,0],data.iloc[79:,0]model = ExponentialSmoothing(train,seasonal='add',seasonal_periods=31).fit()
pred = model.predict(start=test.index[0],end=test.index[-1])fig=plt.figure(figsize=(12,6))
plt.plot(train.index,train,label='train')
plt.plot(test.index,test,label='test')
plt.plot(pred.index,pred,label='Holt-Winters')
plt.legend(loc='best')
plt.show()

image-20200925184544024

「seasonal_periods」参数的作用就是季节波动,这里设置的是31,几乎完美拟合曲线

指数平滑法的组合分类

指数平滑法可以通过组合季节或趋势变换成不同的方法

img

Reference

  1. https://wiki.mbalib.com/wiki/%E6%8C%87%E6%95%B0%E5%B9%B3%E6%BB%91%E6%B3%95#.EF.BC.88.E4.B8.89.EF.BC.89_.E4.B8.89.E6.AC.A1.E6.8C.87.E6.95.B0.E5.B9.B3.E6.BB.91.E9.A2.84.E6.B5.8B

  2. https://en.wikipedia.org/wiki/Exponential_smoothing#Triple_exponential_smoothing_(Holt_Winters)

  3. https://otexts.com/fpp2/taxonomy.html

  • 公众号:AI蜗牛车

    保持谦逊、保持自律、保持进步

【时间序列】从移动平均到指数平滑相关推荐

  1. 时序预测 | MATLAB实现趋势外推时间序列预测(含移动平均、指数平滑对比)

    时序预测 | MATLAB实现趋势外推时间序列预测(含移动平均.指数平滑对比) 目录 时序预测 | MATLAB实现趋势外推时间序列预测(含移动平均.指数平滑对比) 基本介绍 程序设计 学习总结 参考 ...

  2. 时间序列进行分析的一些手法以及代码实现(移动平均、指数平滑、SARIMA模型、时间序列的(非)线性模型)

    文章目录 1.移动平均 moving average方法 weighted average方法 2.指数平滑 单指数平滑 exponential_smoothing 双指数平滑 三指数平滑 Tripl ...

  3. 【统计】时间序列预测之 Holt-Winters 指数平滑模型

    Holt-Winters Exponential Smoothing 原文连接:link 作者作者:Sachin Date 翻译校对:datamonday Holt-Winters 指数平滑法用于预测 ...

  4. 时间序列分析教程(二):移动平均与指数平滑

    之前介绍了时间序列的基本概念和性质,现在就正式介绍一些处理时间序列的模型方法,第一个是移动平均法. 移动平均法很简单,就是用最近的数据预测未来短时间内的数据.有简单移动平均法,真的很简单,就是用最近的 ...

  5. 时间序列预测之一:指数平滑法(一)理论

    目录 1. 基础知识 2. 简单滑动平均(rolling mean) 3. 指数平均(EXPMA) 3.1 一阶指数平滑 3.2 二次指数平滑 3.3 三次指数平滑预测 4. 二次指数平滑法实例分析 ...

  6. 时间序列预测之一:指数平滑法(二)R语言——代码实现

    参考:https://www.cnblogs.com/fengzzi/p/10044426.html 指数模型是用来预测时序未来值的最常用模型.这类模型相对比较简单,但是实践证明它们的短期预测能力较好 ...

  7. 时间序列的数据分析(六):指数平滑预测法

    之前已经完成了五篇关于时间序列的博客,还没有阅读过的读者请先阅读: 时间序列的数据分析(一):主要成分 时间序列的数据分析(二):数据趋势的计算 时间序列的数据分析(三):经典时间序列分解 时间序列的 ...

  8. Python 时间序列建模:用指数平滑法预测股价走势

    指数平滑方法适用于非平稳数据(即具有趋势和/或季节性的数据),其工作方式类似于指数移动平均线.预测是过去观察的加权平均值.这些模型更加强调最近的观察结果,因为权重随时间呈指数级变小.平滑方法很受欢迎, ...

  9. 【时间序列 - 02】ExponentialSmoothing - 指数平滑算法

    Abstract: 本文主要以实践的角度介绍指数平滑算法,包括:1)使用 ExponentialSmoothing 框架调用指数平滑算法:2)文末附有"使用python实现指数平滑算法(不确 ...

最新文章

  1. android类名方法名不混淆,android – 如何告诉Proguard混淆类名
  2. Axis2 webservice入门--Webservice的发布与调用
  3. 和为s的两个数字与和为s的连续正数序列
  4. python3 循环语句
  5. POJ 3984 迷宫问题
  6. redis为什么选择单线程工作模型
  7. Private Inheritance(what, where)
  8. 无意中发现的一份清华大佬的代码模版,简洁易懂!
  9. mysql 存储微信昵称乱码_MYSQL 保存微信昵称特殊字符报错解决方法-设置编码集为utf8mb4的方法...
  10. 荣耀Magic V真机首曝:2022折叠机的引领之作
  11. 一帧图像最多有几种不同颜色_几种不锈钢屏风隔断创造灵感来源。颜色不同款,风格各有千秋...
  12. Python爬虫编程实践 Task03
  13. android关机铃声代码,android系统添加关机铃声
  14. HTTP headers 详解 headers 常用属性
  15. 网站点击量太大崩溃怎么办_网站崩溃时该怎么办
  16. 《孤独的根号三》 中英文对照
  17. CNCC2020丨5G边缘智能与智慧城市论坛
  18. Android中实现双指缩放的功能
  19. 「MySQL」- 基础增删改查
  20. python 执行shell_用Python调用Shell命令

热门文章

  1. CCNU ACM 2016夏季集训·最长递增子序列(LIS)
  2. python学生选课_Python开发Day07(学生选课)
  3. 如何在excel中将两列数据匹配
  4. 宝宝智能起名,免费起名实现方案,带源码
  5. php实现数据查询关键词,php 关键词查询的实现方法
  6. 怎么做出可以卖的电路板
  7. 最小生成树--还是畅通工程
  8. 基于89C51单片机的智能小车——07.语音识别切换寻迹避障跟随并Oled显示
  9. 怎么翻译截图里面的文字?快来看看截图翻译怎么弄
  10. PowerDesigner导出表结构到Excel表