影响债市利率的主逻辑往往有长短期之分,如当前市场主流预期中的短期偏积极长期偏谨慎。其主要影响因子也大有不同。本研究中我们尝试建立一个结合滤波-因子筛选-VAR模型预测的方法,拆分国债利率中的长期趋势和短期波动并分别进行预测。具体方法流程如下: 1.使用卡尔曼滤波拆分10年期国债利率序列的长期趋势和短期波动。基于应用优先的原则,我们通过机器学习的方式找到了可以获得良好模型效果的卡尔曼滤波超参数和数值解。 2.滤波后,将趋势项和波动项分别作为被预测变量进入模型,待选因子也被分为趋势类和波动类,趋势类包含:生产、需求、交运、CPI、PP,波动类包含:资金预期、利差图谱、市场情绪、机构行为、技术分析。 3.采用向量自回归模型(VAR),对使用滤波器分离出的利率趋势项与利率波动项分别进行估计与预测,通过四种不同的方法来训练获得最佳的内生变量组合,分别为:相关性排序法、最远距离法、分步回归法和模块固定法。 4.通过K-fold方法进行模型训练。将数据集10等分(K=10),按照7:1:2的比例划分样本为训练集:验证集:预测集,分别用于模型估计,超参数优化和模型评价。用平均预测利率多空方向胜手率作为交叉验证筛选的结果,以此选定最优模型。 从模型回测结果(在预测集中进行,以实现完全样本外)看,其预测准确率大大高于等权因子得分的方法实现的预测,且可以在日频预测中获取较高的准确度。另外,综合考虑最大预测胜率,模型稳定度,以及波动项预测上表现更好等因素,日频预测中最远距离法筛选因子变量更值得推荐,而周频预测中分步回归法效果最佳。 风险提示:数据选取偏误,指数计算过程偏差,模型选择偏差 债市研究中,对未来利率的定量预测是一个重要的话题。简单的利率预测主要通过挖掘一些简单的相关性因子,并等权打分完成。但这种简单的利率定量预测有因子选择不明确,准确性不高等问题。 另外影响债市利率的主逻辑往往有长短期之分,如2023年后的短期偏积极长期偏谨慎,其中短期波动、长期趋势的主要影响因子可能大有不同。为了解决这些问题,帮助投资者拆分和预测利率债的长趋势和短波动。我们尝试建立一个结合滤波-因子筛选-VAR模型预测的方法,思维导图搭建如图1所示。 图1:滤波-因子筛选-预测模型搭建思维导图 1.用卡尔曼滤波拆分长短期波段 在金融时间序列要素拆解分析中,常见的做法是对构成可观测时间序列的各个不可观测组成成分进行假设。一般而言,长期趋势成分(如股价中的有效长期价格成分)在经济学的微观基础理论上被假设为随机漫步过程,而短期波动(暂时性成分)被假定为一个一阶自回归过程,多个长期成分之间往往还受到长期协整关系的约束。市场上有对股价、比特币价格、石油价格等市场时间序列进行微观成分拆分的研究。 事实上,对市场多种时间序列的拆解都获得了相近的成分:长期趋势和短期波动。并且各项研究对时间序列的拆解后分析都得到了较好的拟合与预测表现。从债券长期存在长短期逻辑不一致的现象看,我们认为国债收益率同样适用于长短期双成分的拆分。 1.1.卡尔曼滤波的原理和基本计算步骤 我们尝试使用卡尔曼滤波对长短期进行拆分。卡尔曼滤波在经济学领域的应用主要包括:时间序列模型中的波动信息拆分和不可观测成分的参数拟合,前者如利用卡尔曼滤波和VAR方法结合分离出限价订单中的暂时性波动和信息性波动,后者如基于带有ARCH扰动的时间序列不可观测成分模型的参数拟合。 相似的,我们认为利率序列可以进行长期趋势和短期波动的成分拆分,并且卡尔曼滤波可以被用于拆分和拟合不可观测的序列成分。基于应用优先的原则,我们并未求解相应的组成成分动态模型的解析解,而是通过机器学习的方式找到了可以获得良好模型效果的卡尔曼滤波超参数和数值解,但学术界对多种时间序列探索的共同性拆分结果保证了我们“模糊计算”背后的可靠经济基础。 卡尔曼滤波的实质是根据上一刻的“预测值”、当前的“测量值”和“误差”来计算得到当前的最优量,进而再预测下一刻的量,主要遵循的是“预测—实测—修正”这样一个逆推顺序。 ˆX ˆ 第一步:以K 1次迭代的最优状态估计值 估计K次迭代的值X: ˆk k1 ˆX ˆA X B U (0.0.1) ˆk k1 k1 k 第二步:计算新的误差协方差矩阵P: k T P A P Q (0.0.2) k1 K 第三步:计算预测误差增益矩阵 (卡尔曼增益): k kk T PH K (0.0.3) k T H PH R ˆ 第四步:计算在K次迭代的最优状态估计值X: k ˆX ˆX ˆZH X K (0.0.4) k ˆk k k ˆk k P 第五步:对上述得到的误差协方差矩阵 进行更新,为下次迭代循环做 准备: k P IK H P (0.0.5) k k 在上面的式子中,各量说明如下: B :状态转移矩阵,:控制矩阵, U P :控制向量, :上一次迭 k1 k1 H R 代的误差协方差矩阵,Q:预测噪声协方差矩阵, :测量矩阵, : Z K: 测量噪声协方差矩阵, 时刻的实际观测值。 k 1.2.卡尔曼滤波的参数选择 / ,即(测量噪声协方差预测噪声协方差), 影响滤波结果的参数是 R/Q 这个值反映了我们对于预测和观测值的信任程度;其值越大则越相信预测结果,滤波结果平滑性越好;反之则越相信观测结果,滤波结果越偏向于观测值。在权益波动的学术研究中,一般通过分析流动性成分和信息成分在促使股指价格发生变动的程度比例,构建协方差矩阵,通过对角元素的取值比例获得。 R/Q 而我们通过穷举法和实际验证的方法获得该参数的取值区间。通过验证10年期国债到期收益率2020.01.13-2023.03.06的数据(当然也可以替换为10年期国开债或其他活跃利率债)进行了滤波参数验证。 结果证明 R/Q 数值为500以下的 R/Q 值会导致序列拆分后波动项中值为10000以 无关信息含量过高,影响后续的预测分析工作;而 R/Q 上会导致波动项中对利率预测有用的信息含量过低,即其中掺杂了许多短期波动和长期趋势对债市的影响。 因此我们选择了5 0 0 , 1 0 0 0 0的 区间,根据经验选取步长为 00 1 R/Q 进行了离散化遍历,最终结果显示参数 R/Q 为10000、5000、1000和 500这四个参数的滤波效果比较理想,可以做到波动项中有用信息占比达到理想效果。 图2:滤波参数验证( 对十年国债收益率分别使用四个比率进行卡尔曼滤波,每一个滤波参数都能对应获得趋势和波动两条序列,两条序列是利率的完整分离: (1.2.1) 趋势(Trend)和波动(Fluctuation)这两条序列是本文的核心,不同的滤波参数决定了获得的波动序列中包含的信息量,滤波参数验证如图2所示,在后文我们会根据训练集的验证胜率来决定最佳的滤波参数和最佳的两条分离序列。 2.变量池的构建和模块分类 滤波完成后,我们将10年期国债到期收益率的趋势项和波动项分别作为被预测变量进入模型,当然后续也可以将国开或者其他期限利率债作为被解释变量。 待选因子也被分为趋势类和波动类。趋势类中,我们从生产、需求、交运、CPI、PPI五个维度出发,筛选了33个经济变量作为解释变量;波动类中,我们从资金预期、利差图谱、市场情绪、机构行为、技术分析五个维度出发,筛选了21个经济变量作为解释变量。变量的具体选择见 表1: 表1:变量的具体选择 本文的应用中,考虑到模型后期变量筛选对算力的大需求,我们仅做基础的非限制性向量自回归模型。模型的基本形式是弱平稳过程的自回归表达式,描述的是在同一样本期间内的若干变量可以作为它们过去值的线性函数: (3.1.1) 其中, Yt表示k维内生变量列向量,Yt-i为滞后的内生变量,p是滞后阶数,T为样本数目,𝜙i为待估矩阵,ε为k维白噪声向量。 当使用VAR模型进行估计时,我们需要做两个决定。第一个是需要选择将哪些变量放入VAR模型中,这将交给模型训练去解决。第二个决定是需要选择滞后阶数,我们用AIC准则进行滞后阶数的确定。综合考虑4种滤波参数下分离出来的趋势和波动序列,与252种排列组合后的变量组合,在训练集中VAR模型估计的AIC检验情况,我们最终采用统一的p=3作为我们VAR模型的滞后阶数。 3.1.2.VAR模型的预测 观察方程(3.1.1)的形式,我们可以知道VAR模型中的因变量是由其本身和其他内生变量的滞后历史值共同决定的,使用滞后历史值意味着我们可以使用VAR模型本身对Yt进行样本外预测值的迭代推导。故我们采用的是固定起点的滚动一步预测。如图3所示,每日预测完下一日的利率后,在第二天更新样本历史值至当日,再进行下一日的预测,在时间序列的高频(日度/周度)预测情况下,这一步的处理很有必要。而如果要进行较为长期的预测,则可考虑使用周频或者月频的数据,在此不展开讨论。 图3:VAR模型的预测 3.2.模型训练:K-Fold交叉验证 在机器学习建模过程中,涉及到超参数的确定时,通行的做法通常是将数据分为训练集和验证集。本研究的超参数主要是变量池中变量的选定和组合。 我们构建的变量池受制于二级交易和市场情绪等数据,历史数据长度只能从2020年1月1日开始,考虑到样本期间较短的情况,我们应用K-Fold交叉验证(Cross-Validation)的方法来最大限度利用有限的数据集。 将原始数据分成K组(K-Fold),将每个子集数据分别做一次验证集,其余的K-1组子集数据作为训练集。这样可以得到K个模型。这K个模型分别在验证集中评估结果。评估结果可以采用均方误差,也可以根据应用情景设置一个检验准则。 图4:K-Fold交叉验证(K=10) 本研究中,在第1节分离获得两条序列(趋势、波动)后,在第2节中构建好的趋势与波动两个变量池。我们对两条序列和两个变量池分别进行一一对应的操作,将其中的数据分别进行10等分(K=10),按照8:1:1的比例划分样本为训练集:验证集:预测集(后续为了验证模型稳定性,我们调整了预测集占比)。 排除最后的预测集,我们将剩下的8份样本依次取一份作为验证集,其余7份为模型的估计训练集,使用VAR模型估计得到参数,并在验证集中使用参数计算预测值。通过预测值与实际值的比较得到胜率,即在这里我们用K组检验的平均预测利率多空方向胜手率作为交叉验证的结果。 当8份样本都作为验证集被训练验证过一次后,我们计算当前变量组合的8次训练验证集的平均胜率(),以此作为本变量组合的训练集效果 (3.2.1) 其中comb为训练中的变量组合,等式右手边变量的第二个下标参数为作为验证集的训练集编号。分别循环完成对应滤波参数的252个趋势/波动变量组合,并且得到K-Fold训练对应的平均胜率后,我们比较252个变量组合的平均胜率 , 选择平均胜率最大的一个变量组合 作为对应的趋势/波动变量选择方案。 图5:排列组合+K-Fold验证 3.3.变量筛选 利用K-fold方法训练模型时,每组模型中的变量筛选方法也是非常重要的,我们计划使用以下4种方法进行筛选,并在样本期间利用3.2中的训练方法测算胜率,进行比较,筛选出最好的模型。 3.3.1.相关性排序法 该方法通过最基本的直觉:相关性高的变量更有可能是真实的决定因素,来寻找最佳的变量组合。 在第1节分离获得两条序列(趋势、波动)后,我们使用在第2节中构建好的趋势与波动两个变量池,分别对两条序列进行相关性分析(t时期的趋势/波动序列与t-1期的经济变量分析相关性)和排序,可以分别得到与趋势和波动序列相关性(相关性绝对值)最大的前十经济变量。我们分别对两组潜在解释变量按照其与对应分离序列的相关性大小按照排序进行标号,由此我们