关于 algo-rank-elo
用于根据两两比较结果为参与者或项目排名的 Elo 评分技能,说明评分更新、数据校验和结果验证,并提供单场或批量计算脚本。
主要功能
- 01根据两两结果更新评分
- 02支持胜负与平局
- 03通过 K 因子调整评分变化
- 04验证评分变化的零和性
- 05执行单场或批量更新
适用场景
- 01依据比赛结果为选手排名
- 02通过两两偏好为项目评分
- 03利用众包比较评估质量
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ asgard-ai-platform/ skills --skill algo-rank-elo安装后在 Claude Code 中输入/algo-rank-elo确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
examples/sample_input.jsonreferences/bradley-terry.mdvariable-k.mdscripts/elo.py详细介绍
Elo 评分系统
概述
Elo 会为每个参与者分配数值评分,并在每次两两比较后更新。获胜者加分,失败者扣分。分数变化取决于预期结果与实际结果。该系统最初用于国际象棋,如今也用于体育、游戏和 A/B 偏好测试。每场比赛的更新复杂度为 O(1)。
适用场景
触发条件:
- 根据两两比较数据(A 与 B 的结果)为项目排名
- 为游戏或体育赛事构建竞争性评分系统
- 通过两两偏好众包评估质量
不适用场景:
- 只有绝对分数而非两两比较结果时(使用直接排名)
- 团队动态比个人技能更重要时(使用 TrueSkill)
算法
IRON LAW: Elo Assumes Each Matchup Is Independent and Stationary
Rating changes are based on surprise: beating a higher-rated opponent
gains more points than beating a lower-rated one. K-factor controls
update speed: high K (32) = volatile, fast adaptation. Low K (16) =
stable, slow adaptation. Choose K based on how quickly skill changes.
阶段 1:输入验证
将所有参与者的初始评分设为基准分(通常为 1500)。收集比赛结果:获胜者、失败者(或平局)。 关卡: 比赛数据有效,且不存在参与者与自身比赛的情况。
阶段 2:核心算法
- 预期得分:E_A = 1 / (1 + 10^((R_B - R_A)/400))
- 实际得分:S_A = 1(获胜)、0.5(平局)、0(失败)
- 更新:R_A_new = R_A + K × (S_A - E_A)
- 按顺序处理所有比赛(对于顺序 Elo,处理顺序很重要)
阶段 3:验证
检查:总评分分值守恒(零和)。评分分布合理(数据错误不会造成极端值)。 关卡: 评分守恒,排名靠前的项目通过合理性检查。
阶段 4:输出
返回按评分排序的结果,并附带置信度指标。
输出格式
{
"ratings": [{"id": "player_A", "rating": 1720, "matches": 50, "wins": 35, "losses": 15}],
"metadata": {"k_factor": 32, "initial_rating": 1500, "total_matches": 500}
}
示例
示例输入/输出
输入: 玩家 A(1500)战胜玩家 B(1500),K=32 预期: E_A = 0.5,S_A = 1。R_A_new = 1500 + 32×(1-0.5) = 1516。R_B_new = 1484。
边界情况
| 输入 | 预期结果 | 原因 |
|---|---|---|
| 1500 分者战胜 2000 分者 | 评分大幅上升(K=32 时约增加 29 分) | 爆冷,结果令人意外 |
| 2000 分者战胜 1500 分者 | 评分小幅上升(K=32 时约增加 3 分) | 结果符合预期,意外程度很低 |
| 同分者之间平局 | 无变化 | 预期结果与实际结果完全一致 |
注意事项
- K 因子选择:过高会导致评分波动;过低则无法及时反映实际技能变化。可采用可变 K:新参与者使用较高值,资深参与者使用较低值。
- 顺序依赖:顺序 Elo 评分取决于比赛的处理顺序。批量处理时,使用迭代 Elo 或 Bradley-Terry 模型。
- 评分通胀/通缩:在参与者不断加入或离开的开放系统中,平均评分可能会漂移。可设置评分下限或定期校准。
- 并非为团队设计:标准 Elo 面向 1 对 1 比赛。对于团队,可计算团队平均评分,或使用能对团队中个人贡献建模的 TrueSkill。
- 评分 ≠ 获胜概率:评分差 200 分意味着预期获胜率约为 76%,但实际结果还取决于环境、状态和运气。
脚本
| 脚本 | 描述 | 用法 |
|---|---|---|
scripts/elo.py | 更新 Elo 评分(单场比赛或批量处理),并验证零和性质 | python scripts/elo.py --help |
运行 python scripts/elo.py --verify 可执行内置的合理性测试。
参考资料
- Bradley-Terry 模型(批量 Elo),参见
references/bradley-terry.md - 可变 K 因子策略,参见
references/variable-k.md
评论
支持 Markdown