本任务单同时适用于 Python 与 R。Python Notebook 提供逐步可执行单元;R 可按相同研究问题运行对应脚本。所有记录均为合成数据,540 行训练、180 行验证,没有最终测试数据。
每个实验使用五步:先写研究问题 → 先写预测 → 只改指定条件 → 记录可观察量 → 写支持与不支持的结论。不要在看见结果后把解释改写成事先预测。
时间为学习安排建议,实际训练速度取决于设备。不要为了完成全部任务而省略控制条件。
研究问题: 如果训练集和验证集分别标准化,是否仍是同一条预测管线?
selfcheck_python.py 或 selfcheck_R.R)。记录训练与验证行数,确认员工标识不重叠。scaling.csv。记录: 特征名、训练均值、训练总体标准差、验证变换公式、核查差值。
思考提示: scale 是总体标准差,不是样本标准差。Python 使用 ddof=0;R 使用平均平方偏差的平方根。
研究问题: 一个复杂模型的分数,是否真的超过了不使用特征的简单策略?
experiments_python.py 或 experiments_R.R,先看 constant、logistic、nn_reference 三行。控制条件: 相同记录、预处理、标签、阈值;逻辑回归与默认网络共享学习率和 L2,但结构不同。常数模型不训练,没有保留轮次。
记录: comparison.csv 的三行、选定的主指标、不同指标是否支持相同排序。
思考提示: “高于常数基线”不等于“可以用于组织决策”。这些是合成开发数据上的相对观察。
研究问题: 4、8、16 个隐藏单元如何改变拟合能力与验证损失?
HIDDEN=8、LEARNING_RATE=0.05、L2=0.001,保存目录名。HIDDEN 改为 4,再运行;然后改为 16。hidden_4、nn_reference、hidden_16,核对两种运行方式。可观察量: train_log_loss、val_log_loss、gap_log_loss、best_epoch、stop_epoch。
控制条件: 数据、学习率、L2、停止规则固定。不同宽度需要不同形状的固定初始化;不能声称严格隔离了所有初始化影响。
思考提示: 差值为正本身不能单独证明过拟合。需要观察训练持续下降而验证趋平或上升等证据。曲线若没有出现此模式,就报告“未观察到”。
研究问题: 同样的最大轮次,学习率如何影响优化速度与保留结果?
lr_001、nn_reference、lr_015。思考提示: 更快下降不等于更好泛化。学习率并不直接表示模型结构容量。
研究问题: 增加权重惩罚是否能改善当前候选的开发表现?
l2_0、nn_reference、l2_010。思考提示: learning_curves.csv 不包含 L2 惩罚项。更强的惩罚可能缓解过拟合,也可能导致欠拟合;必须用这次运行的证据判断。
研究问题: 改变阈值时,哪些指标改变,哪些不会改变?
thresholds.csv。代码只使用 nn_reference 的同一组保留概率,不重新训练。normalized_cost=(FP+3×FN)/180 复算一行。1 与 3 是课堂假设,不能伪装为真实政策。threshold_scan 时传入成本。思考提示: 阈值升高时,预测为正的数量、TP 与 FP 不会增加;精确率不保证严格单调。根据验证成本选阈值后,最小成本仍是被选择过的开发结果,不是独立性能估计。
研究问题: 训练继续运行一段时间后,返回的参数来自哪里?
best_epoch < stop_epoch 的曲线;如果没有,就明确说明所有候选都在边界保留。思考提示: 早停使用验证标签参与模型选择,所以验证集已参与开发。不要称其为“完全未参与训练过程的最终测试”。
研究问题: 在相同初始化下,去掉一个特征的变化信息,会如何影响这个预测模型?
support_score;将该标准化特征在训练和验证中都设为 0。nn_reference 比较。记录: 被消融特征、控制条件、验证损失差、AUC 差、替代解释;Notebook 保存 feature_ablation.csv。
复制 comparison_notes_template.csv,每个研究问题填写一行:
完成后写一份“开发候选冻结记录”:模型与参数、预处理、主指标、阈值、成本假设、停止规则、初始化来源、已看过多少个候选。解释为了独立最终评估,还需要另行采集和隔离什么数据。本包不提供或模拟这个最终评估阶段。