skfolio.optimization.NestedClustersOptimization#
- class skfolio.optimization.NestedClustersOptimization(inner_estimator=None, outer_estimator=None, distance_estimator=None, clustering_estimator=None, cv=None, quantile=0.5, quantile_measure=Sharpe Ratio, n_jobs=None, verbose=0, portfolio_params=None)[来源]#
嵌套聚类优化估计器。
嵌套集群优化(NCO)是一种由Marcos Lopez de Prado开发的投资组合优化方法。
它使用距离矩阵通过聚类算法(层次树聚类、KMeans等)计算聚类。对于每个聚类,内部聚类权重是通过使用整个训练数据在每个聚类上拟合内部估计器计算的。然后通过使用内部估计器的交叉验证的样本外估计训练外部估计器来计算外部聚类权重。最后,最终的资产权重是内部权重和外部权重的点积。
注意
原始论文使用 KMeans 作为聚类算法,最小方差作为内估计器,等权重作为外估计器。在这里,我们将其推广到所有
sklearn和skfolio聚类算法(HierarchicalClustering, KMeans 等),所有投资组合优化(均值-方差,HRP 等)和风险度量(方差,CVaR 等)。为了避免外估计器的数据泄露,我们使用样本外估计来拟合外部估计器。- Parameters:
- inner_estimatorBaseOptimization, optional
- outer_estimatorBaseOptimization, optional
- distance_estimatorBaseDistance, optional
距离估计器。 距离估计器用于估计代码依赖性和计算连接矩阵所需的距离矩阵。 默认 (
None) 是使用PearsonDistance。- clustering_estimatorBaseEstimator, optional
聚类估计器。在拟合后必须公开一个
labels_属性。聚类估计器用于基于距离矩阵计算资产的聚类。默认值 (None) 是使用HierarchicalClustering。注意
来自
sklearn的聚类估计器也受到支持。例如:sklearn.cluster.KMeans.- cvBaseCrossValidator | BaseCombinatorialCV | int | “ignore”, optional
确定交叉验证分割策略。默认(
None)是使用5折交叉验证KFold()。它应用于内部估计器。它的样本外输出用于训练外部估计器。cv的可能输入为:“ignore”: 不使用交叉验证(请注意,这可能会导致数据泄漏,风险很高,容易过拟合)
整数,指定在
sklearn.model_selection.KFold中的折叠数量一个用于交叉验证生成器的对象
生成训练和测试数据集的可迭代对象
如果使用
CombinatorialCV交叉验证器,则每个集群的样本外输出将变成多个路径的集合,而不是单一路径。在这个路径集合中选择的样本外路径是根据quantile和quantile_measure参数来选择的。- n_jobsint, optional
并行运行所有
estimators的fit的作业数量。值-1表示使用所有处理器。默认值 (None) 在joblib.parallel_backend上下文中表示 1。- quantilefloat, default=0.5
对于给定度量的分位数 (
quantile_measure),当cv参数为CombinatorialPurgedCV交叉验证器时,超出样本内估计器路径的分位数。 默认值为0.5,对应于具有中位数度量的路径。 (见cv)- quantile_measurePerfMeasure or RatioMeasure or RiskMeasure or ExtraRiskMeasure, default=RatioMeasure.SHARPE_RATIO
用于分位数路径选择的度量(见
quantile和cv)。默认值是RatioMeasure.SHARPE_RATIO。- verboseint, default=0
详细程度。默认值是
0。- portfolio_paramsdict, optional
传递给通过
predict和score方法评估的投资组合的投资组合参数。如果未提供,name会从优化模型中复制并系统地传递给投资组合。
- Attributes:
- weights_ndarray of shape (n_assets,)
资产的权重。
- distance_estimator_BaseDistance
拟合的
distance_estimator。- inner_estimators_list[BaseOptimization]
拟合的
inner_estimator列表。每个集群一个,适用于包含多个资产的集群。- outer_estimator_BaseOptimization
拟合的
outer_estimator.- clustering_estimator_BaseEstimator
拟合的
clustering_estimator。- n_features_in_int
在
fit期间看到的资产数量。- feature_names_in_ndarray of shape (
n_features_in_,) 在
fit期间看到的资产名称。只有当X具有所有为字符串的资产名称时才定义。
参考文献
[1]“建立超越样本外的多元化投资组合”, 投资组合管理期刊, 马尔科斯·洛佩斯·德·普拉多 (2016)
[2]“有效前沿的稳健估计器”, SSRN电子期刊, Marcos López de Prado (2019)
[3]“资产管理的机器学习”, 定量金融中的元素。剑桥大学出版社, 马尔科斯·洛佩斯·德·普拉多(2020)
方法
fit(X[, y])拟合嵌套集群优化估计器。
fit_predict(X)对
X执行fit操作,并返回基于拟合的weights的Portfolio或Population的预测结果。获取此对象的元数据路由。
get_params([deep])获取此估计器的参数。
predict(X)根据拟合的权重预测
Portfolio或Population在X上的Portfolio。score(X[, y])预测分数。
set_params(**params)设置此估计器的参数。
- fit(X, y=None, **fit_params)[来源]#
拟合嵌套聚类优化估计器。
- Parameters:
- Xarray-like of shape (n_observations, n_assets)
资产的价格收益。
- yarray-like of shape (n_observations, n_targets), optional
因子或目标基准的价格回报。 默认值是
None。- **fit_paramsdict
传递给基础估计器的参数。只有在
enable_metadata_routing=True的情况下可用,您可以通过使用sklearn.set_config(enable_metadata_routing=True)来设置。详情请参见 元数据路由用户指南。
- Returns:
- selfNestedClustersOptimization
拟合的估计器。
- fit_predict(X)#
对
X执行fit并根据拟合的weights返回预测的Portfolio或Population的Portfolio在X上的值。对于因子模型,分别使用fit(X, y)然后predict(X)。- Parameters:
- Xarray-like of shape (n_observations, n_assets)
资产的价格收益。
- Returns:
- predictionPortfolio | Population
基于拟合的
weights估计的Portfolio或Population的Portfolio在X上。
- get_metadata_routing()[来源]#
获取这个对象的元数据路由。
请查看 用户指南 了解路由机制是如何工作的。
- Returns:
- routingMetadataRequest
一个
MetadataRequest封装路由信息。
- get_params(deep=True)#
获取此估计器的参数。
- Parameters:
- deepbool, default=True
如果为真,将返回此估计器及其包含的子对象的参数,这些子对象也是估计器。
- Returns:
- paramsdict
参数名称映射到它们的值。
- predict(X)#
根据拟合的权重预测
Portfolio或Population在X上的Portfolio。优化估计器可以返回一个一维或二维数组的
weights。对于一维数组,预测返回一个Portfolio。对于二维数组,预测返回一个Population的Portfolio。如果
name在投资组合参数中没有提供,我们将使用估计器名称的前 500 个字符。- Parameters:
- Xarray-like of shape (n_observations, n_assets)
资产的价格收益。
- Returns:
- predictionPortfolio | Population
基于拟合的
weights估计的Portfolio或Population的Portfolio在X上。
- score(X, y=None)#
预测分数。 如果预测是单个
Portfolio,则分数是夏普比率。 如果预测是一组Population的Portfolio,则分数是该组中所有投资组合夏普比率的平均值。- Parameters:
- Xarray-like of shape (n_observations, n_assets)
资产的价格收益。
- yIgnored
未使用,仅为了遵循API一致性而存在。
- Returns:
- scorefloat
如果预测是单个
Portfolio,则投资组合的夏普比率为;如果预测是Portfolio的Population的所有投资组合夏普比率的平均值。
- set_params(**params)#
设置该估计器的参数。
该方法适用于简单估计器以及嵌套对象(如
Pipeline)。后者具有<component>__<parameter>形式的参数,因此可以更新嵌套对象的每个组件。- Parameters:
- **paramsdict
估计器参数。
- Returns:
- selfestimator instance
估计器实例。