时间序列分析方法汇总(python)

文章介绍了时间序列数据处理的几种典型方法,包括差分用于平滑数据,滞后处理以对齐特征与目标变量,以及滑动窗口技术来关注近期数据。此外,还提到了自相关性和其他统计模型在时间序列分析中的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

整理了一下时间序列不同于别的数据的比较典型的几个处理方法,欢迎讨论~

目录

预处理

平滑

滤波

信号分解

差分(dif)

滞后(lag)

滑动

变量分析

单变量分析方法

多变量分析方法

时间序列模型

波动率模型Volatility model

高低频时序的不同处理方法


预处理

平滑

移动平均Moving average(加法,乘法),指数平滑Exponential Smoothing,STL分解

滤波

hp滤波

信号分解

傅里叶变换

差分(dif)

金融数据往往有很大的波动率,为了在一定程度上平滑这些数据,采用差分处理:两个相邻数据做差,这样可以为模型减少一些噪声便于学习,但每次做差都会损失一些信息,所以差分不宜超过两次,对高频数据,可考虑采用分数阶差分。

以close为目标变量,open为自变量为例:

freq['open_diff'] = freq['open'].diff()

滞后(lag)

对于一个数据集,我们要用特征x们去预测目标列y,换句话说,要用今天的数据去预测明天的y,所以我们需要让x下移一位把它们对齐,这时候索引 2015-3-20 11:15 对应的就是 上一时刻(10:45) 的open,high,low 和 当前(11:15)的close。

freq['open_lag'] = freq['open'].shift(1)

或者把y给领先一下也可以,只不过这个时候2015-3-20 11:15对应的是下一时刻(13:15)的close和当前时刻(11:15)的x。

这两个方法没什么差别,只要清楚当前索引时间对应的是哪天的y就好了。

滑动

由于时间序列的特殊性,它近期的数据往往比久远的历史数据更重要的一些

为了摒弃对当前而言过于久远的数据,我们固定一个窗口,当加入新数据时,就同时移动窗口的左右边界,随着一条新数据被纳入,最早的一条数据就会被扔掉。像指数平滑也是加重了近期数据的比重来削弱早期数据的影响。


def rolling(window,step,dataset)
    Date = []
    hurst = [] 
    for i in range(window,len(dataset),step): #[左闭右开)
        #[0,100),[3,103)...[9,109)
        df = dataset.iloc[i-window:i].values.reshape(-1,1) 
        #date[0]...date[9]
        date = dataset.index[i-window]
        hurst_exponent, c, data = compute_hc(df)#对当前窗口的数据进行计算(hurst指数)
        hurst.append(hurst_exponent)
        Date.append(date)

    plt.plot(Date, hurst)
    plt.xlabel('Date')

    plt.ylabel('hurst')
    plt.title(f'rolling window {window}')
    plt.show
    return Date,hurst

rolling(100,3,freq_train)

变量分析

单变量分析方法

  • 自相关性Auto-correlation:当前时刻数据与历史时刻的相关性

from statsmodels.tsa.stattools import acf
from statsmodels.graphics.tsaplots import plot_acf
  • 偏自相关性Partial Auto-Correlation

from statsmodels.tsa.stattools import pacf
from statsmodels.graphics.tsaplots import plot_pacf
  • 平稳性检验Stationary:adf&kpss, 这俩H0和H1正好相反

from statsmodels.tsa.stattools import adfuller,kpss
  • hurst:序列是否随机游走(白噪声之和)

from hurst import compute_Hc
  • variance ratio test 方差比率: 关于市场有效说的随机游走检测

  • anova方差分析

from scipy.stats import kstest, f_oneway
  • 统计模型

注:需要考虑序列平稳,若当前阶段的数据不处于平稳状态,则对下一阶段不具备代表性,会导致回归分析的结果不准确。

线性回归,逻辑回归等:统计中的拟合结果会显示系数、t统计量、f统计量这些

import statsmodels.api as sm
sm.OLS(y,x).fit()
sm.Logit(y,x).fit()
  • 模型的残差白噪声检验: 残差为白噪声则序列拟合的好(反之说明还有信息没有被拟合)

from statsmodels.stats.diagnostic import acorr_ljungbox
  • 因果分析Causation(格兰杰因果)

多变量分析方法

  • 协整Cointegration:多序列间存在组合平稳的现象(cadf, johansen)

from statsmodels.tsa.vector_ar import vecm

时间序列模型

  • 波动率模型Volatility model

    • ar:自回归模型,ma(滑动平均模型),arima(Auto Regressive Integrated Moving Average),步骤以ar为例:
  • #白噪声检验
    from statsmodels.tsa import stattools 
    LjungBox=stattools.q_stat(stattools.acf(df['close']),len(df['close']))
    
    #平稳性检验
    from statsmodels.tsa.stattools import adfuller
    
    #定阶
    from statsmodels.graphics.tsaplots import plot_pacf
    plot_pacf(df['close'],use_vlines=True,lags=30)
    
    #建立模型
    from sklearn.metrics import mean_squared_error
    import statsmodels.tsa.api as smt 
    
    ar = smt.ARMA(df['close'], order=(1, 0)).fit(disp=-1)
    print(ar.summary())
    
    #有效性检验:残差白噪声
    from statsmodels.stats.diagnostic import acorr_ljungbox as lb_test
    #残差正态性
    from statsmodels.graphics.api import qqplot
    
    #预测
    
    • arch(自回归条件异方差模型), garch,以arch为例:
  • #平稳,白噪声
    #取均值模型的残差
    residual_ar = ar_model.resid
    #对残差进行检验,
    from statsmodels.stats.diagnostic import acorr_ljungbox as lb_test
    lb_test(residual_ar1**2)[1] #get p-value
    """
    H0:序列无相关性
    p-value < 0.05,认为显著,残差的平方非白噪声,序列有相关性,则建立arch模型
    """
    #定阶
    plot_pacf(residual_ar1**2,use_vlines=True,lags=30)
    #arch
    import arch
    arch = arch.arch_model(df['data1'],mean='AR',lags=1,vol='ARCH',p=3) 
    ARCH = arch.fit()
    ARCH.summary()
    #残差检验(正态分布)
    
    

补充:聚集现象:一个大的扰动会带来另一个扰动,之后产生聚集现象

高低频时序的不同处理方法

补充中...

ARMA模型的参数估计 | 金融时间序列分析备课笔记

金融时间序列入门(四)--- ARCH、GARCH - 社区 - 优矿 (datayes.com)

时间序列--ARCH模型 - 知乎 (zhihu.com)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值