A16

特征工程

点击正文段落选定收藏或划线位置;未选定时使用屏幕内第一段。

课内目录

1 特征工程解决什么问题

模型看到的不是「这个客户似乎要离开」,而是有明确含义的数值、类别或向量。特征工程要把原始记录变成模型可以使用、预测时确实能够取得、训练和上线含义一致的信息。它既包括把金额缩放、把类别编码,也包括决定预测对象、观察截止时点和历史统计范围。变换公式只是其中的部分;如果信息边界错了,公式写得再漂亮也可能得到没有实际价值的高分。

以订阅服务的流失预测为例,任务可以定义为:在每月最后 1 天,预测仍然有效的订阅在未来 30 天内是否取消。原始日志里有登录、付款、客服咨询和取消事件。候选特征可以是最近 7 天登录天数、最近 30 天付款失败次数、距最近成功付款的天数、当前套餐类别。取消时间用来生成未来标签,不能再进入当时的输入。这里的重点不是「找到相关性最大的列」,而是找到当时可用、能帮助区分结果的信息。

再看 2 类不同的数据。服装图片分类可以使用图像像素、图像尺寸或亮度统计;短消息分类可以使用词频、字符片段和文本长度。它们的表示形式不同,但都要回答相同的问题:输入表示保留了什么,丢掉了什么,是否引入了答案。在图片任务中,文件夹名可能就是标签;在消息任务中,人工复核后追加的处置说明可能直接透露类别。这些列即使很容易读取,也不能自动视为合格特征。

特征工程还要配合模型。线性模型需要通过输入表示表达部分非线性关系,例如把年龄分段,或加入「使用次数是否为 0」。树模型通常能自己学习数值阈值,未必需要相同的分段。某种变换没有带来提升,不代表这个信息永远没用,也可能是模型已经能够利用原始输入。入门阶段应先保留简单基线,再用对照实验判断新增表示是否值得维护。

特征工程连接任务定义、可用数据与评估
特征工程连接任务定义、可用数据与评估

不要把「特征越多越好」当成目标。新增特征会带来采集、计算、解释和监控成本,也可能放大偶然相关。好的特征应当具备可解释的业务含义、稳定的计算口径和可以检验的收益。本课沿着任务边界、变换、对照实验和上线契约展开;复杂的自动特征搜索、表示学习内部机制和高级统计编码留到后续学习。

2 行、时点与可用信息边界

先写清楚 1 行代表什么。流失任务中的 1 行可以是「某个订阅在某个月末的快照」,不应含糊地叫「1 个用户」。同一用户可能有多个订阅,同一订阅也可能跨月出现。主键可以由订阅标识和快照日期组成。标签则对应这行快照之后的结果。若把用户级统计错误地连接到订阅级标签,重复记录和口径冲突会使评估变得难以解释。

接着区分事件发生时间与数据可用时间。付款可能在 23:58 发起,到账状态到次日才确定;客服工单可能在当天创建,但处理结论过了 3 天才补齐。预测时点为当天 24:00 时,不能因为事件日期早于截止时间,就使用后来才产生的结论。合理的连接条件需要同时考虑事件属于哪个观察期,以及字段何时已被系统知道。离线回放要尽量还原当时视角。

给每行标记 3 段时间很有帮助:观察窗口用来计算过去特征,截止时点决定可用信息边界,标签窗口用来观察未来结果。例如观察最近 30 天,在 6 月 30 日结束时作预测,再观察之后 30 天是否取消。若预测运行存在 1 天数据延迟,就要把延迟明确写进特征口径。最近 30 天不能在训练时包含当天,在上线时却只取到前天。

观察窗口、预测时点与标签窗口
观察窗口、预测时点与标签窗口

划分数据集必须服从实际使用方式。训练集用于学习模型与变换规则,验证集用于比较方案和选择阈值,测试集用于最后确认。假设完整可用的月末快照覆盖 1 月至 9 月,可以考虑较早月份训练、随后月份验证、最后月份测试;但不能只按快照日期切割,还要确认训练标签在验证预测开始前已经成熟。若 6 月快照的标签要到 7 月底才知道,就不能假装它们在 7 月初已经可用于训练。

如果任务面对未来月份中的已有客户,时间切分通常更贴近使用场景;如果任务面对从未出现过的新客户,还需要按客户分组,检查相同客户是否跨集合。图片也有类似问题:同一原图裁出的多个版本应保持在同一集合;短消息的近重复内容可能让随机切分看起来异常轻松。切分没有到处通用的答案,关键是评估对象要对应上线对象。

对于没有时间顺序要求的教学练习,可采用按标签分层的 60% 训练、20% 验证、20% 测试,并固定样本清单。比例只是起点,少数类样本是否充足也要检查。数据一旦划好,填补缺失、学习词表、估计缩放参数等操作就只能在训练集上拟合。验证集和测试集可以被变换,却不能帮助决定这些规则;否则模型在正式评估之前已经间接看过评估数据。

3 数值、类别与文本特征的常见变换

数值特征首先要处理语义。付款失败次数的 0 表示没有失败,空值可能表示日志没有接入;年龄的空值表示未知,并不等于 0 岁。可以使用训练集的中位数填补连续数值,同时增加「是否缺失」标记,让模型有机会区分真实数值与补出来的数值。填补策略应按列决定,不应看到空值就全部替换为 0。缺失模式本身也可能随数据系统变化而变化,需要在上线后监控。

缩放用于协调数值尺度。标准化可以写为 z=(x-μ训练)/σ训练,训练时保存均值和标准差,验证与上线复用它们。距离模型和带正则项的线性模型通常对尺度敏感,树模型一般不需要为了阈值划分而统一尺度。训练列若没有变化,标准差为 0,应使用明确的常量列处理规则,不能让除法产生错误。缩放也不能修复错误单位:元与分混用必须先在数据口径上解决。

对于偏斜的非负计数,可以比较原始值和 log(1+x)。最近 30 天登录 1 次与 10 次的差异,可能比 101 次与 110 次更有意义;对数变换压缩大值,使模型更容易表达这种变化。若存在负值,先检查它是退款等正常业务,还是数据错误,不要直接套用非负计数的变换。异常值截断也应有训练集规则或明确业务范围,不能查看测试集极值之后再决定边界。

类别特征常见做法是独热编码。例如套餐为基础、标准、高级,就生成分别表示这些类别的列。不要随意用 1、2、3 替代无序类别并当作连续数值,否则某些模型会把数字间距误读成意义。对于有明确次序的满意度等级,可以使用有序编码,但仍要声明等级顺序。客户标识虽然也长得像类别,通常更适合用于连接和分组;把它直接交给模型,可能只学到记忆,难以服务新客户。

低频类别可合并到「其他」,缺失类别可设为「未知」,但这 2 个值要区分。合并阈值只能依据训练集确定,验证中出现的新类别则进入预先约定的回退路径。独热编码的列顺序要固定,不能训练时第 3 列表示高级套餐,上线时第 3 列变成新增套餐。特征含义变化即使没有引发程序报错,也会破坏模型。

短文本可以从词袋开始:统计训练词表中各词出现的次数。TF-IDF 在词频基础上降低常见词的权重,词表和逆文档频率都从训练集学习。中文可以采用明确版本的分词规则,也可以先用字符片段,例如连续 2 个或 3 个字符。字符片段对分词边界的依赖较小,但会扩大候选词表。网址数量、文本长度、感叹号数量可作辅助特征;它们可能有帮助,却不能取代对真实错误样本的检查。

图片输入也需要稳定口径,例如统一尺寸、通道顺序和像素范围。若模型训练时收到 0 到 1 的像素,上线却收到 0 到 255,输入尺度就错了。随机裁剪或轻微旋转属于训练增强,应该只在训练阶段按约定使用;验证与测试应采用固定处理,才能比较模型。增强必须保持标签含义,不能因为某种操作容易实现,就假设它适合所有图像。

不同数据类型共享训练拟合与固定变换边界
不同数据类型共享训练拟合与固定变换边界

这些变换应与模型组成完整流水线:训练时拟合变换并训练模型,预测时只调用已经确定的变换规则。不要先对整张表做标准化,再把结果拆成训练和验证。流水线的价值在于把信息边界变成执行顺序,让每次实验可以复现,而不是只减少代码行数。

4 动手:同一验证集上对比特征集

可以用公开的 UCI Bank Marketing 数据练习。它的任务是预测客户是否订购定期存款,不是客户流失。本练习把预测时点设在营销电话开始之前,因此通话时长 duration 在这个时点不可用,必须排除。公开数据中存在某列,并不代表它适合任何预测时点。下载后记录具体文件与版本;不同文件的字段与样本范围可能不同,不能混用实验结果。

