在初始概念篇中,咱们简单提到了时间序列由趋势、周期性、季节性、偏差构成,本文将介绍如何将时间序列的这些成分分解出来。分解的使用场景有不少,好比当咱们须要计算该时间序列是否具备季节性,或者咱们要去除该时间序列的趋势和季节性,让时间序列变得平稳时都会用到时间序列分解。python
时间序列的各个观测值能够是以上成分相加或相乘获得:
Value = Trend + Seasonality + Error
Value = Trend * Seasonality * Errorgit
下面的代码展现了如何用python从时间序列中分解出相应的成分:github
from statsmodels.tsa.seasonal import seasonal_decompose from dateutil.parser import parse # Import Data df = pd.read_csv('https://raw.githubusercontent.com/selva86/datasets/master/a10.csv', parse_dates=['date'], index_col='date') # Multiplicative Decomposition result_mul = seasonal_decompose(df['value'], model='multiplicative', extrapolate_trend='freq') # Additive Decomposition result_add = seasonal_decompose(df['value'], model='additive', extrapolate_trend='freq') # Plot plt.rcParams.update({'figure.figsize': (10,10)}) result_mul.plot().suptitle('Multiplicative Decompose', fontsize=22) result_add.plot().suptitle('Additive Decompose', fontsize=22) plt.show() # Extract the Components ----# Actual Values = Product of (Seasonal * Trend * Resid) df_reconstructed = pd.concat([result_mul.seasonal, result_mul.trend, result_mul.resid, result_mul.observed], axis=1) df_reconstructed.columns = ['seas', 'trend', 'resid', 'actual_values'] df_reconstructed.head()
对比上面的加法分解和乘法分解能够看到,加法分解的残差图中有一些季节性成分没有被分解出去,而乘法相对而言随机多了(越随机意味着留有的成分越少),因此对于当前时间序列来讲,乘法分解更适合。code
时间序列分解不只能够让咱们更清晰的了解序列的特性,有时候人们还会用分解出的残差序列(偏差)代替原始序列来作预测,由于原始时间序列通常是非平稳序列,而这个残差序列是平稳序列,有助于咱们作出更好的预测,固然预测后的序列还要加回或乘回趋势成分和季节性成分,平稳序列的具体内容将在下一篇文章中介绍。blog
ok,本篇就这么多内容啦~,感谢阅读O(∩_∩)O。ip