【Python量化实战全攻略 #11】质量因子手册:ROE、毛利率、资产负债率(附代码)
摘要:【Python量化实战全攻略 #11】质量因子手册:ROE、毛利率、资产负债率(附代码) 手册定位:模块二第 3 篇。质量因子筛「赚钱能力强、负债健康」的公司——ROE、毛利率、资产负债率。和估值/成长搭配,过滤「虚
手册定位:模块二第 3 篇。质量因子筛「赚钱能力强、负债健康」的公司——ROE、毛利率、资产负债率。和估值/成长搭配,过滤「虚胖」与「高杠杆」陷阱。
数据来源复用 #04 财务三表(资产负债表 + 利润表)。
1. 你将得到什么
- ROE、毛利率、资产负债率三个质量指标的计算公式与取数字段;
- 把三个指标合成一个质量综合分的方法;
- 资产负债率作为「反向因子」的处理;
- 质量因子的 4 个坑(杠杆虚高 ROE、行业差异、金融股剔除、一次性收益)。
2. 取数约定(复用)
| 指标 | 公式 | 来源端点 | 见 |
|---|---|---|---|
| ROE | 净利润 / 归母净资产 | 利润表+资产负债表 | #04 |
| 毛利率 | (营收−成本) / 营收 | 利润表 | #04 |
| 资产负债率 | 总负债 / 总资产 | 资产负债表 | #04 |
3. 数据来源(复用,不重复罗列)
详见 #04 财务三表接口手册(/hs/fin/balance、/hs/fin/income)。
4. 核心模板函数(自包含可跑)
import pandas as pd
_MOCK = True
def build_quality(df):
out = df.copy()
out["ROE"] = out["净利润"] / out["归母净资产"].replace(0, pd.NA)
out["毛利率"] = (out["营业收入"] - out["营业成本"]) / out["营业收入"].replace(0, pd.NA)
out["资产负债率"] = out["总负债"] / out["总资产"].replace(0, pd.NA)
return out
def quality_score(df):
s = df.copy()
s["ROE_s"] = s["ROE"].rank(pct=True)
s["毛利_s"] = s["毛利率"].rank(pct=True)
s["杠杆_s"] = s["资产负债率"].rank(pct=True, ascending=False)
s["质量分"] = s[["ROE_s", "毛利_s", "杠杆_s"]].mean(axis=1)
return s
def run_check():
df = pd.DataFrame([
{"代码": "600519", "净利润": 7.5e10, "归母净资产": 7.5e11, "营业收入": 1.5e11,
"营业成本": 9.0e10, "总负债": 4.0e10, "总资产": 1.2e11},
{"代码": "000001", "净利润": 3.0e10, "归母净资产": 4.0e11, "营业收入": 1.3e11,
"营业成本": 8.2e10, "总负债": 3.8e10, "总资产": 1.1e11},
{"代码": "600036", "净利润": 1.4e11, "归母净资产": 9.0e11, "营业收入": 3.0e11,
"营业成本": 1.0e11, "总负债": 9.0e10, "总资产": 2.0e11},
])
q = quality_score(build_quality(df))
assert (q["ROE"] > 0).all() and q["毛利率"].between(0, 1).all() and q["资产负债率"].between(0, 1).all()
assert q["质量分"].between(0, 1).all()
print("校验通过 | ROE:", q["ROE"].round(3).tolist(), "质量分:", q["质量分"].round(2).tolist())
return q
if __name__ == "__main__":
run_check()
5. 跑通示例
q = run_check()
print(q.sort_values("质量分", ascending=False)[["代码", "ROE", "毛利率", "资产负债率", "质量分"]])
6. 坑与注意事项
- 杠杆虚高 ROE:高负债能抬高 ROE,质量因子要把资产负债率反向加权。
- 行业差异:银行/地产天然高杠杆,质量分要做行业中性再排名。
- 金融股剔除:金融业资产负债表结构特殊,通常整体剔除。
- 一次性收益:处置资产带来的净利润会抬高 ROE,优先用扣非口径。
7. 小结与下一篇预告
质量因子就位,与估值、成长组成「便宜+成长+质量」三因子雏形。下一篇讲资金流因子——主力净流入与北向,引入资金面维度。
下一篇预告:《【Python量化实战全攻略 #12】资金流因子手册:主力、北向因子构建(附代码)》
8. 免责声明
本文为因子构建方法示例,演示数据为虚构,不构成投资建议。
关于数据来源:本文因子所需的财务数据来自智兔数服(www.zhituapi.com)官方文档接口(详见本系列 #04),覆盖 200+ 已验证路径,注册可领免费 token 做研究测试。
更多实战手册见技术博客:zhituapi.com/blog.html。
本系列《Python量化实战全攻略》共 32 篇,下一篇讲资金流因子。
想亲自试一下?免费获取证书