构建多变量模型以改善 ETH/USDC 动态费用政策

  • crocswap
  • 发布于 2022-10-07 22:10
  • 阅读 14

这篇文章深入探讨了自动化做市商(AMM)流动性池的动态费用策略,验证了动态费用模型如何超越静态费用池的表现。文章详细描述了实现思路,包括历史数据的使用、变量选择、模型性能比较,并提出了相对费用表现的线性模型,最终显示出优于旧有策略的效果,为流动性提供者带来更好的回报。

这是关于AMM流动性池动态手续费政策的一系列多篇文章中的第四篇。

在这一系列的上一篇文章中,我们构建了一种ETH/USDC流动性动态手续费政策,显著超越了Uniswap的三种静态手续费等级。 然而,我们也注意到我们的模型在构建上极为简单。为了让读者回忆,我们的“回顾”模型基本上执行了以下算法:

  1. 对于给定的10分钟时间间隔,确定在过去的3个时间区间中,哪种手续费等级(Uniswap的0.05%、0.3%和1%池)具有最高的手续费增长。
  2. 利用所有可用的历史数据确定当前时间间隔中最具收益的手续费等级选择,条件是有关历史数据(1)中所示的内容。

实际上,对于每个给定的时间间隔,我们根据Uniswap流动性池的近期历史手续费累计数据将其分类为27种不同的可能性中的一种。选择下一个手续费等级的依据有两个标准:第一,在观察到的手续费累计历史条件下,特定手续费等级成为最佳执行手续费等级的概率;第二,正确选择该手续费等级的回报,同样是基于观察到的手续费累积历史。这些都是在所有可用的历史数据上计算出的,然后将它们相乘,以确定选择一个给定手续费等级的预期回报,条件是观察到的手续费累积历史。最后,选择具有最高回报的手续费等级。

为了将这一点扩展到更一般的框架中,我们可以想象,例如,还可以查看前一个时间区间的交易量(即过去10分钟的交易量)。交易量是一个连续变量,因此我们可以将其细分为任意多个划分;例如,我们可以说,交易量小于_X_代表一种可能性,而交易量大于或等于_X_代表另一种可能性。总之,我们现在要为54种不同的历史场景计算回报!

可以看出,将这种方法扩展到其他变量变得过于繁琐。相反,我们建议采取更直接的预测方法来解决问题。我们希望确定在下一个时间段中选择哪个手续费等级。换句话说,我们希望预测两个变量:

  1. 0.3%池的手续费累计减去0.05%池的手续费累计
  2. 1%池的手续费累计减去0.3%池的手续费累计

我们可以选择其他差异(例如,1%池减去0.5%池)使用,但无论具体选择是什么,这两个差异(或它们的某种变体)都足以完全确定我们选择的手续费等级。因此,这就变成了一个基本统计的普通习惯:收集一组历史变量(手续费表现、交易量等);将这两个期望结果变量对这些历史变量进行回归;最后,使用训练后的模型进行预测并选择下一个手续费等级。

接下来,我们将探讨将不同变量添加到模型中或使用不同类型的预测建模,对我们总体预测ETH/USDC手续费等级的最佳选择的能力的影响。关于实现的说明:在上一篇文章中,我们“重新训练”了我们的回顾模型,每天将新历史数据纳入回报计算,最多在生成后的24小时内。在原则上,我们不必如此迅速地重新训练我们的模型;随着总历史数据量的增加,任何固定数据量的边际增加的效果都会减小(例如,如果你的模型中已经有12个月的数据,那么在12个月加1天或12个月加1周重新训练模型并不那么重要)。为了简化测试和分析,我们将改为采用月度重训练间隔,比较不同模型,仅在最后降低重训练间隔。我们还要规定,仅在拥有至少1个月的训练数据时,模型才开始进行预测。

首先,让我们指定一个模型,该模型与上一篇文章中描述的“v4回顾”模型完全等效。从理论上讲,这与对一组26个二元变量进行手续费累计差异回归完全等效,其中每个变量代表27种不同历史场景的一种(当所有26个变量都等于零时,指定27场景的任意选择)。为了经验性地验证这与回顾模型等同,我们在下方绘制了两个模型的累计手续费增长:

