共计 2556 个字符,预计需要花费 7 分钟才能阅读完成。
大多数工夫序列能够合成为不同的组件,在本文中,我将探讨这些不同的组件是什么,如何获取它们以及如何应用 Python 进行工夫序列合成。
工夫序列组成
工夫序列是(次要)三个组成部分的组合:趋势、季节性和残差 / 残余局部。让咱们简略的解释这三个组成部分
趋势:这是该序列的整体静止。它可能会继续减少、也可能继续缩小,或者是稳定的。
季节性:系列中的任何惯例季节性模式。比方,冬季冰淇淋的销量通常高于夏季。
残差:这是咱们思考到趋势和季节性后剩下的局部。它也能够被认为只是统计噪声,或者是临时性事件的影响,这个残差量也有一个独自的周期重量,但它通常被纳入趋势重量。
加法模型与乘法模型
这些组件的组合形式取决于工夫序列的性质。对于加法模型:
对于乘法模型:
其中 Y 是序列,T 是趋势,S 是季节性,R 是残差重量。
当序列变动的大小尺度统一的时候,加法模型是最合适的。而当序列的稳定处于绝对和比例范畴内时乘法模型是比拟适合的。
例如,如果冬季冰淇淋的销量每年高出 1,000 个,则该模型是加法的。如果每年夏天销售额持续增长 20%,但相对销售额在变动,则该模型是乘法的。稍后咱们将探讨一个示例,该示例能够使该实践更加具体。
为了计算和可视化的突变,能够通过对数变换或 Box-Cox 变换将乘法模型转换为加法模型:
合成是如何工作的
有多种算法和办法能够将工夫序列合成为三个重量。以下的经典办法,常常会应用并且十分直观。
- 应用挪动 / 滚动平均值计算趋势重量 T。
- 对序列进行去趋势解决,Y-T 用于加法模型,Y/T 用于乘法模型。
- 通过取每个节令的去趋势序列的平均值来计算节令重量 S。
- 残差重量 R 的计算公式为:对于加法模型 R = Y-T-R,对于乘法模型 R = Y/(TR)。
还有其余几种可用于合成的办法,例如 STL、X11 和 SEATS。这些是先进的办法,是对经典办法的根本办法的补充,并改良了它的毛病。如果有想理解这些最新办法的能够留言,咱们单开一篇文章介绍。
Python 中进行工夫序列合成
这里让咱们应用 1948 年至 1961 年的美国航空客运量数据集:
#https://www.kaggle.com/datasets/ashfakyeafi/air-passenger-data-for-time-series-analysis
import plotly.express as px
import pandas as pd
# Read in the data
data = pd.read_csv('AirPassengers.csv', index_col=0)
data.index = pd.to_datetime(data.index)
# Plot the data
fig = px.line(data, x=data.index, y='#Passengers',
labels=({'#Passengers': 'Passengers', 'Month': 'Date'}))
fig.update_layout(template="simple_white", font=dict(size=18),
title_text='Airline Passengers', width=650, title_x=0.5, height=400)
fig.show()
从图中咱们察看到趋势是减少的,每年也有季节性。稳定的大小随着工夫的推移而减少,因而咱们能够说这是一个乘法模型。
statmodels 中蕴含了 seasonal_decomposition 函数能够帮咱们来合成工夫序列,并在咱们要在调用函数时指定这是一个“乘法”模型:
from statsmodels.tsa.seasonal import seasonal_decompose
import matplotlib.pyplot as plt
# Plot the decomposition for multiplicative series
data.rename(columns={'#Passengers': 'Multiplicative Decomposition'}, inplace=True)
decomposition_plot_multi = seasonal_decompose(data['Multiplicative Decomposition'],
model='multiplicative')
decomposition_plot_multi.plot()
plt.show()
从上图中能够看到,该函数的确胜利地捕捉了这三个组成部分。
通过利用 Scipy 的函数 boxcox,能够应用 Box-Cox 变换稳固方差,这样能够将序列转换为一个加法模型:
# Import packages
from statsmodels.tsa.seasonal import seasonal_decompose
import matplotlib.pyplot as plt
from scipy.stats import boxcox
# Apply boxcox to acquire additive model
data['Additive Decomposition'], lam = boxcox(data['#Passengers'])
# Plot the decomposition for additive series
decomposition_plot_add = seasonal_decompose(data['Additive Decomposition'],
model='additive')
decomposition_plot_add.plot()
plt.show()
这个函数也很好地捕捉了这三个组件。然而咱们看到残差在晚期和前期具备更高的波动性。所以在为这个工夫序列构建预测模型时,须要思考到这一点。
总结
在这篇文章中,咱们展现了如何将工夫序列合成为三个根本组成部分: 趋势、季节性和残差。这三个组成部分的组合产生了理论的工夫序列,它们的组合能够是加性的也能够是乘性的。有几种更新技术能够执行合成,如 STL, SEAL 和 X11,然而经典的办法简略并且直观。最初通过合成工夫序列有助于建设对数据的了解,从而更容易做出将来的预测。
https://avoid.overfit.cn/post/c9810ffc726b4cbeba5704e392408dcc
作者:Egor Howell