基于宏观经济指标的市场预测

 

因此,任务是根据可用的经济指标预测标准普尔 500 指数。

第 1 步:找到指标。这些指标可在此处公开获得:http://research.stlouisfed.org/fred2/ 其中有 240,000 个。最重要的是GDP的增长。该指标每季度计算一次。因此我们的步骤 - 3 个月。较短期间的所有指标都重新计算 3 个月期间,其余(每年)被丢弃。我们还丢弃了除美国以外的所有国家的指标和历史不深(至少 15 年)的指标。于是,经过艰苦的努力,我们过滤掉了一堆指标,得到了大约一万个指标。我们制定了一项更具体的任务,即预测标准普尔 500 指数未来一两个季度,每季度有 1 万个经济指标可用。我在 MatLab 中做所有事情,尽管在 R 中是可能的。

步骤 2:通过微分和归一化将所有数据转换为平稳形式。这里有很多方法。最主要的是可以从转换后的数据中恢复原始数据。没有平稳性,任何模型都无法工作。转换前后的标普 500 系列如下图所示。

第三步:选择模型。也许是神经网络。可以做多变量线性回归。您可以进行多变量多项式回归。在测试了线性和非线性模型之后,我们得出的结论是数据非常嘈杂,以至于进入非线性模型毫无意义。 y(x) 图,其中 y = S&P 500,x = 10,000 个指标之一,是一个近乎圆形的云。因此,我们更具体地制定了任务:使用多变量线性回归预测标准普尔 500 指数未来一两个季度,每季度有 1 万个经济指标。

步骤 4:我们从 10,000 个中选择最重要的经济指标(减少问题的维度)。这是最重要也是最困难的一步。假设我们将标准普尔 500 指数的历史记录长达 30 年(120 个季度)。要将标准普尔500指数表示为各种经济指标的线性组合,有120个指标就足以准确描述标准普尔500指数这30年。此外,指标绝对可以是任何指标,以创建一个包含 120 个指标和 120 个 S&P 500 值的精确模型。因此,您需要将输入的数量减少到所描述的函数值的数量以下。例如,我们正在寻找 10-20 个最重要的输入指标。这种用从大量候选库(字典)中选择的少量输入来描述数据的任务称为稀疏编码。

有许多选择预测输入的方法。我都试过了。以下是主要的两个:

  1. 我们按照标准普尔 500 指数的预测能力对所有 10,000 个数据进行分类。预测能力可以通过相关系数或互信息来衡量。
  2. 我们遍历底部的所有 10,000 个指标,并选择一个给出线性模型 y_mod = a + b*x1 以最小的误差描述标准普尔 500 指数的指标。然后我们通过对剩余的 10,000 个 -1 指标进行排序再次选择第二个输入,以便它以最小的错误描述余数 y - y_mod = c + d*x2。等等。这种方法称为逐步回归或匹配追踪。

以下是与标准普尔500指数相关系数最高的前10个指标:

系列编号落后更正信息
'PPICRM' 2 0.315 0.102
'CWUR0000SEHE' 2 0.283 0.122
'CES1021000001'0.263 0.095
'B115RC1Q027SBEA' 2 0.262 0.102
'CES1000000034'0.261 0.105
'A371RD3Q086SBEA' 2 0.260 0.085
'B115RC1Q027SBEA'0.256 0.102
'CUUR0000SAF111'0.252 0.117
'CUUR0000SEHE' 2 0.251 0.098
'美国矿业'0.250 0.102

以下是与标准普尔 500 指数具有最多相互信息的前 10 个指标:

系列编号落后更正信息
'CPILEGSL' 3 0.061 0.136
'B701RC1Q027SBEA' 3 0.038 0.136
'CUSR0000SAS' 3 0.043 0.134
'GDPPOT' 3 0.003 0.134
'NGDPPOT' 5 0.102 0.134
'OTHSEC' 4 0.168 0.133
'LNU01300060' 3 0.046 0.132
'LRAC25TTUSM156N' 3 0.046 0.132
'LRAC25TTUSQ156N' 3 0.046 0.131
'CUSR0000SAS'0.130 0.131

滞后是输入系列相对于模拟标准普尔 500 系列的延迟。从这些表中可以看出,选择最重要输入的不同方法会导致不同的输入集。由于我的最终目标是最小化模型误差,所以我选择了第二种输入选择方法,即枚举所有输入并选择误差最小的输入。

步骤 5:选择计算模型误差和系数的方法。最简单的方法是 COEX 方法,这就是为什么使用这种方法进行线性回归如此受欢迎的原因。 RMS 方法的问题在于它对异常值很敏感,即这些异常值显着影响模型的系数。为了降低这种敏感性,可以使用绝对误差值之和而不是平方误差之和,从而导致最小模量(LSM)或鲁棒回归的方法。与线性回归不同,该方法没有模型系数的解析解。通常将模块替换为平滑/可微的近似函数,并且通过数值方法进行求解,并且需要很长时间。我尝试了这两种方法(精益回归和 MHM),并没有注意到 MHM 的太多优势。我没有选择 MHM,而是绕道而行。在通过微分获得固定数据的第二步中,我添加了一个非线性归一化操作。也就是先将原序列 x[1], x[2], ... x[i-1], x[i] ... 转换成差分序列 x[2]-x[1] 。 .. x [i]-x[i-1] ... 然后通过将每个差异替换为 sign(x[i]-x[i-1])*abs(x[i]-x[ i-1] )^u,其中 0 < u < 1。对于 u=1,我们得到经典的 COSE 方法,它对异常值很敏感。在 u=0 时,输入序列的所有值都被替换为几乎没有异常值的二进制值 +/-1。对于 u=0.5,我们得到接近 MNM 的结果。 u 的最佳值介于 0.5 和 1 之间。

需要注意的是,将数据转换为平稳形式的流行方法之一是将系列的值替换为这些值的对数之差,即log(x[i]) - log(x[i-1]) 或 log(x[i]/x[i-1])。在我的情况下,选择这种转换是危险的,因为包含 10000 个条目的字典中有许多行具有零值和负值。对数还有一个好处是可以降低 RMS 方法对异常值的敏感性。本质上,我的变换函数 sign(x)*|x|^u 与 log(x) 的目的相同,但没有与零和相关的问题负值。

第 6 步:通过替换新输入数据并使用与先前历史片段中的线性回归找到的相同模型系数计算模型输出来计算模型预测。在这里重要的是要记住,经济指标的季度值和标准普尔 500 指数几乎同时出现(精度为 3 个月)。因此,为了预测下一季度的标准普尔 500 指数,必须在标准普尔 500 指数的当前季度值与至少延迟 1 个季度(滞后>=1)的条目之间建立模型。要提前一个季度预测标准普尔 500 指数,必须在标准普尔 500 指数的当前季度值和至少延迟 2 个季度(滞后>=2)的条目之间建立模型。等等。随着大于 2 的延迟增加,预测的准确性显着降低。

第 7 步:检查对先前历史的预测的准确性。上面描述的原始技术(将每个输入放在以前的历史中,选择给出最小 MSE 的输入,并根据该输入的新值计算预测)产生的预测 MSD 甚至比随机或空预测更差。我问自己这个问题:为什么一个非常适合过去的入口对未来有很好的预测能力?根据先前的预测误差而不是基于已知数据的最小回归误差来选择模型输入是有意义的。

最后,我的模型可以这样逐步描述:

  1. 从 stlouisfed 上传经济数据(大约 1 万个指标)。
  2. Preobrazeum 数据为固定形式并标准化。
  3. 我们选择标准普尔 500 指数的线性模型,通过 RMS 方法(线性回归)进行分析求解。
  4. 我们选择历史的长度(1960 - Q2 2015)并将其分为训练段(1960 - Q4 1999)和测试段(Q1 2000 - Q2 2015)。
  5. 我们从 1960 + N + 1 开始预测,其中 N*4 是已知季度标准普尔 500 指数值的初始数量。
  6. 在前 N 个数据上,为每个经济指标建立一个线性模型 y_mod = a + b*x,其中 y_mod 是标准普尔 500 模型,x 是经济指标之一。
  7. 我们预测每个模型的 N + 1 个条形。
  8. 我们计算每个模型的 N + 1 个柱的预测误差。我们记得这些错误。
  9. 我们将已知标准普尔 500 值的数量增加 1,即N + 1,并重复步骤 6-9,直到我们到达训练段的末尾(Q4 1999)。在这一步,我们为每个经济指标存储了从 1960 + N +1 到 1999 年第四季度的预测误差。
  10. 我们在第二个历史时期(2000 年第一季度 - 2015 年第二季度)开始测试该模型。
  11. 对于 10,000 个输入中的每一个,我们计算 1960 - 1999 年第四季度的预测标准误差。
  12. 在 10,000 个输入中,我们选择 1960 - 1999 年第四季度 RMS 预测值最低的一个。
  13. 我们为 1960 年至 1999 年第四季度的每个经济指标建立了一个线性模型 y_mod = a + b*x。
  14. 我们根据每个模型预测 2000 年第一季度。
  15. 选择对前一个时间间隔(1960 - 1999 年第四季度)具有最低预测 RMS 的所选输入的预测作为我们对 2000 年第一季度的主要预测。
  16. 我们计算 2000 年第一季度所有输入的预测误差,并将它们添加到前一个时间间隔(1960 - 1999 年第四季度)相同输入的 RMS。
  17. 继续进行到 2000 年第二季度并重复步骤 12-17,直到我们到达测试区域的末端(2015 年第二季度),标准普尔 500 指数的值未知,这是我们预测的主要目标。
  18. 我们累积了 2000 年第一季度至 2014 年第四季度的预测误差,这些误差是由先前部分中预测标准差最低的输入产生的。这个错误(err2)是我们的样本外预测错误模型。

简而言之,预测器的选择取决于它们对之前标准普尔 500 预测的 RMS。没有前瞻性。预测器可以随时间变化,但在测试段结束时,它基本上停止变化。我的模型选择具有 2 个季度滞后的 PPICRM 作为预测 2015 年第二季度的第一个输入。标准普尔 500 指数与 1960 年至 2014 年第四季度所选 PPICRM(2) 输入的线性回归如下所示。黑色圆圈-线性回归。多色圆圈 - 1960 年 - 2014 年第四季度的历史数据。圆圈的颜色表示时间。


固定标准普尔 500 指数预测(红线):

原始形式的标准普尔 500 指数预测(红线):

该图显示该模型预测了标准普尔 500 指数在 2015 年第二季度的增长。添加第二个输入会增加预测误差:

1 err1=0.900298 err2=0.938355 PPICRM (2)

2 err1=0.881910 err2=0.978233 PERMIT1 (4)

其中 err1 是回归误差。很明显,它随着第二个输入的添加而减少。 err2 是均方根预测误差除以随机预测误差。也就是说,err2>=1 意味着我的模型的预测并不比随机预测好。 err2<1 表示我的模型的预测优于随机预测。

PPICRM = 生产者价格指数:进一步加工的原材料

PERMIT1 = 建筑许可证授权的新私人住房单元 - 在有 1 个单元的结构中

上述模型可以这样改写。我们召集了 10,000 名经济学家,并请他们预测下一季度的市场。每个经济学家都有自己的预测。但是,我们不是根据他们编写的教科书数量或他们过去获得的诺贝尔奖数量来选择预测,而是等待几年来收集他们的预测。经过大量预测后,我们会看到哪个经济学家更准确,并开始相信他的预测,直到其他经济学家的准确度超过他。

Federal Reserve Economic Data - FRED - St. Louis Fed
Federal Reserve Economic Data - FRED - St. Louis Fed
  • fred.stlouisfed.org
Download, graph, and track 240,000 economic time series from 77 sources.
 
gpwr:
待续...
美国政府总体上,特别是公开市场委员会一再被怀疑伪造和操纵美国劳动力市场 和美国GDP的宏观经济统计数据,以影响金融市场,这难道不令人尴尬吗?
 
Demi:
美国政府尤其是公开市场委员会多次被怀疑伪造和操纵美国劳动力市场和GDP宏观经济统计数据,以影响金融市场,这是否令人困惑?
是的,这很令人尴尬。同样令人不安的是,公布的数据在发布后被多次调整。但另一方面,交易员对美国政府给他们的数据做出反应,使市场向一个方向发展,无论这些数据是伪造的还是不完整的,还是不成熟的。因此,根据这些数据来预测市场的技术原则上应该是可行的。
 
