MCM520 ← 资料站首页 竞赛论文获奖预测模型的可靠性与可解释性深化(优秀范文二) 打开交互阅读器 →

竞赛论文获奖预测模型的可靠性与可解释性深化(优秀范文二)

摘要

范文一已经回答了"数据长什么样、哪些因素相关、模型准不准"——通过清洗 486 条原始记录得到 480 篇、刻画了主题演化与合作网络、并用标准化 logistic 拿到测试 AUC 0.887。但工程与评审落地时,"单点 AUC"只是故事的一半。本文换一个更贴近"模型能不能信、错在哪、怎么调"的角度:这个获奖预测模型稳不稳、哪个因素真关键、它会怎么错、不同年份和不同奖级是否一样准、阈值怎么选才稳。我们复用范文一的真源与 logistic 机制,新增八组实验重新解剖同一模型,得到四个被单点 AUC 掩盖的结论:第一,五折交叉验证 AUC 在 0.867~0.918 间波动仅 2.1%,模型泛化稳定;第二,标准化系数把"核心一作"放大到 1.957(看似最重要),但置换重要性显示"页数 0.098 / 参考文献 0.096"比"核心一作 0.076"更易使 AUC 掉点——系数大小不等于真实贡献;第三,模型在阈值 0.5 下漏判的获奖论文平均只有 8.5 页、5.3 图、12.3 篇参考文献,远低于正确判获奖的 13.97 页、10.69 图、21.33 篇,说明它把"写得厚"等同于"写得好",对精炼但高质量的论文存在系统偏见;第四,多级奖级可分性显示一等奖(AUC 0.922)与成功参赛(0.896)易分,而二三等奖仅 0.735/0.555 几乎不可分。这些发现把"训到一个高 AUC 就完事"改成了"带稳定性、带可解释性、带决策可靠性"的稳健部署叙事。

一、问题重述与数据

赛题给出泰迪杯竞赛论文的元数据集,要求做信息统计与获奖因素建模。范文一构造了 486 条原始记录(含 6 条完全重复、8 条关键词缺失),清洗后得 480 篇,覆盖年份 2021–2024、六个赛道、四个奖级(一等奖/二等奖/三等奖/成功参赛)、六大研究主题簇,并用"页数 / 图表数 / 参考文献数 / 团队人数 / 是否核心一作"五类可观测特征驱动一个潜变量式 logistic 机制生成真实奖级,最终以标准化 logistic 拟合获奖预测,测试 AUC 0.887。

本文不改数据、不改特征、不改基础模型,只换提问方式:

  • 稳定性:同一套建模流程,换一组训练/测试划分,AUC 还稳吗?
  • 可解释性:系数最大的因素,真的是预测里最不可替代的吗?
  • 错误结构:模型会系统性地漏判哪一类论文?
  • 决策面:获奖与未获奖在特征空间里如何被切开?
  • 漂移:不同年份的论文,模型判别力一致吗?
  • 多级:一等奖、二等奖、三等奖、成功参赛,模型能一一区分吗?
  • 阈值:把判定门槛调高或调低,精确率与召回率怎么此消彼长?

二、符号与核心方法

记第 ii 篇论文的特征向量 xi=(1,zp,zc,zr,b3,ba)x_i=(1, z_p, z_c, z_r, b_3, b_a),其中 zp,zc,zrz_p,z_c,z_r 为页数、图表数、参考文献数的 z-score 标准化,b3b_3 为团队人数 ≥3\ge 3 的指示,bab_a 为首作者属核心作者池(A 编号)的指示。获奖预测概率为

P(yi=1)=σ(wTxi),σ(t)=11+e−t,P(y_i=1)=\sigma(w^T x_i),\quad \sigma(t)=\frac{1}{1+e^{-t}},

其中 yi=1y_i=1 表示获一/二/三等奖(即"获奖"),yi=0y_i=0 表示成功参赛。权重 ww 由梯度下降式 logistic 回归在 80% 训练集上拟合(与范文一完全相同)。

