问题描述
解决方案
在聚宽(JoinQuant)的单因子分析中,可以通过修改 analyze_factor 函数中的 quantiles 参数来改变默认的分层数量。
修改方法
默认情况下,quantiles 的值为 5,即默认将股票池分为 5 层(5分位)。如果您希望将其修改为其他数量(例如 10 层),只需在调用函数时显式传入该参数即可。
代码示例
以下代码展示了如何获取因子数据并将分层数量修改为 10:
# 导入必要的库
from jqfactor import analyze_factor, get_factor_values, get_index_stocks
# 1. 准备数据:获取沪深300成分股的 'Skewness60' 因子值
stocks = get_index_stocks('000300.XSHG')
factor_data = get_factor_values(
securities=stocks,
factors=['Skewness60'],
start_date='2018-01-01',
end_date='2018-03-01'
)['Skewness60']
# 2. 调用 analyze_factor 进行分析
# 将 quantiles 参数设置为 10
far = analyze_factor(
factor=factor_data,
start_date='2018-01-01',
end_date='2018-03-01',
weight_method='mktcap',
industry='jq_l1',
quantiles=10, # <--- 在此处修改分层数量,例如改为 10 层
periods=(1, 5, 22),
max_loss=0.25
)
# 3. 查看结果(例如查看各分位数的平均收益)
print(far.mean_return_by_quantile)
参数说明
- quantiles (int): 分位数数量。
- 默认为
5。 - 设置为
10表示按因子值大小将股票分为 10 组(Deciles)。 - 设置为
3表示分为 3 组(Tertiles)。
- 默认为
Q&A
Q: analyze_factor 函数中 quantiles 参数的作用是什么?
A: quantiles 参数用于指定在单因子分析中将股票池按照因子值排序后划分为多少个等份(层)。例如,设置为 5 表示将股票分为 5 个分位数(Quantiles),用于后续分析不同分位数组合的收益表现、换手率等指标。
Q: 如果因子值中有大量重复,导致无法满足指定的分层数量怎么办?
A: analyze_factor 内部处理分层时,如果因子值重复过多导致无法严格按照指定的 quantiles 数量进行等分,程序通常会尝试进行近似划分。如果数据质量过差(如大量 NaN 或重复值),可能会受到 max_loss 参数的限制,超过最大丢失比例限制时可能会报错或剔除无效数据。
Q: 修改分层数量后,哪些分析结果会受到影响?
A: 修改 quantiles 会直接影响所有基于分位数计算的指标,包括:
- 各分位数的平均收益 (
mean_return_by_quantile) - 各分位数的累积收益图 (
plot_cumulative_returns_by_quantile) - 最高分位减最低分位的多空收益 (
mean_return_spread_by_quantile) - 分位数换手率 (
quantile_turnover) - 分位数标准差等统计数据。