深度学习做股票预测靠谱吗？
本文中了2022 NIPS，它是在DeepAR基础上做的，建议先看一下DeepAR论文和我关于DeepAR文章的解析： 它关注DeepAR甚至是整个序列预测领域很少关注的问题，即从序列值离散化的角度来解决序列预测。 和DeepAR差不多，本文也是只考虑单变量概率预测。 本文的核心其实就是下面这一张图： 如图(a)所示，如果我们知道序列值的大概范围，就可以将这个值区间划分为12个容器，相当于对连续的序列值做了离散化（我这里用容器指代bin），这可以将预测问题变成分类问题。但是(a)这种简单的划分容器的方式，要达到较高精度（即较多的区间），需要很多个容器。因此，可以使用一种分层的方式，由粗到细。如图(a)和图(c)，如果是像图(b)中分两层的话，先将值区间划分为6个粗容器，然后每个粗容器内部又可以划分为6个细容器，这样的话，总共只需要12个容器索引，即可得到36个值区间。图(c)分三层的话是同理的，分再多层也是依次类推。对于这种分层的方式，在预测时，可以先分类出预测值坐落在哪个粗容器，然后以此为条件，分类出预测值坐落在哪个细容器。这种思路实际上已经存在于CV、NLP领域。 这样做的优势是什么呢？主要有以下几点： 上图中显示了，在每一个时间步中，多层结构如何进行训练和预测。 B   代表层数， z^i  代表第 i  层中的取值区间索引，是离散的值， x 是其他辅助特征。可以使用一个分类网络加上softmax输出每一类的概率，然后负对数似然来训练模型，其实就相当于交叉熵损失。预测的时候就是逐层由粗到细采样自回归。本文中，每一个level使用独立的分类网络，而不是共享参数。 具体的输出分布 因为通过上面的过程，只能知道预测值在哪一个细粒度区间，假设就处于区间 (a,b)  中。如果需要得到一个具体的分布，则需要额外的参数化分布： 如果区间的边界都有限，则直接用均匀分布，即预测值均匀处在此区间内。如果区间的上或下边界无限，则可以用Pareto分布。Pareto实际上就是长尾分布，在值比较大的地方概率较小。它的参数 \alpha_1  和 \alpha_2  是用一个额外的MLP网络输出的。当然，根据实际情况，也可以用其他分布来代替Pareto分布，比如左侧或右侧截断的高斯分布。 将C2FAR中的网络 h 设置为RNN，即可得到C2FAR-RNN，可用于概率预测。 下图是C2FAR-RNN在所有时间步上high-level（没有说明每个时间步内部的分层操作）的示意图，其中 z_{t}=(z_t^1,z_t^2,...,z^B_t) 指在 t  时间步的各个级别的索引形成的向量， z_{t}^{<B}=(z_t^1,z_t^2,...,z^{B-1}_t) 指除了最后一级的索引之外形成的向量： 可以对比DeepAR的图来看： 可以看出来两者的区别为：C2FAR-RNN的每一个 z_{t} 是向量，向量中每个元素是每一级别中区间的索引，而DeepAR中每一个 z_t  是标量；C2FAR-RNN的输入中还包括额外的 z_{t}^{<B} 。 如果详细地来看每个时间步内部的分层操作，C2FAR-RNN的示意图如下： 在时间步上，有一个自回归的过程，即以过去为条件，回归未来；在每个时间步内部，也有一个自回归的过程，即以粗容器为条件，回归细容器。 将序列值离散化来预测的思路很有意思，我觉得并不会因为将连续值离散而损失精度有害于预测，因为实际预测中并不会要求特别高的精度，有时候预测出来的值仅仅需要保留整数即可。这种思路也能解决一些很现实的问题，就像作者说的，同一个数据集中序列并不是很理想，往往同时存在有离散的、连续的、半连续的序列。