评测沿用 AUC(受试者工作特征曲线下面积,越大越好)与精确率/召回率(以 0.5 为默认判定阈值)。为量化"特征真实贡献",引入置换重要性:固定训练好的权重,仅把某特征的测试集取值随机打乱,观察测试 AUC 的跌落幅度——跌落越大,说明该特征越难被替代。

三、结果 I:五折交叉验证的稳定性

图1 五折交叉验证 AUC 稳定性

图 1 给出五折交叉验证的各折测试 AUC:0.893、0.867、0.918、0.889、0.866,均值 0.887、标准差 0.019,相对波动仅 2.1%。这与范文一报告的单点测试 AUC 0.887 几乎重合。

这条曲线回答了一个朴素但关键的问题:"范文一的 0.887 是不是运气?"答案是否定的——无论怎么切分训练/测试,模型都稳定落在 0.87~0.92 区间。对评审辅助这类低风险场景,2% 的波动完全可接受;但若把该模型用于高利害的自动筛选,则需知道它的下界约 0.867,对应约 13% 的排序误差,不应被单点 0.887 误导。

四、结果 II:特征重要性的双视角悖论

图2 特征重要性:标准化系数 vs 置换重要性

图 2 左面板是标准化 logistic 系数,右面板是置换重要性(打乱单特征后 AUC 掉点)。左面板里"核心一作"系数高达 1.957,远超页数 1.020、参考文献 0.955,看起来是压倒性的首要因素;但右面板里,真正让 AUC 掉得最多的是"页数 0.098"和"参考文献 0.096","核心一作"仅 0.076,排在第三。

这一悖论的根源在于两种度量的语义不同:系数是"单位标准化变动下的对数几率边际",而"核心一作"是 0/1 低方差指示变量,少数几个大跳跃就能撑起巨大系数,却不代表它在整体预测里贡献最广;置换重要性打乱的是真实分布,更贴近"抽掉这个因素模型会差多少"。结论不是"核心一作不重要",而是:三类"投入量"特征(页数/图表/参考文献)合计才是模型真正的底盘,核心一作是单一最强但远非压倒性。只看系数会严重高估它的地位。

五、结果 III:混淆矩阵与错分画像

图3 阈值 0.5 下的混淆矩阵

图 3 是默认阈值 0.5 下的混淆矩阵:真正例 TP=36、假正例 FP=7、假负例 FN=8、真负例 TN=45,获奖类精确率 0.837、召回率 0.818。整体不错,但 FN=8 这 8 篇"本该判获奖却被漏判"的论文值得深挖。

把 FN 组与正确判获奖的 TP 组在原始特征上比较:漏判获奖论文平均仅 8.50 页、5.25 图、12.25 篇参考文献;而正确判获奖组平均 13.97 页、10.69 图、21.33 篇参考文献。差距触目惊心——模型实际上把"写得厚"学成了"写得好"的代理。在真实评审中,一篇论证精炼、数据扎实但篇幅短的获奖论文,会被这个模型系统性地低估。这是用可观测"投入量"特征建模"质量"必然付出的代价,必须在应用层用专家复核兜底,而不能把模型分数当成质量本身。

六、结果 IV:获奖决策边界

图4 仅页数-z 与参考文献-z 二维上的获奖决策边界

图 4 只保留"页数-z"与"参考文献-z"两个特征重训 logistic,画出二维决策面(蓝色越深表示判获奖概率越高)。仅用这两个特征就拿到 AUC 0.862,接近五特征模型的 0.887。决策边界在二维平面上近似一条斜线——页数或参考文献任一维度拉高都会显著推高获奖概率。

这张图直观解释了为什么第五节里"薄"论文会被漏判:在决策面左下角(双低)的区域,模型几乎一律判未获奖。它同时提示,若想提升对精炼强文的识别,必须在特征工程上引入"单位篇幅信息密度"之类更能刻画质量而非体量的指标,而不是继续堆砌篇幅类特征。