先列出输入清单,只保留在电话开始前已知的字段,例如年龄、职业、教育类别及允许使用的历史接触信息。标签 y 仅用于监督学习和分层切分。保留数据原始顺序与行标识,再固定分层切分清单。这个随机划分练习用于学习实验方法;若要估计真实未来营销效果,还应按时间和客户重复情况设计更贴近部署的评估,不能直接把练习分数作为上线承诺。

本次实验用同一种带正则项的逻辑回归,固定模型设置和随机种子。特征集 A 使用年龄与少量基础类别,数值做缺失处理与缩放,类别做独热编码。特征集 B 在 A 上加入事先允许的历史接触信息及缺失标记。特征集 C 再加入有业务解释的计数对数变换。每次只增加 1 组信息,变换参数都在同一训练集拟合,然后在完全相同的验证样本上输出分数。

为了先练习读结果,下面给出教学用混淆矩阵,全部是构造数字,并非该公开数据的实测结果。假设固定验证集有 2000 行,其中正类 200 行,负类 1800 行;在固定阈值下得到如下记录。实际操作时应替换为自己的输出,并同时保留每行预测分数。

特征集真正例 TP假正例 FP假负例 FN真负例 TNprecisionrecallF1
A909011017100.5000.4500.474
B120808017200.6000.6000.600
C130707017300.6500.6500.650

precision=TP/(TP+FP),表示被判为正类的样本中实际为正类的比例;recall=TP/(TP+FN),表示实际正类中找回了多少。F1 是这 2 个比例的调和平均。表中 B 比 A 找到更多正类,同时减少了误报,因此这个阈值下的改进值得继续检查。若正类稀少,全部预测负类也可能获得较高准确率,所以准确率不能单独代表任务完成程度。遇到分母为 0 的指标,要记录约定和对应样本数,不能悄悄忽略。

AUC 通常在本课指 ROC-AUC,它根据预测分数评估正负样本的排序,而不是根据某个阈值的混淆矩阵直接算出。记录 AUC 时,要保存相同样本上的原始分数;比较阈值下的 precision、recall、F1 时,也要保存阈值。排序改善不保证指定阈值下的 F1 一定改善,2 类指标应分别解释。对于少数类,还可以查看精确率与召回率曲线,了解提高召回会带来多少误报。

最后做错误切片:按年龄段、历史接触是否缺失、职业是否低频分别检查样本数与错误。总体提升可能掩盖某类样本的退步。不要为了验证集上的微小优势无限调整规则;反复选择本身会逐渐贴合验证集。选定方案与阈值后,只在测试集上作最终确认,并报告不确定性、样本范围和实际限制。

5 时间特征、聚合与窗口

时间特征常常比原始日期更有意义。对于流失预测,「最近登录发生在什么时候」可以转成「距截止时点有多少天」,「有多少登录事件」可以拆成最近 7 天登录天数和最近 30 天登录天数。前者反映近期活动,后者反映较长周期。还可以比较近期与较早阶段,但要留意新注册用户没有完整历史,不能把历史不足误当作长期不活跃。

窗口必须有清楚的左右边界。例如定义过去 7 天为 [截止时点-7 天,截止时点),左端包含,右端不包含。这样恰好发生在截止时点的事件不被意外计入。所有事件先统一时间口径,再处理本地日期、星期和节假日。某地区的星期日可能对应另个地区的星期一;如果业务按本地日结算,直接按 UTC 日期聚合会改变含义。时区和日历版本都应成为可追溯规则。

事件可用性、窗口聚合与可解释特征
事件可用性、窗口聚合与可解释特征

聚合通常包括计数、求和、均值、最大值、去重数量和最近发生时间。例如最近 30 天成功付款金额合计、最近 7 天活跃日期去重数量、最近 30 天客服工单数量。计算均值时同时保留分母通常很有帮助:平均每次会话 10 分钟,可能来自 1 次会话,也可能来自 100 次会话。统计稳定性不同,模型如果只看到均值就无法区分。

比值特征也要写清空分母的含义。「失败付款次数/付款尝试次数」在没有付款尝试时不是自然的 0% 失败率。可以把比值设为缺失,并增加「没有尝试」标记;也可以采用事先约定的其他规则。关键是训练和上线必须一致,并且能够解释。不要为了让程序运行而随手给分母加常数,否则计算结果的含义可能已经变化。

按用户聚合时,还要避免把未来行带回过去。例如先对整年日志计算每个用户的全年登录次数,再连接到 3 月末快照,会把 4 月到 12 月的行为偷偷带入输入。正确做法是以每个快照的截止时点过滤事件,再按窗口聚合。若同一用户有多行快照,每行都应得到其当时可见的历史,而不是同一个最新统计值。

窗口并非越多越好。7 天、14 天、30 天、90 天可能高度重复;窗口越长,通常需要更多历史、计算资源和数据等待,新增信息却未必更多。先提出假设,例如「近期突然不活跃比长期使用较少更值得关注」,再比较短窗口和长窗口的组合。用验证结果、错误样本和维护成本共同决定是否保留,而不是批量生成后只挑最高分。

6 常见坑:泄漏、目标编码不当、未见类别

泄漏是预测流程使用了当时不应该知道的信息。最直观的是把答案列放进输入,但更常见的是答案的间接后果,例如流失后的挽留记录、人工确认类别后的处理标记、电话结束后的通话时长。还有跨集合泄漏:同一图片的近重复版本同时出现在训练和验证中,或者先在全量文本上选择最能区分标签的词,再切分数据。它们都可能让离线评估比真正部署容易。

排查时不要只看字段名。名为「当前状态」的列可能在数据库中不断被覆盖,历史快照读取到的其实是今天状态。名为「历史成功次数」的列也可能按全量记录计算,包含快照以后的事件。需要追问生成逻辑、更新时间和历史保存方式。对于无法证明当时可用的字段,先从实验中排除,或者把它明确列为待验证输入,不能仅凭高相关性放行。

目标编码尤其需要小心。它把某个类别映射成该类别的目标均值,例如把职业类别映射成订购比例。若类别只出现 1 次,直接在同一行上用标签计算均值,编码值就等于答案。即使类别出现较多,使用验证标签计算类别比例,也会让验证输入含有验证答案。目标编码因此不是简单地把独热编码换成平均数。

入门阶段优先使用独热编码和明确的低频类别回退。确实需要目标编码时,训练行应使用不含自身及其相关泄漏样本的其他训练子集来计算映射,验证与测试只使用训练数据形成的映射。时间任务还要遵守先后顺序,不能让未来训练行的标签影响过去行。平滑和折外编码的具体算法留到后续;本课先记住:任何利用标签生成输入的步骤都要单独审查信息边界。

未见类别是正常运行现象。例如训练中只有 3 种套餐,上线新增第 4 种套餐。流水线应该按预定策略处理,如映射到保留的未知类别,而不是崩溃或临时增加新列。仅仅「不报错」还不够:如果未知套餐集中出现在高价值客户中,整体预测可能受影响。需要记录未知比例和相关预测分布,并确认这种回退在验证阶段已被实际测试。

从异常分数定位时间、切分与输入问题
从异常分数定位时间、切分与输入问题

类别不平衡会影响训练与评估。若正类只有 10%,全部判断负类有 90% 准确率,却没有找回任何正类。可以在训练阶段比较类别权重、重采样等方法,并在验证集保持预计使用场景的类别分布。不能先复制少数类再随机切分,否则相同样本可能流入不同集合。调整权重之后,仍然要重新检查 precision、recall 和阈值,不能把训练损失降低直接解释为业务收益。

分布偏移则是训练与使用环境不同。营销名单、语言习惯、套餐体系、拍摄设备发生变化,都可能改变输入分布;相同输入对应结果的规律也可能变化。监控缺失率、未知类别率和分数分布可以发现部分迹象,但它们不能证明模型效果没有下降。真实标签到达后,仍要核对实际召回和误报。检测到变化时,先定位数据口径与任务条件,再决定是否重训。

7 案例:用未来信息做出的「神特征」

某个流失预测练习中,团队从订阅表取出「账户最终状态」,再连接到每个月末的用户快照。这个字段在查询日已更新为取消、正常或欠费,因此 3 月末的训练行读到了用户在 4 月取消之后的状态。模型很快发现,最终状态为取消的用户很可能流失,离线分数明显上升。字段并未直接叫「标签」,查询也没有报错,错误却已经发生在数据连接时。

