[Day1] 时间序列分析:时间序列资料属性拆解

欢迎来到【时间序列分析与预测方法大全】第一篇!

本篇我们会介绍时间序列资料所包含的属性
先对资料特性有基本认识後,进入到方法和模型时才不会对各种名词产生问号哦~

文章同步连载於笔者个人网站:[IT铁人赛] [Day1] 时间序列分析:时间序列资料属性拆解 (附程序码)

时间序列的变量数目

时间序列资料可能会是单变量或多变量的,例如:

  • 单变量:每日气温变化
  • 多变量:每日股市开盘、收盘价

不同的变量个数,适合的分析/预测方法不同、模型架构也会随之调整;如果有多个变量,我们就需要关注变量间是否存在相关性。

时间序列所包含的属性

  • 有系统性的变量 (Systemic variable):因为拥有「一致性」或「循环」而可以被建模(能找出一个模式)
    1. Level:一段时间序列内的平均量
    2. Trend:时间序列变化的趋势,例如比上个时间点增加/减少多少
    3. Seasonality:时间序列中的短期循环(季节性)
  • 非系统性变量 (Non-systemic variable):因为更多是「随机性」产生,无法被很好的模式化
    1. Noise:现实世界中的时间序列不会像正弦波、余弦波这样完美,会存在随机变动量

所有时间序列资料都有 Level 和 Noise 属性, Trend 和 Seasonality 则不一定存在

时间序列资料的类型

根据上述 4 种属性,可以组合出不同类型的时间序列:

  • 相加型 (Additive):属性相加所形成的时间序列
    https://chart.googleapis.com/chart?cht=tx&chl=y(t)%20%3D%20Level%20%2B%20Trend%20%2B%20Seasonality%20%2B%20Noise

    • Linear trend:线性增减
    • Linear seasonality:季节性循环和增幅/减幅固定
  • 相乘型 (Multiplicative):属性相乘所形成的时间序列,可能为二次、高次或指数方程序
    https://chart.googleapis.com/chart?cht=tx&chl=y(t)%20%3D%20Level%20*%20Trend%20*%20Seasonality%20*%20Noise

    • Non-linear trend:非线性增减
    • Non-linear seasonality:季节性循环和增幅/减幅不固定

[Coding] 使用 statsmodels 将时间序列做成份分解

  • 范例资料:Airline Passenger Dataset
    既然介绍了时间序列会有的属性,接下来我们用超简单的范例资料集进行 Python 实作分解,看看分解後的时间序列属性会是怎样的:
import pandas as pd
import matplotlib.pyplot as plt

data_uri = 'https://raw.githubusercontent.com/jbrownlee/Datasets/master/airline-passengers.csv'
data = pd.read_csv(data_uri, header=0, index_col=0)
data.plot()
plt.show();

airline_passenger_series_plot.png

根据范例中的时间序列资料,我们推测他更像是 Multiplicative 的时间序列类型

from statsmodels.tsa.seasonal import seasonal_decompose
decomposition = seasonal_decompose(data, model='multiplicative')
decomposition.plot()
plt.show();

decomposition_plot.png

由 decomposition plot 可以看到我们的范例时序资料,呈现出了以下特性:

  • 每年近似线性增长的趋势
  • 频率和幅度都几乎完全固定的季节性
  • 系统性变数之外的残差则在 1953 年以前及 1958 年以後变异相对较大(不稳定、易有随机波动)

本篇重点总结

  1. 时间序列属性可拆解为 4 种,分别是 level, trend, seasonality & noise
  2. 依据不同的属性组成,时间序列资料的类型可分为两种,Additive & Multiplicative
  3. 使用 decompose 方法将时间序列中属性各自分解出来,能帮助我们更具体的描述不同时间序列之间的差异

如果你喜欢本系列的整理,还请帮我按赞本文&订阅我的主题哦!谢谢你的阅读和回馈!


<<:  Day 16 建立资料库

>>:  [Day 1] php介绍+基础语法

[17] 建立统一放资料的地方

建立一个放资料的地方,统一读取和写入这样比较方便 dataCenter.js const GetIn...

【Day 23】JavaScript 条件(三元)运算子

条件运算子 是 JavaScript 中唯一需要三个运算元的运算子。 这个运算子接受两个运算元作为值...

Day09:程序码编辑器的实用快捷键(1)

一、前言   VSCode 是微软开发的文字编辑器,同时支援 Windows、Linux 和 mac...

[DAY 16] _Si7020温湿度读写

今天来说说温湿度读取的部分吧,首先来看看这颗的Datasheet: https://www.sila...

D3JsDay25圈圈圆圆圈圈,甜甜黏黏甜甜—圆饼图与环圈图

圆饼图(环圈图)简介 圆饼图和环圈图常出现在我们统计图表当中,一般用来表示各个分类的数量所占的百分比...