zoukankan      html  css  js  c++  java
  • 用python做时间序列预测3:时间序列分解

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

    加法和乘法时间序列

    时间序列的各个观测值可以是以上成分相加或相乘得到: 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()

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

    小结

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

    原文作者: 程序员一一涤生(云+社区)

  • 相关阅读:
    慎用SELECT INTO复制表
    Log4net 配置使用总结(一)
    清除Chrome浏览器的历史记录、缓存
    System.Runtime.InteropServices.COMException (0x80040154)错误
    MS SQL开发命名规则
    查看数据库、表、索引的物理存储情况
    (转)ASP.NET调用javascript脚本的方法总结
    SQL Server ——动态SQL
    SQL性能调优实践——SELECT COUNT
    养成随时注释的好习惯
  • 原文地址:https://www.cnblogs.com/zhukaijian/p/13220500.html
Copyright © 2011-2022 走看看