用python做时间序列预测三:时间序列分解

python

在初始概念篇中,我们简单提到了时间序列由趋势、周期性、季节性、误差构成,本文将介绍如何将时间序列的这些成分分解出来。分解的使用场景有很多,比如当我们需要计算该时间序列是否具有季节性,或者我们要去除该时间序列的趋势和季节性,让时间序列变得平稳时都会用到时间序列分解。

加法和乘法时间序列

时间序列的各个观测值可以是以上成分相加或相乘得到:

Value = Trend + Seasonality + Error

Value = Trend * Seasonality * Error

分解

下面的代码展示了如何用python从时间序列中分解出相应的成分:

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()

对比上面的加法分解和乘法分解可以看到,加法分解的残差图中有一些季节性成分没有被分解出去,而乘法相对而言随机多了(越随机意味着留有的成分越少),所以对于当前时间序列来说,乘法分解更适合。

小结

时间序列分解不仅可以让我们更清晰的了解序列的特性,有时候人们还会用分解出的残差序列(误差)代替原始序列来做预测,因为原始时间序列一般是非平稳序列,而这个残差序列是平稳序列,有助于我们做出更好的预测,当然预测后的序列还要加回或乘回趋势成分和季节性成分,平稳序列的具体内容将在下一篇文章中介绍。

ok,本篇就这么多内容啦~,感谢阅读O(∩_∩)O。

以上是 用python做时间序列预测三:时间序列分解 的全部内容, 来源链接: utcz.com/z/387126.html

回到顶部