团队起初把提升归因于状态特征更贴近业务。为了检查,他们把预测时点写到每行旁边,再逐项询问字段何时产生。真正的证据来自状态更新日志:部分输入的更新时间晚于对应快照,且紧跟取消事件。若上线时必须在月末预测,这些值当时根本不存在。模型学到的主要是取消后的记录方式,而不是取消前的迹象。

修复应回到根源。能够还原历史状态时,按快照时点连接当时已经生效且可用的版本;无法还原时,删除最终状态特征,重新构建其他可用历史。不要简单把字段改名为「历史状态」,也不要只给它加噪声,因为这并没有恢复信息边界。所有由这个字段衍生的统计都要一起追踪,例如「最近状态变更次数」也可能包含取消后的更新。

重新实验时,保持原来合格的验证样本和评估规则,并比较去掉可疑字段前后的模型。可疑字段被移除后分数下降,只说明原分数中存在不可实现的收益,不能说明修复失败。还应逐行抽查临近截止时点的事件,确认聚合不含未来信息。如果此前切分方式本身有泄漏,就必须重建评估,旧分数与新分数应明确标记为不同评估条件,不能继续直接相减。

从漂亮分数追溯到可回放的预测证据
从漂亮分数追溯到可回放的预测证据

同类问题也会出现在其他任务。预测电话开始前的订购意愿时,通话时长属于未来;预测消息是否违规时,复核后的封禁理由属于答案后果;给图像分类时,带有类别文字的后期水印可能成为捷径。判断标准始终是「在指定预测时点和输入渠道中能否得到」,而不是某个字段在所有情境下都永远禁用。若任务改成通话结束后的服务分析,信息边界就需要重新定义。

这个案例提醒我们,异常好的结果应引发核对,而不是自动引发庆祝。最有用的检查包括字段可用时间、重复样本、标签生成过程和切分方式。若这些证据齐全,高分才更可信;若证据缺失,继续调参通常只会把问题藏得更深。

8 把特征契约写进上线验收

特征契约是训练、数据处理和预测服务共同遵守的输入约定。它不只是列名清单,还要说明实体、类型、单位、时间范围、缺失含义、默认行为、数据延迟和变换版本。比如「login_days_7d」应该写成「以订阅为实体,在截止时点前 7 天内,满足可用时间条件的成功登录事件所覆盖的本地日期去重数」,并声明本地时区。名称短一点可以,定义不能跟着缩短。

特征类型与含义缺失或异常规则验收证据
login_days_7d整数,最近 7 天活跃日期数日志不可用与真实 0 分开边界事件回放、范围检查
failed_payments_30d整数,最近 30 天失败付款次数去重后计数,延迟状态按可用时间处理原始事件与聚合结果对应
plan_type类别,截止时点有效套餐新类别走未知类别路径旧类别、新类别、空值样例
text_tfidf稀疏向量,固定词表及权重新词按固定词表处理词表版本、维度与列顺序

验收首先检查时间正确性。挑选发生在窗口起点、终点附近的事件,再挑选事件已发生但结论尚未到达的记录,确认是否被正确纳入或排除。只检查普通日期容易漏掉边界错误。对同一实体保留若干历史快照,验证过去输入不会因为今天的数据更新而无声改变。允许修订的历史数据,也要有明确的版本和重算记录。

接着检查训练与服务的一致性。选取可以离线回放的样本,让训练处理链与服务处理链使用相同原始输入、相同截止时点和相同版本,比较最终特征。整数和类别应一致,浮点数按事先约定的容差比较;容差不能大到掩盖单位或时间错误。文本需要核对分词、字符规范化和词表,图片需要核对尺寸、通道顺序与缩放,不能只比较向量长度。

上线指标要连接到任务目标。对流失干预,可以在固定可联系人数下报告 precision 和 recall;对短消息审核,可以约定最低 recall,同时观察误报带来的复核量。阈值必须来自验证阶段的选择,而测试集只用于最后确认。还要记录每个结果对应的样本期、标签成熟时间、模型版本和特征版本,避免后来把不同条件的指标放在一起比较。

特征契约从定义进入回放、验收与监控
特征契约从定义进入回放、验收与监控

