一文速学-时间序列分析算法之一次移动平均法和二次移动平均法详解+实例代码
目录
前言
一、平滑法理论
1.时序特性
2.建模流程
二、平滑法算法
1.移动平均法
python代码:
编辑
2.二次移动平均法
与一次移动平均数关系
二次移动平均法预测公式
python代码
点关注,防走丢,如有纰漏之处,请留言指教,非常感谢
参阅:
前言
最近打算研究通彻将机器学习所有有关时间序列分析算法预测模型都讲明白清楚,在一些业务数据分析或者是数学建模需要用到强时间序列的预测模型,我们不得不学习时间序列法。严格来讲
时间序列法并不属于机器学习而是统计分析法,供预测用的历史数据资料有的变化表现出比较强的规律性,由于它过去的变动趋势将会连续到未来,这样就可以直接利用过去的变动趋势预测未来。但多数的历史数据由于受偶然性因素的影响,其变化不太规则。利用这些资料时,要消除偶然性因素的影响,把时间序列作为随机变量序列,采用算术平均、加权平均和指数平均等来减少偶然因素,提高预测的准确性。
我们将常用的时间序列分析算法平滑法模型列出:
一、平滑法理论
平滑法是对不断获得的实际数据和原预测数据给以加权平均,使预测结果更接近于实际情况的预测方法,又称光滑法或递推修正法。平滑法是趋势法或时间序列法中的一种具体方法。是为了帮助我们看清数据中的隐藏的概率形式。使具有趋势性的东西显露出来. 这里我们举个例子:
比如这张图,这是在某化学反应里,测得生成物浓度y(%)与时间t(min)的数据。我们知道浓度和时间的关系是正相关的,但是在某一时刻的数据根据点的分布我们是推测不准确的。当根据数据拟合一条时序曲线就很容易看出规律:
1.时序特性
那么基于此类时序数据我们可以发现此类数据一般用于这下面四种特性:
1.长期趋势(Trend)
2.季节变化(Season)
3.循环波动(Cyclic)
4.不规则波动(Irregular)
四种影响因素通常有两种组合方式:
一种是加法模型:Y=T+S+C+I,认为数据的发展趋势是4种影响因素相互叠加的结果
一种是乘法模型:Y=T*S*C*I,认为数据的发展趋势是4种因素相互综合的结果
2.建模流程
时序模型的建模需要我们考虑我们获取到的数据是否是时间强相关数据,而不是机器学习那种以特征为主的预测模型。通常时序模型建模步骤为:
- 数据清洗、预处理、样本均衡
- 判断是否强关联时间、确定数据是否存在周期性波动
- 确定使用时序算法模型
- 横向对比其他时序算法模型,选择最优模型
- 参数调优
二、平滑法算法
根据上述我们提到的平滑法算法我们来依次建模
1.移动平均法
又称滑动平均法,我们以在某化学反应里,测得生成物浓度y(%)与时间t(min)的数据为例子:
假定是随时间序列发生变化的已知数据:
根据上述情况我们可以得到N为16,则为.将其分为若干段,以4个数据作为一段,进行滑动。
第一段:,.在此为数据平均值,所有数据应在它的上下波动。那么我们可以用于推测当t=5时的数值还按前一组数值的变化幅度波动。
那么我们就很好理解,当t=6时的数值按t=2到5时间段波动。
那么第二段为:,以此类推....
我们总结一下:一般的:
这个公式为一次移动平均公式。
移动平均法基本上是在平均值的基础上进行预测。一般来说若经济变量在某一值上下波动情况以及升降缓慢预测效果比较好,反之误差比较大。
python代码:
x=df_metric['t']
y=df_metric['y']
def mean_shift(x,y,n):fx=list(y[0:n])sum=0start=0end=nfor i in range(0,len(y)-n):sum=0for j in range(start,end):sum+=fx[j]start+=1end+=1fx.append(sum/n)return fx
fx=mean_shift(x,y,4)
fx
当时间窗口为4时我们发现移动平均法效果很差,当时序数据不进行左右浮动时而是呈现一种趋势上升时不能够很好的进行预测。这是因为末端数值已经不能很好的反应出数据走向,而作均值时又会影响最近时刻的数值点。当数据的随机因素较大时,宜选用较大的N,这样有利于较大限度地平滑由随机性所带来的严重偏差;反之当数据的随机因素较小时,宜选用较小的N,这有利于跟踪数据的变化。说到底该算法仅限于处理一段数据量不是很大且数值相对集中,变化趋势相对于平稳的数据。
2.二次移动平均法
二次移动平均是在一次平均移动的基础上再做一次移动平均。
也就是我们把时间段内是数据聚合之后,再视为成一个时间点,类似套娃。用数学语言描述就是:
递推公式
为二次移动平均数
N为分段数据个数
为以此移动平均数
与一次移动平均数关系
一次移动平均预测对于数据变化小,近似水平变化的数据平滑作用较好。如果是线性趋势变化,形成滞后偏差
线性变化如下:
有:
考虑到:
则
所以:
即:
类推:
则:
固:
移项:
有公式:
得
说明用一次移动平均值模拟:真值与一次平均值存在(N-1)b_{t}/2的滞后偏差。
在线性趋势条件下:
此式表明。若直接用作预测值,滞后偏差将拉大为
二次移动平均法预测公式
在线性趋势条件下,回到视为基础,用线性函数拟合假定:
其中t为目前周期数,T为从目前周期t到需要预测的周期的周期个数。
为第t+T周期的预测值,为斜率,为截距
若:令Y=0,得为初始值,由于当前数据为,有
故选取.由公式:
代入得:,
由此构成二次移动平均预测公式。
注意:
1.预测公式是以t时刻为基准的,这个时刻可以随意选取,当选择靠近当前时刻,准确度较高。
2.因为
,
即与一次移动平均法相比较,滞后偏差(N-1)/2已补偿。
3.对应的N应一致,且二次移动值不是预测值。
4.二次移动平均法预测公式仅适合于线性趋势预测
5.不断的丢失信息,且N的大小一般由经验以及前期趋势确定。
python代码
def one_mean_shift(x,y,n):fx_one=list(y[0:n])sum=0start=0end=nfor i in range(0,len(y)-n):sum=0for j in range(start,end):sum+=fx_one[j]start+=1end+=1fx_one.append(sum/n)return fx_one
def two_mean_shift(x,y,n):fx_two=list(y[0:n])M1=one_mean_shift(x,y,n)M2=one_mean_shift(x,M1,n)#取周期TT=4a = 2 * M1[len(M1) - 1] - M2[len(M2) - 1]b = (2 / (n - 1)) * (M1[len(M1) - 1] - M2[len(M2) - 1])print(M2)print("a:", a, "b:", b)# 计算 X (预测值)X = a + b * Treturn X
点关注,防走丢,如有纰漏之处,请留言指教,非常感谢
以上就是本期全部内容。我是fanstuck ,有问题大家随时留言讨论 ,我们下期见。
参阅:
时间序列平滑预测法
移动平均法和平滑法
一文速学-时间序列分析算法之一次移动平均法和二次移动平均法详解+实例代码相关推荐
- 一文速学-时间序列分析算法之移动平均模型(MA)详解+Python实例代码
目录 前言 一.移动平均模型(MA) 模型原理 自回归 移动平均模型 自相关系数 常用的 MA 模型的自相关系数 通用: MA(1)模型: MA(2)模型: 自协方差函数 二.Python案例实现 平 ...
- Pandas获取SQL数据库read_sql()函数及参数一文详解+实例代码
前言 Pandas常用作数据分析工具库以及利用其自带的DataFrame数据类型做一些灵活的数据转换.计算.运算等复杂操作,但都是建立在我们获取数据源的数据之后.因此作为读取数据源信息的接口函数必然拥 ...
- 时间序列分析之AR、MA、ARMA、ARIMA详解(1)
大千世界中存在着大量与时间序列(time series)有关的数据,例如股票价值的波动.GDP的历史数据等等.时间序列分析是计量经济学.统计学.机器学习.数据挖掘的等数据科学领域的重要研究方向.在传统 ...
- Python正则表达式一文详解+实例代码展示
目录 前言 一.正则表达式 1.简介 2.概念 3.目的 4.特点 二.Re库 1.re.match() ?2.fullmatch() ?3.search() 4.?sub() ?5.subn() 6 ...
- 一文速学数模-降维模型(一)PCA(主成分分析法)原理以及应用+代码实现
目录 前言 一.为什么需要PCA?(为什么要降维) 二.PCA简介 三.PCA算法推导 1.投影 2.基 3.基变换的矩阵表示 编辑 4.方差 5.协方差 6.协方差矩阵 7.特征值与特征向量 8. ...
- 一文速学(二十一)-数据分析之Pandas快速图表可视化各类操作详解+实例代码(三)
目录 前言 一.六边形箱图 二.饼图 三.缺失数据绘制处理
- 时间序列分析之AR、MA、ARMA、ARIMA详解(4)
一.延迟算子 延迟算子(Backshift Operator)也称为滞后算子(Lag Operator),记为.它是一个重要的标记,它被用于表示时间序列的延迟:即将时间向后倒退一个时间单位.特别地,定 ...
- 一文速学数模-时序预测模型(四)二次指数平滑法和三次指数平滑法详解+Python代码实现
目录 前言 二次指数平滑法(Holt's linear trend method) 1.定义 2.公式 二次指数平滑值: 二次指数平滑数学模型: 3.案例实现 三次指数平滑法(Holt-Winters ...
- Pyecharts一文速学-绘制桑基图详解+Python代码
目录 前言 一.桑基图 二.Pyecharts绘制 1.数据处理 2.桑基图参数 1.class Sankey() 2.class SankeyLevelsOpts() 三.add()方法参数 1.s ...
- 调包侠福音!机器学习经典算法开源教程(附参数详解及代码实现)
Datawhale 作者:赵楠.杨开漠.谢文昕.张雨 寄语:本文针对5大机器学习经典算法,梳理了其模型.策略和求解等方面的内容,同时给出了其对应sklearn的参数详解和代码实现,帮助学习者入门和巩固 ...
最新文章
- 彻底理解OkHttp - OkHttp 源码解析及OkHttp的设计思想
- svn的一些相关资料
- Drupal 引入JS文件的几种方式
- VC++ 6.0 C8051F340 USB PC侧通信 Demo
- dispay的flex属性
- 编写代码注释的最佳实践
- mysql利用init-connect增加访问审计功能的实现
- MySql Odbc等驱动下载地址分享下
- emacs,objective-c mode 代码补全!
- android的opencv调试,Android opencv 2.3.1 调试及应用(第一篇)
- eclipse修改jsp不生效_JSP+Servlet+JDBC+mysql实现的个人日记本系统
- 4900款网红pr调色lr预设ps滤镜达芬奇lut电影视频素材
- python中的异常、模块、文件
- LED驱动程序的编写
- 我的世界回连Center
- [python]WindowsError的错误代码详解
- 用FFmpeg将WAV(2通道)换成单声道(1通道)
- Android 通过图片资源名字获得图片资源设置在ImageView上
- water sensor水位传感器
- Swift-UITableView快捷创建(刨坟用)