首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >分位数阈值总在变?先把 quantile 的计算方法写进回测配置

分位数阈值总在变?先把 quantile 的计算方法写进回测配置

原创
作者头像
量化行业新引擎
发布于 2026-10-22 09:54:08
发布于 2026-10-22 09:54:08
210
举报
文章被收录于专栏:AI量化视界AI量化视界

做横截面选股时,经常会用“因子排名前 20%”作为入选条件。样本足够大时,分位点的算法差异不明显;但股票数量较少、因子值重复较多,或者滚动窗口刚启动时,同样的 80% 分位数可能得到不同阈值,最终连持仓名单都会变化。

问题通常藏在 `quantile` 的默认参数里。NumPy 的 `np.quantile` 默认使用 `method="linear"`,当目标分位点落在两个样本之间时,会做线性插值。假设排序后的因子只有 `[1, 2, 4, 8]`,计算 0.75 分位数时,结果不一定直接等于其中某个观测值。如果策略规则是“因子大于等于阈值就买入”,插值得到的阈值会影响边界股票是否入选。

如果业务含义要求阈值必须来自实际观测,可以明确选择离散方法,例如:

```python

threshold = np.quantile(factor, 0.8, method="higher")

selected = factor >= threshold

```

`highe` 会取上侧观测值,`lower` 取下侧观测值,`nearest` 取最近值;它们没有统一的“最好”,关键是和策略定义一致。需要注意的是,NumPy 1.22 之后参数名由 `interpolation` 改为 `method`。如果研究环境和生产环境版本不同,最好在依赖文件里锁定版本,并为阈值写一个小型单元测试。

我还会同时记录三个条件:计算前是否剔除缺失值、相同因子值如何处理、入选条件用 `>` 还是 `>=`。特别是大量股票因子值相同时,单靠分位数无法保证持仓数量正好等于 20%,这时应再加稳定的次级排序规则,例如股票代码或流动性指标,避免每次运行因原始顺序不同而换股。

分位数看起来只是一个函数调用,但它其实属于策略口径。把 `method`、缺失值处理和边界比较写进配置,比只写“取前 20%”更容易复现,也能减少研究端与实盘端的信号差异。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档