赞
踩
整理了一下时间序列不同于别的数据的比较典型的几个处理方法,欢迎讨论~
金融数据往往有很大的波动率,为了在一定程度上平滑这些数据,采用差分处理:两个相邻数据做差,这样可以为模型减少一些噪声便于学习,但每次做差都会损失一些信息,所以差分不宜超过两次,对高频数据,可考虑采用分数阶差分。
以close为目标变量,open为自变量为例:
freq['open_diff'] = freq['open'].diff()
对于一个数据集,我们要用特征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)
- from statsmodels.tsa.stattools import acf
- from statsmodels.graphics.tsaplots import plot_acf
- from statsmodels.tsa.stattools import pacf
- from statsmodels.graphics.tsaplots import plot_pacf
from statsmodels.tsa.stattools import adfuller,kpss
from hurst import compute_Hc
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
1. cadf
2. johansen
from statsmodels.tsa.vector_ar import vecm
有别的再加吧
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。