A. 应用时间序列分析有哪几种方法
时间序列分析常用的方法:趋势拟合法和平滑法。
1、趋势拟合法就是把时间作为自变量,相应的序列观察值作为因变量,建立序列值随时间变化的回归模型的方法。包括线性拟合和非线性拟合。
线性拟合的使用场合为长期趋势呈现出线形特征的场合。参数估计方法为最小二乘估计。
非线性拟合的使用场合为长期趋势呈现出非线形特征的场合。其参数估计的思想是把能转换成线性模型的都转换成线性模型,用线性最小二乘法进行参数估计。实在不能转换成线性的,就用迭代法进行参数估计。
2、平滑法是进行趋势分析和预测时常用的一种方法。它是利用修匀技术,削弱短期随机波动对序列的影响,使序列平滑化,从而显示出长期趋势变化的规律 。
(1)时间序列分析数据方法应用扩展阅读
时间序列分析的主要用途:
1、系统描述
根据对系统进行观测得到的时间序列数据,用曲线拟合方法对系统进行客观的描述。
2、系统分析
当观测值取自两个以上变量时,可用一个时间序列中的变化去说明另一个时间序列中的变化,从而深入了解给定时间序列产生的机理。
3、预测未来
一般用ARMA模型拟合时间序列,预测该时间序列未来值。
4、决策和控制
根据时间序列模型可调整输入变量使系统发展过程保持在目标值上,即预测到过程要偏离目标时便可进行必要的控制。
B. 16种常用的数据分析方法-时间序列分析
时间序列(time series)是系统中某一变量的观测值按时间顺序(时间间隔相同)排列成一个数值序列,展示研究对象在一定时期内的变动过程,从中寻找和分析事物的变化特征、发展趋势和规律。它是系统中某一变量受其它各种因素影响的总结果。
研究时间序列主要目的可以进行预测,根据已有的时间序列数据预测未来的变化。时间序列预测关键:确定已有的时间序列的变化模式,并假定这种模式会延续到未来。
时间序列的基本特点
假设事物发展趋势会延伸到未来
预测所依据的数据具有不规则性
不考虑事物发展之间的因果关系
时间序列数据用于描述现象随时间发展变化的特征。
时间序列考虑因素
时间序列分析就其发展历史阶段和所使用的统计分析方法看分为传统的时间序列分析和现代时间序列分析,根据观察时间的不同,时间序列中的时间可以是可以是年份、季度、月份或其他任何时间形式。
时间序列分析时的主要考虑的因素是:
l长期趋势(Long-term trend)
时间序列可能相当稳定或随时间呈现某种趋势。
时间序列趋势一般为线性的(linear),二次方程式的 (quadratic)或指数函数(exponential function)。
l季节性变动(Seasonal variation)
按时间变动,呈现重复性行为的序列。
季节性变动通常和日期或气候有关。
季节性变动通常和年周期有关。
l周期性变动(Cyclical variation)
相对于季节性变动,时间序列可能经历“周期性变动”。
周期性变动通常是因为经济变动。
l随机影响(Random effects)
除此之外,还有偶然性因素对时间序列产生影响,致使时间序列呈现出某种随机波动。时间序列除去趋势、周期性和季节性后的偶然性波动,称为随机性(random),也称不规则波动(irregular variations)。
时间序列的主要成分
时间序列的成分可分为4种:
l趋势(T)、
l季节性或季节变动(S)、
l周期性或循环波动(C)、
l随机性或不规则波动(I)。
传统时间序列分析的一项主要内容就是把这些成分从时间序列中分离出来,并将它们之间的关系用一定的数学关系式予以表达,而后分别进行分析。
时间序列建模基本步骤
1)用观测、调查、统计、抽样等方法取得被观测系统时间序列动态数据。
2)根据动态数据作相关图,进行相关分析,求自相关函数。
相关图能显示出变化的趋势和周期,并能发现跳点和拐点。
跳点是指与其他数据不一致的观测值。如果跳点是正确的观测值,在建模时应考虑进去,如果是反常现象,则应把跳点调整到期望值。
拐点则是指时间序列从上升趋势突然变为下降趋势的点。如果存在拐点,则在建模时必须用不同的模型去分段拟合该时间序列,例如采用门限回归模型。
3)辨识合适的随机模型,进行曲线拟合,即用通用随机模型去拟合时间序列的观测数据。
对于短的或简单的时间序列,可用趋势模型和季节模型加上误差来进行拟合。
对于平稳时间序列,可用通用ARMA模型(自回归滑动平均模型)及其特殊情况的自回归模型、滑动平均模型或组合-ARMA模型等来进行拟合。
当观测值多于50个时一般都采用ARMA模型。对于非平稳时间序列则要先将观测到的时间序列进行差分运算,化为平稳时间序列,再用适当模型去拟合这个差分序列。
spss时间序列分析过程
第一步:定义日期标示量:
打开数据文件,单击"数据",选择"定义日期和时间",弹出"定义日期"对话框,
数据中的起始时间就是数据文件里面的单元格第一个时间,我的第一个是1997年8月,每行表示的是月度销售量,因此,需要从"定义日期"对话框的左侧"个案是"框中选择"年,月",在左侧输入‘1997’,月框中输入‘8’,表示第一个个案的起始月是1997年8月,
最后点击确认,这样spss数据文件里面就会生成3个新的变量
如下图:
第二步:了解时间序列的变化趋势
了解时间序列的变化趋势做一个序列表就可以了,单击"分析",里面选择"时间序列预测,选择"序列图"对话框,然后把'平均值'移到"变量"框里面,‘DATE_’移到"时间轴标签"框中,单击"确定"。结果如图
根据序列图的分析知道,序列的波动随着季节的波动越来越大,所以我们选择乘法模型;
第三步:分析
单击“分析”,选择时间序列预测,然后选择“季节性分解”,弹出“季节性分解”对话框,确认无误之后点击确定,如图:
多了四个变量:
lERR表示误差分析;
lSAS表示季节因素校正后序列;
lSAF表示季节因子;
lSTC表示长期趋势和循环变动序列。
我们可以把新出现的四个变量、平均值和DATE_做序列图。先把ERR、SAS、STC和平均值和DATE_做个序列图,效果如下:
再单独做个SAT和DATE_的时间序列图
第四步:预测
1、 单击“分析”,选择“时间序列预测”,然后选择“创建传统模型”,之后就会弹出“时间序列建模”对话框。
2、 将“平均值”移至“因变量”框中,然后确定中间的“方法”,在下拉列表中选择“专家建模器”项,单击右侧的“条件”按钮,弹出“时间序列建模器:专家建模器条件”对话框。
3、 在“时间序列建模器:专家建模器条件”对话框的“模型”选项卡中,在“模型类型”框中选择“所有模型”项,并勾选“专家建模器考虑季节性模型”复选框,设置完,点“继续”按钮
4、 在“时间序列建模器”对话框中,切换至“保存”选项卡中,勾选“预测值”复选框,单击“导出模型条件”框中“XML文件”后面的“浏览”按钮,然后设置导出的模型文件和保存路径,然后单击“确定”按钮就可以了。
做完上面的步骤之后,在原始数据上面就又会多一列预测值出现。如图:
之前保存了预测的模型,我们现在就利用那个模型进行预测数据。
1、 单击“分析”,选择“时间序列预测”,然后选择“应用传统模型”,弹出“应用模型序列”对话框。具体的操作如下图:
最后一步切换至“保存”界面,勾选“预测值”之后单击确定就可以了。
从预测值直接看看不出来,可以把预测的数据和原始数据放到一起看下,也是直接做序列图就可以。
这样就完成了一次时间序列的模型,具体的预测数据可以看原始数据上面的出现的新的一列数据。
- End -
C. 时间序列数据分析方法
时间序列数据聚类方法主要包括两种思路:
一种是通过时间序列进行压缩降维,转换成静态数据,如通过特征提取、模型参数等方式,再使用静态数据方法进行聚类;另一种是通过改进传统的面向静态数据的点聚类方法,使之适用于序列数据类型。
(1)基于初始数据的聚类
一般指不对初始数据进行压缩,直接进行聚类。可以有效捕捉时间序列的细节,不丢失局部特征,但是数据量大的情况下计算效率降低。
(2)基于特征数据的聚类
通过时域分析、频域分析等方法,提取时间序列的多尺度特征,从而把高维的原始数据序列转换到用特征向量表示的低维特征空间。
(3)基于模型的聚类
基本思路是在基于一定的假设条件,用模型拟合原始序列,再用模型是否能生成另外一个序列作为两个时间序列是否属于同一类的评价指标,或者用模型的参数作为该序列的特征再进行聚类。特点是聚类结果不稳定,对模型依赖性很强,难以可视化。
D. 时间序列分析方法
时间序列是指一组在连续时间上测得的数据,其在数学上的定义是一组向量x(t), t=0,1,2,3,...,其中t表示数据所在的时间点,x(t)是一组按时间顺序(测得)排列的随机变量。包含单个变量的时间序列称为单变量时间序列,而包含多个变量的时间序列则称为多变量。
时间序列在很多方面多有涉及到,如天气预报,每天每个小时的气温,股票走势等等,在商业方面有诸多应用,如:
下面我们将通过一个航班数据来说明如何使用已有的工具来进行时间序列数据预测。常用来处理时间序列的包有三个:
对于基于AR、MA的方法一般需要数据预处理,因此本文分为三部分:
通过简单的初步处理以及可视化可以帮助我们有效快速的了解数据的分布(以及时间序列的趋势)。
观察数据的频率直方图以及密度分布图以洞察数据结构,从下图可以看出:
使用 statsmodels 对该时间序列进行分解,以了解该时间序列数据的各个部分,每个部分都代表着一种模式类别。借用 statsmodels 序列分解我们可以看到数据的主要趋势成分、季节成分和残差成分,这与我们上面的推测相符合。
如果一个时间序列的均值和方差随着时间变化保持稳定,则可以说这个时间序列是稳定的。
大多数时间序列模型都是在平稳序列的前提下进行建模的。造成这种情况的主要原因是序列可以有许多种(复杂的)非平稳的方式,而平稳性只有一种,更加的易于分析,易于建模。
在直觉上,如果一段时间序列在某一段时间序列内具有特定的行为,那么将来很可能具有相同的行为。譬如已连续观察一个星期都是六点出太阳,那么可以推测明天也是六点出太阳,误差非常小。
而且,与非平稳序列相比,平稳序列相关的理论更加成熟且易于实现。
一般可以通过以下几种方式来检验序列的平稳性:
如果时间序列是平稳性的,那么在ACF/PACF中观测点数据与之前数据点的相关性会急剧下降。
下图中的圆锥形阴影是置信区间,区间外的数据点说明其与观测数据本身具有强烈的相关性,这种相关性并非来自于统计波动。
PACF在计算X(t)和X(t-h)的相关性的时候,挖空在(t-h,t)上所有数据点对X(t)的影响,反应的是X(t)和X(t-h)之间真实的相关性(直接相关性)。
从下图可以看出,数据点的相关性并没有急剧下降,因此该序列是非平稳的。
如果序列是平稳的,那么其滑动均值/方差会随着时间的变化保持稳定。
但是从下图我们可以看到,随着时间的推移,均值呈现明显的上升趋势,而方差也呈现出波动式上升的趋势,因此该序列是非平稳的。
一般来讲p值小于0.05我们便认为其是显着性的,可以拒绝零假设。但是这里的p值为0.99明显是非显着性的,因此接受零假设,该序列是非平稳的。
从上面的平稳性检验我们可以知道该时间序列为非平稳序列。此外,通过上面1.3部分的序列分解我们也可以看到,该序列可分解为3部分:
我们可以使用数据转换来对那些较大的数据施加更大的惩罚,如取对数、开平方根、立方根、差分等,以达到序列平稳的目的。
滑动平均后数据失去了其原来的特点(波动式上升),这样损失的信息过多,肯定是无法作为后续模型的输入的。
差分是常用的将非平稳序列转换平稳序列的方法。ARIMA中的 'I' 便是指的差分,因此ARIMA是可以对非平稳序列进行处理的,其相当于先将非平稳序列通过差分转换为平稳序列再来使用ARMA进行建模。
一般差分是用某时刻数值减去上一时刻数值来得到新序列。但这里有一点区别,我们是使用当前时刻数值来减去其对应时刻的滑动均值。
我们来看看刚刚差分的结果怎么样。
让我们稍微总结下我们刚刚的步骤:
通过上面的3步我们成功的将一个非平稳序列转换成了一个平稳序列。上面使用的是最简单的滑动均值,下面我们试试指数滑动平均怎么样。
上面是最常用的指数滑动平均的定义,但是pandas实现的指数滑动平均好像与这个有一点区别,详细区别还得去查pandas文档。
指数滑动均值的效果看起来也很差。我们使用差分+指数滑动平均再来试试吧。
在上面我们通过 取log+(指数)滑动平均+差分 已经成功将非平稳序列转换为了平稳序列。
下面我们看看,转换后的平稳序列的各个成分是什么样的。不过这里我们使用的是最简单的差分,当前时刻的值等于原始序列当前时刻的值减去原始序列中上一时刻的值,即: x'(t) = x(t) - x(t-1)。
看起来挺不错,是个平稳序列的样子。不过,还是检验一下吧。
可以看到,趋势(Trend)部分已基本被去除,但是季节性(seasonal)部分还是很明显,而ARIMA是无法对含有seasonal的序列进行建模分析的。
在一开始我们提到了3个包均可以对时间序列进行建模。
为了简便,这里 pmdarima 和 statsmodels.tsa 直接使用最好的建模方法即SARIMA,该方法在ARIMA的基础上添加了额外功能,可以拟合seasonal部分以及额外添加的数据。
在使用ARIMA(Autoregressive Integrated Moving Average)模型前,我们先简单了解下这个模型。这个模型其实可以包括三部分,分别对应着三个参数(p, d, q):
因此ARIMA模型就是将AR和MA模型结合起来然后加上差分,克服了不能处理非平稳序列的问题。但是,需要注意的是,其仍然无法对seasonal进行拟合。
下面开始使用ARIMA来拟合数据。
(1) 先分训练集和验证集。需要注意的是这里使用的原始数据来进行建模而非转换后的数据。
(2)ARIMA一阶差分建模并预测
(3)对差分结果进行还原
先手动选择几组参数,然后参数搜索找到最佳值。需要注意的是,为了避免过拟合,这里的阶数一般不太建议取太大。
可视化看看结果怎么样吧。
(6)最后,我们还能对拟合好的模型进行诊断看看结果怎么样。
我们主要关心的是确保模型的残差(resial)部分互不相关,并且呈零均值正态分布。若季节性ARIMA(SARIMA)不满足这些属性,则表明它可以进一步改善。模型诊断根据下面的几个方面来判断残差是否符合正态分布:
同样的,为了方便,我们这里使用 pmdarima 中一个可以自动搜索最佳参数的方法 auto_arima 来进行建模。
一般来说,在实际生活和生产环节中,除了季节项,趋势项,剩余项之外,通常还有节假日的效应。所以,在prophet算法里面,作者同时考虑了以上四项,即:
上式中,
更多详细Prophet算法内容可以参考 Facebook 时间序列预测算法 Prophet 的研究 。
Prophet算法就是通过拟合这几项,然后把它们累加起来得到时间序列的预测值。
Prophet提供了直观且易于调整的参数:
Prophet对输入数据有要求:
关于 Prophet 的使用例子可以参考 Prophet example notebooks
下面使用 Prophet 来进行处理数据。
参考:
Facebook 时间序列预测算法 Prophet 的研究
Prophet example notebooks
auto_arima documentation for selecting best model
数据分析技术:时间序列分析的AR/MA/ARMA/ARIMA模型体系
https://github.com/advaitsave/Introction-to-Time-Series-forecasting-Python
时间序列分析
My First Time Series Comp (Added Prophet)
Prophet官方文档: https://facebookincubator.github.io