ACF
先了解一下概念,我不喜欢用公式套话讲。
ACF(自相关函数):就是看看当前的股票价格和之前的股票价格之间有没有关系。比如说,今天的价格和昨天的价格是不是有联系,今天的价格和前天的价格是不是有联系,依此类推。
如果 ACF 值很高,说明今天的价格和之前某一天的价格关系很大。这可能意味着股票价格有某种规律,比如每隔几天就有一个相似的趋势(这就是所谓的“季节性”或“趋势”)。
假设我们有一系列的开盘价:
今天的开盘价(D0):100元
昨天的开盘价(D1):98元
前天的开盘价(D2):97元
大前天的开盘价(D3):96元
四天前的开盘价(D4):95元
那么ACF看的是
今天的开盘价和昨天的开盘价之间的关系。
今天的开盘价和前天的开盘价之间的关系。
今天的开盘价和大前天的开盘价之间的关系。
我们计算的式子是
我们计算出
自相关函数(ACF)的值也在 -1 和 1 之间。,ACF()里面的1,2,3,4是代表相较与前面的前几天,如ACF(1)代表乡较与前一天,2代表相较与前两天
ACF正相关:如果 ACF 是正值,说明当前的开盘价和之前某一天的开盘价之间有正相关关系。也就是说,如果之前某一天的开盘价较高,那么当前的开盘价也可能较高;反之亦然。
比如: ACF(1)=0.335 表示今天的开盘价和昨天的开盘价有正相关关系。昨天的开盘价高,今天的开盘价也可能高。
**ACF负相关:**如果 ACF 是负值,说明当前的开盘价和之前某一天的开盘价之间有负相关关系。也就是说,如果之前某一天的开盘价较高,那么当前的开盘价可能较低;反之亦然。
比如: ACF(3)=−0.346 表示今天的开盘价和大前天的开盘价有负相关关系。大前天的开盘价高,今天的开盘价可能低。
当然这些只是可能,对于股价预测来说,它不靠谱,因为这只是理论罢了,真正的股票没有规律,如果有我也不会这么穷了。
**那么我们是不是得到了结论:**如果ACF越高,就代表以前的股价和现在的股价相关性高,那么你仔细想想,相关性高代表什么?那是不是代表着
之前的价格和今天的价格可以建立某种关系趋势函数,我们可以从前面之前的价格推断出我们今天的价格。
什么是季节性?趋势?
**举个例子:**我开了一个冰淇淋店,一般是夏天收益高,其他季节淡吧,那么我卖东西是不是可以遵循这个规律,夏天多进点货,其他季节少一点。那么着就是季节性,也就是趋势。夏天多来电,其他季节少来点。
模型选择问题
那我们进行深度学习训练,或者进行股价预测的时候,我们该怎么确定是要高ACF和低ACF呢?
这个是根据模型来选择的
**高的 ACF 值:**适合使用复杂的时间序列模型(如 ARIMA 或 SARIMA),因为这些模型可以捕捉到数据中的自相关性和季节性成分。
**低的 ACF 值:**适合使用简单的平滑模型或移动平均模型,因为数据自相关性较弱。
ACF处理问题
再我们进行股价预测的时候,我们一般考虑为有一支非常平稳的趋势线让股价上涨,为什么?因为有利我们模型的数据处理,以(informer)为例子。加入编码的时候数据突然忽高,那么得到的上下文信息就稳定,我们预测的结果就会有偏差。所以我们一般会进行处理,让它趋于平稳上涨。
那么一般用什么呢?(这里只介绍一种)
**差分:**我们一般是先画出数据的差分图,看是否有趋势或者季节性。
那么大家肯定想知道什么是季节性,如下图,这个是冰淇淋的销售季度图,我们发现它总是有规律的起浮。那么这就是有规律的。
看不懂看下面这个画出来的ACF图,你看1,2,3,4总是有规律的上下上下浮动。这就是不平稳的。
所以需要差分处理。那我们处理前后的图变成什么样子呢?
处理前的
处理后的:发现是不是平稳一些
PACF(偏自相关系数)
讲白话,比如ACF是前几天对当天的影响,那么PACF是前面的某一天对当天的影响。
我们还是之前的那个股价的例子:
今天的开盘价(D0):100元
昨天的开盘价(D1):98元
前天的开盘价(D2):97元
大前天的开盘价(D3):96元
四天前的开盘价(D4):95元
得到
PACF(1) = 0.8
PACF(2) = 0.3
PACF(3) = -0.1
PACF(4) = -0.2
偏自相关函数(PACF)的值通常在 -1 和 1 之间,正值代表正相关,负值代表负相关,意义和前面ACF一样,只不过是针对前面的特指某一天而言。PACF()里面的1,2,3,4是代表相较与前面的第几天比如PACF(1)代表前一天对今天的影响,PACF(2)代表倒数第二天对今天的影响。。。
PACF(1) = 0.8:昨天的开盘价较高,今天的开盘价也可能较高。正相关性较强,表示昨天的开盘价对今天的开盘价有显著的正面影响。前天的开盘价较高,今天的开盘价也可能较高,但这种影响比滞后 1 的影响要小一些。
**PACF(2) = 0.3:**前天的开盘价(D2 = 97元)对今天的开盘价(D0 = 100元)有中等程度的直接影响,而这种影响不是通过昨天的开盘价间接产生的。大前天的开盘价较高,今天的开盘价可能略低,但这种负相关性很弱。
PACF(3) = -0.1四天前的开盘价(D4 = 95元)对今天的开盘价(D0 = 100元)有中等程度的负相关影响。四天前的开盘价较高,今天的开盘价可能较低。负相关性表明四天前的开盘价对今天的开盘价有一定的反向影响。
模型选择
那么我们模型所需要数据的PACF是越大越好还是越小越好呢?
答案是看你的模型复杂度。
PACF 值越大:表示滞后期的直接相关性越强,应在模型中考虑这些滞后期。
PACF 值越小:表示滞后期的直接相关性越弱,可以忽略这些滞后期。
那么我们人事一下这个
AR项(自回归项,Autoregressive term)是时间序列模型中表示当前值与其过去值之间关系的一部分。 意思就是当前值可以通过过去值的线性组合来解释。
首先我们看ACF和PACF是否显著是用其值的绝对值是否大于你的置信区间来定义的!
比如 你模型定义|PACF|>0.2就是很好了,那么PACF(2)=0.3就是显著的。
对于我们的简单模型来说 如lstm
简单模型只选择 PACF 图中最显著的几个滞后期作为自回归项(AR 项)。
例如,若 PACF(1) 显著,可以选择 AR(1) 模型;若 PACF(1) 和 PACF(2) 显著,可以选择 AR(2) 模型。
简单模型的参数较少,更容易解释和理解。
例如,AR(1) 模型只考虑前一天的股价对今天股价的影响,AR(2) 模型则考虑前两天的股价对今天股价的影响。
对于复杂模型 如informer
复杂模型可能选择多个显著的滞后期作为自回归项,甚至包括一些不那么显著但仍有一定相关性的滞后期。例如,若 PACF(1)、PACF(2)、PACF(3) 显著,可以选择 AR(3) 模型;若 PACF(4)、PACF(5) 也有一定相关性,可以考虑更高阶的模型。
复杂模型试图捕捉数据中的更多细节和复杂关系,适用于数据中存在复杂模式或长记忆效应的情况。例如,ARIMA(3,1,2) 模型同时考虑了多个自回归项和移动平均项,适合处理更复杂的时间序列数据。