照片由 Anne Nygård (https://unsplash.com/@polarmermaid) 在 Unsplash (https://unsplash.com/) 拍摄。
合成金融时间序列数据是人工生成的数据序列,模仿真实市场数据的统计特征。这些合成数据集对于交易者和策略设计师来说至关重要,为测试和改进交易策略提供了一个可控的环境,确保模型的适应能力,并提供在各种市场情景和经济条件下性能表现的见解,这些情景和条件在现实中可能难以观察到。
但创建“真实的”合成金融时间序列绝非易事,因为历史数据往往包含难以复制的特定复杂特征。例如,参考图1,可以看到苹果公司(AAPL)2021年1月1日至2024年1月1日这三年期间的价格p(t)、收益率r(t) = (p(t) − p(t −1)) / p(t −1),以及收益率的分布。
图1. 苹果公司(AAPL)从2021年1月1日至2024年1月1日的每日收盘价:价格序列(左),百分比收益曲线(中),收益分布的直方图和高斯概率密度函数的估计(右)。(作者提供图)
回报的分布(右边所示)并不是典型的钟形曲线——它的尾部更厚,尖更尖的峰,与正态(或‘高斯’)分布(虚线曲线)相比。这种特性被称为“过度峰度”。可以看出,无论是正向还是负向的大回报往往会跟随更多大回报,而小回报则往往跟随小回报。这种现象被称为“波动率聚集”。在价格序列(左边),在这三年内,总体呈上升趋势,但我们也看到了较短的波动周期。这些较短的趋势经常自我纠正,价格会回归到基于基本面,如市盈率的“正常”水平——这种情况称为“均值回归”。厚尾、波动率聚集和均值回归是“典型特征”的示例。为了生成有说服力的合成金融序列,我们必须要捕捉这些特征。
尽管像生成对抗网络(GANs)和变分自编码器(VAEs)这样的参数模型近年来变得非常流行,但它们在这一领域,结果参差不齐。这些模型常常难以捕捉到波动集聚和均值回复等特征中的固有长期依赖性。此外,伴随许多实际挑战,包括训练不稳定、高资源消耗和解释性有限。
在这个故事中,我采取了完全不同的方法,描述了一个基于显式估计回报概率分布的非参数模型。我将从探讨如何在忽略它们发生的顺序的前提下建模回报分布开始。我们将会看到捕捉这些特征,如峰度和偏度,实际上相当简单。然后,我将展示如何将其扩展为估计“条件”回报分布——即考虑到之前的回报。这为生成逼真的合成序列,这有助于准确捕捉金融时间序列的典型特征,从而为GANs和VAEs提供了急需的替代选择。
使用KDE模型金融回报核密度估计(KDE)是一种用于建模非正态的数据分布的有用方法。它通过在每个数据点处放置一个核(通常是高斯核,但也可以是其他类型的核),然后归一化,使得所有核加起来形成的曲线下的总面积等于一,从而形成一个有效的概率分布函数(PDF)。
在 KDE 中,关键因素是核宽度,或称为“带宽”。如果带宽太窄,密度估计会变得过于局部化,导致密度函数变得波动且噪声较多。相反,如果带宽太宽,估计值会过度平滑数据,无法捕捉分布中的重要特征。如 Silverman 带宽¹ 这样的经验法则通常能提供较好的折衷,但一个固定的带宽不太可能同时准确地捕捉金融回报分布的肥尾特性,并准确建模高密度区域。
可变宽度核函数一种直观的方法是这样,使用可变宽度的核函数,其中宽度随着我们离中心(均值)越远而增加。我们可以通过下面的方式来计算 rₜ 数据点的 bₜ 值:
其中,𝜇̂ 表示历史回报的平均值,A 是分布中心的“基础”核的宽度,而 k 则控制带宽随距离平均值增加的速度。我们采用了带宽随距离呈指数增长的方式,但线性增加的方式也行得通。
让我们把这个方法应用到一些历史财务数据上。图2展示了苹果公司(AAPL)、谷歌公司(GOOG)、脸书公司(META)和微软公司(MSFT)在相同三年期间每日收盘价的经验收益分布和概率密度函数估计值,使用的是宽度可变的核函数。在每种情况下,估计的概率密度函数很好地捕捉了实际数据中的尖峰和肥尾现象。它还捕捉了历史分布中的不对称性(或称“偏斜”)。这一点在谷歌的情况中尤为明显。需要注意的是,虽然KDE可以处理偏斜,如果偏斜程度极端,最好分别对待左右两侧,使用不同的_k_值。
图2. 四支科技股的可变带宽KDE(概率密度估计的一种方法)。(图由作者提供)
但是连续的一系列‘回报’又怎样呢?从估计的概率密度函数(PDF)中抽取单个值非常简单,但我们的目标是生成一系列或称为“序列”的回报值。一个简单的方法是从PDF中依次抽取回报值,但这忽略了最关键的一点:
从同一概率密度函数(PDF)中抽取的样本将独立同分布(i.i.d.),即独立且同分布。然而,具有波动性聚集和均值回归特征的金融序列的收益则不然——过去的收益会影响未来的收益走向。
为了捕捉这些收益模式,我们需要估计“在考虑过去的收益后,现在的收益分布”。这样才能使我们的合成数据准确地反映历史数据中的时间动态。
使用加权核密度估计来建模条件回报率我们在上面使用的核函数是以历史收益 rₜ 为中心的,我们发现它们能够提供历史收益分布 PDF 足够详细的信息。通过对这些相同的核函数进行加权处理,可以生成具有各种不同特征的 PDF,例如,对称与偏斜、单峰与多峰等。
我们希望能够生成代表基于以往收益值的收益分布的PDF文件。挑战在于找到一组能反映出过去收益之间关联的权重。总的来说,我们想要一个这样的函数。
在这里,wₜ 是位于历史回报 rₜ 位置的权重系数。我们来看看最简单的情形:仅根据前一天的收益来估计收益分布。
示例:根据前一天的收益让我们假设前一天的回报值是 c。关键的想法是,对于每个历史回报 rₜ,它的前一天回报值 rₜ ₋ ₁ 越接近 c,以 rₜ 为中心的核对条件概率密度估计的影响就应该越大。有多种方法可以捕捉这种关系,我们选择以下方式:
其中,𝜎̂ 代表历史回报的标准偏差
图3展示了苹果公司三年的历史回报(X轴)与滞后一天的回报(Y轴)的对应关系。它还显示了我们将以此作为条件的具体三个数值:−0.06,−0.03和0.07。图4对应地展示了这三个条件的概率分布。
图3. 苹果(AAPL)每日收盘价格的日收益率与滞后1日的回报率。(图片由作者提供)
图4. 基于前一天收益的苹果(AAPL)收益的PDF图。(作者提供图)
估计的概率密度函数(PDF)的形状会根据条件值的变化而变化。当该值接近0时,条件分布更可能呈现单峰形态。相反,当条件值相对较大(如 − 0.06 或 0.07)时,分布的形状变得更复杂。
我们可以如下所示生成一系列合成收益,我们用撇号(例如 r’₀)来区分二者,其中合成收益用撇号标记,使它们与历史回报区分开来。
返回序列 _r’_0,…,r’ₙ 构成了合成的收益序列,进而可以转换为价格序列。
‘现实的’合成的金融时间序列仅基于前一天的回报表现来估计条件分布,不太可能捕捉到我们在实际金融数据中观察到的丰富特性。为此,我们需要考虑的条件概率分布不仅基于前一天的回报,还应基于之前一连串的回报。
在 Skanalytix²,我们基于这些理念开发了一个合成金融时间序列生成器,能够有效生成逼真的合成金融时间序列,模拟条件分布。生成器估计出的条件概率密度函数(PDFs)形式如下:
其中 Rₜ 及其过去值要么是代表单个股票回报的标量,要么是一组数值代表多个股票回报,而 Xₜ 则要么是单个数值辅助变量,要么是一组数值辅助变量,这些变量可能包括基本面数据、经济指标、市场情绪等。
我们将时间序列生成模型应用于从三年的苹果公司(AAPL)数据生成合成数据集。图5展示了历史数据的回报序列、回报分布、回报的自相关函数、绝对回报的自相关函数和价格序列(第一行),以及三个合成序列(第二到第四行)。(这些合成序列仅使用滞后收益生成,未使用任何辅助特征。)合成回报序列展现出与历史数据相似的肥尾效应和长期波动聚集特性,价格也处于与历史价格相近的区间内,这表明该模型已成功捕捉到了均值回复特性。
图5. 苹果公司(AAPL)的收益走势、收益分布、收益的自相关函数(ACF)、绝对收益的自相关函数(ACF)和价格走势。第一行:历史序列,2021年1月1日至2024年1月1日的数据。第二行到第四行:合成序列。(作者提供图片)
图6展示了原始数据和合成收益的PCA和t-SNE图(PCA³和t-SNE⁴分别代表第三和第四次发展)。这些是方便的降维技术,使我们能够将高维数据可视化为二维。(收益数据扩展以包含滞后值作为额外维度)。两种方法都显示,历史数据和合成数据的点相互交错,分布均匀,表明合成数据捕捉到了与历史数据相当广泛的波动。此外,没有单一颜色的聚类,表明一组中存在的模式不在另一组中出现。从图5和图6我们可以确定,合成数据已经很好地模仿了历史数据的整体结构。
图6. Apple (AAPL) 股票的历史数据和合成数据的PCA和t-SNE的可视化结果。(作者制作)
联动的股票除了为个别股票生成合成序列外,我们还可以为多个相关股票生成现实的序列。图7展示了四家科技股——苹果(AAPL)、谷歌(GOOG)、脸书(META)和微软(MSFT)——三年期间的历史价格和合成价格序列。合成序列表现了这些股票历史价值中观察到的强正相关性,同时模拟了每个单独序列的特点。负相关性也可以类似地模拟。
图7. 相关联的股票苹果(AAPL)、谷歌(GOOG)、脸书(META)和微软(MSFT)的原始价格走势和合成价格走势。(作者提供图表)
最后说一下,结论在这篇文章中,我描述了一种非参数方法,该方法基于明确估计回报分布来生成合成的金融时间序列。这种方法不仅生成了能够准确捕捉诸如波动性聚类和均值回归等特征的真实金融时间序列,还完全避免了如GAN和VAE等参数方法的实际挑战。重要的是,该模型绝不是黑盒子——从回报中抽取的分布是由加权核组成的总和,使其可以直接被可视化。
我们主要关注生成合成金融序列——对于每个生成的点,估计了一个条件分布,然后从该分布中随机抽取一个值作为结果。然而,同样的分布也可以用于多种目的。如果目的是进行预测(或“预测”),那么只需确定估计分布的条件均值、中位数或众数即可。估计风险价值(VaR)也相当直接,计算收益落在定义区间内的概率同样简单。
我们在 Skanalytix² 开发的合成金融时间序列数据生成器基于我们的 统一数值/类别表示与推理框架 (UNCRi),该框架结合了基于图的表示方案以及一种灵活的推理过程,可以用来估计和采样任何类别或数值变量的条件概率分布。该生成器是组织在测试交易策略、模型验证和其他涉及金融时间序列决策任务时需要的现实合成数据的宝贵工具。您可以在 Skanalytix² 的网站上免费访问在线合成金融时间序列数据生成器。请在 LinkedIn 上关注 Skanalytix(https://www.linkedin.com/company/97182209),以获取我们的最新新闻和见解。
注:或
注:
- Skanalytix 的免费在线金融合成时间序列生成器可以在以下网址找到:https://skanalytix.com/synthetic-financial-time-series-generator
- 生成图 1 至 4 所需的 Python 代码可以从 https://github.com/a-skabar/SynthFinTimeSeries 获取
[1] Silverman, B.W. (1982年). 统计学应用,皇家统计学会会刊,第33期。
[3] Jolliffe, I.T. (1986). “主成分分析法” , Springer, New York.
[4] van der Maaten, L. 和 Hinton, G. (2008). “使用 t-SNE 进行数据可视化” 《机器学习研究》期刊, 9(11).
共同学习,写下你的评论
评论加载中...
作者其他优质文章