七、结果 V:年度数据漂移

图5 各年份子样本 AUC

图 5 把全部数据按年份切开,分别评估同一套权重的 AUC:2021 年 0.867、2022 年 0.939、2023 年 0.906、2024 年 0.889。四年全部高于 0.86,2022 年最高。

这说明模型没有随时间严重退化——也合理,因为范文一的合成机制里各年主题权重虽有漂移(深度学习占比上升、智能优化下降),但"投入量越高越易获奖"的主规律四年一致。不过 2024 年相对 2022 年回落约 5 个百分点,提示若未来某年评审标准发生结构性变化(例如更看重创新而非体量),该模型需要重新训练而非直接沿用。年度 AUC 漂移监测应成为上线后的常规体检项。

八、结果 VI:特征消融压力测试

图6 去掉单特征后的 AUC 跌落

图 6 逐一去掉一个特征后重训,观察测试 AUC 跌落:去掉页数(掉 −0.000)、图表(掉 −0.005)、参考文献(掉 0.013)、团队人数(掉 −0.000)、核心一作(掉 0.021)。完整模型 AUC 0.887。

两个发现:一是去掉核心一作掉点最多(0.021),印证它是单一最不可替代的特征,与第四节置换重要性的"第三"略有出入——原因是消融测的是"完全移除"而置换测的是"随机打乱",前者更苛刻,二者共同说明核心一作确实重要但远未到"离了它就不行";二是其余特征掉点极小甚至为负(噪声),说明模型对这五个特征高度冗余——去掉任何一个,剩下的特征都能补上大部分信息。整体 AUC 仅从 0.887 微降到 0.866,模型相当稳健。

九、结果 VII:多级奖级的可分性

图7 多级奖级 one-vs-rest 可分性

图 7 把二分类扩展为四个 one-vs-rest 任务,分别衡量各级别相对其余的可分性 AUC:一等奖(样本 86)0.922、二等奖(79)0.735、三等奖(81)0.555、成功参赛(234)0.896。

两极清晰、中间模糊:模型能很好地把"一等奖"从其余中挑出(0.922),也能把"成功参赛"这一最大群体识别出来(0.896),但二等奖(0.735)与三等奖(0.555)几乎不可分。直白地说,这个模型擅长做"获奖与否"的二元判断,却不擅长做"奖项档次"的精细排序。若业务目标是推荐一等奖候选,模型可用;若目标是自动定档到二/三等奖,则基本不可用,必须依靠人工评审。这是对范文一"获奖 AUC 0.887"最重要的边界澄清。

十、结果 VIII:判定阈值的精确率-召回权衡

图8 判定阈值的精确率-召回权衡

图 8 扫描判定阈值,给出获奖类的精确率与召回率此消彼长:阈值 0.30 时精确率 0.714、召回率 0.902;0.40 时 0.771 / 0.850;0.50 时 0.842 / 0.801;0.60 时 0.871 / 0.744;0.70 时 0.918 / 0.679。

这条曲线是全篇最务实的一张,把"松一点还是紧一点"的旋钮交到使用者手里:若场景容不得误报(例如自动进人终审名单),把阈值提到 0.70,精确率升到 0.918,但会漏掉约三成真实获奖论文;若场景要求应报尽报(例如初筛推荐),阈值降到 0.30,召回率 0.902,但要忍受约三成假阳性。0.50 附近(0.842 / 0.801)是较均衡的默认操作点。精度从 0.714 到 0.918 的提升,单靠调阈值就能拿到,无需重训。

十一、结论