在这种特定情况下,我们并不期望模型是_完全_相等的,因为在上一篇文章中定义的回顾模型是按每日间隔重新训练的,而仅偏移线性模型(之所以如此命名是因为该模型本质上学习一个与每个27种历史案例对应的单一常数预测值)则按月间隔重新训练。它们确实不_完全_相等;然而,它们非常相似,足以使我们坚信这两个模型在原则上是等效的。我们将把这个仅偏移线性模型作为标准基础,以便在进入更复杂的模型构建时进行比较。

现在,假设我们希望准确确定应该在我们的线性模型中添加哪些变量。视觉检查通常会揭示引人注目的成对关系;例如,将0.3%池中的滞后交换量与0.3%池与0.05%池的相对手续费累计进行比较,我们注意到当交换量极高时,0.3%池往往表现更好:

同样,我们注意到当0.05%池中的交换数量非常高时,0.3%池在下一个时间区间中更可能表现更好:

通常,人们可以花费大量时间检查这种配对关系,试图辨别适当的转换等。我们不想让读者疲于进行大量探索性分析,而是简单地提出了一组在实践中表现良好的预测变量组合:

  1. 前一个时间区间的美元交易量
  2. 前一个时间区间的最大价格档减去最小价格档
  3. 前一个时间区间的交换数量
  4. 前一个时间区间经加权30%顺序值的交换价格档的标准偏差
  5. 在过去三个时间区间中,与编码最高执行手续费等级的类别变量相互作用的手续费累计差异

变量(1)至(4)被各包含两次:一次用于派生结果变量的两种手续费等级。例如,在预测0.3%池与0.05%池的手续费累计差异的模型中,我们会将0.05%池的手续费交换量和0.3%池的手续费交换量作为单独变量。变量(5)则仅是先前时间区间中结果变量的实际值,每次根据信息中的三种最佳静态手续费等级可能性进行分层。

这个模型的表现如何?让我们查看:

显然,将这一组合的变量添加到我们的线性模型中,导致模型相关手续费增长的适度但显著改善!然而,有趣的是,预测0.3%与0.05%表现的线性模型效果远优于预测1%与0.3%表现的线性模型。在前者中,当在整个历史数据集上训练时,该模型达成了10.75%的调整后R²;然而,在后者情境中,调整后R²甚至未能达到1%。同样,在前者中,几乎所有包含的预测变量都达到了非常高的统计显著性(p < 0.001,未经过多重假设检验调整);然而在后者中,大约一半的包含预测变量是没有显著性的。然而,关键是,即便模型的准确性非常低,也仍然是有用的!我们不需要预测一个手续费层相对于另一个手续费层的_确切_超额表现;相反,我们只需要预测它到_足够准确_的程度便于识别盈利最高的手续费层,这是一个更弱的要求。

机智的读者可能会问:潜在的非线性关系呢?例如,在上述手续费累计差异与滞后交换量的对数散点图中,似乎这种关系不具线性(即使在取对数后也是如此)。特别是,从视觉上看,似乎主要的预测能力来源于确定滞后交换量是否高于或低于其自身分布中大约90百分位的值。

在针对哪些变量包括在线性模型中以及如何包括它们的过程中,我们尝试了许多转化:将连续变量转换为百分位箱;排名的倒置正态化;转变为百分位数;变体的对数变换;手动选择的小批箱的阀值;威瑟化或其他方法的异常值移除或截断;等。最终,出乎我们意料的是,没有一致且原则性的方法转化,从而显著改善预测能力,而简单地将所有预测变量放入一个简单的线性模型中就足够了!(事实上,在许多情况下,我们尝试的转化会降低模型性能!)有时,某些变量确实从离散化为,例如,具有10个不同目标的分箱中受益;然而这种改进并不足以取代我们保留所有变量的原始连续变体,以避免过度拟合以及不必要的复杂性。

除了尝试各种临时 转换外,通常认为某些技术,比如随机森林或梯度提升,通常是改善模型性能的一种简单且直接的方法,当存在非线性关系时。实际上,它们的使用通常允许模型者在保持线性模型的情况下获得"免费午餐",前提是额外的训练和预测时间不会太麻烦。因此,我们训练了随机森林模型,并将其表现与我们的线性模型进行比较:

