486. G-Research Crypto Forecasting | g-research-crypto-forecasting
大家好,
这真是太棒了。我很庆幸在最终的更新中保住了第二名,因为我之前很紧张,觉得任何事情都有可能发生。据我估计,由于这类数据的噪声特性,我有60%的几率在第6次更新中跌出前两名。我还估计,如果进行第7次更新,Meme Lord Capital 有75%的几率保住第一名。他们最终以巨大的优势领先所有人。干得好,Meme Lord Capital!
我要感谢 G-Research 赞助这次比赛,以及所有参与组织和主办的人员。
在这篇总结中,我将努力提供有关我方法的见解,但不会透露可能对主办方有利可图的模型细节。当一个好的金融指标成为常识时,每个人都会使用它,因此它会失去盈利能力。因此,我不会分享我的代码或任何关于特征的具体见解。
我决定参加这次比赛,是因为它涉及使用实际市场数据(而非预先设计的特征)进行资产价格预测。这就是我喜欢的那种数据:具有明确的时间维度、许多相互作用的实体、大量的噪声,并且需要创造性的方法开发。在2014年至2017年间,我在业余时间研究了股票价格分析和预测。作为一个独立的DIY投资者,这并没有长期盈利,但我确实学到了很多关于预测时间序列和资产价格的知识。
我的工具包包括 CPython、Numba、Jupyter、Pandas、LightGBM、Matplotlib 和 scikit-learn。使用 Numba 编译器而不是 CPython 进行特征生成带来了高性能。这样做使我能够利用整个数据集快速迭代,尝试各种各样的特征。
建立良好的 N 折交叉验证(CV)至关重要。我们应该尝试在我们的想法在最真实的环境中是否会失败。每当我们有一个研究问题时,都应该(在一段创造性的探索之后,最终)以这种方式回答。如果我们没有一个好的 CV 设置,我们的决定大部分将仅仅是猜测。好的 N 折 CV 很容易设置,只需不到 100 行代码,无需使用 scikit-learn 或任何时间序列框架。
在这次比赛中,我使用了 6 折、走查、分组交叉验证。分组键是时间戳。在典型的设置中,训练折长度为 40 周,测试折长度为 40 周,测试折和训练折之间有 1 周的间隔,并且每个折的训练折末端递增 20 周。
我选择重叠我的折,这样它们可以很长,但我仍然可以有 6 个折。对于非重叠的折,我必须在许多短折或少数长折之间做出决定。
拥有许多折的优点是平均 CV 分数的方差会较低。另一方面,拥有长折的优点是模型能看到更多数据,因此您可以更好地了解它在完整数据集下的表现。我不必在许多短折或少数长折之间做出选择,而是让它们重叠,这样我就可以拥有许多长折。我本可以使用超过 6 个折,或者多次运行 CV 并更改种子。我没有做这些事情,因为 CV 分数方差已经相当低,而且 CV 已经几乎太慢了。
(如果您不注意 CV 方差,您可能会浪费几天时间优化模型,结果却发现您早期的决定是基于噪声且不正确的。查看 CV 方差是否过高的一种简单方法是查看 CV 分数与您正在调整的参数的关系图。一个好的图通常是平滑的,有一个膝部和平台,或者可能是一个峰值或谷值。如果图看起来太嘈杂而无法清楚地看到这些东西,请使用不同的种子再次尝试,看看是否得到不同的结果。如果是这样,那么您的 CV 结果就太嘈杂了。您可以尝试使用更多的折,或者使用不同的随机种子多次运行 CV 并取平均值。)
训练数据和测试数据之间的一周间隔是为了防止 CV 结果过于乐观。如果没有间隔,模型可以在测试期开始时作弊,因为训练期的结束非常相似。在最终提交中没有训练和测试数据之间的间隔。
在开发模型时,我自然想知道它在竞争对手中会如何排名。由于探测和过拟合,公共排行榜的分数高得不切实际,我必须找到一种解释它们的方法。所以我查看了分数“低”的大师和特级大师。我认为这些竞争对手足够优秀,可以提交好的内核,但一直小心地将公共排行榜期间排除在他们的训练数据之外。根据经验和这里的讨论,我不期望真实分数超过 0.1。绘制“低”分大师和特级大师的排序分数,我记得在 0.08 左右有一个明显的平台。那是我在本地 CV 中旨在击败的分数。
当然,我没有在任何优化中使用公共排行榜作为指导。这总是一个坏主意(参见上面关于 CV 方差的段落)。我在比赛中总共只提交了两次。
因为我的劳动和计算资源是有限的,所以知道将它们导向何处很重要。在我开发模型时,特征工程是由特征重要性指导的。当我制作新特征时,我将进一步的努力集中在已经表现良好(具有高重要性)的特征集上,或者那些通过转换可以轻松提高重要性的特征集上。
正如我在简介中所说,我不会讨论具体的特征见解或提供我的代码。我只谈方法上的浅见。
学习器很简单:一个带有平方损失的 LightGBM GBDT 回归器。除了 GBDT 中的梯度提升外