四个被单点 AUC 掩盖的事实重塑了部署叙事:

  1. 模型泛化稳定(五折波动 2.1%),但下界约 0.867,高利害场景不能只看单点;
  2. 系数最大的"核心一作"并非真实贡献最大者,页数/参考文献才是底盘,解释模型务必用置换重要性交叉验证;
  3. 模型把"篇幅体量"学成"质量"代理,会系统性漏判精炼强文,必须专家兜底;
  4. 模型擅长"获奖与否"二元判断,却不擅"奖项档次"精细排序,且阈值可在 0.30~0.70 间按需调度。

这些结论共同指向一个工程信条:拿到一个高 AUC 只是起点,把它放进稳定性、可解释性、错误结构、决策可靠性的真实坐标系里检验,才算完成。

十二、模型验证(四路一致)

本文正文、配图、附录代码、真源 tools/gen_tidy2025a_2.py 四路数字完全一致。附录代码块可在 tools/ 目录下独立运行复现全部关键数字(五折 AUC、系数与置换重要性、混淆矩阵与错分画像、二维决策边界 AUC、年度 AUC、特征消融跌落、多级奖级 AUC、阈值精确率-召回权衡),所有结果由固定随机种子确定,双跑字节一致。

参考文献

[1] Hastie T, Tibshirani R, Friedman J. The Elements of Statistical Learning. 2009.
[2] Breiman L. Random forests. Machine Learning, 2001.
[3] 周志华. 机器学习. 清华大学出版社, 2016.
[4] 泰迪杯 2025 A 赛题组委会. 竞赛论文基本信息统计与建模赛题数据说明.

附录:核心 Python 实现

import sys, os
_HERE = os.path.dirname(os.path.abspath(__file__))
sys.path.insert(0, os.path.abspath(os.path.join(_HERE, "..", "..", "..", "tools")))
import gen_tidy2025a_2 as SRC

r = SRC.gen_tidy2025a_2()
# E1 五折稳定性
e1 = r["e1"]
print("E1 各折", ["%.3f" % v for v in e1["folds"]], "均值%.3f±%.3f" % (e1["mean"], e1["std"]))
# E2 特征重要性双视角
e2 = r["e2"]
for c, v in zip(e2["cols"], e2["coef"]):
    print("E2 系数 %s=%.3f" % (c, v))
for c, v in zip(e2["cols"][1:], e2["perm"]):
    print("E2 置换 %s=%.3f" % (c, v))
# E3 混淆矩阵
e3 = r["e3"]
print("E3 TP=%d FP=%d FN=%d TN=%d 精确%.3f 召回%.3f" % (
    e3["tp"], e3["fp"], e3["fn"], e3["tn"], e3["prec"], e3["rec"]))
print("E3 漏判获奖均值(页,图,参) %.2f,%.2f,%.2f" % e3["fn_mean"])
print("E3 正确获奖均值(页,图,参) %.2f,%.2f,%.2f" % e3["tp_mean"])
# E4 决策边界
e4 = r["e4"]
print("E4 二维AUC=%.3f 权重 截距=%.3f 页数=%.3f 参考文献=%.3f" % (
    e4["acc2"], e4["w2"][0], e4["w2"][1], e4["w2"][2]))
# E5 年度漂移
e5 = r["e5"]
for y in SRC.G.YEARS:
    print("E5 %d AUC=%.3f" % (y, e5[y]))
# E6 特征消融
e6 = r["e6"]
print("E6 完整=%.3f" % e6["full"])
for j in range(1, 6):
    print("E6 去%s -> %.3f (掉%.3f)" % (e6["cols"][j], e6["abl"][j], e6["full"] - e6["abl"][j]))
# E7 多级奖级
e7 = r["e7"]
names = ["一等奖", "二等奖", "三等奖", "成功参赛"]
for L in range(4):
    print("E7 %s(样本%d) AUC=%.3f" % (names[L], e7["counts"][L], e7["level_auc"][L]))
# E8 阈值权衡
print("E8 阈值精确率/召回率:")
for t, p, rc in r["e8"]:
    print("  %.2f  %.3f / %.3f" % (t, p, rc))