本章開始学习《Forecasting: principles and practice》

1 getting started

1.1 事件的可预言性

一个时间能不能被预言主要取决于以下三点

1. 对事件的影响因素的了解程度。比方彩票号码。没有内在的影响因素不能被预測

2. 可用数据量的多少,数据量太少没法预測

3. 预測结果本身的影响,比方预測汇率,可能大家知道预測的会长,那么人们就会採取对应的措施使预測结果不准。

1.2 经常使用预測模型

  1. 解释性模型,如其模型内包括其影响因素,通过影响因素来预測属于
  2. 时间序列,其模型仅仅用时间来预測
  3. 综合模型,即考虑时间也考虑影响因素,不同学科有不同的名字。如,dynamic regression models, panel data models, longitudinal models, transfer function models, and linear system models (assuming ff is linear)

2 工具箱使用

2.1 自相关

使用散点图。画出Yt与Yt−k的散点图能够看出两者之间的线性关系,自相关系数即能表明他们之间是否有线性关系。

下图是啤酒销量的自相关关系



他们的自相关系数计算公式是:



计算结果是:



能够看出在4,8处有较好的正相关。与图相符合

在使用时经常使用ACF来表达。以下是R语言做的图

Acf(beer2)



没有自相关性的就是白噪声,他的ACF例如以下图

set.seed(30)
x <- ts(rnorm(50))
plot(x, main="White noise")
Acf(x)



怎样通过ACF看是否是白噪声?

通常假设95%的数据的ACF在±2T√就能够觉得是白噪声。这里一共同拥有50个数。ACF的边界是2/(50)^0.5=0.28,所以能够看做是白噪声

2.2 简单模型

  1. 平均值模型,直接使用平均值来作为预測值
  2. naive模型,直接使用近期的值作为预測
  3. 季节naive模型。直接使用近期的季节性数据来作为预測值
  4. 飘逸模型。使用历史的平均变化率做线性预測。公式例如以下:



    这几种模型往往不是用来做预測。而是能够用来做预測基准,get√!



    代码例如以下:

1
meanf(y, h)
# y contains the time series
# h is the forecast horizon
2
naive(y, h)
rwf(y, h) # Alternative
3
snaive(y, h)
4
rwf(y, h, drift=TRUE)

2.3 转换与调整

2.3.1 数学转化

该类转换一般时将数值的表达形式进行转换,比方转换为log,或者exp形式,文中介绍了一个比較好用的公式,函数为Box-cox



选择合适的λ来进行预測,预測之后再将结果转化回正常形式

以下是一个在λ不同一时候的图像



文中说 在λ=0.30时效果比較好

指数形式转化的特征:

1. 假设yt≤0, 不能进行指数转换,除非加一个常数,使其大于0

2. 转变通常对预測的作用不大。单会对预測区间有较大的影响

2.3.2 日期调整

比如,每月的牛奶需求,由于每一个月天数不一样。预測精度可能会减少。假设改为每天的牛奶需求,预測结果会有改善

2.3.3 人口转换

比方有时候用总人口数为单位不如平均人口数的更具有解释性,比方中国人多钱多,但平均每人的前就不多了。

2.3.4 膨胀转换

在预測关于金融的事情的时候,由于货币膨胀率的不同,相同的数据可能会有不一样的意义。通常的做法是做例如以下转换

ynew−t=yt∗cpibasecpit

cpi 是Consumer Price Index消费者物价指数

2.4 预測精度评估

2.4.1 评估模型

yi^表示预測值 yi表示观測值。设ei=yi−yi^

则基本的评价指标有

1. 平均绝对误差MAE

2. 均方根误差RMSE



前两者仅用于比較数据规模相同的预測模型。后面可用于比較规模不同的模型

3. 平均绝对百分比误差MAPE,设pi=100∗ei/yi

Mean absolute percentage error: MAPE=mean(|pi|).

这里能够看出,假设y趋向于0就会有接近无穷大的数值。显然不合理,并且它对于负值的惩处比对正值更大

4. 均衡平均绝对百分比误差sMAPE

sMAPE=mean(200|yi−y^i|/(yi+y^i))

这样的方法不好,就不在具体说了

5. 平均绝对照例误差 MASE mean absolute scaled error

qj=ej1T−1∑t=2T|yt−yt−1|.

对于周期不为1的比方季节性数据可用下式

qj=ej1T−m∑t=m+1T|yt−yt−m|.

对于普通数据

qj=ej1N∑i=1N|yi−y¯|.

整个误差公式为

MASE=mean(|qj|).

验证方法

要注意过拟的现象,所以要有測试集和交叉验证

測试集一般的比例为20%

交叉验证,时间序列交叉验证的方法为

1. 首先假设K个数值能够足够做好一个模型

2. 用K+i个做为验证。前K+i−1个作为训练集

3. 用前面的模型来评价准确率

4. 以上是用一个来计算的,大家可用相似的用一个特定的周期作为评价

2.5 残差诊断

残差检验模型

残差指的是ei=yi−yi^ ,它有以下特性

1. 残差是不相关的

2. 残差的均值为0

3. 残差的方差为常数

4. 残差满足正态分布

后两者有时候可能不满足。可是假设前两者也不满足,能够用过调整改进算法。优化模型。可是不能全然依靠前两者评价模型的好坏。

自相关合成检验

ACF自相关检验仅仅是看某一个的自相关。其实假设进行非常多次试验。假设有一个的ACF显示自相关程度非常高,并不能充分的说明有自相关性,所以这里讲多个滞后期的ACF联合来看

Portmanteau tests for autocorrelation

主要讲了两种方法

1. Box-Pierce 方法

Q=T∑k=1hr2k,

h是最大滞后期数 (lag)可是不宜取太大,假设是没有季节性的建议取10,季节性的取2*季节周期m,另外假设这样取的h大于T/5,(T指样本数),那么就取T/5

2. Ljung-Box

Q∗=T(T+2)∑k=1h(T−k)−1r2k.

这两种方法怎样评价自相关性呢,

Q和Q*都满足自由度为(h-k)的χ2分布,k是參数的数量,于对源数据k=0 naive model没有參数,也取0

2.6 预測区间

通常我们预測的数值并非一个单独的数值。而是一个区间,在置信度95%的区间中,预測值为

y^t±1.96σ^

σ^为预測值的标准差。通常时候假设模型中没有參数它等于残差的标准差,假设有參数。预測标准差会偏大些,但不会大太多

  • 预測区间通常会随着预測时间的增长而增大。可是有些非线性方法并不会这样

    拓展阅读

    Maindonald, J. and H. Braun (2010). Data analysis and graphics using R: an example-based approach. 3rd ed. Cambridge, UK: Cambridge University Press.

时间序列 R 读书笔记 04 Forecasting: principles and practice的更多相关文章

  1. 《The Linux Command Line》 读书笔记04 Linux用户以及权限相关命令

    Linux用户以及权限相关命令 查看身份 id:Display user identity. 这个命令的输出会显示uid,gid和用户所属的组. uid即user ID,这是账户创建时被赋予的. gi ...

  2. 『TCP/IP详解——卷一:协议』读书笔记——04

    2013-08-18 16:31:17 第2章 链路层 2.1 引言 链路层主要有三个目的: 为IP模块发送和接受IP数据报 为ARP模块发送ARP请求和接受ARP应答 为RARP发送RARP请求和接 ...

  3. ANTLR3完全参考指南读书笔记[04]

    前言 学习框架或第三方库的方法是什么 (1)少量的浏览manual或tutoral,只关注程序所需的特征,再完善其详细内容和特征的认识? (2)花大量的时间研究详细内容,再考虑程序实现? 这是个先有鸡 ...

  4. [读书笔记]Linux命令行与shell编程读书笔记04 安装软件,编辑器注意事项

    1. debian以及redhat两种主流的linux发行版用的包管理工具 debian的包管理工具是 dpkg 再现安装的是 apt apt的工具主要有 apt-get apt-cache apti ...

  5. 读书笔记(04) - 错误监控 - JavaScript高级程序设计

    错误类型 即时运行错误 (代码错误) 资源加载错误 常见的错误 1. 类型转换错误 建议使用全等===操作符 2.数据类型错误 建议加强类型判断 // 数组倒序 function reverseSor ...

  6. 8086中断系统——《x86汇编语言:从实模式到保护模式》读书笔记04

    80X86中断系统 能够处理256个中断 用中断向量号0-255区别 可屏蔽中断还需要借助专用中断控制器Intel 8259A实现优先权管理 1.中断的分类 中断可以分为内部中断和外部中断. (1)内 ...

  7. 强化学习读书笔记 - 06~07 - 时序差分学习(Temporal-Difference Learning)

    强化学习读书笔记 - 06~07 - 时序差分学习(Temporal-Difference Learning) 学习笔记: Reinforcement Learning: An Introductio ...

  8. 强化学习读书笔记 - 13 - 策略梯度方法(Policy Gradient Methods)

    强化学习读书笔记 - 13 - 策略梯度方法(Policy Gradient Methods) 学习笔记: Reinforcement Learning: An Introduction, Richa ...

  9. 强化学习读书笔记 - 12 - 资格痕迹(Eligibility Traces)

    强化学习读书笔记 - 12 - 资格痕迹(Eligibility Traces) 学习笔记: Reinforcement Learning: An Introduction, Richard S. S ...

随机推荐

  1. 【推广】实用命令——tldr

    碎碎念 如题,通常遇到一个新的命令需要查询其帮助的时候,一般使用`command -h`或者`man command`来查询,但是,有时候仅仅想知道这个命令怎么用,并不想知道具体含义啊(这个命令可能不 ...

  2. 小型Web应用扫描工具Grabber

    小型Web应用扫描工具Grabber   Grabber是Kali Linux集成的一款Web应用扫描工具.该工具适合中小Web应用,如个人博客.论坛等.该工具使用Python语言编写,支持常见的漏洞 ...

  3. 基于 Python + OpenCV 进行人脸识别,视频追踪代码全注释

    先来普及一下概念, 计算机对人脸是如何识别的呢? 或者说图像是如何识别的.主要是获取单张图片的特征值记录了特征值以后,如果下一张图片来了以后两张图片特征值进行对比,如果相似度很高那么计算机就认定这两个 ...

  4. []ARC098

    咕咕咕 C:普及组难度的题 D:给定$a_{1\cdots n}$,求有多少$1\leq l\leq r\leq n$满足$x_l+\cdots+x_r=x_l\text^\cdots\text^x_ ...

  5. 【计算几何】【凸包】bzoj1670 [Usaco2006 Oct]Building the Moat护城河的挖掘

    #include<cstdio> #include<cmath> #include<algorithm> using namespace std; #define ...

  6. [CF413D]2048

    题目大意: 在一个长度为$n(n\le2000)$的数组中填数$2$或$4$,待所有数字全部填好后,按照类似于2048的规则向左合并.给定某些格子上的数,问在当前情况下要使得合并后的最大数超过$2^k ...

  7. ujmp使用心得

    1)对矩阵转置运算时: Matrix test2 = oneMatrix.transpose(); Matrix test2 = oneMatrix.transpose(Ret.LINK); Matr ...

  8. Java高级架构师(一)第11节:Mybatis的分页实现

  9. Scala实战高手****第4课:零基础彻底实战Scala控制结构及Spark源码解析

    1.环境搭建 基础环境配置 jdk+idea+maven+scala2.11.以上工具安装配置此处不再赘述. 2.源码导入 官网下载spark源码后解压到合适的项目目录下,打开idea,File-&g ...

  10. 简单说说DNS劫持_firefox吧_百度贴吧

    简单说说DNS劫持_firefox吧_百度贴吧 DNSSEC