本章開始学习《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. error和exception的区别

    ------解决方法--------------------------------------------------------了解异常与错误的区别,并且知道当你截获一个异常时,应该怎么办.   ...

  2. Bootstrap-table自定义可编辑每页显示记录数

    写在前面: 最近在做的person功能,由于后期系统中person人数较多,不利用查找person,故需求方将要求可以自己编辑每页显示的数目,而不是固定的写死每页显示的数目. 下面先来看下bootsr ...

  3. web 中加载配置文件

    1.web.xml中配置   <!-- 加载配置文件 -->   <listener>      <description>ServletContextListen ...

  4. asp.net 域名注册查询接口 支持批量后缀查询

    最近在完成公司网站www.xuhongkj.com的时候,需要用到域名查询的功能,网上查了一些资料,几乎都是ASP版的,而且功能有限,不能满足我的要求. 百度后,结合网上的例子,整理出了该功能! as ...

  5. JS中event.preventDefault()取消默认事件能否还原?

    参考知乎讨论:https://www.zhihu.com/question/21891734

  6. Yii2系列教程五:简单的用户权限管理

    上一篇文章讲了用户的注册,验证和登录,这一篇文章按照约定来说说Yii2之中的用户和权限控制. 你可以直接到Github下载源码,以便可以跟上进度,你也可以重头开始,一步一步按照这个教程来做. 鉴于本教 ...

  7. Spark(十一) -- Mllib API编程 线性回归、KMeans、协同过滤演示

    本文测试的Spark版本是1.3.1 在使用Spark的机器学习算法库之前,需要先了解Mllib中几个基础的概念和专门用于机器学习的数据类型 特征向量Vector: Vector的概念是和数学中的向量 ...

  8. go get 下载的包放在哪里呢?

    有些问题,我以前都是似懂非懂,没有去弄个究竟!!!!! 这个习惯非常不好,搞得有些东西看似懂了,又不能百分之百说自己懂了,可能下次就弄不出来了,这样是不可取的. 不能有这种做事的风格. ------- ...

  9. (转)Netty : writeAndFlush的线程安全及并发问题

    rocketmq用netty实现的网络连接,发现它多个线程掉用一个channel连接,所以这个是线程安全的? 使用Netty编程时,我们经常会从用户线程,而不是Netty线程池发起write操作,因为 ...

  10. Docker与PAAS

    Docker与PAAS 学习了:https://blog.csdn.net/raindaywhu/article/details/52057103 Docker基于内存的: