🚀 AI 一键生成 joinquant 策略代码
立即体验
👉 AI 生成代码 👈

聚宽 book_to_price_ratio 因子负值原因及账面价值计算公式解析

joinquant | 发布时间: 2026/6/2
以下内容由 EasyQuant 生成。

问题描述

book_to_price_ratio因子为什么很多都是负的

学习聚宽因子的时候看到book_to_price_ratio因子,尝试获取后发现很多为负数,如图Img
查看文档,解释该因子为pb_ratio的倒数,但实际pb也没有那么多负的呀,Img
猜想关键问题应该是账面价值的计算,有谁能解惑下账面价值的计算公式吗?

解决方案

您好!您在聚宽(JoinQuant)平台上获取 book_to_price_ratio 因子时发现大量负值,这其实并不是因为原始的账面价值为负,而是因为您获取的是经过“标准化处理”后的风格因子暴露度(Z-score)

下面为您详细解惑:

1. 为什么会出现大量负值?(核心原因:标准化处理)

在聚宽的因子库中,book_to_price_ratio 属于风险模型中的风格因子。根据聚宽 API 文档的【风格因子数据处理说明】,平台为了让不同因子之间具有可比性,并消除量纲影响,会对风格因子进行去极值和标准化处理

标准化的公式为:
$$ x_{new} = \frac{x - mean(x)}{std(x)} $$
(注:聚宽使用的是市值加权均值和标准差)

结论:经过标准化处理后,因子的均值会变为 0。如果某只股票的原始账面市值比低于全市场的平均水平,其标准化后的因子值就会变成负数。 这就是为什么您会看到大量负值的原因,它代表的是该股票的账面市值比在市场中的相对位置,而不是绝对的财务数值。

2. 原始账面价值的计算公式是什么?

如果您想了解原始的 book_to_price_ratio 是如何计算的,聚宽文档中的定义如下:

  • 定义:最新一季财报的账面价值与当前市值的比值(即 pb_ratio 的倒数)。
  • 账面价值(Book Value):通常指的是财务报表中的归属于母公司所有者权益合计(即净资产)。
  • 原始公式原始 book_to_price_ratio = 归属母公司所有者权益合计 / 总市值

3. 原始数据中真的有负值吗?

在真实的财务数据中,如果一家公司“资不抵债”,其归母净资产确实可能为负,从而导致原始的 PB 或账面市值比为负。但是,聚宽在处理这个风格因子时,已经考虑到了这一点。

根据文档说明:

账面市值比因子 book_to_price_ratio:最新一季财报的账面价值与当前市值的比值(pb_ratio的倒数)。其中小于0的值设置为 nan。

这意味着,在进行标准化之前,聚宽已经将原始计算中小于 0 的异常值剔除(设为 nan)了。因此,您最终看到的负值,100% 是标准化过程(减去均值)产生的。

4. 如何获取原始的账面市值比(不带负值)?

如果您在策略中需要使用绝对的、未标准化的账面市值比(即市净率的倒数),建议您不要直接调用风格因子库中的 book_to_price_ratio,而是直接通过财务估值表(valuation)来获取并计算:

from jqdata import *

# 获取股票的市净率 (PB)
q = query(valuation.code, valuation.pb_ratio).filter(valuation.code.in_(['000001.XSHE', '000002.XSHE']))
df = get_fundamentals(q, date='2023-10-01')

# 自行计算原始的账面市值比 (1 / PB)
df['raw_book_to_price'] = 1 / df['pb_ratio']
print(df)

通过这种方式获取的数据,只要公司没有资不抵债,计算出的结果就都是正数。