1. 项目概述从“对错”到“为什么”的评测系统进化在线评测系统Online Judge, OJ对于计算机编程课程而言早已不是什么新鲜事物。作为一名在高校计算机系摸爬滚打了十多年的教师我见证了OJ如何从竞赛工具演变为教学标配。它的核心价值毋庸置疑自动化、即时、客观。学生提交代码系统返回一个“Accepted”或“Wrong Answer”省去了教师逐行批改的繁重劳动。然而这种“非黑即白”的反馈模式在教学实践中逐渐暴露出其局限性。它像一位沉默寡言的裁判只告诉你结果却从不解释过程。一个学生是经过深思熟虑、一次成功还是在截止日期前仓促提交了数十次才侥幸通过这两种行为模式背后反映的学习态度、知识掌握程度和潜在风险天差地别但传统的OJ反馈却对此视而不见。这正是我们启动这个研究项目的初衷我们不甘心只做“裁判”更想成为“教练”。我们希望利用学生在OJ上留下的每一次提交痕迹——这些被传统系统视为过程垃圾的数据——来构建一幅动态的、可解释的学生学习行为画像。我们不再满足于回答“学生通过了吗”而是致力于回答“学生为什么会通过或失败”以及“我们该如何提前干预”。为了实现这个目标我们引入了两件关键技术“武器”多示例学习Multi-Instance Learning, MIL和可解释人工智能Explainable Artificial Intelligence, XAI。MIL允许我们将一个学生的所有提交视为一个整体一个“包”来分析这完美契合了学习是一个连续过程而非孤立事件的事实。而XAI则负责撬开机器学习模型的“黑箱”让模型不仅能预测还能用人类能理解的语言告诉我们是哪些具体行为比如“首次提交时间过晚”、“提交日期间隔过长”导致了高风险预测。本文将详细拆解我们如何将XAI与MIL结合构建一个能进行深度学生行为分析与智能反馈生成的在线评测增强系统我们内部称之为XOJ并分享在真实课程中三年、超过2500次提交数据上验证的经验与思考。无论你是教育技术的研究者、一线编程教师还是对学习分析感兴趣的技术开发者相信都能从中获得可直接借鉴的思路与实操细节。2. 核心设计为何是MIL与XAI的“联姻”在构思系统之初我们面临一个根本性的建模选择如何表征一个学生在单次作业中的学习行为最直观的方法是将每次提交视为一个独立样本提取特征如提交时间、错误类型后用经典机器学习ML分类器如随机森林、XGBoost去预测该次提交或最终作业的成败。这种方法简单直接但存在一个致命缺陷它割裂了提交之间的序列关联和整体性。一个学生第1次和第10次提交所蕴含的信息价值是不同的但它们被模型平等对待。此外最终标签通过/不通过是针对整个作业的而非单次提交。强行给每次提交打上同一个最终标签会引入严重的标签噪声。2.1 多示例学习将学习过程视为一个整体这时多示例学习进入了我们的视野。MIL是监督学习的一个分支专门处理这种“包级别”标注的数据。在我们的场景中包一个学生在某次作业中的所有提交记录构成一个包。实例包内的每一次独立提交是一个实例。包标签根据该学生最终是否通过本次作业其对应的包被标记为“正包”通过或“负包”未通过。实例标签关键且有趣的是实例标签是未知的。我们只知道对于一个正包其中至少存在一个“正实例”可能代表那次成功的提交或某次体现了关键突破的提交而对于一个负包其中所有实例都是“负实例”。这种范式与我们的教育假设完美契合通过作业的学生其提交序列中必然包含了体现其掌握关键知识点的“时刻”而未通过的学生其所有尝试都未能触及成功的关键。MIL模型的目标就是学习识别这些潜在的、关键的“正实例”模式进而对新的学生包即其提交序列做出通过与否的预测。我们试验了多种MIL算法包括经典的方法如MILES、mi-SVM以及基于深度学习的Attention-based MIL。在初步实验中基于注意力机制的MIL模型表现出了更好的性能因为它能学习为包内不同的实例分配不同的权重这直观上可以理解为模型在自动识别哪些提交是“重要的”。2.2 可解释人工智能让反馈“言之有物”然而MIL模型尤其是复杂的深度学习模型通常是一个黑箱。即使它能以85%的准确率预测一个学生可能无法通过如果无法向教师和学生解释“为什么”其教育价值就大打折扣。教师无法基于一个模糊的“高风险”标签进行精准干预学生也可能感到困惑和不公。因此我们引入XAI目标是实现可解释的预测。我们的要求不仅是“这个学生有80%的概率会失败”更是“模型做出此预测主要是因为该学生1在截止日期前3天才进行首次提交特征‘首次提交-距截止日天数’贡献度35%2在超过一半的提交日中连续提交间隔小于2小时可能表明缺乏深思熟虑的调试模式贡献度25%”。在众多XAI技术中我们选择了SHAP。SHAP基于博弈论为每个特征对于单个预测结果的贡献度分配一个数值Shapley值。这个值可以是正的推动预测向正类或负的推动预测向负类。SHAP的优势在于其坚实的理论基础和一致性且能提供全局整个模型和局部单个预测的解释。2.3 核心挑战与我们的解决方案从MIL到ML的桥梁一个巨大的技术挑战横亘在面前主流的、成熟的XAI工具如SHAP、LIME是为传统的单实例ML模型设计的无法直接应用于MIL模型。我们无法直接用SHAP去解释一个MIL模型为何将一个“包”判定为负包。我们的解决方案是一个巧妙的**“MIL到ML”的映射策略**。具体步骤如下训练阶段转换我们利用MIL数据的特性进行标签传播。对于一个最终通过作业的学生正包我们将其所有提交实例都标记为“正例”对于一个未通过的学生负包则将其所有实例标记为“负例”。这基于一个合理的教学假设通过学生的整体行为模式是积极的其每次提交都服务于最终的成功而未通过学生的整体行为模式是存在问题的。使用ML模型训练用上述转换后的数据此时已变成标准的单实例数据集训练一个强大的ML分类器我们最终选用CatBoost因其对类别特征和梯度提升的优异表现。推理阶段聚合当需要对一个新学生一个新包进行预测时我们使用训练好的ML模型对其包内的每一个提交实例进行独立预测得到每个实例的通过概率。然后我们采用**“最大置信度”聚合策略**将该包中所有实例预测概率的最高值作为整个包的预测概率。例如一个学生有5次提交ML模型对每次提交的预测概率分别为[0.2, 0.15, 0.8, 0.3, 0.1]那么我们判定该包该学生的通过概率为0.8。这个策略的直觉是只要学生在某次提交中展现出了“成功潜力”我们就认为他有通过的可能。应用XAI解释现在由于我们拥有的是一个标准的ML模型就可以毫无障碍地对单个提交实例应用SHAP进行分析。当教师查看一个高风险学生的分析报告时系统可以高亮显示其所有提交中哪些具体的行为特征如某次深夜提交、某次编译错误后长时间无新提交对“负向”预测贡献最大。注意这种标签传播策略会引入噪声正包中必然有无效提交负包中也可能有接近成功的尝试但我们的实验表明强大的ML算法如梯度提升树对此具有一定的鲁棒性。同时这种策略为我们打开了使用丰富XAI工具集的大门其收益远大于引入的噪声成本。3. 系统实现从原始日志到可行动反馈理论设计需要坚实的工程实现来支撑。我们的XOJ系统作为一个独立于原有OJ的反馈模块其数据处理与特征工程是整个流程的基石。3.1 数据采集与特征工程挖掘行为背后的信号我们使用的OJ是Javaluador它会为每次提交记录详细的元数据。原始日志数据是杂乱无章的我们需要从中提炼出能够表征学习习惯和态度的特征。经过反复分析和实验我们最终确定了以下5个核心特征它们均可在作业进行中实时计算满足及时反馈的要求距截止日天数当前提交日期距离作业截止日的天数浮点数如2.5天。这个特征直接反映学生的拖延程度和时间管理能力。首次提交-距截止日天数该学生对本作业第一次提交时距离截止日的天数。这是一个极其重要的特征它区分了“早鸟型”和“拖延症型”学习者的起点。累计提交次数到当前提交为止该学生对本作业的总提交次数。反映了学生的坚持度、调试能力和可能的试错策略。提交间隔天数到当前提交为止该学生在多少个不同的日历日有过提交行为。例如一周内每天提交1次共7次则该值为7如果集中在一天内提交7次则该值为1。这个特征能区分“持续投入”和“临时抱佛脚”。作业标识一个分类变量标识本次提交属于作业A1动态规划还是A2分支限界。用于捕捉不同任务类型可能带来的行为模式差异。实操心得特征归一化的重要性。上述特征的值域差异巨大“累计提交次数”可能从1到50“距截止日天数”可能在0到21之间。直接将这些原始数据喂给模型值域大的特征会主导训练过程。我们采用了StandardScaler进行Z-score标准化将每个特征转换为均值为0、标准差为1的分布。这是提升树模型收敛速度和最终性能的一个关键但易被忽视的步骤。3.2 模型训练与评估确保公平与稳健我们使用了三个学年2019-2022《编程挑战》课程的真实数据包含A1和A2两次作业共计超过2500次提交涉及约90名学生。数据划分必须谨慎以避免数据泄露。我们的关键策略是“按包分层交叉验证”。具体操作如下将学生即数据包随机划分为K折我们取K5。确保同一个学生的所有提交实例即一个包内的所有数据必须同时出现在训练集或测试集中绝不能拆分到不同的折中。这是保证评估结果无偏的黄金法则。在每一折训练中使用训练集学生数据按照前述的“MIL到ML映射”策略将包数据转换为实例数据训练CatBoost模型。在测试时对测试集学生的每一个实例进行预测然后使用“最大置信度”策略聚合得到该学生的最终预测概率和类别。使用AUC作为核心评估指标。AUC衡量的是模型将“通过学生”与“未通过学生”区分开来的能力对类别不平衡问题不敏感非常适合我们的场景通过率在不同学年波动较大。我们对比了多种方案纯MIL模型、纯ML模型简单实例化、以及我们提出的“MIL-to-ML映射 ML模型”。实验结果表明我们的方案在AUC指标上稳定优于纯MIL方法并且与纯ML方法相当或略优但最关键的是我们的方案具备了纯ML和纯MIL方法都不具备的、基于实例的可解释能力。3.3 反馈生成界面将数据洞察转化为教学语言模型的预测和SHAP值只是冰冷的数字。系统的最终价值体现在其生成的反馈上。我们为教师和学生设计了不同的反馈面板。教师面板高风险学生列表按失败风险概率排序教师可以一目了然地看到需要优先关注的学生。群体行为分析可视化展示全班学生在“首次提交时间”和“总提交次数”两个维度上的分布快速识别“拖延集群”或“过度试错集群”。个体深度诊断点击任一学生系统展示其提交时间线。每次提交用一个点表示颜色由SHAP值渲染红色越深表示对“失败”预测贡献越大。教师可以看到类似这样的解读“学生张三的失败风险较高78%。主要风险因素其首次提交发生在截止日前仅1.2天特征贡献40%且在截止前最后12小时内进行了密集的8次提交模式贡献35%这可能表明前期准备不足和最后时刻的慌乱调试。”学生面板在作业进行期间可见实时风险提示“根据您目前的提交模式系统评估您按时完成本作业的风险为中等。建议请尝试在后续几天内分散提交进行更系统的调试而非集中在最后一天。”行为对比“您的首次提交时间晚于班上75%的同学。提早开始可以让你有更充足的时间理解错误和寻求帮助。”** actionable建议**基于SHAP分析提供具体建议如“检测到您多次提交出现‘时间超限’错误。建议重点检查算法中循环结构的效率或考虑是否存在无限递归的可能。”4. 结果分析与教学启示超越预测的洞见经过在真实教学环境中的部署与验证我们的系统不仅达到了较高的预测性能平均AUC在0.82以上更重要的是它回答了我们最初提出的四个研究问题并带来了更深层的教学启示。4.1 回答核心研究问题RQ1: 何时开始提交数据分析给出了明确结论首次提交时间是与最终成功率相关性最高的特征之一。SHAP分析 consistently显示“首次提交-距截止日天数”是预测模型中最重要或次重要的特征。成功的学生中位首次提交时间通常在截止日前7-10天而失败的学生则集中在截止日前3天内。这强烈建议教师应在作业发布后尽早鼓励甚至设置“软性里程碑”如第一周结束前完成初步设计并提交一次以对抗学生的拖延倾向。RQ2: 合理提交次数是多少有趣的是提交次数与成功率并非简单的线性关系。我们的模型发现存在一个“甜蜜点”。提交次数过少如3次通常意味着参与度低或遇到无法解决的困难而放弃。提交次数极多如20次则可能意味着学生陷入了一种无方向的、盲目的试错循环而非有效的调试学习。成功率最高的学生群体其提交次数通常分布在5-15次这个区间并且这些提交分布在多个不同的日期特征“提交间隔天数”值较高。这表明有规律的、间隔性的持续努力比短时间内的密集轰炸更有效。RQ3: 风险群体有哪些通过聚类分析和模型决策路径的可视化我们识别出几种典型的风险画像“最后一刻冲刺者”特征为首次提交时间极晚且“提交间隔天数”接近1。这是最高风险的群体。“低参与度放弃者”总提交次数极少1-2次且首次提交时间也不早。通常意味着学生可能从一开始就遇到了理解障碍或缺乏动力。“高频率试错者”总提交次数极高但提交间隔天数少且成功提交出现得很晚或从未出现。这表明学生可能在盲目修改代码缺乏系统的调试策略和问题分解能力。RQ4: 给学生什么建议基于以上发现我们可以生成高度具体的、数据驱动的建议对“最后一刻冲刺者”“请立即开始不要等待‘完美方案’。先构建一个可运行的简单版本并提交即使它不能通过所有测试。这能帮你锁定问题范围并迫使你提前进入调试状态。”对“低参与度放弃者”“你似乎在开始阶段就遇到了困难。建议1重新阅读问题描述和课堂示例2尝试在纸上画出算法流程图3不要害怕提交一个仅有框架或包含语法错误的代码系统的编译错误反馈是第一步。”对“高频率试错者”“检测到您在短时间内进行了大量相似错误的提交。请暂停编码。建议1仔细阅读最近一次提交的OJ错误反馈很可能是逻辑错误2为你的程序设计小规模的、针对性的测试用例3使用调试器或打印语句逐行跟踪程序在测试用例上的执行过程验证你的逻辑假设。”4.2 模型的可解释性验证与教师经验对齐为了验证XAI生成解释的合理性我们邀请了三位有经验的课程教师对系统为50个高风险预测案例生成的SHAP解释进行盲审不告知模型预测结果。教师需要判断这些基于行为的解释如“首次提交过晚”、“提交日期间隔不均匀”是否与他们基于代码质量和平时观察的经验判断相符。结果显示解释的认可度超过85%。一位教师评论道“这个系统把我模糊的‘感觉这个学生不太稳’量化成了具体的行为指标比如‘他在最后48小时贡献了80%的提交’这让我找他谈话时更有针对性了。”4.3 遇到的挑战与解决方案数据稀疏性与冷启动问题对于刚开课或刚发布作业时学生提交数据很少模型预测不准。我们的策略是采用增量学习和基于群体的先验。在作业初期系统会更多依赖历史同期学生或同班级其他已提交学生的群体行为模式来提供参考性反馈如“目前已有30%的同学进行了首次提交平均首次提交时间为截止前X天”。随着该生提交数据的积累再逐渐过渡到个性化的模型预测。反馈的表述艺术直接将SHAP值如“特征‘距截止日天数’-0.3”呈现给学生是无效的。我们需要一个自然语言生成层将特征贡献度翻译成温和、鼓励性且具体的建议。我们建立了一个简单的模板库将特征、贡献度正负、贡献度大小映射到不同的表述上。例如高负贡献的“首次提交-距截止日天数”可能对应“看起来你是一个喜欢深思熟虑后再动手的学习者这很棒不过编程任务往往需要通过迭代来完善。不妨尝试比计划更早一些提交一个初步版本让OJ的反馈来引导你后续的思考这可能会让你的思路更清晰。”隐私与伦理考量持续的行为分析可能引发学生关于“被监控”的担忧。我们在课程开始时明确告知学生该系统的作用是“提供学习支持与反馈”所有数据仅用于生成聚合报告和个性化学习建议教师无法实时查看某个学生的具体提交代码内容只能看到行为模式分析。强调其“辅助性”而非“评判性”定位至关重要。5. 总结与展望迈向更智能的教育伴侣回顾这个项目其价值远不止于构建了一个预测准确率不错的模型。真正的突破在于我们通过MIL和XAI技术的结合找到了一种将学习过程中那些难以量化的“行为特质”进行结构化分析和解释的路径。它把教师的经验从“直觉”变成了“数据洞察”把对学生的帮助从“泛泛而谈”推进到“精准施策”。从技术迭代的角度我们接下来的工作重点有几个方向一是探索更复杂的时序模型来直接处理提交序列比如Transformer或LSTM以更好地捕捉行为模式的动态演变二是尝试将代码本身的内容如代码复杂度、语法错误类型通过代码嵌入技术引入模型实现“行为内容”的多模态分析三是研究如何将这种反馈机制与自适应学习路径推荐结合起来当系统识别出“高频率试错者”时不仅能给出建议还能自动推送关于“调试方法论”的微课视频或练习。对我个人而言最大的体会是教育技术的创新其核心不在于技术的炫酷而在于对教育场景的深度理解和尊重。技术应该像一位敏锐的助教在幕后默默观察、分析然后在最合适的时机用最易懂的方式给教师和学生递上一份有价值的“学情简报”。这个过程本身就是一次严谨的、充满挑战也充满成就感的“编程”。