gpwr:
是的,这很让人困惑。同样令人困惑的是,公布的数据在发布后被多次调整。但另一方面,交易员对美国政府给他们的数据做出反应,使市场向一个方向发展,无论这些数据是伪造的还是不完整的,还是不成熟的。因此,根据这些数据来预测市场的技术原则上应该是可行的。

你只对标普感兴趣,还是只把它作为一个例子?

只是标准普尔指数有一个奇特的运动模式,与货币比率不一样。

 
Urain:

你只对标普感兴趣,还是只把它作为一个例子?

只是标准普尔指数有一个奇特的运动模式,与货币之间的关系不一样。

之所以把它作为一个例子,是因为容易找到(公开的)输入数据。任何东西都可以这样建模:俄罗斯经济、汇率,等等。市场价格是最难预测的,因为其中有大量的噪音。预测物理过程要容易得多。
 
gpwr:
是的,这很让人困惑。同样令人困惑的是,公布的数据在发布后被多次调整。但另一方面,交易员对美国政府提供的数据作出反应,使市场向一个方向发展,无论这些数据是伪造的还是不完整的,还是不成熟的。因此,根据这些数据来预测市场的技术原则上应该是可行的。

好吧,让我们来看看。我也一直在这样做。

一个持续的暗示-希望-前进的测试

 
gpwr:

因此,根据现有的经济数据来预测标普500指数的任务。

相当有趣的一个话题。我试图根据数据文件制作指标:就业、新房建设、新房销售等。 而且你知道,你可以用肉眼看到一些数据与股市有一些关联。但是,与货币市场似乎没有关联。我使用了一些基本的美国统计数据。

你不觉得你选择了太多的数据类型吗?在我看来,你需要从有价值的数据中排除不重要的数据,那些影响市场的数据。

然而,我对神经分析并不熟悉。我已经开始阅读关于它的资料,但我还没有找到关于它的功能的任何明确解释。

 
回归算法将有助于从任何数据中预测任何指标,即使它们之间没有明显的关系。
 
forexman77:

这是一个相当有趣的话题。我试图根据数据文件制定指标:就业、新房建设、新房销售等。你知道,你可以用肉眼看到一些数据与股市有一定的关联。但是,与货币市场似乎没有关联。我使用了美国的基本统计数据。

你不觉得你选择了太多的数据类型吗?在 我看来,你需要从有价值的数据中排除不重要的东西,那些影响市场的数据。


输入数据量大或小都是相对的。

另一个是更重要的。

所有的投入都分为两类。

  • 对目标变量有影响的人
  • 那些没有影响或影响不大的人。

我特意用了影响这个词,而不是相关。相关性是一个空洞的工具,因为相关性总是有一些值,而没有值是NA,这是确定原始数据对目标变量影响的根本。

在确定对目标变量的影响时,没有(具有低影响--注意,这是一个定性的特征)的变量是噪音。这里的隐患是,从一些没有通过算法确定的数量开始,这种噪音 "堵塞 "了重要的变量,然后 "重要 "的变量就不能通过算法从这个总量中提取出来。

因此,人们必须手动查看整个输入变量列表,并凭直觉或基于其他考虑决定 "这个输入变量可能会产生影响,而这个变量可能不会。"

我知道有几十种确定变量重要性的算法,我在我的论文和书中的一套算法(最多100个输入变量)上进行了试验。结果与描述完全一致。我手动选择了一些列表,然后用算法进行过滤,得到了这个列表。而这样一个列表的价值是根本性的:使用这样一组 "影响 "输入数据的模型(使用3种不同类型的模型)不具有过度学习的属性,而这正是主要问题。过度拟合是使用 "噪声 "输入数据的主要后果。

PS。

静止性在我的模型中不起作用,这些模型是随机森林、ada、SVM。

 
gpwr:

...

....没有静止性,任何模型都无法工作。

...

对静止性的要求是非常僵硬的,完全没有道理。

.

而 "非稳态 "模型也能正常工作;)

 
transcendreamer:
回归算法可以根据任何数据来预测任何指标,即使它们之间没有明确的关系。
这可以说是任何模型,不仅是回归,还有神经模型、ARMA和其他模型。如果输入和输出之间没有关系,任何模型都会产生一个预测,只是不准确。
原因: