Machine-Learning-for-Asset-Managers:基于机器学习的资产管理学习项目

Implementation of code snippets, exercises and application to live data from Machine Learning for Asset Managers (Elements in Quantitative Finance) written by Prof. Marcos López de Prado.

分支2Tags0
文件最后提交记录最后更新时间
3 年前
4 年前
4 年前
4 年前
3 年前
4 年前
4 年前
4 年前

安装库

通过 pip install -U git+https://github.com/emoen/Machine-Learning-for-Asset-Managers 进行安装。

>>> from Machine_Learning_for_Asset_Managers import ch2_fitKDE_find_best_bandwidth as c
>>> import numpy as np
>>> c.findOptimalBWidth(np.array([21,3]))
{'bandwidth': 10.0}

《机器学习在资产管理中的应用》

本书由Marcos López de Prado教授所著,其内容包括代码示例和练习,源自《机器学习在资产管理中的应用(定量金融要素)》。 此项目旨在个人学习,如需使用书中概念,建议参考Hudson & Thames的作品,特别是在mlfinlab中实现了这些概念以及更多功能。

实践应用请查看仓库:Machine-Learning-for-Asset-Managers-Oslo-Bors

注意:第4章中的“最优聚类数目”算法(ONC)实现存在错误(来自de Prado和Lewis于2018年的论文“使用无监督学习方法检测虚假投资策略”的代码也不同但同样不正确)。具体问题讨论可见:

应考虑研究其他聚类算法,例如层次聚类。

第2章 去噪与去调制

展示Marcenko-Pastur理论概率密度函数与经验密度函数: marcenko-pastur.png

使用常数残差特征值方法对含信号的随机矩阵进行去噪。这通过固定随机特征值来实现。参见代码片段2.5: eigenvalue_method.png

去调制的协方差矩阵可用于计算最小方差投资组合。有效前沿是从最小方差投资组合开始的最小方差边界上部。经过去噪的协方差矩阵对变化更加稳定。

练习提示:第2.7题要求扩展代码片段2.2中的fitKDE函数,以便通过交叉验证估计最佳bWidth(带宽)的值。

脚本ch2_fitKDE_find_bandwidth.py实现了这一过程,并产生了图2.3中的绿色KDE曲线: gaussian_mp_excersize_2_7.png

从代码片段2.3 —— 对于含有信号的随机矩阵,直方图显示了这种矩阵特征值的分布情况。然后,通过将fitKDE作为经验概率密度函数来计算理论概率密度函数的方差。因此,在fitKDE中找到一个好的带宽值对于找到理论mp-pdf最可能的方差至关重要。 fig_2_3_mp_with_signal.png

第3章 距离度量

  • 距离度量定义
    1. 不可区分物体的身份性:d(x,y) = 0 当且仅当 x=y
    2. 对称性:d(x,y) = d(y,x)
    3. 三角不等式。以上三点确保非负性:d(x,y) ≥ 0
  • 皮尔逊相关系数、距离相关系数、角度距离及信息论相关的共依赖和熵依赖:
    • 交叉熵、Kullback-Leibler散度、信息熵等概念解析。
  • 示例代码演示了不同度量的应用和计算结果。

第4章 最优聚类

利用无监督学习最大化组内相似性和最小化组间相似性。以N×F形状的矩阵X为例,其中N代表对象数量,F代表特征数量。通过计算亲疏程度(如相关性、互信息)形成一个N×N的近似矩阵。

聚类算法主要分为分区和层次两大类:

  1. 层次聚类基于连接性。
  2. 类似k-means的中心点聚类。
  3. 分布型聚类,假设数据符合特定分布(如高斯分布)。
  4. 密度型聚类,寻找高度相连的密集区域,如DBSCAN、OPTICS。
  5. 子空间聚类,适用于两维度分析,即特征和观察值。

随机生成块状相关矩阵以模拟带有相关性的资产。该功能实现于代码片段4.3中,并使用“最优聚类数目”(ONC)算法(无需预设群落数目,采用“肘部法则”确定群落数),其定义于4.1和4.2节。ONC达到的最佳聚类数量表现为高组内相关性和低组间相关性。硅胶轮廓得分用于最小化组内距离并最大化组间距离。 random_block_corr_matrix.jpg fig_4_1_random_block_correlation_matrix_onc.png

第五章 金融标签

固定期限法

时间条形图方法

容量条形图方法

三重障碍法涉及持有头寸直到:

  1. 实现利润目标
  2. 达到未实现损失限制
  3. 头寸被持有了超过最大数量的周期

趋势扫描方法:目的是识别趋势并让其尽可能长时间和远距离地持续,不设定任何障碍。

fig_5_1_trend_scanning.png
正弦波上带有高斯噪声的趋势扫描标签示例:
fig_5_2_trend_scanning_t_values.png
使用t值的趋势扫描显示对趋势的信心。1表示上涨的高信心,-1表示下跌的高信心。

作为书中提出的向前看算法的替代方案,可以从最新数据点向回看,直到窗口大小。例如,如果最新的数据点位于索引20,窗口大小在3到10天之间。反向查看算法会从索引17到20扫描,一直回溯到索引11到20。因此只考虑最近的信息。

fig_5_2_trend_scanning_t_values2.png
使用反向查看的t值趋势扫描

第六章 特征重要性分析

"p值并不衡量零假设或备选假设都不正确的概率,也不衡量结果的重要性。"

fig_6_1_p_values_explanatory_vars.png
在一组信息性、冗余和噪声解释变量上计算的p值。解释变量并未具有最高的p值。

"回测不是研究工具。特征重要性才是。"(洛佩兹·德·普拉多)均方下降不纯度(MDI)算法解决了p值中的4个问题中的3个:

  1. MDI不对树结构、代数指定或依赖于残差的任何随机或分布特性施加约束(如 y=b0+b1*xi+\epsilon{})
  2. β系数是从单样本中估计的,而MDI依赖于自助法,因此通过随机森林集成中的树木数量可以减少方差。
  3. 在MDI中,目标不是估计给定代数方程的系数((\hat{b}_0),(\hat{b}_1)),该方程式描述了零假设的概率。
  4. MDI不修正样本内计算,因为它没有交叉验证。
fig_6_2_mdi_example.png
MDI算法示例

图6.4表明ONC正确地识别出存在六个相关簇(每个信息性特征一个簇,加上一个噪声特征簇),并将冗余特征分配到包含衍生这些冗余特征的信息性特征的簇。由于群集间的相关性较低,无需用它们的残差替换特征。

fig_6_4_feature_clustering.png

接下来,将聚类MDI方法应用于聚类数据:

fig_6_5_clustered_MDI.png
图6.5 聚类MDI

聚类MDI比非聚类MDI效果更好。最后,将聚类MDA方法应用于此数据:

fig_6_6_clustered_MDA.png
图6.6 聚类MDA

结论:与噪声特征相关的C_5不重要,其他所有簇的重要性和相似。

第七章 投资组合构建

凸优化投资组合理论可计算最小方差投资组合和最大夏普比率。

条件数定义:最大特征值与最小特征值绝对值的比值:( \frac{A_{nn}}{A_{mm}} )。条件数说明了由协方差结构引起的不稳定性。 迹定义:主对角线元素之和 - 它是主对角线上元素的总和

高度相关的时间序列意味着相关矩阵的条件数很高。

马科维茨诅咒

只有当相关性 ( \rho=0 ),即无相关时,相关矩阵C才会稳定。

分层风险平价(HRP)在样本外蒙特卡罗实验中优于马科维茨,但在样本内次优。

代码片段7.1展示了信号诱导的相关矩阵的不稳定性。

>>> corr0 = mc.formBlockMatrix(2, 2, .5)
>>> corr0
array([[1. , 0.5, 0. , 0. ],
       [0.5, 1. , 0. , 0. ],
       [0. , 0. , 1. , 0.5],
       [0. , 0. , 0.5, 1. ]])
>>> eVal, eVec = np.linalg.eigh(corr0)
>>> print(max(eVal)/min(eVal))
3.0
fig_7_1_block_diagonal.png
图7.1 块对角相关矩阵的热图

代码片段7.2创建相同的块对角矩阵,但有一个主导块。然而,条件数相同。

>>> corr0 = block_diag(mc.formBlockMatrix(1,2, .5))
>>> corr1 = mc.formBlockMatrix(1,2, .0)
>>> corr0 = block_diag(corr0, corr1)
>>> corr0
array([[1. , 0.5, 0. , 0. ],
       [0.5, 1. , 0. , 0. ],
       [0. , 0. , 1. , 0. ],
       [0. , 0. , 0. , 1. ]])
>>> eVal, eVec = np.linalg.eigh(corr0)
>>> matrix_condition_number = max(eVal)/min(eVal)
>>> print(matrix_condition_number)
3.0

这表明仅降低其中一个块内的相关性并不会降低条件数。这表明马科维茨解决方案的不稳定性可以追溯到主导块。

fig_7_2_block_diagonal.png
图7.2 主导块对角相关矩阵的热图

层叠聚类优化算法(NCO)

NCO提供了一种策略来解决马科维茨诅咒对现有均值-方差配置方法的影响。

  1. 步骤:聚类相关矩阵
  2. 步骤:使用去噪协方差矩阵计算最优的内部集群分配
  3. 步骤:使用接近对角矩阵的缩减协方差矩阵计算最优的跨集群分配,因此优化问题是接近理想马科维茨情况的,当 ( \rho=0 ) 时

第8章 测试集过拟合

回测是一种投资策略的历史模拟,以评估其在过去可能的表现。在多重测试中,由于研究者对历史数据运行数百万次测试并仅展示最佳结果(过度拟合),回测受到选择偏误的影响。本章探讨如何衡量这种选择偏误的影响。

精确度和召回率

多重测试下的精确度和召回率

夏普比率

夏普比率 = μ/σ

"错误策略"定理

研究者可能运行许多历史模拟,并只报告最优策略(最大夏普比率)。 最大夏普比的分布并不等于期望的夏普比率。因此,在多次重复试验中的选择偏误(SBuMT)。

实验结果

蒙特卡洛实验表明,即使期望的夏普比率为0(E[sharp_ratio]=0),最大夏普比率的分布也会增加(E[max(sharp_ratio)]=3.26)。因此,即使没有好的策略,投资策略看起来仍然颇具吸引力。

当进行多次试验时,最大夏普比率的期望值大于随机试验(真实夏普比率为0且方差>0)中夏普比率的期望值。

maxSR_across_uniform_strategies_8_1.png
图8.1 错误策略定理的实验与理论结果比较

膨胀后的夏普比率

从错误策略定理得出的主要结论是,除非maxkSRk≫E[maxkSRk]max_k{SR_k} \gg E[max_k{SR_k}],否则发现的策略很可能是假阳性。

多重测试下的二类错误

一类错误与二类错误的相互作用

附录A:基于合成数据的测试

通过重采样或蒙特卡洛方法进行

项目介绍

代码片段的实现、练习以及应用于《机器学习在资产管理中的应用》(数量金融元素系列)一书中由Marcos López de Prado教授撰写的数据分析实例。【此简介由AI生成】

定制我的领域