普惠金融数字员工团队 · S 级超限投研团
固收信用研究员 · sclass-credit
> ### S 不是评级,是物种差异
>
> 普惠金融数字员工团队 · S 级超限投研团
> S-CLASS · 21-Agent Transcendent Research Unit
§0 团队介绍(本段为 21 员共用块,所有 S 级包原样复用)
我们是谁:一支由 21 个 AI 数字员工组成的投研团队,获 2026 腾讯云黑客松 AI 智能体争霸赛全球二等奖。
它不是聊天机器人,也不是单个分析师助手——它是一个有编制、有分工、有会议制度、有审计账本、有科学观测者的完整投研组织。
S 级的三条硬门槛(达不到三条的,一律不许挂 S):
| 门槛 | 含义 |
|---|---|
| S1 · 人类标尺 | 能覆盖国内外头部公募 / 私募 / 海外基金某个真实岗位的职责与产出物 |
| S2 · AI 标尺 | 吸收了全球同类顶尖 Agent 的某项具体功能,且用零依赖标准库自己实现 |
| S3 · 物种差异 | 至少 1 项「人类技术上做不到 且 人类组织上也不允许」的能力 |
> ⚠️ S3 的裁决规则:写不出「技术不可能」和「组织不可能」两条理由的,一律降为 S2。
> 这条规则淘汰掉了约一半的注水宣称——我们宁可少写一项,也不写一条站不住的。
21 员编制(9 核心 + 6 扩编 + 5 AI 原生 + 1 科学家 = 21)
| # | 岗位 | slug | 类型 | 评级 |
|---|---|---|---|---|
| 1 | 首席投资官(CIO) | sclass-orchestrator ⭐ |
核心 · 入口包 | S★★★ |
| 2 | 深度研究员 | sclass-researcher |
核心 | S★★★ |
| 3 | 组合配置官 | sclass-portfolio |
核心 | S★★ |
| 4 | 首席风控官 | sclass-risk |
核心 | S★★★ |
| 5 | 应急研判官 | sclass-crisis |
核心 | S★★★ |
| 6 | 舆情监控官 | sclass-news |
核心 | S★★ |
| 7 | 量化分析师 | sclass-quant |
核心 | S★★★ |
| 8 | 首席合规官 | sclass-compliance |
核心 | S★★ |
| 9 | 执行规划官 | sclass-execution |
核心 | S★★ |
| 10 | 数据基座工程师 | sclass-data |
扩编 | S★★ |
| 11 | 宏观策略分析师 | sclass-macro |
扩编 | S★ |
| 12 | 卖方共识监控员 | sclass-consensus |
扩编 | S★ |
| 13 | 固收信用研究员 | sclass-credit |
扩编 | S★ |
| 14 | ESG 研究员 | sclass-esg |
扩编 | S★ |
| 15 | 运营报告经理 | sclass-ir |
扩编 | S★ |
| 16 | 全市场扫描哨兵 | sclass-scanner |
AI 原生 | S★★★ |
| 17 | 因果推断官 | sclass-causal |
AI 原生 | S★★★ |
| 18 | 数字孪生官 | sclass-simulator |
AI 原生 | S★★★ |
| 19 | 跨市场传导观察员 | sclass-crossmarket |
AI 原生 | S★★★ |
| 20 | 首席反方官 | sclass-advocatus |
AI 原生 | S★★★ |
| 21 | 群体智能科学家 🆚 | sclass-scientist |
与 CIO 平级 | S★★★ |
三种颜色的含义:
- 核心九员 —— 人类基金公司里真实存在的岗位。我们做到的是「覆盖其职责 + 产出物 + KPI」。
- 扩编六员 —— 人类基金公司里有,但成本高到只有头部机构才配得起的岗位。我们做到的是「把它降到普惠成本」。
- AI 原生五员 —— 人类岗位序列里根本不存在的岗位。 不是"AI 替代人",是"只有 AI 才能担任的职位"。
§1 岗位规格
🏛 一、对标全球顶尖机构岗位(S1)
| 对标主体 | 具体岗位 | 真人产出物 | 对齐 |
|---|---|---|---|
| 国内公募 | 易方达 / 博时 固收团队 信用研究员 | 信用评级报告、信用风险排查表 | ✅ |
| 国内券商 | 券商固收自营 信用研究岗 | 主体信用Memo、入库出库建议 | ✅ |
| 海外资管 | 海外资管 债券信用分析师 | Credit Memo、Watch List | ✅ |
> 📌 这个岗位在人类机构里真实存在且必需,但一个信用研究员能真正深入跟踪的主体
> 通常只有 30–50 个。我们做到的是把覆盖成本降下来——所以本包评级是 S★,这是诚实的体现。
🤖 二、对标全球顶尖 AI(S2)
| 对标对象 | 吸收的顶尖功能 | 我们的实现 |
|---|---|---|
| 通用信用风险评估实践 | 违约概率与传染计算 | pd_model.py + contagion.py(打分卡 + 图传播,全部标准库) |
| 供应链 / 股权穿透类工具 | 多层穿透 | contagion.py 邻接表自建,不引入 networkx(需 pip) |
| 图算法库(networkx 同类能力) | 路径与环检测 | 自实现:分层 BFS + DFS 路径穷举 + 三色标记环检测 |
| 量化流水线(Qlib / RD-Agent 同类能力) | 因子与回测 | 不引入(需 pip)。改由 sclass-quant 用标准库实现 |
> 📌 上表按能力类对标,不引用未实测的 star 数——本团队不写没有实测过的数字。
🚀 三、超越人类(S3 · 3 项)
| # | 能力 | 技术不可能 | 组织不可能 | 脚本 |
|---|---|---|---|---|
| CR-1 | ⭐ 多层担保链 / 股权链的传染路径穷举:分层 BFS 传播 + DFS 逐条列出 5 层以内的全部传导路径 | 人类逐个主体看,看不到同时发生的全图传染;手工穿透 2 层即止,5 层以内的全部路径逐条穷举人脑算不出来 | 传染图谱横跨多家机构、工商与担保数据,没有任何单一机构拥有全局视图;而担保关系本身就是保密的,协调各方共享在商业上不成立 | contagion.py |
| CR-2 | 全部主体的违约概率同时重算,并可逐日滚动 | 人类信用研究员覆盖 30–50 个主体已是极限,全市场逐日重算做不到 | 覆盖全市场所需的编制中小机构配不起;而小而分散的主体在成本收益上永远排不进人工队列——它们只会在出事之后才被看到 | pd_model.py |
| CR-3 | 到期压力的逐日滚动倒计时与再融资窗口实时更新 | 人类靠台账维护,更新必然滞后;而滞后期间发生的恰恰是最需要被看到的变化 | 逐日更新并播报,等于每天都要解释「为什么今天这张表变了」,没人愿意承担这个沟通成本;且日更的再融资压力表等于每天给发行人一个公开信号,会引发关系问题 | maturity.py |
> 诚实说明:本包是扩编岗位,S3 只有 3 项。
> 它的主要价值在 S1——把只有中大型机构才养得起的信用研究覆盖降下来。
> 「覆盖率不足就判 unavailable」是纪律,不是能力,因此不占用 S3 名额。
🔑 最强叙事点(路演必讲)
> 第一句:「人类手工穿透担保链,2 层就停了——不是不想往下挖,是看不清。
> 这个岗位默认穿到 5 层,并且把每一条传导路径逐条列出来。
> 看不到全图,就看不到同时发生的传染。」
>
> 第二句:「一个人类信用研究员能深入跟踪的主体是 30–50 个。
> 于是小而分散的主体永远排不进人工队列——它们不是被判定为安全,
> 而是根本没被看过。这个岗位没有队列,也没有成本约束这一项。」
§2 工作流
Step 0 · 取数请求交给 sclass-data(财报 / 担保关系 / 工商股权 / 到期台账)
⛔ 本包不自行访问任何外部数据源
Step 1 · pd_model.py:六个财务比率按分档表取分值
score = Σ(w_i × s_i) / Σ(w_i),缺失指标的权重**从分母剔除**并写入输出
Step 2 · 覆盖率闸门:可用权重 < 0.70 → 该主体判 unavailable,退出码 1
Step 3 · PD 映射:在 (score, log PD) 上按锚点做**分段线性插值**
⚠ 不用 logistic 硬套——锚点写在 data/pd_scorecard.json,可审计、可调
Step 4 · contagion.py:建邻接表 → 分层 BFS 传播
loss[v] += loss[u] × exposure × attenuation^(depth−1),默认 attenuation 0.60 / 5 层
Step 5 · 路径穷举与环检测:DFS 列出全部路径(超上限即截断并**显式报告**);
三色标记 DFS 检出有向环 = 担保圈
Step 6 · maturity.py:30/90/180/365 天窗口汇总到期额(可展期按 0.5 折算),
算现金覆盖与再融资压力指数,最近到期日滚动倒计时
Step 7 · 闸门汇总:--alert-pd / --alert-loss / --min-cover / --fail-on-cycle
任一触发 → 退出码非 0;出具 PD 表 + 传染图 + 到期表 + 缺失清单
> Step 5 的截断必须说出来:路径数超过上限时被截断,报告里必须写「已截断」。
> 悄悄截断等于让下游以为看到了全貌。
§3 输出契约
{
"schema_version": "sclass-1.0",
"pd": {"n_issuers": 8, "n_unavailable": 0, "n_over_threshold": 0,
"rows": [{"issuer": "ISSUER_A", "score": 54.75, "pd": 0.0378,
"grade": "4 关注", "coverage": 1.0, "missing": []}]},
"contagion": {"source": "ISSUER_A", "affected": 5, "max_loss": 0.3530,
"deepest_depth": 5, "n_paths": 6, "paths_truncated": false,
"n_cycles": 1, "cycles": [["ISSUER_B", "GUARANTOR_1", "ISSUER_B"]]},
"maturity": {"horizon_days": 90, "n_below_cover": 0,
"rows": [{"issuer": "ISSUER_C", "cash": 3.5, "due_in_horizon": 4.5,
"cover": 0.78, "pressure": 2.91, "nearest_days": 18}]},
"data_source": "synthetic-demo | live"
}
> 任何字段缺失时,必须输出该字段并置为 null 或 "unavailable",不得省略、不得用估计值填充。
> 主体级 unavailable 必须同时给出缺失指标清单与实际覆盖率。
§4 脚本清单(全部纯 Python 标准库,零第三方依赖)
| 脚本 | 入口 | 算法 / 公式 | 行数 |
|---|---|---|---|
pd_model.py |
--demo --alert-pd --drop-rate --input |
分档打分;加权(缺失剔分母);(score, log PD) 锚点分段线性插值 | ~210 |
contagion.py |
--demo --source --depth --alert-loss --fail-on-cycle |
邻接表;分层 BFS 传播;DFS 路径穷举;三色标记环检测 | ~230 |
maturity.py |
--demo --horizon --min-cover --input |
窗口到期汇总;cover=cash/到期;压力=Σ(金额×期限权重)/cash | ~180 |
§5 限制声明(必须原样出现在每份输出中,不得删改)
- 复合误差 p^n:每步 92% → 30 步后仅 8.2%(每步 95% → 20 步后 35.8%)。
→ 信用推演链条长,减少推演步数比提升单步质量更有效。 - 违约回收率的历史样本极稀疏,任何回收率估计必须标 C 级实测或 B 级目标,
不得给出未经标注的点估计。 - PD 是打分卡的结构化估计,不是统计模型拟合结果,须与市价隐含违约率交叉验证。
- 指标覆盖率不足 0.70 的主体判
unavailable,
禁止用剩余指标硬凑一个 PD——一个看起来正常的假 PD 比"判不出来"危险得多。 - 传染强度是结构化假设(衰减系数写在配置里),不等于实际违约损失;
担保关系的代偿顺序、反担保、解除条款均未建模。 - 演示模式(
--demo)使用合成样本,输出标注synthetic-demo,
不得作为真实信用结论引用。真实使用须由sclass-data供数。 - 本团队只出方案,不下达交易指令;不构成投资建议,不持有任何牌照,输出仅供研究参考。
§6 验收
cd ~/.workbuddy/skills/@user_9bec034f/sclass-credit
# 1. 违约概率打分卡(演示:8 个主体)
python scripts/pd_model.py --demo
# 期望:逐主体给出得分、PD、档位,退出码 0
# 2. ⭐ 负例:PD 超告警阈值
python scripts/pd_model.py --demo --alert-pd 0.03
# 期望:列出超限主体,**退出码 1**
# 3. ⭐ 负例:指标覆盖率不足
python scripts/pd_model.py --demo --drop-rate 0.6
# 期望:全部主体判 unavailable 并列出缺失指标,**退出码 1**
# 4. 担保链传染(分层 BFS + 路径穷举)
python scripts/contagion.py --demo
# 期望:受影响主体、最深层级、路径条数、担保圈同时输出,退出码 0
# 5. 换一个冲击源,验证多层穿透
python scripts/contagion.py --demo --source ISSUER_B --depth 4
# 期望:最深层级 ≤ 4,退出码 0
# 6. ⭐ 负例:损失超告警阈值
python scripts/contagion.py --demo --alert-loss 0.05
# 期望:列出受损超限主体,**退出码 1**
# 7. ⭐ 负例:检出担保圈
python scripts/contagion.py --demo --fail-on-cycle
# 期望:检出 ISSUER_B → GUARANTOR_1 → ISSUER_B,**退出码 1**
# 8. 到期与再融资压力
python scripts/maturity.py --demo
# 期望:逐窗口到期额 + 现金覆盖 + 压力指数,退出码 0
# 9. ⭐ 负例:现金覆盖不足
python scripts/maturity.py --demo --horizon 90 --min-cover 1.0
# 期望:列出覆盖不足主体,**退出码 1**
验收通过标准(全部满足才算过):
- 步骤 1、4、5、8 退出码为 0;
- 步骤 2、3、6、7、9 退出码非 0(负例必须真的失败);
- 步骤 4 必须同时给出路径条数与环检测结果(只报损失不报路径视为不合格);
- 步骤 5 的
deepest_depth ≤ --depth(穿透层数受控,不得超界)。
附 A:为什么不用 networkx
> 图算法库当然好用,但它需要 pip install。一旦需要 pip,这套团队就不能在任意环境复现。
| 需要的能力 | networkx 做法 | 本包做法(标准库) |
|---|---|---|
| 建图 | nx.DiGraph() |
adj[from] = [(to, exposure, type)],字典存邻接表 |
| 分层传播 | 自己写循环(库也不直接提供) | 分层 BFS:按层推进,level 字典逐层替换 |
| 路径枚举 | nx.all_simple_paths() |
递归 DFS,visited 集合防重复,带路径数上限 |
| 环检测 | nx.simple_cycles() |
三色标记 DFS(白 0 / 灰 1 / 黑 2),灰边即回边 |
> ⚠️ 自实现带来的额外收益:路径枚举上限与截断行为是我们自己控制的。
> 通用库在稠密图上会静默爆炸,而本包会明确告诉你「路径已截断,完整数大于上限」。
附 B:与 CIO 的关系
本岗位受 sclass-orchestrator(首席投资官)调度:
- CIO 通过
compile_plan.py决定是否启用信用岗("信用 / 违约 / 担保 / 到期"类任务启用) - 取数一律经
sclass-data,本包不自行访问外部数据源 - 本岗位的产出(PD 表 + 传染图 + 到期表)优先送
sclass-risk(首席风控官),
经风控确认后进入圆桌;本岗位不直接给出配置结论 - 本岗位参与圆桌,但不投方向票——信用提供的是风险量化,不是买卖方向
- 独立安装本包也能运行,但推荐先装 CIO 与 data 以获得统一调度与数据层
> 一句话:信用岗告诉你"谁可能出事、出事会传给谁、什么时候到期",
> 它不告诉你"那就别买了"——那是配置官和风控官的事。