令人惊讶的是,将线性模型替换为随机森林所带来的累计手续费增长边际改善几乎可以忽略不计!我们对这一结果感到非常意外。一种可能的解释是我们之前提到的特性:在某个点之后,预测的确切精度并不是那么重要,因为我们最终的目标是选择三种手续费等级之一。只要预测在某种意义上是方向性准确的,就足以满足我们的需求! (顺便提一下,我们还尝试了多种类型的模型,超出了随机森林,其中大多数也没有在累计手续费增长上显著改善:即梯度提升、L1标准化回归,以及在所选预测变量的L1标准化回归后进行L2标准化回归。)

此外,我们还应注意上述模型描述中存在一个关键缺陷。具体而言,我们并不一定关注上一个时间区间的交换量或交换数量,而是关注与近期历史相关的交换量或交换数量。例如,如果在10年内,交换量由于链上活动的整体增加而增加了十倍,这在直觉上并不意味着该趋势本身预测的0.3%手续费等级将相对0.05%手续费等级表现更好;相反,我们主要是关注在特定时间间隔的交换量或活动是否相对于最近一周或一个月的交换量或活动过高或过低。

我们通过很简单的方式来修正这种影响:通过取特定时间间隔的交换量和交换数量,并用上月的平均交换量或交换数量进行除法。庆幸的是,使用这些标准化变量的线性模型与未标准化模型的手续费增长几乎没有区别:

现在看来,我们已经能够仔细且原则性地构建出一个线性模型来预测相对手续费等级的表现,并结合如交换量、价格波动等链上指标,从而在我们在上一篇文章中提出的简单“回顾”模型上实现了适度程度的改进!

关于模型构建的最后一点——我们原希望将诸如编码季节性或CEX指标(例如资金或永续交易量)的外部变量纳入模型,以提高模型性能。不幸的是,有些令人惊讶的是,这并没有实现。尽管在交换量与特定时间点(如美国市场的开盘/收盘、亚洲市场的开盘/收盘或在特定时刻发生的CEX资金支付)之间识别出了一些适度的“季节性”关系,但这些关系并没有转化为相对手续费等级的表现。我们还尝试将来自FTX的ETH-PERP资金利率或交易量数据纳入模型,但这些数据对预测模型并没有提高。然而,使用的资金数据分辨率较低(每小时),因此将更多最新的资金数据添加到模型中仍值得研究。

为了结束我们调查的这一部分,我们应该再次回到探讨动态手续费的动机问题:我们能在多大程度上设计出一个动态手续费,使流动性提供者的回报超过分歧损失?我们已经知道,上述回顾模型的表现,对于流动性提供者的回报远远优于任何三种静态Uniswap手续费等级。为了对我们的最终线性模型进行最终评估,我们使用一天的重新训练间隔(而非前面讨论中使用的月度重新训练间隔)进行模型表现计算,并从累计手续费增长中减去分歧损失,类似之前。

我们清晰地看到,我们的最终线性模型为流动性提供者提供了比之前的回顾模型更好的回报!如果我们仔细查看图,很容易发现某些地方,较简单的回顾模型未能“适当反应”,未能捕捉到特定手续费等级临时增长的情况,但更复杂的线性模型似乎捕捉到了大量的超额表现。尽管我们线性模型与理论最优仍相距甚远,但我们在发展策略以持久改善流动性提供者的回报方面已经取得了重大进展。

现在我们已经发展出合理的ETH/USDC动态手续费策略,本系列的后续部分将关注这一模型的普遍性。诚然,我们可以简单地复制相同的策略,为WBTC/USDC、ETH/DAI等设定独立模型——为每个流动性池建立一个模型。然而,如果从该ETH/USDC模型输出的信号可以轻松地应用于其他池,那将远为简单!在实践中这究竟能达到什么程度?敬请关注!

-0xfbifemboy

  • 原文链接: crocswap.medium.com/cons...
  • 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
点赞 0
收藏 0
分享
本文参与登链社区写作激励计划 ,好文好收益,欢迎正在阅读的你也加入。

0 条评论

请先 登录 后评论
crocswap
crocswap
江湖只有他的大名,没有他的介绍。