目录

前言

二次指数平滑法(Holt’s linear trend method)

1.定义

2.公式

二次指数平滑值:

二次指数平滑数学模型:

3.案例实现

三次指数平滑法(Holt-Winters’ seasonal method)

1.定义

2.公式

3.案例实现

加权系数a的选择

点关注,防走丢,如有纰漏之处,请留言指教,非常感谢

参阅



前言

好久没来更时间序列分析算法了,今天把平滑法这一个常用且宽泛的时序算法给补完。这篇文章完结了就代表整个传统时序预测算法讲完了。文章内容是紧接着上篇文章:

一文速学-时间序列分析算法之指数平滑法详解+Python代码实现_fanstuck的博客-CSDN博客_指数平滑法python

下篇文章就是详解单变量时间序列预测的所有模型和算法了。此系列将会一直写到现在比较火热的LSTM短时时序预测以及更多先进且方便的时序预测算法。

希望读者看完能够在评论区提出错误或者看法,博主会长期维护博客做及时更新。


二次指数平滑法(Holt’s linear trend method)

从我们之前学过的简单移动平均法和在此基础之上衍生出来的二次移动平均法(又称趋势移动平均法),一次指数平滑法和二次指数平滑法二者关系与之类似,可以说原理都一样。

1.定义

在一次指数平滑法的基础之上再去做趋势移动。当时间序列的变动出现直线趋势时,用一次指数平滑法来进行预测仍将存在着明显的滞后偏差。修正的方法也是在一次指数平滑的基础上再进行二次指数平滑,利用滞后偏差的规律找出曲线的发展方向和发展趋势,然后建立直线趋势预测模型,故称为二次指数平滑法。

2.公式

我们再来看看一次指数平滑法的公式:

设时间序列为为加权系数,,一次指数平滑公式为:

为t+1时刻的预测值,即t时刻的平滑值,为t时刻的实际值;时刻的预测值,即为上一时刻的平滑值.很明显该公式是由移动平均公式改进而来。

我们和二次移动平均法一样如法炮制计算。

二次指数平滑值

公式中:

  • :第t周期的二次指数平滑值
  • :第t周期的一次指数平滑值
  • :第t-1周期的二次指数平滑值
  • :加权系数(平滑系数)

很容易看出二次指数平滑法是对一次指数平滑值再一次指数平滑的方法。所以说还得使用一次指数平滑法之后再作计算。

二次指数平滑数学模型:

3.案例实现

这里我们不再使用上次化学实验的案例1,换个一个案例:

以我国 1965~1985 年的发电总量资料为例,试用二次指数平滑法预 测 1986 年和 1987 年的发电总量:

那么我们只需要读入数据再将我们之前写的SES一次平滑指数法引入就好了:

import pandas as pd
import numpy as np
import Ipynb_importer
import SES
df=pd.read_excel('try_test2.xlsx')

首先我们获取一次平滑值,平滑系数还是为0.3:

df=pd.read_excel('try_test2.xlsx')
x=df['t']
y=df['发电总量y']
y_1=SES(y,1,0.3)
y_1

我们获取二次平滑值只需要将一次平滑值再次代入就可以得到:

y_2=SES(y_2,1,0.3)
y_2

那么如果我们要预测t为21时刻的值时,我们需要得到a和b两个参数的值:

#我们需要传入一次平滑预测值和二次平滑预测值,以及t值、平滑系数a和给予的T
def SES_quadratic(y_1,y_2,s,t,T):a=2*y_1[t-1]-y_2[t-1]b=(s/(1-s))*(y_1[t-1]-y_2[t-1])y=a+b*Treturn y
SES_quadratic(y_1,y_2,0.3,21,1)

这样我们就得到了 t为22时刻的预测值:

三次指数平滑法(Holt-Winters’ seasonal method)

1.定义

一次指数平滑法针对没有趋势和季节性的序列,二次指数平滑法针对有趋势但是没有季节特性的时间序列,三次指数平滑法则可以预测具有趋势和季节性的时间序列。术语“Holt-Winter”指的是三次指数平滑。该方法分为预测方程和三个平滑方程,一个是水平,一个是趋势,一个是季节性成分,采用平滑参数和,用代表季节性周期,例如一年中季节的数量,季的数量,月的数量。

直接我们在将时间序列数据的时候谈到,时间序列有一下四个时序特性:

  • 长期趋势(Trend)
  • 季节变化(Season)
  • 循环波动(Cyclic)
  • 不规则波动(Irregular)

其中季节变化也正是三次指数平滑法所代表的平滑。下面网址就是全述季节性预测算法:

7.3 Holt-Winters’ seasonal method | Forecasting: Principles and Practice (2nd ed)

之前我在第一篇文章也说过:

四种影响因素通常有两种组合方式:

一种是加法模型:Y=T+S+C+I,认为数据的发展趋势是4种影响因素相互叠加的结果

一种是乘法模型:Y=T*S*C*I,认为数据的发展趋势是4种因素相互综合的结果

该方法有两种变体,根据季节性成分的性质不同而不同。当季节变化在整个系列中大致恒定时,优选加法模型,而当季节变化与系列水平成比例时,优选乘法模型。使用相加法,季节性分量在观测序列的尺度中以绝对值表示,在水平方程中,通过减去季节性分量对序列进行季节性调整。在每年内,季节性成分的总和将接近零。使用乘法方法,季节性成分以相对项(百分比)表示,通过除以季节性成分对序列进行季节性调整。每年内,季节性成分总计约为m。

那么Holt-Winters 加法模型为:

其中k是(h−1) /m的整数部分,这确保用于预测的季节性指数的估计来自样本的最后一年。水平方程显示了经季节性调整的观测值()之间的加权平均值,以及非季节性预测()对于时间t,趋势方程与Holt的线性方法相同。季节方程显示当前季节指数()之间的加权平均值 ,以及去年同一季节(即m个时间段之前)的季节性指数。

季节性分量的方程通常表示为:

如果我们替换ℓ从上述分量形式的水平的平滑方程,我们得到

相应的,乘法模型为:

2.公式

我们大可不需要再次重新认识三次指数平滑法,三次平滑法无非就是在二次平滑法的基础之上再次平滑一次而已。那么推导公式就更加简单了:

其三次平滑值的公式为:

式中为三次指数平滑值。

三次指数平滑法的预测模型为:

3.案例实现

我们的案例依旧和二次指数平滑法的案例一样,省的大家再去理解其他案例场景。

我们可以先进行绘图描点看看这些数据是否用三次指数平滑法更合适:

import matplotlib.pyplot as plt
df=pd.read_excel('try_test2.xlsx')
x=df['t']
y=df['发电总量y']
plot1 = plt.plot(x, y, '*', label='origin data')
plt.title('metric_polyfit')
plt.show()

那么我们发现这个案例的数据是呈线性递增趋势,那么我们还得换个案例。这里选用上次化学反应的案例最好用。

以在某化学反应里,测得生成物浓度y(%)与时间t(min)的数据为例子:

通过实际数据序列呈非线性递增趋势,采用三次指数平滑预测方法。

确定指数平滑的初始值权系数(平滑系数)a设一次、二次、三次指数平滑的初始值为最早三个数据的平均值。即:

为0.3,那么我们将先求出来:

y_1=SES(y,3,0.3)
y_2=SES(y_1,3,0.3)
y_3=SES(y_2,3,0.3)

之后我们使用python写出代码就好了:

#我们需要传入一次平滑预测值、二次平滑预测值和三次平滑预测值,以及t值、平滑系数a和给予的T
def SES_triple(y_1,y_2,y_3,s,t,T):t=t-1a=y_1[t]*3-y_2[t]*3+y_3[t]b=(s/(2*((1-s)**2)))*((6-5*s)*y_1[t]-2*(5-4*s)*y_2[t]+(4-3*s)*y_3[t])c=((s**2)/(2*((1-s)**2)))*(y_1[t]-2*y_2[t]+y_3[t])y=a+b*T+c*T**2return y
SES_triple(y_1,y_2,y_3,0.3,16,1)

加权系数a的选择

在指数平滑法中,预测成功的关键是 a 的选择。a 的大小规定了在新预测值中新数据和原预测值所占的比例。a 值愈大,新数据所占的比重就愈大,原预测值所占比重就愈小,反之亦然。

理论界一般认为有以下方法可供选择:

经验判断法。这种方法主要依赖于时间序列的发展趋势和预测者的经验做出判断。

1、当时间序列呈现较稳定的水平趋势时,应选较小的α值,一般可在0.05~0.20之间取值;

2、当时间序列有波动,但长期趋势变化不大时,可选稍大的α值,常在0.1~0.4之间取值;

3、当时间序列波动很大,长期趋势变化幅度较大,呈现明显且迅速的上升或下降趋势时,宜选择较大的α值,如可在0.6~0.8间选值,以使预测模型灵敏度高些,能迅速跟上数据的变化;

4、当时间序列数据是上升(或下降)的发展趋势类型,α应取较大的值,在0.6~1之间。

试算法。根据具体时间序列情况,参照经验判断法,来大致确定额定的取值范围,然后取几个α值进行试算,比较不同α值下的预测标准误差,选取预测标准误差最小的α。

在实际应用中预测者应结合对预测对象的变化规律做出定性判断且计算预测误差,并要考虑到预测灵敏度和预测精度是相互矛盾的,必须给予二者一定的考虑,采用折中的α值。


点关注,防走丢,如有纰漏之处,请留言指教,非常感谢

以上就是本期全部内容。我是fanstuck ,有问题大家随时留言讨论 ,我们下期见。

参阅

时间序列模型 (三

指数平滑法(Exponential Smoothing,ES)_意念回复的博客-CSDN博客_指数平滑法

一文速学数模-时序预测模型(四)二次指数平滑法和三次指数平滑法详解+Python代码实现相关推荐

  1. 一文速学数模-时序预测模型(五)指数平滑法详解+Python代码实现

    目录 前言 一.指数平滑法 1.简介 2.特点 3.基本原理 4.优缺点 优点 缺点</

  2. 一文速学数模-时序预测模型(一)灰色预测一文详解+Python实例代码

    目录 前言 一.模型理论 特点 二.模型场景 1.预测种类 2.适用条件

  3. 一文速学数模-季节性时序预测SARIMA模型详解+Python实现

    目录 前言 一.季节时间序列模型概述 二.SARIMA模型定义 三.SARIMA模型算法原理

  4. 一文速学数模-降维模型(一)PCA(主成分分析法)原理以及应用+代码实现

    目录 前言 一.为什么需要PCA?(为什么要降维) 二.PCA简介 三.PCA算法推导 1.投影 2.基 3.基变换的矩阵表示 ​编辑 4.方差 5.协方差 6.协方差矩阵 7.特征值与特征向量 8. ...

  5. 一文速学数模-评价模型(二)熵权法实战确定评价指标权重

    目录 前言 一.熵权法介绍 二.使用步骤 1.数据预处理 2.计算指标信息熵

  6. 一文速学数模-分类模型(二)决策树(Decision Tree)算法详解及python实现

    目录 一.决策树概述 二.工作原理及特点 三.决策树的构造 四.信息增益

  7. 一文速学数模-分类模型(一)SVM(Support Vector Machines)支持向量机算法原理以及应用详解+Python代码实现

    目录 前言 一.引论 二.理论铺垫 线性可分性(linear separability) 超平面 决策边界

  8. 一文速学数模-聚类模型(一)K-means聚类算法详解+Python代码实例

    目录 前言 一.聚类分析 二.K-means原理 1.距离度量算法 欧几里得距离(欧氏距离)

  9. Pyecharts一文速学-绘制桑基图详解+Python代码

    目录 前言 一.桑基图 二.Pyecharts绘制 1.数据处理 2.桑基图参数 1.class Sankey() 2.class SankeyLevelsOpts() 三.add()方法参数 1.s ...

最新文章

  1. 一键移植工具_【产品推广】让UI设计畅通无阻 — 信息系统人机界面增强工具(HFE Designer)...
  2. c++多线程编程:常见面试题
  3. 如何处理win10系统内置Linux系统闪退问题
  4. Xcode终端快捷键
  5. 【产品】阿里产品经理内训:能力模型解读
  6. 在linux上实现cgi内容在网页上显示
  7. POJ - 3252 Round Numbers(数位dp)
  8. 阿里P7大牛整理!BAT大厂面试基础题集合,成功入职字节跳动
  9. 【LeetCode笔记】35. 搜索插入位置(Java、二分法)
  10. Android动态日志,一个简单的Android日志类
  11. 精美剪纸风三维感海报合集分享,这样的质感你喜欢吗?
  12. Java基础学习总结(136)——有关流资源关闭(try-with-resources与AutoCloseable)的使用总结
  13. python正式发布的时间_微软Visual Studio Code 1.44正式发布:加入新Python教程、时间轴视图...
  14. 分析“关于Linux内核引入的accept_local参数的一个问题”
  15. 【图像去雾】基于matlab GUI直方图均衡化+Retinex理论图像去雾【含Matlab源码 1509期】
  16. 用python数据分析来解密新经济(IT桔子)死亡公司的内幕
  17. 微信小程序图片缓存问题
  18. 磁盘分区方式对比(MBR与GPT)
  19. Flash闪存储存原理以及NAND flash、NOR flash(详细)对比总结
  20. visio画箭头时,如何去掉箭头的自动连接连接点(吸附)功能?

热门文章

  1. 别焦虑了,这才是中国各行业平均工资的真相
  2. ArcGIS栅格数据的空间分析讲解(上)
  3. 使用Handler的大致流程
  4. deepin wine 卸载软件
  5. 异常检测:综述(基本都是无监督算法)【时间序列算法:AR/MA/ARMA】【传统机器学习算法:孤独森林、One Class SVM】【深度学习算法:AutoEncoder、LSTM、DeepLog】
  6. 2022年最值得学习的5款开源Java框架 小白教程
  7. 从零开始,手把手教你python爬取美足船袜网!
  8. vue固定资产管理系统_Java 开源办公开发平台 O2OA V5.1.1 发布 | 支持 Vue、React、Angular...
  9. IntelliJ IDEA 的插件 常用的 idea 好用 idea 插件 以此收藏防丢失
  10. 2.3-非平稳时间序列分析