skfolio如何设置各种参数

问题描述 投票:0回答:1

我已经开始使用 skfolio,使用 skfolio.datasets (sp500) 中给出的投资组合。我的想法是使用 sp500 作为我的宇宙来运行一个由同等权重的股票组成的投资组合。为此,我执行以下操作:

import skfolio
from skfolio.datasets import load_sp500_dataset
from skfolio.preprocessing import prices_to_returns

prices=load_sp500_dataset()
X=prices_to_returns(prices)
X_train, X_test = train_test_split(X, test_size=0.33, shuffle=False)

model = skfolio.optimization.naive.EqualWeighted()

model.fit(X_train)

portfolio = model.predict(X_test)

print(portfolio.annualized_sharpe_ratio)
print(portfolio.summary())

所以这里我使用 SP500 指数的数据并应用等权重投资组合模型。它返回投资组合的各种统计数据(偏度、峰度……),我可以用

绘制累积收益
portfolio.plot_cumulative_returns()

我对上述内容有一些疑问/问题,因为似乎很多参数已“默认”定义。我相信它们都可能与某种 set_parameters 函数相关(?)。特别是:

  • 我的投资组合中要考虑的资产数量(据我所知,资产数量设置为 20)。我怎样才能更改该号码?
  • 我觉得优化器每天都会重新平衡投资组合以使其权重相等(?)。如何更改重新平衡的频率(例如每周、每月、每季度、每年)?
  • 有没有办法设定投资组合的运行周期?目前它从 2012 年的某个地方开始(可以修改为 2002 年还是其他什么?)
  • 关于累积回报的图是关于非复利回报的。有没有办法获得复合回报?
python-3.x optimization scikit-learn portfolio
1个回答
0
投票

我是 Skfolio 的核心开发人员之一。

回答第 1 点和第 3 点

您的资产数量和开始周期与您的输入相关联

X
,这是您的资产回报时间序列。

在您的示例中,您使用 EqualWeighted 分配模型。该模型将 1/20 的权重分配给您输入回报中的 20 种资产

X
。要更改它,您需要通过删除列(资产)或行(日期)来修改输入。

当使用其他模型时,例如MeanRisk,由于这些模型支持权重和基数约束,因此您可以通过模型参数控制投资资产的数量:MeanRisk Cardinality Constraints

另一种选择是通过 预选变压器预选变压器


第4点的答案

要使用复合回报进行投资组合评估(例如,绘图、风险统计等),您需要设置

compounded=True

from skfolio.optimization import EqualWeighted
from skfolio.datasets import load_sp500_dataset
from skfolio.preprocessing import prices_to_returns

prices = load_sp500_dataset()
X = prices_to_returns(prices)

# Without compounded returns
model = EqualWeighted()
ptf = model.fit_predict(X)
ptf.cumulative_returns_df.tail()

# With compounded returns
model = EqualWeighted(portfolio_params=dict(compounded=True))
ptf = model.fit_predict(X)
ptf.cumulative_returns_df.tail()

第5点的答案

就再平衡而言,有两个不同的概念,有时都称为“再平衡”:

  1. 模型改装
    这会改变目标权重,例如,每月重新拟合 MVO(均值方差优化)模型。
    使用交叉验证器执行模型重新拟合:交叉验证器示例

  2. 重新平衡目标权重
    这是指在两次重新安装之间进行重新平衡,以避免随着资产价格差异而出现权重漂移。


第二种类型的重新平衡以与输入数据相同的频率发生,因此在您的示例中每天都会发生。

原因是 Skfolio 中的投资组合模型和交叉验证器用于模型验证、选择和参数调整。因此,模型评估对于优化过程必须是“同质的”。例如,如果您使用具有 10% 波动性约束的 MeanRisk 模型 调用

model.fit_predict(X)
,则同一训练集 X 上的预测投资组合也必须具有 10% 的波动性。否则,你以后在模型选择、评估和比较方面都会产生问题。
从数学上讲,这意味着在重新拟合之间,投资组合收益计算为收益和权重的点积。

更多详细信息请参见此处:

投资组合模型

补充说明

如果您需要更精细的粒度来模拟重新装配之间的重量漂移,可以将 Skfolio 与回溯测试包一起使用。

如果您还有其他问题,请告诉我!

© www.soinside.com 2019 - 2024. All rights reserved.