Explainable Talent Scoring · 可解释的八维人才评估

线索池 → 八维特征 → 可配置加权评分 → S+/S/A/B/C 分层 → 差异化跟进 → AB 实验验证 模拟数据,全部虚构
量化评分
6,000 人
S+ 62 · S 269 · A 820 · B 1,782 · C 3,067
回流意向识别准确率
57.5% → 86.5%
单一标签 → 四因子梯度
AB 实验 · 回复率
44.4% → 52.9%
双比例 z 检验 p = 0.0005
AB 分析查询耗时
9.5s → 10ms
补联合索引后(本机实测)

八维度 · 专家加权(config/scoring.toml)

维度权重说明
赛道关联度0.22
研究方向与目标赛道的重合度
导师网络0.16
导师资历与合作网络规模
本地资源0.14
与本地院校、项目的合作次数
内部连接0.14
可转介绍的内部联系人
工程产出0.11
开源项目影响力(对数刻度)
顶会论文0.11
顶会论文数,一作额外加分
地域关联度0.12
四因子梯度:常驻地区、本科院校、本地导师、本地项目
学术引用0.00不计分噪声大(领域差异、自引),仅作参考

不用机器学习黑盒:每个候选人的总分都能拆回到维度贡献,业务方可以直接改权重和分层阈值。 S+ 除总分外还要求赛道关联度 ≥ 60、顶会论文 ≥ 50;缺失 ≥ 3 个维度直接判 C,补全信息后复评。

每个分数都能解释

R00016S+ 69.2 分
主要得分来自 赛道关联度(+22.0)、地域关联度(+12.0)
赛道关联度 100 · 导师网络 50 · 本地资源 80 · 内部连接 0 · 工程产出 45 · 顶会论文 100 · 地域关联度 100
跟进策略:优先建联 · 负责人亲自跟进
R00006A 54.2 分
主要得分来自 导师网络(+11.2)、顶会论文(+11.0)
赛道关联度 46 · 导师网络 70 · 本地资源 40 · 内部连接 0 · 工程产出 60 · 顶会论文 100 · 地域关联度 80
跟进策略:标准流程 · 定期跟进
R00017C 11.6 分
缺失 3 个维度,信息不足
赛道关联度 16 · 导师网络 缺失 · 本地资源 40 · 内部连接 缺失 · 工程产出 缺失 · 顶会论文 22 · 地域关联度 0
跟进策略:暂缓 · 补全信息后复评
赛道关联度导师网络本地资源内部连接工程产出顶会论文地域关联度

分层漏斗(第 1 轮:按分层策略跟进全量线索)

层级跟进策略线索触达回复率面试率Offer 率
S+优先建联 · 负责人亲自跟进626261.3%46.8%30.6%
S快速触达 · 定制化沟通26925162.2%41.0%18.7%
A标准流程 · 定期跟进82066651.5%35.3%18.8%
B批量触达 · 低优先级1,78276739.8%23.6%11.1%
C暂缓 · 补全信息后复评3,06737026.5%13.8%5.1%

转化率均以「触达」为分母。层级越高转化越好,说明分层对跟进优先级有区分度。

地域关联度:单一标签 vs 四因子梯度

算法准确率漏判率误判率TP / FP / FN / TN
单一标签:本科是否在本地57.5%39.4%47.3%2225 / 1102 / 1447 / 1226
四因子梯度打分86.5%11.5%16.7%3251 / 389 / 421 / 1939
旧做法只看一个 0/1 标签(本科是否在本地),大量「本地本科、长期在海外」和「海外本科、已回本地」的人被判错。 梯度打分把常驻地区(0.4)、本科院校(0.25)、本地导师(0.2)、 本地项目(0.15)加权成 0–100 分,≥ 35 视为有回流意向。

准确率用模拟数据里的真实意向离线评估,算法本身看不到这个标签。

AB 实验(第 2 轮:地域关联度换成梯度打分,其余维度不变)

纯对照 2,792 人 · 纯实验 2,882 人 · 混合样本 326 人(重复导入,同时出现在两组,不参与对比)
指标对照组实验组差值zp结论
回复率(回复 / 触达)44.4%52.9%+8.4pp3.480.0005显著提升
面试率(面试 / 触达)28.8%33.4%+4.6pp2.060.0396显著提升
Offer 率(Offer / 触达)15.7%16.6%+0.9pp0.530.5983不显著

两组招聘人力相同,各自只跟进组内得分前 30% 的线索;对照组触达 837 人,实验组 868 人。 实验组无效跟进(触达后无回复)减少 15%。回复率显著提升,但 Offer 率差异不显著: Offer 主要取决于岗位匹配度而非回流意向,地域关联度只该影响「先联系谁」,不该被当成录用依据。

SQL:NOT EXISTS 排他分组 + 联合索引

AB 分析需要对每个人做「是否同时在两组」和「各阶段是否发生」的关联子查询。关闭 SQLite 自动索引时全表扫描耗时 9.5s;补上 assignments(candidate_id, round, grp) 与 events(candidate_id, round, stage) 两个覆盖索引后降到 10.3ms。
WITH pure AS (
  SELECT a.candidate_id, a.grp
  FROM assignments a
  WHERE a.round = 2
    AND NOT EXISTS (
      SELECT 1 FROM assignments b
      WHERE b.candidate_id = a.candidate_id AND b.round = a.round AND b.grp <> a.grp)
)
SELECT p.grp,
       COUNT(*) AS leads,
       SUM(EXISTS (SELECT 1 FROM events e WHERE e.candidate_id = p.candidate_id AND e.round = 2 AND e.stage = 'contacted')) AS contacted,
       SUM(EXISTS (SELECT 1 FROM events e WHERE e.candidate_id = p.candidate_id AND e.round = 2 AND e.stage = 'replied')) AS replied,
       SUM(EXISTS (SELECT 1 FROM events e WHERE e.candidate_id = p.candidate_id AND e.round = 2 AND e.stage = 'interview')) AS interview,
       SUM(EXISTS (SELECT 1 FROM events e WHERE e.candidate_id = p.candidate_id AND e.round = 2 AND e.stage = 'offer')) AS offer
FROM pure p
GROUP BY p.grp
ORDER BY p.grp
-- EXPLAIN QUERY PLAN(建索引后)
SCAN a
CORRELATED SCALAR SUBQUERY 1
SEARCH b USING COVERING INDEX idx_assign (candidate_id=? AND round=?)
USE TEMP B-TREE FOR GROUP BY
CORRELATED SCALAR SUBQUERY 3
SEARCH e USING COVERING INDEX idx_events (candidate_id=? AND round=? AND stage=?)
CORRELATED SCALAR SUBQUERY 4
SEARCH e USING COVERING INDEX idx_events (candidate_id=? AND round=? AND stage=?)
CORRELATED SCALAR SUBQUERY 5
SEARCH e USING COVERING INDEX idx_events (candidate_id=? AND round=? AND stage=?)
CORRELATED SCALAR SUBQUERY 6
SEARCH e USING COVERING INDEX idx_events (candidate_id=? AND round=? AND stage=?)