源码深读 · 2020
大学排名标准化与加权引擎源码深读
还原声誉、学术、资金、师资和校友指标的标准化、PageRank、子指标加权、缺失降级与方法版本分叉。
排名不是一条公式
系统先把百科链接、论文引用、作者 H 指数、资金、师生比、教师数和校友影响等异质量纲标准化到 0—100,再按五个一级维度和各自子权重组合。综合榜默认一级权重为声誉 20、学术 40、资金 5、师资 5、校友 30;不同学科模板则主要使用声誉、学术和校友。
服务保留三代控制器和多套数据管理类,说明方法不断修订。它的价值是把权重开放给用户;它的风险是同一路径附近并存用户权重与代码写死权重,历史结果未必能唯一对应某一方法版本。
四种标准化
代码实现四种明确模式:
- 长尾计数使用 log10(x + 1) × 100 / log10(max)。
- 论文 PageRank 先取八次方根,再除以最大值并乘 100,以强力压缩极端长尾。
- 比率指标直接按 x / max × 100 线性缩放。
- 已经标准化的数据原样通过。
当最大值恰为 1 时,计数模式强制改为 2;其他模式没有完整的全零保护,可能产生无穷或非数。所有方法都是相对样本最大值,因此筛选集合改变时,如果重新标准化,同一学校的分数会变化;重建必须固定母体再筛选。
子指标如何汇总
综合榜的十项输入依次对应声誉、论文 PageRank、教师 H 指数、资金总额、人均资金、师生比、教师数、校友数量、校友百科影响和其他校友信号。一级权重内再分配:学术 70/30,资金 50/50,师资 70/30,校友 30/30/40。
另一综合版本使用十四项输入,把学术拆成论文影响、论文量与师均论文,把校友拆成人数、百科链接、奖项、H 指数、头部校友和人均指标。文理学院版本却忽略请求权重,直接使用 0.2/0.35/0.2/0.05/0.2;更新版又改为 0.2/0.4/0.15/0.05/0.2。这是必须通过方法编号公开的业务差异。
学科排名使用百科声誉、论文 PageRank、人物数、获奖数和 H 指数。若奖项为空,校友影响在人物与 H 指数间按 70/30 分配;若人物或 H 指数也为空,校友维度整体归零。若奖项存在,则三项按 35/30/35。这里采用的是“缺失后降级重分配”,但没有对所有维度做统一缺失策略。
PageRank 实现
引用图以节点到被引节点列表表示。每轮把节点当前分数按出度均分,并乘停留概率 0.8 传给目标;随后每个节点加入 (1 - 0.8) / N 的随机跳转项。代码累计新分数平方和作为收敛量。
悬挂节点当前轮直接把下一分数设零,没有把其概率质量均匀回灌全图,PageRank 总质量可能流失。循环条件写成“差值仍大于阈值或轮数不超过 100”,意味着至少执行百轮,但差值只做有符号比较,下降时可能提前满足。正确实现应比较绝对残差,并处理悬挂节点质量。
论文分数再按作者顺序权重归属学校,作者 H 指数先按作者标准化后累加到学校。名称重定向与多语言学校表用于实体归并,但大量离线步骤依赖本机绝对路径和文本中间文件,方法难以复现。
质量与重建
主要风险包括控制器巨大且复制、多套默认权重并存、空指标可能空指针、全零标准化除零、PageRank 数值问题、来源批次缺失以及接口错误时仍可能返回成功状态。
重建应把“数据快照 + 实体映射 + 标准化母体 + 方法版本 + 权重”组成不可变运行标识;保存每所学校每项原值、标准化值、贡献值和缺失策略;用小图验证 PageRank 质量守恒与收敛,用固定十校样本验证权重、同分、全零和筛选不改分。
证据边界
公式、默认权重、PageRank 迭代和缺失降级均来自后端源码。数据文件和部分外部服务不在仓库,故不能独立复算历史榜单,也不能证明某个控制器版本就是最终线上口径。