最后为异常准备动作。单个类别未知可以进入回退路径,但关键输入大面积缺失时,可能需要暂停自动决策或使用已验收的基线。选择哪种动作应由业务损失与服务要求决定,并在上线前演练。监控不应只显示报警数量,还应能定位哪个字段、哪段时间、哪个实体群体发生变化。特征契约的价值,是让「结果不对」可以追溯到具体定义与证据。

9 从特征工程走向神经网络(A17)

本课主要讨论由人明确设计输入表示的做法。神经网络能够在训练中学习多层表示:图片中的局部图案可以逐步组合,文本中的词或字符可以转换为可学习的向量。这样可以减少部分手工特征设计,但不会取消任务定义、时间边界、数据切分和评估责任。网络再复杂,也无法把预测时不存在的信息变成合法输入。

需要区分 2 个动作:把原始数据整理为稳定输入,以及让模型从输入中学习表示。前者包括文字编码、图片尺寸、缺失处理和实体对齐;后者包括训练过程中调整表示参数。神经网络改变了后者的能力边界,前者仍然需要工程约定。训练图像经过缩放、上线图像没有缩放,或者训练文本清理掉复核标签而上线输入渠道不同,都需要在输入层解决。

对于表格任务,不必因为下一课讲神经网络,就放弃本课的简单基线。用同一数据切分、同一可用信息范围和同一指标比较,才能知道更复杂模型是否带来足够收益。如果主要瓶颈是标签不准确、窗口连接错误或分布变化,模型复杂度未必是最先需要调整的部分。更高的训练分数也不能替代验证集上的结果。

从本课带走的实验记录应该包括任务定义、样本清单、特征契约、变换参数、模型设置、预测分数和错误切片。进入 A17 后可以复用这些材料,只改变模型与表示学习部分。这样观察到的变化才有清楚来源,而不是同时更换数据、特征、模型和阈值后,只剩下无法解释的总分差。

学习神经网络时还会接触层、权重、激活与训练过程。本课先不展开其内部推导。先确认自己能够说明 1 行数据是什么、1 个特征何时可用、1 个指标回答什么问题,就已经具备继续学习的重要基础。表示可以由人设计,也可以由模型学习;可靠评估和输入边界始终是连接实验与实际使用的共同语言。

放进方案里

方案中的特征工程部分应从预测任务开始写:以订阅月末快照为样本,预测未来 30 天是否取消,特征只使用截止时点前已经可用的信息。列出观察窗口、标签窗口及数据延迟,并说明同一客户重复出现时的处理方式。这样评审者能先判断任务是否能够实施,再讨论具体算法。

输入清单至少包含名称、实体、类型、单位、窗口、可用时间与缺失规则。基础版本采用近期登录天数、付款失败次数和当前套餐;新增特征必须写出预期作用与计算来源。训练集拟合填补值、缩放参数和类别词表,预测服务复用相同版本。无法证明历史可用性的字段暂不纳入,目标编码另行审查。

实验采用固定训练、验证、测试样本,时间任务核对标签成熟顺序。保持模型设置一致,逐组增加特征,在同一验证集比较 precision、recall、F1 和 ROC-AUC,同时报告正类占比、阈值及错误切片。最终方案确定后再使用测试集确认,报告中的教学示例不能代替实际测量结果。

验收材料包括边界事件回放、训练与服务特征对照、未见类别测试和输入缺失演练。上线监控覆盖缺失率、未知类别率、输入与分数分布,并在真实标签成熟后复核效果。每个异常都要对应负责人和处理动作,关键输入不可用时使用已验收的回退方案。

资源评估同时记录窗口长度、历史保存需求、处理耗时与维护成本。只有在评估条件一致、收益稳定且计算链能够回放时,新增特征才进入正式版本。交付物保留样本清单、特征契约、变换参数和指标记录,供后续重训及 A17 的模型比较复用。

10 小结:下一步神经网络入门(A17)

特征工程把任务、信息边界和模型输入连接起来。先定义行与时点,再在训练集拟合变换,随后在固定验证集上比较,最后把口径写成可回放的上线契约。高分必须建立在正确的时间边界、合理切分与真实可用输入之上。

进入 A17 后,将学习神经网络如何从输入中逐步学习表示。继续沿用本课的实验纪律:输入契约一致、评估样本固定、测试集保留到最后。模型可以更换,证据应当连续。

同阶段相关课

AI 答疑

默认关闭。启用后,只发送本课标题、最近阅读的屏幕内正文摘录(最多 6000 字)与本次问题。

配置自己的服务