乐趣区

关于深度学习:时间序列分解将时间序列分解成基本的构建块

大多数工夫序列能够合成为不同的组件,在本文中,我将探讨这些不同的组件是什么,如何获取它们以及如何应用 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

退出移动版