Python 用ARIMA、GARCH模型预测分析股票市场收益率时间序列1:https://developer.aliyun.com/article/1485068
随机行走的一阶差分
我们的定义成立,因为这看起来与白噪声过程完全一样。如果我们对 SPY 价格的一阶差分进行随机游走会怎么样?
# SPY价格的一阶差分 plt(diff(dt.PY), lag=30)
将随机行走模型拟合到ETF价格
它与白噪声非常相似。但是,请注意 QQ 和概率图的形状。这表明该过程接近正态分布,但具有“重尾”。 ACF 和 PACF 在滞后 1、5?、16?、18 和 21 附近似乎也存在一些显着的序列相关性。这意味着应该有更好的模型来描述实际的价格变化过程。
线性模型
线性模型又称趋势模型,代表了一个可以用直线作图的TS。其基本方程为。
在这个模型中,因变量的值由β系数和一个单一的自变量--时间决定。一个例子是,一家公司的销售额在每个时间段都会增加相同的数量。让我们来看看下面的一个特制的例子。在这个模拟中,我们假设坚定的ABC公司在每个时间段的销售额为-50.00元(β0或截距项)和+25.00元(β1)。
# 模拟线性趋势 # 例子 公司ABC的销售额默认为-50元,在每个时间步长为+25元 w = n.anom.ann(100) y = nppt_lke(w) b0 = -50. b1 = 25. for t in rge(lnw)): y\[t\] = b0 + b1*t + w\[t\] plt(y, lags=ls)
线性趋势模型模拟
在这里我们可以看到模型的残差是相关的,并且作为滞后的函数线性减少。分布近似正态。在使用此模型进行预测之前,我们必须考虑并消除序列中存在的明显自相关。PACF 在滞后 1 处的显着性表明_自回归_ 模型可能是合适的。
对数线性模型
这些模型与线性模型类似,只是数据点形成了一个指数函数,代表了相对于每个时间步的恒定变化率。例如,ABC公司的销售额在每个时间步长增加X%。当绘制模拟的销售数据时,你会得到一条看起来像这样的曲线。
# 模拟ABC的指数式增长 # 日期 pdat_rge('2007-01-01', '2012-01-01', freq='M') # 假设销售额以指数速度增长 ale = \[exp( x/12 ) for x inage1, len(id)+1)\] # 创建数据框架并绘图 df = d.ataame(sals, ix=x) plt()
模拟指数函数
然后我们可以通过采用销售额的自然对数来转换数据。现在线性回归拟合数据。
# ABC对数销售 indexid.plot()
指数函数的自然对数
如前所述,这些模型有一个致命的弱点。它们假设连续不相关的误差,正如我们在线性模型的例子中看到的那样。在现实生活中,TS数据通常会违反我们的平稳假设,这使我们转向自回归模型。
自回归模型 - AR(p)
当因变量针对自身的一个或多个滞后值进行回归时,该模型称为自回归模型。公式如下所示:
AR (P) 模型
当您描述 模型的“阶”时,例如阶“p”的 AR 模型, p 表示模型中使用的滞后变量的数量。例如,AR(2) 模型或_二阶_自回归模型如下所示:
AR (2) 模型
这里,alpha (a) 是系数,omega (w) 是白噪声项。在 AR 模型中,Alpha 不能等于 0。请注意,alpha 设置为 1 的 AR(1) 模型是_随机游走_ ,因此不是平稳的。
AR(1) 模型,ALPHA = 1;随机漫步
让我们模拟一个 alpha 设置为 0.6 的 AR(1) 模型
# 模拟一个α=0.6的AR(1)过程 rndm.sed(1) n_sams = int(1000) a = 0.6 x = w = n.amma(siz=_apes) for t in rane(n_saps): x\[t\] = a*x\[t-1\] + w\[t\] plot(x, gs=lgs)
AR(1) 模型,ALPHA = 0.6
正如预期的那样,我们模拟的 AR(1) 模型的分布是正常的。滞后值之间存在显着的序列相关性,尤其是在滞后 1 处,如 PACF 图所示。
现在我们可以使用 Python 的 statsmodels 拟合 AR(p) 模型。首先,我们将 AR 模型拟合到我们的模拟数据并收益估计的 alpha 系数。然后我们使用 statsmodels 函数“order()”来查看拟合模型是否会选择正确的滞后。如果 AR 模型是正确的,估计的 alpha 系数将接近我们的真实 alpha 0.6,所选阶数等于 1。
# 拟合AR(p)模型到模拟的AR(1)模型,alpa=0.6 md = AR(x).itm=30, ic='aic', trnd='nc') %time st_oer = mt.R(x).stor( mxag=30, ic='aic', trnd='nc') tuerer = 1
看起来我们能够恢复模拟数据的基础参数。让我们用 alpha\_1 = 0.666 和 alpha\_2 = -0.333 来模拟 AR(2) 过程。为此,我们使用 statsmodel 的“generate_samples()”函数。该函数允许我们模拟任意阶数的 AR 模型。
# 模拟一个AR(2)过程 n = int(1000) # Python要求我们指定零滞后值,即为1 # 还要注意,AR模型的字母必须是否定的 # 对于AR(p)模型,我们也将MA的betas设置为0 ar = nr_\[1, -ahas\] ma = npr_\[1, beas\] ar2 = smt.arme_pe(ar=ar, ma=a, nsale=n) plot(ar2, lags=lags)
AR(2) 模拟 ALPHA\_1 = 0.666 和 ALPHA\_2 = -0.333
让我们看看是否可以恢复正确的参数。
# 拟合AR(p)模型来模拟AR(2)过程 max_lag = 10 est_rer = st.AR(r2)sennc') tu_rder = 2
让我们看看 AR(p) 模型将如何拟合 MSFT 对数收益。这是收益TS。
MSFT 对数收益时间序列
# 选择MSFT收益的最佳滞后阶数 max_ag = 30 ml = smt.AR(ls.MSFT).fit(mam_lg, c='aic', tnc) es_rr = tAR(rts.FT).secter( maag=malag ic=aic', re=nc') p('最佳估计滞后阶数 = {}'.format(etoer))
最好的阶数是 23 个滞后或 23 !任何具有这么多参数的模型在实践中都不太可能有用。显然,收益过程背后的复杂性比这个模型所能解释的要复杂得多。
Python 用ARIMA、GARCH模型预测分析股票市场收益率时间序列3:https://developer.aliyun.com/article/1485073