每个指标怎么算的、阈值多少、排除了什么,都写在这。所有数值由 demoparser2 确定性解析、全精度落盘,可旁路复现(见仓库 VERIFICATION.md)。
速查 —— 每张卡怎么算
卡片分三种性质(首页可按此筛选):猜想=提出可证伪命题并给出验证结果(相关系数/证伪结论);榜单=谁最X的排行;画像=打法风格描述,不判强弱。之前统一叫"猜想"名不副实,已改。
is_sample);按果断率排thrusmoke 击杀 ÷ 参与回合dmg_eff 封顶) ÷ 参与回合图解 —— 4 个多步指标
大多数卡是一行"率"(计数÷回合),公式即最清楚。下面 4 个有真正的多步过程,画出来更直观。
一、覆盖情况
整届 IEM Cologne Major 2026 共 40 场 / 114 个 demo 文件(含分段 -pN)、80 名选手、约 247K 次开火已解析。当前 44 张猜想卡分布在 机械/瞄准 · 对枪/残局 · 走位/位置 · 道具/特技 · 习惯/个案 · 队伍/经济 六类。
| 状态 | 指标 | 说明 |
|---|---|---|
| ✅ 已上板 | 急停成功率/控速、各武器移动开火控速、左右手协调(果断度×首枪命中)、步枪首枪命中率、T进攻首杀、CT防守首杀、被交易率、多杀回合(3K/4K/ACE)、关键多杀(破局)、残局先杀率、交易机会率(近似)、扫射修正、扫射转移、游走×入场、穷局击杀贡献、1vX 残局、每杀命中数(仅步枪)、残血反杀、隔烟击杀、爆头率随距离(对比全体)、雷伤/回合、道具伤害转化率、慢步占比、每回合移动距离、狙击手依赖度、手枪王(场均手枪杀,CT/T)、双枪王、沙鹰王 | 看板/猜想板可见,旁路核对一致 |
| 🔧 已修正 | 回合归属(回合表错配 + 区间归属)、1vX 残局胜负归一、cs_control 全量排名、ak_control 移动样本口径、残血反杀只算枪械击杀 | 见下方"四、回合归属与数据正确性修正" |
| 🟡 有混淆因素 | 被交易率、开局首杀、donk 用 AK 越多发挥越好 | 是风格/角色指标,不是单纯强弱;卡片已标注,见"五、局限" |
| 🔴 需地图几何 | 真·反应时间(视线遮挡)、准星预瞄质量、热力图叠雷达 | 需要地图可见性/雷达资源;暂未做 |
口径原则 —— 怎么保证"科学"
所有卡片遵循同一套口径,专门避开几个常见统计陷阱:
| 原则 | 为什么 / 怎么做 |
|---|---|
| 排名一律用率/每回合,不用总量 | 总量榜会让打得多、进决赛的人天然排前(盘数偏置)。多杀、破局多杀、残血反杀、隔烟、雷伤等全部 ÷ 参与回合。 |
| 小样本用 Wilson 置信下界(稳健率) | 什么意思:同样 67% 命中,打 3 次中 2 次,和打 60 次中 40 次,可信度天差地别——前者很可能是运气。Wilson 下界就是"在统计上有把握不低于多少"的那个保守值:样本越小、扣得越狠,样本一大就贴近实际率。所以排名用它,小样本撞运气的人冲不上去,又多又稳的人才排前。例:T 进攻首杀里 Jame 实际 67% 但只打 15 次 → 稳健率 42%,而 donk 实际 58%/打 62 次 → 稳健率 46% 反超。 用在哪:T/CT 开局首杀、1vX 残局、残局先杀、道具转化——这几张样本本就小(几十次)。其余率卡(被交易、首枪命中、多杀等)样本都 ≥100,Wilson 几乎不改排名,就直接用实际率。明细一律给"实际率 + 样本量",可自行判断。 |
| 伤害按剩余血封顶 | dmg_health 是武器原始伤害(含 overkill,max 568),先逐回合按受害者剩余血封顶得实际伤害(dmg_eff)再用——经 HLTV 对账才对得上。 |
| 急停只统计吃急停的武器 | 无镜步枪 + 沙鹰;排除 AWP/狙、AUG/SG553 架点枪、冲锋枪、手枪——这些不靠急停。 |
| 全量 vs 抽样一致 | 控速表显示全部合格选手不抽样;排名 verdict 写的分母 = 实际显示的人数,不会"分母全量、视觉截断"。 |
二、每个指标的精确口径
急停成功率 / 控速(counter-strafe)
① 筛样本:只看吃急停的真枪开火(AK/M4A4/M4A1-S/Galil/FAMAS + 沙鹰;排除 AWP/狙、AUG/SG553 架点枪、冲锋枪、其余手枪)。对每次开火,取开火前 300ms 窗口(64-tick → 19 ticks)内水平速度峰值;峰值 > 100 u/s 才算"移动中开火"计入样本,否则视为站定、排除。这个标记(is_sample)在解析层就完成,源头纯化(样本里非急停武器数 = 0)。
② 判定:取开火那一 tick 的水平速度 v 与武器准射阈值 T(T = 最大移速 × 系数:步枪 T≈73、沙鹰≈69)。v ≤ T×0.3 完美 / v ≤ T 合格 / v > T 跑打失败。
③ 成功率 =(完美+合格)/ 样本数;完美率 = 完美 / 样本数。速度是 demoparser 的 velocity 标量(≈水平 2D),全精度比较。各武器移动开火控速卡(如 AK-47)同样只取 is_sample。
击杀 / 爆头率 / 特技击杀
来自 player_death。击杀 = attacker 是他的条数(排除空 attacker = 世界伤害)。爆头率 = headshot flag 占比。隔烟(thrusmoke)、空中(attacker_inair)、穿墙(penetrated>0)等都是原生布尔 flag,零推断。爆头率随距离:按 distance 分桶,只算枪械击杀(is_firearm)。
雷伤 / 回合
player_hurt 里武器为 hegrenade/inferno/molotov/incgrenade 的实际伤害求和,÷ 该选手参与回合数(player_rounds 计数),门槛 ≥80 回合,按回合均摊不受盘数影响。
封顶:解析出的 dmg_health 是武器原始伤害、未封顶(把 overkill 过量伤害也算进去,max 竟达 568),故先按受害者每回合剩余血逐发封顶得 dmg_eff 再求和——经 HLTV 对账这样才对得上(donk 封顶后 ADR 88.9 vs HLTV 87.6;未封顶 111 虚高)。
被交易率 / 1vX 残局
都依赖"每选手每回合的队伍"(player_rounds,在 freeze 结束那刻采样)与回合归属。被交易率 = 死后 3s 内队友击杀凶手的比例;1vX = 某队降到 1 人(对面还有人)时该幸存者赢下回合的比例(含 1v1~1v5)。
三、猜想卡示例
donk 用 AK 越多发挥越好
每场算 AK 开火数 / 回合数(横轴)与 击杀数 / 回合数(纵轴),除回合数消除场次长短影响,算 Pearson 相关。相关 ≠ 因果,样本仅几场——卡片已标保留。
四、回合归属与数据正确性修正
一轮交叉验证(独立旁路复现)发现并修正了几处会让数字失真的问题。所有修正都附了复现命令,原始数据已备份(data/_rounds_backup/)。
① 回合表按 tick 重配(原 339 行 end<start)
demoparser 的 round_end.round 编号相对 round_start 滞后错位(尤其分段重开 -pN 的 demo),直接 merge(on=round) 会把回合结束配到错误的开始。改为丢弃不可靠的 round 字段、纯按 tick 配对:每个有胜负的 round_end 配它之前最近的 round_start,按 end 顺序重新编号 1..N。修复后 end<start = 0,回合号连续。
② 击杀回合归属用区间(原 2460 条越界)
原先只用"最近的 round_start"归属,导致回合结束后到下一回合开始前(买枪期)的击杀被算进上一回合。改为要求 start_tick ≤ tick ≤ end_tick,回合外的击杀标 _round=-1 不计入。修复后越界 = 0(177 条买枪期击杀被正确排除)。影响 entry/trade/经济/连杀/残局。
③ 1vX 残局 T 方胜利归一
rounds.winner 用 T/CT,player_rounds.side 用 TERRORIST/CT,比较时 "T" ≠ "TERRORIST" 导致 T 方残局胜利永远不计。已加映射归一。
④ 口径修正
cs_control 排名原来用抽样后的分母(donk 显示 10/19),改为全量合格选手(真实 38/76);ak_control 标题"移动开火"却用了全部 AK 开火(混入站定开火把速度拉低),改为只取 is_sample;残血反杀的击杀分母混入了雷/火/刀,加 is_firearm 过滤与开火口径对齐。
四点五、与 HLTV 数据的关系(哪些算"重复造轮子")
诚实回答:确实有一部分卡与 HLTV 的标准指标同口径——但这是故意的,不是无用功。全站的卡分三类:
| 类型 | 有哪些 | 为什么存在 |
|---|---|---|
| 标准指标(HLTV 也有) | KAST、多杀占比、首杀率系、1vX 残局、手枪局胜率 | 当对账锚:我们独立解析出的 KAST/击杀/爆头率/ADR 能对上 HLTV 官方数,才证明整条管线可信——它们是其余所有独有指标的信用背书;同时档案页/猜猜看也要用标准指标当骨架。 |
| HLTV 给不了的(tick 级 / 坐标级) | 急停果断率、首枪命中、扫射修正/转移、每杀命中数、CT定点/T游走(击杀坐标)、隔烟、数据注水(逐杀存活差)、宿敌对位 | 需要逐 tick / 逐事件解析 demo 才算得出,HLTV 网页上没有——这是本站的核心增量。 |
| 关系与猜想(谁都不提供) | 手枪局定江山(r=+0.57)、首杀值不值钱(零结果)、eco偷分/翻车的幸存者偏差、雪球、换边诅咒、取胜方式、大心脏、硬仗指数 | 不是给一个数,而是回答一个问题、并点破哪些相关是假象。 |
同样诚实地说做不了的:赛事分级权重、MVP/EVP 荣誉积分、跨赛事 Rating 曲线——这些需要整赛季多赛事样本,本站只有一届 Major 的 demo。
五、局限(诚实说明)
- 风格指标 ≠ 强弱:被交易率低、开局首杀占比高,多半说明是冲锋/entry 角色,不等于强。这些卡看的是打法风格,别当能力总分。
- 急停是"结果"指标,非"动作"检测:判定的是开火时速度有没有压到准射阈值,没有验证玩家真按了反向键急停。"技术急停 vs 提前停住再开火"需要按键窗口,是后续增强。
- 武器阈值 T 是经验值:步枪≈73、沙鹰≈69,方向合理但未用 CS2 真实精度公式逐枪校准。
- 走位类(慢步/移动距离)未按回合区间裁剪:可能含热身/回合外的移动,适合粗看趋势,不宜当精确值。
- 火-伤配对是启发式:首枪命中、扫射修正用"开火后 ≤4 tick 内有伤害"配对火与伤,窗口是经验值,边缘情形可能误配。
- 近似指标已标注:交易机会率无坐标、用"队友是否在窗口内造成伤害"做近似——卡上都注明了。
- 空间卡(CT定点/T游走)只看击杀点:是"在哪杀人"的集中度,非全部站位(阵亡点是另一半,未纳入);反映角色/打法风格,非强弱。原设计用香农熵,但整届聚合下无区分度,改用"最热3格占比"(512 格,兼顾双点位型)。坐标由 scripts/enrich_death_positions 在死亡 tick 上解析并入 deaths。
- 队伍经济卡是启发式:队伍身份靠 match 串反推(换队/替补的 steamid 可能归错);eco/长枪按人均装备 2000/4000 分档,force buy 排除;每队每口径仅十几~几十回合,已用 Wilson 下界保守处理,排序提示性>定论性。反映经济打法风格,非队伍强弱。
- 幸存者偏差很小但存在:走得早的队样本少、上榜略少(回合数与上榜数相关 ≈0.73)。但这届瑞士轮保证人人 ≥7 图/155 回合,无"打一两张图就走、数据攒不够"的极端;被过滤多因角色(如 CT 定点手没几次 T 开局)或事件量噪声门槛,非团队强弱。比例类卡(开局首杀/残局/道具转化)已把门槛压到 8~12 尽量纳入全员,小样本靠 Wilson 沉底不污染榜首;per-回合率/物理量卡(雷伤、每杀命中、穷局击杀)无 Wilson 兜底,保留较高门槛防噪声冲榜。
- 分段 -pN 是合法半场切分,非废局:经 HLTV 逐选手对账(回合数完全一致),11 张分段图都是 GOTV 技术切分(两段拼成一张图),没有"打了又重打"的废局,故未删任何一段。
六、怎么验证我没编造
两层验证。① 旁路复现:任何数都能绕过我的代码、用 demoparser 原生接口自己数一遍核对;回合表修正、击杀归属也能用 data/_rounds_backup/ 对照前后。详见仓库 VERIFICATION.md。
② 对账 HLTV 官方数据(逐选手核对 8 名主力):
| 指标 | 结果 |
|---|---|
| 击杀 / K-D / 死亡 | 8 人里 7 人和 HLTV 完全一致(HeavyGod 差 2 杀,demo 解析正常容差) |
| 回合数 | 全部 8 人完全一致(donk 357=357、m0NESY 474=474…) |
| 爆头率 | 对上(donk 62.4% vs HLTV 62.6%) |
| ADR | 封顶后对上(donk 88.9 vs HLTV 87.6;未封顶 111 是 bug,已修) |
| Rating / KAST | 对不了(HLTV 私有加权公式,无法复刻) |
能对 HLTV 的基础/高阶项都对上了,说明底层解析 + 击杀/回合归属准确;HLTV 没有的机械指标(急停/首枪/开火移速)就踩在这套已验证的地基上。