IS5126 完整复习资料
中文解释 · 英文术语 · 从基础到判断与推理
本资料依据你提供的考试说明,以及当前文件夹中的全部 9 个 Jupyter notebooks。你可以按本文顺序学习。理解本文不需要打开原 notebook,也不需要运行代码。文中的小型数值例子用于教学,不是重新运行课程数据得到的结果。
2026 年 10 月 12 日的 Week 9 PDF 第 9 页说明:考试在 10 月 19 日 18:30 开始,使用纸笔;可带 一张双面 A4 参考纸;题型包括 选择题、判断题和论述题。老师强调判断与推理,不考记忆、编程能力或数学公式与定理。第 8 页说明考试不使用互联网,占课程成绩 10%。自备笔,答题纸由老师提供。
Week 7 的较早公告写过 18:30–20:30,并写有“Open book,细节待定”。较新的 PDF 将参考资料明确为一张双面 A4。因此,不要把早期的 open book 理解成可以携带整份复习资料。最新 PDF 没有再次写出结束时间,时间安排以老师最新通知为准。
本文用公式帮助你理解含义。复习时,优先学会说明“为什么”,再用小例子检查理解。不要把背公式作为主线。
| 顺序 | 内容 | 建议时间 | 完成标准 |
|---|---|---|---|
| 1 | 第 1–6 章:数据、回归、损失与验证 | 70–90 分钟 | 能识别任务、指标和数据泄漏 |
| 2 | 第 7–12 章:分类、阈值与树模型 | 70–90 分钟 | 能解释错误成本、模型差异与复杂度 |
| 3 | 第 13–18 章:聚类与时间序列 | 70–90 分钟 | 能评价分组,能设计可信的未来预测 |
| 4 | 完成另一份中英模拟卷,再对照答案 | 90 分钟作答 + 30–45 分钟订正 | 每道错题能说出错误条件 |
| 5 | 阅读双面 A4 参考纸 | 15–20 分钟 | 能迅速找到判断步骤 |
这些时间是学习建议。每学习 50–60 分钟,可休息 5–10 分钟。若某一章读不懂,先回看该章例子,不必先记下全部英文缩写。
| 章节 | 要解决的问题 |
|---|---|
| 1–3 | 数据是什么?误差怎样计分?回归怎样形成预测? |
| 4–6 | 怎样判断模型能泛化?怎样处理缺失、异常值和数据划分? |
| 7–9 | 概率怎样变成决策?为什么 accuracy 不够?怎样选择阈值? |
| 10–12 | 树怎样划分?RF 和 XGBoost 怎样组合树?怎样选择设置? |
| 13–15 | PCA 保留什么?k-means 怎样分组?分组怎样支持行动? |
| 16–18 | 时间顺序有什么作用?ARIMA 怎样解释?怎样评价预测? |
| 最后两节 | 怎样写有理由的答案?怎样检查自己是否掌握了主线? |
- 目的: 我们要回答什么业务问题?预测结果会触发什么行动?
- 方法: 输出是数值、类别、分组,还是未来一段时间的数值?
- 可信度: 评价是否模拟真实使用?有没有泄漏、错误指标或不公平比较?
- 解释: 结果具体说明什么?它不能说明什么?下一步应做什么?
例如,银行要减少欺诈损失。预测“是否欺诈”是分类任务。预测为欺诈后,银行可能暂停交易。暂停真实交易与放过欺诈交易会造成不同损失。因此,评价必须连接错误类型与业务后果。
技术语言采用 ASD-STE100 的等价中文表达原则:使用短句;一句表达一个主要意思;先定义术语;同一概念使用一致名称。中文没有该英文标准对应的正式受控词表。本文保留课程所需的技术名称,并在首次使用时解释。
建立术语与判断顺序。先理解任务,再选择模型。
#每一行是谁?每一列是什么?
数据集(dataset)是一张表。每一行通常表示一个观测(observation),例如一颗钻石、一位乘客或一个小时。每一列表示一种记录。特征(feature)是模型可用的输入,例如钻石重量。目标(target)是你要预测的结果,例如价格。用 x 表示一个输入,用 y 表示实际结果,用 ŷ 表示模型给出的预测。预测前,先说明这些符号对应什么。
训练(training)让模型从已有数据中学习。预测(prediction)把学到的规则用于一条输入。训练时可以知道历史目标。使用模型时,目标通常尚未出现。例如,贷款批准前可以知道申请收入,却不能知道这笔贷款未来是否违约。输入必须在作出预测的时点可取得。记录编号通常只用于识别行,不能因为编号存在就认为它有预测价值。
| 任务 | 是否需要已知目标 | 本课程例子 |
|---|---|---|
| 回归(regression) | 需要;目标是数值 | 预测钻石价格 |
| 分类(classification) | 需要;目标是类别 | 预测乘客是否存活 |
| 聚类(clustering) | 不需要预先给出组别 | 按行为给客户分组 |
| 预测时间序列(forecasting) | 用过去数值预测未来 | 预测明天的用电需求 |
回归与分类属于监督学习(supervised learning):模型通过已知输入和已知结果学习。聚类属于无监督学习(unsupervised learning):模型依据输入的相似性建立分组。没有真实组别时,不能直接用分类准确率评价聚类。时间序列预测还要求保持时间顺序。知道任务类型,才能选择有意义的评价方法。
#先理解几个统计量
均值(mean)是总和除以数量。中位数(median)是排序后的中间值;数量为偶数时,取两个中间值的均值。方差(variance)描述数值离均值有多远。计算时先取各值与均值之差,再平方和求平均。标准差(standard deviation)是方差的平方根。标准差与原数据具有相同单位,因此更容易解释。样本方差常用数量减一作分母;这里先用描述数据的平均平方偏差理解概念。
教学例子
三位客户购买 2、4、6 件商品。均值和中位数都是 4。平方偏差为 4、0、4;方差为 8/3,标准差约为 1.63 件。如果最后一位买 60 件,均值升到 22,中位数仍为 4。一个极大值会强烈影响均值。这解释了为什么缺失值填补有时使用中位数。
业务问题先于算法。例如,商店希望减少缺货。预测销量只是中间步骤,订货才是行动。少预测 10 件会导致缺货,多预测 10 件会导致库存。两种损失可能不同。你应先说明行动和错误成本,再决定怎样评价预测。一个模型在某个指标上更好,不代表它对每种业务决策都更好。
相关(correlation)描述两个量如何一起变化。常用的相关系数在 −1 到 1 之间。接近 1 表示较强的同向线性变化,接近 −1 表示较强的反向线性变化。接近 0 只表示线性关系弱,不表示没有任何关系。相关不证明因果。
学会解释误差。理解为什么不同指标会选出不同模型。
对第 i 条观测,残差(residual)或预测误差为 eᵢ = yᵢ − ŷᵢ。yᵢ 是实际值,ŷᵢ 是预测值。正误差表示预测偏低;负误差表示预测偏高。误差直接相加会相互抵消。因此,我们常取绝对值或平方。下表中,n 是观测数量,Σ 表示把所有观测对应的数值相加,|e| 表示误差的绝对值。
| 指标 | 计算方式 | 数值表示什么 |
|---|---|---|
| SSE:平方误差和 | Σeᵢ² | 全部平方误差的总量 |
| MSE:均方误差 | Σeᵢ² / n | 平均平方误差 |
| RMSE:均方根误差 | √(Σeᵢ² / n) | 与目标同单位;重罚大错误 |
| MAE:平均绝对误差 | Σ | eᵢ |
| MAPE:平均绝对百分比误差 | 100 × Σ( | eᵢ |
| SMAPE:对称平均绝对百分比误差 | 100 × Σ[2 | eᵢ |
教学例子
实际值为 10、20,预测值为 12、16。误差是 −2、4。SSE = 4 + 16 = 20;MSE = 10;RMSE ≈ 3.16;MAE = 3。MAPE = (20% + 20%)/2 = 20%。SMAPE ≈ (18.18% + 22.22%)/2 = 20.20%。这些数值都评价同一组预测,但使用了不同的尺度。
#为什么 SSE、MSE、RMSE 的最优解相同?
在同一批观测上,n 固定且大于零。MSE 只是把 SSE 除以 n;RMSE 再取平方根。这两步都保持大小顺序。因此,SSE 最小的预测也使 MSE 和 RMSE 最小。此结论要求比较同一批数据、相同权重与相同候选模型。若样本数量不同,不能直接用 SSE 大小比较模型质量。跨批次平均多个 RMSE,也不等于把所有误差合并后计算一次 RMSE。
平方损失会放大大错误。误差从 2 增到 4 时,绝对误差加倍,平方误差变为四倍。若一个很大的预测错误会造成特别严重的损失,RMSE 可能有用。MAE 对误差大小按相同比例计分。MAPE 更看重相对于目标的错误:实际值为 10 时错 5 是 50%;实际值为 100 时错 5 只有 5%。因此,改变指标可以改变最佳模型。
易错点
MAPE 在实际值为零时无定义,实际值接近零时也会非常大。此处 SMAPE 使用课程公式,取值通常在 0% 到 200% 之间;当实际值和预测值都为零时,需要预先约定处理方法。SMAPE 也不能消除所有零值问题。不要为了得到好看的分数,事后删除难预测的观测。
损失函数(loss function)可以用于训练,也可以用于评价。普通最小二乘按平方误差训练,但你仍可用 MAE 评价它。此时训练优化的目标与报告的指标不同。回答选指标题时,应连接三件事:哪种错误有成本,指标怎样计算该错误,为什么这种计分适合当前业务。
理解参数、类别输入和特征工程。通过计算解释模型。
如果完全不用输入,所有观测都收到同一个预测 c。在平方损失下,最佳 c 是训练目标的均值。教学例子:目标为 2、4、6,取 c = 4 时 SSE 为 8;取 c = 5 时 SSE 为 11。均值给出一个简单基线(baseline)。加入输入之后,模型应在新数据上比这个基线更有用;训练误差下降本身还不够。
一元线性回归写成 ŷ = β₀ + β₁x。β₀ 是截距(intercept),β₁ 是斜率(slope)。普通最小二乘(ordinary least squares,OLS)选择参数 β₀、β₁,使训练数据的 SSE 最小。多元模型可以加入更多输入,例如 ŷ = β₀ + β₁x₁ + β₂x₂。此时 β₁ 表示:在其他模型输入固定时,x₁ 增加一个单位所对应的预测变化。
教学例子
假设钻石预测规则是价格 ŷ = 100 + 500w,其中 w 为重量,单位为克拉。重量为 2 时,预测价格为 1100 个货币单位。斜率 500 表示重量每增加 1 克拉,模型预测增加 500。截距对应重量为零的预测;若零重量远离训练数据,它未必有实际意义。这里的系数仅用于教学。
#类别输入需要明确编码
类别通常没有数值间距。不能直接把普通、优质、顶级编码为 1、2、3,就假定每一级差距相同。指示变量(indicator)只取 0 或 1,说明一条记录是否属于某类。对含截距的线性模型,常给 K 个类别建立 K−1 个指示变量。未单独建立一列的类别称为参考组(reference group)。这样可以避免类别列与截距重复表达同一信息。
教学例子:令 I = 1 表示优质切工,I = 0 表示普通切工。模型为 ŷ = 100 + 500w + 80I。在相同重量下,优质组比参考组多预测 80。两组都使用斜率 500,因此图上是两条平行线。类别系数表示相对参考组的差异,不是该类别的全部预测价格。改变参考组会改变系数的表达,但可以表示同一组预测。
#特征工程可以改变曲线和关系
特征工程(feature engineering)从已有输入建立新输入。加入 w² 后,模型可表示弯曲关系。它仍对待学习的系数呈线性,所以可以用线性回归拟合。加入交互项(interaction)wI 后,重量的作用可以随类别改变。例如 ŷ = 100 + 500w + 80I + 40wI:普通组斜率为 500,优质组斜率为 540。对 w = 2 的优质钻石,预测为 1260。
判断限制
增加特征会增加拟合能力,也可能拟合噪声。用验证结果决定是否保留。训练与新数据必须使用相同的特征定义。不能把价格或 log(价格) 放入价格预测的输入;使用时你还不知道答案。系数描述预测关系,不证明因果。即使切工系数为正,也不能据此断言改变切工必然使价格增加该数值。超出训练输入范围的预测称为外推,通常需要额外证据。
区分参数、超参数与数据用途,建立可信的评价。
泛化(generalization)是模型在新观测上保持有效预测的能力。训练数据包含可重复的模式,也包含偶然出现的噪声。欠拟合(underfitting)是规则过于简单,连主要模式都没有学好。过拟合(overfitting)是模型学到了训练数据特有的细节,这些细节不能稳定地帮助新预测。判断时必须看新数据表现,不能只看模型是否复杂。
教学例子
三个模型预测同一个目标。固定均值模型的训练/验证 RMSE 为 25/26,简单回归为 12/13,高阶多项式为 2/21。固定均值可能遗漏有用模式。高阶模型在训练中很好,在验证中明显变差。简单回归在这次验证上更好。这些数值说明一种判断方法,不证明简单模型总会获胜。
| 数据用途 | 可以做什么 | 不能据此声称什么 |
|---|---|---|
| 训练集(training set) | 学习系数、树划分等模型参数 | 训练好就能泛化 |
| 验证集(validation set) | 比较输入、算法与设置;选择模型 | 被反复查看后仍是独立测试 |
| 测试集(test set) | 最后评价已经选定的整个流程 | 看完后调参,再称其为最终独立结果 |
教学安排:1000 条记录中,先留出 200 条作最终测试。余下 800 条可分成 600 条训练、200 条验证。用训练部分拟合候选模型,用验证部分选择方案。选定后,可按既定方案使用全部 800 条重新训练,再检查那 200 条测试记录。最终测试模拟从未参与决策的新数据。若根据测试结果继续修改方案,就需要新的独立评价数据。
holdout 意为留出的数据,不自动等于最终测试。课程钻石任务的隐藏 holdout 没有向你提供目标,因此不能拿它来计算自己的误差。另一份被称为 validation 的数据,如果已多次指导选择,也不能再被称作完全独立的最终测试。关键在实际用途,不在文件名。
#参数与超参数由谁决定?
参数(parameter)由训练过程估计,例如线性回归的系数、决策树的划分点。超参数(hyperparameter)规定学习方式,例如多项式次数、树的深度、树的数量。课程还把特征选择、损失选择、异常值规则等流程选择纳入广义超参数。我们先给出候选设置,再用验证比较。设置属于人为选择,不代表应该凭感觉决定。
为什么反复试同一验证集也会过拟合?假设你比较很多方案。某个方案可能恰好适合验证集中的偶然误差。你不断追随这次分数,就逐步利用了验证集信息。交叉验证能减少对单次划分的依赖,但不能保证任意数量的尝试都没有选择偏差。最终测试仍有独立作用。训练与验证差距大也可能来自分布变化,应检查数据背景。
作答顺序
先说模型需要泛化到谁、何时和什么场景。再说明各数据集用于学习、选择还是最终评价。最后比较训练与验证表现,给出下一步检查。70/30 或 80/20 只是常见划分,没有统一最佳比例。同一客户的重复记录或有时间顺序的数据,需要对应的分组或时间划分;随机打散未必合理。
理解每一折的训练过程,防止预处理泄漏信息。
k 折交叉验证(k-fold cross-validation,CV)把可用于选择的数据分成 k 份。对同一组设置,轮流用一份作本轮验证,其余份作本轮训练。每条观测都在一次验证中被评分。汇总 k 次结果后,再比较其他设置。CV 是多次重新训练模型;它不是训练一次后重复读取同一组预测。
教学例子
继续使用上一章保留测试后的 800 条记录。5 折 CV 每轮使用 640 条训练、160 条验证,共训练 5 次。一组设置的五次 MAE 为 10、12、11、13、9,均值为 11。另一组均值为 10.5,表面上较好;还要看差距是否稳定、各折波动以及计算成本。最终那 200 条测试记录始终不进入这五折。
网格搜索(grid search)列出多种设置组合,再对每种组合运行相同的 CV。若有两种树深度和三种树数量,就有六种组合。使用 5 折需进行 30 次训练,最后通常还要用全部选择数据重新拟合获胜设置。相同折划分有利于公平比较。分类可使用分层划分,让各折保持相近的类别比例。
缺失值(missing value)不等于零。未填写收入可能是随机漏填,也可能是高收入者不愿公开。删除不完整记录可能改变样本代表性,也可能使某些用户得不到预测。简单填补可用数值的均值或中位数、类别的众数。众数是出现次数最多的值。填补并没有恢复真实数据;它只是使当前流程能够继续处理该记录。
教学例子
本轮训练数据中的已知年龄为 20、30、40,另有一个缺失。训练中位数为 30,因此用 30 填补。验证数据中有年龄 80 和一个缺失,也使用 30 填补。不能把验证中的 80 加入中位数计算。我们要模拟未来使用过程;未来用户不能参与今天这次训练。进入下一折时,需要从那一折的训练部分重新计算中位数。
数据泄漏(data leakage)是学习或选择过程获得了实际预测时不应获得的信息。常见情况包括:在划分前用全数据计算填补值;用目标的变形当输入;把违约发生后的催收记录用于预测此前的违约风险。同一人的近似重复记录跨越训练和验证,也可能使分数过于乐观。没有使用验证目标,不代表所有泄漏都已经排除。
#预处理也属于模型流程
管道(pipeline)把填补、编码、缩放和模型训练连成固定步骤。每轮 CV 先只从本轮训练部分学习处理规则,再把规则应用于本轮验证。最后部署时,新记录也用同样的已拟合规则。验证数据应接受相同的处理,但不能参与规则估计。若加入“收入是否缺失”指示变量,应说明缺失可能包含什么信息,再用验证判断它是否有用。
易错点
CV 分数是模型选择证据,不是未来表现的保证。每折标准差描述结果波动,不自动等于置信区间。最终选好流程后,可以用全部非测试数据重新学习填补值和模型参数;之后只在保留测试集上作最终评价。支持原生缺失值的算法是另一种处理方案,但仍要检查缺失原因与验证边界。
还可以用其他已知特征训练一个模型,预测某列的缺失值。这个填补模型也必须只在本折训练部分拟合,再用于本折验证部分。模型填补不能保证恢复真值,也不能使用预测时尚未出现的目标信息。
区分真实极端值、数据错误与使用限制,完整解释决策。
异常值(outlier)是与其他观测差异很大的值。它可能来自录入错误,也可能是真实但少见的客户。例如购买金额 10000 可能是多录了两个零,也可能是重要的大客户。先查单位、来源和业务规则,再决定保留、纠正、删除或截尾。平方损失会放大极端误差,因此异常值常会明显影响 OLS。这个影响说明需要检查,不直接证明需要删除。
四分位数 Q1 和 Q3 分别对应排序数据的约 25% 和 75% 位置。四分位距 IQR = Q3 − Q1。常用检查界限为 Q1 − 1.5×IQR 与 Q3 + 1.5×IQR。教学例子:Q1 = 10,Q3 = 20,则 IQR = 10,界限为 −5 和 35。值 40 会被标记。这个规则只提示检查,并不证明 40 错误。
课程考试示例:目标大于 500
题目已经决定:目标值大于 500 太少,不希望它影响模型学习;但生产中仍可能出现。先做 70/30 划分,再仅从训练部分删除这些记录。保留验证部分的大于 500 记录,因为验证要反映使用时可能遇到的情况。若也从验证中删除,就把评价场景人为变容易。这个答案依赖题目给定条件,不是“所有异常值都只从训练删除”的通用规则。
还要区分删除记录与转换输入。若训练时采用输入截尾,例如把过高的输入值压到训练的第 99 百分位,就应对验证和新输入应用同一个已确定的界限。验证不参与估计该界限,也不因预测困难而删除记录。若删除规则依赖尚未知晓的目标,部署时通常无法按同样规则先筛选客户。应评价最终服务对象中的实际表现。
#怎样处理不合理的负预测?
普通线性回归的输出没有非负限制。若目标必须非负,可以事先规定把负预测改成零,再评价这一完整流程。这样保证范围合理,但是否符合业务含义仍需判断。若零表示“不交易”,把负价格映射为零可能是一项业务规则。预测值处于合法范围,并不代表预测已经足够准确。
另一方法是对严格为正的目标取自然对数 log(y),训练模型预测这个对数,再用指数函数 exp 变回原单位。log 与 exp 互为逆运算。这样输出总为正,但平方损失现在作用在对数尺度上,选出的模型可能不同。y 为零或负数时不能直接使用 log(y)。不能只做变换就忽略目标的取值限制。
教学例子:逆变换不等于原尺度均值
目标只有 10 和 40。原尺度均值为 25。两个对数的均值再取 exp,结果为 20,即几何均值。原因是“先平均再取指数”与“先取指数再平均”不同。因此,直接对预测的平均对数取 exp,不保证得到原尺度的平均目标。若业务要求金额的平均预测,应考虑逆变换偏差,并在原单位上评价。
把流程串起来:先确定预测时点、服务对象和错误成本;保留最终测试;在训练内部选择输入、预处理和模型设置;用验证比较完整预测流程;检查极端值、业务约束和模型解释;最后报告独立结果与限制。每项建议都要说明原因。比如“删掉高价商品会降低 RMSE”不够,还要回答高价商品是否属于实际服务范围,以及删后分数还能代表谁。
Classification · Logistic regression · Log loss
#分类任务在预测什么
分类(Classification)预测类别。二元分类只有两类。先指定正类(Positive),记为 y = 1。另一类为负类(Negative),记为 y = 0。这里的“正”不表示结果较好。欺诈检测把欺诈设为正类。Titanic 练习把生还设为正类。改变正类定义,会改变 precision 和 recall 的业务含义。多类别分类则有三个或更多互斥类别,例如邮件类型。
#概率模型怎样工作
用 p 表示模型估计的正类概率。负类概率为 1 − p。先把输入 x 与训练得到的系数 β 组合成分数 z:z = β₀ + β₁ × x₁ + β₂ × x₂。z 可以小于 0,也可以大于 1,因此不能直接当概率。逻辑回归(Logistic regression)用 S 形函数把 z 转成 p:p = 1 / (1 + e^(−z))。e 是约等于 2.718 的数学常数。z = 0 时 p = 0.5。z 越大,p 越高。名称含 regression,但本课用它完成分类。
教学例子
假设某模型只用学习时数 x,分数为 z = −2 + x。学习 1 小时时 z = −1,p 约为 0.27。学习 3 小时时 z = 1,p 约为 0.73。这表示模型估计通过考试的概率增加。它没有证明多学两小时会造成这一变化。其他因素也可能同时变化。
Probit 回归也先计算 z。它用标准正态分布的累积概率函数 Φ 把 z 转为 p。Φ(z) 表示该分布中不大于 z 的概率。两种模型都能用二元负对数似然,即 log loss,训练。它们的主要区别是概率映射。把模型类型作为待验证的选择。不要仅凭名称判断哪种更好。逻辑回归的概率不是输入的直线函数;其分数 z 才是输入的线性组合。
对数损失(Log loss)越小越好。真实 y = 1 时,单条损失为 −ln(p)。真实 y = 0 时,单条损失为 −ln(1 − p)。ln 是自然对数。只需理解规律:给真实类别的概率越小,损失越大。对错误结果非常自信,会受到很大惩罚。对各条损失取平均,可比较同一批样本上的模型。训练时若加入正则化,还会限制系数大小。
教学例子与阈值
真实结果为 1。预测 p = 0.9 的损失约为 0.105;预测 p = 0.6 的损失约为 0.511;预测 p = 0.1 的损失约为 2.303。在阈值 0.5 下,前两者都预测为 1,但概率质量不同。阈值 t 把概率变成类别:p ≥ t 预测为 1;否则预测为 0。p = 0.6 在 t = 0.5 时为正类,在 t = 0.8 时为负类。改阈值不改变已算出的概率,也不改变这些概率的 log loss。
答题时分清三件事:模型给出概率;阈值给出类别;业务规则把类别变成行动。0.5 是常见默认阈值。它不是任何业务都适用的最优阈值。单次预测为 70% 也不保证某个人一定成功。要用未参与训练的数据检查概率和最终决策。
标准正态分布是一条对称的钟形分布,均值为 0,标准差为 1。Φ 表示该分布的累积概率。本课只需理解:它把任意实数分数转换成 0 到 1 之间的概率。
Confusion matrix · Accuracy · Precision · Recall
#先确定正类,再读混淆矩阵
混淆矩阵(Confusion matrix)同时记录真实类别与预测类别。本节把欺诈设为正类 1。行表示真实结果,列表示预测结果。True 表示预测正确。False 表示预测错误。Positive 和 Negative 表示预测为哪一类。先看行列标签,再读数字。不同图可能使用不同排列。
| 真实结果 / 预测结果 | 预测 0:放行 | 预测 1:拦截 |
|---|---|---|
| 真实 0:正常 | TN 真负:正常放行 | FP 假正:误拦正常交易 |
| 真实 1:欺诈 | FN 假负:漏过欺诈 | TP 真正:发现欺诈 |
设总交易数为 N,则 N = TP + TN + FP + FN。准确率(Accuracy)= (TP + TN) / N。它回答全部交易中有多少判断正确。精确率(Precision)= TP / (TP + FP)。它回答被拦截的交易中,有多少是真欺诈。召回率(Recall)= TP / (TP + FN)。它回答全部真欺诈中,有多少被发现。记住分母比记住名称更重要。Precision 从预测正类开始。Recall 从真实正类开始。
教学例子:逐步计算
有 1,000 笔交易,其中 20 笔欺诈。模型发现 15 笔欺诈,漏过 5 笔。同时误拦 45 笔正常交易。因此 TP = 15,FN = 5,FP = 45,TN = 935。Accuracy = 950 / 1,000 = 95%。Precision = 15 / 60 = 25%。Recall = 15 / 20 = 75%。这三个数字分别说明整体判断、拦截质量和发现能力。它们回答不同问题。
#高准确率为什么可能没有用
上例中,全部预测为正常也有 98% 准确率,却漏掉全部欺诈。这叫类别不平衡(Class imbalance):一个类别远多于另一个类别。多数类基准(Majority-class baseline)只预测训练数据中最多的类别。候选模型必须与适合任务的基准比较。但准确率低于基准,不足以说明模型没有业务价值。还要比较错误类型和代价。
教学例子:把错误换成成本
假设每次误拦 FP 损失 10 元,每次漏过 FN 损失 1,000 元。为便于教学,暂不计其他成本。上述模型的错误成本为 45 × 10 + 5 × 1,000 = 5,450 元。全部放行的成本为 20 × 1,000 = 20,000 元。模型准确率较低,但在这些成本假设下更划算。实际决策还要计入核查人员、等待时间和客户流失。正常拦截也可能需要核查成本。
没有预测正类时,TP + FP = 0,precision 在数学上未定义。样本没有真实正类时,TP + FN = 0,recall 未定义。软件可以约定显示 0 或空值。这个约定不代表指标本身有定义。比较结果前,检查这一约定。F1 是 precision 与 recall 的调和平均:当 precision 和 recall 都有定义,且两者之和非零时,F1 = 2 × precision × recall / (precision + recall)。F1 不直接表示金钱成本,也没有使用 TN。
Threshold decisions · Titanic workflow
#阈值变化:哪些结论一定成立
固定同一批样本、真实标签和预测概率。采用 p ≥ t 判正的规则。降低阈值 t,会扩大或保持预测正类集合。因此 TP 和 FP 只能增加或不变;FN 和 TN 只能减少或不变。若真实正类存在,recall 只能增加或不变。提高阈值时,方向相反。“只能增加或不变”不等于每次必然增加。若两个阈值之间没有预测概率,所有类别都不变。
教学反例:precision 不保证单调
三人的预测概率依次为 0.9、0.8、0.7,真实类别依次为 0、1、1。阈值为 0.9 时,只选到一个负类,precision = 0。阈值降到 0.8 时,precision = 1/2。降到 0.7 时,precision = 2/3。本例中降低阈值反而提高 precision。一般数据中常见 precision 与 recall 的取舍,但不能把常见趋势写成严格保证。Accuracy 也不保证随阈值单调变化。
阈值为 0 时,所有合法概率都会判为正类。若样本有正类,则 recall = 1,precision 等于正类比例。阈值为 1 时,p = 1 的记录仍判正。若没有 p = 1,才会全部判负。全判负时,若真实正类存在,则 recall = 0;precision 未定义。先检查边界条件,再判断绝对说法。
#用业务约束选择阈值
先写出 FP 与 FN 的后果。再在训练内部的验证结果中比较候选阈值。对每个阈值,计算错误数量、预计成本及需处理的数量。若每天只能人工核查 100 笔,预测正类数量就是容量约束的一部分。模型可以按风险排序,再检查前 100 笔的发现能力。相同概率可能造成边界并列,因此必须预先规定并列处理方式。
教学例子:相同模型,不同行动
某天 1,000 笔交易。阈值 0.5 标记 60 笔;阈值 0.2 标记 180 笔。后者可能找到更多欺诈,也可能超出 100 笔核查容量。不能只说“recall 更高,所以采用 0.2”。应比较漏报成本、误报成本和处理能力。阈值属于模型选择过程。最终评估数据也不能反复用于选阈值。
#Titanic:从原始表到最终解释
- 定义任务:每行是一名乘客。survived 为目标,1 表示生还。row_id 只用来识别乘客。目标和编号都不作为本练习的输入。可用输入包括年龄、票价、性别、舱等、亲属人数和登船港。
- 先分训练集与验证集。课程采用 70% 与 30%。分层抽样(Stratification)使两组生还比例接近。固定随机种子帮助重复比较。它不消除抽样误差。
- 只用训练数据学习年龄中位数和登船港众数。用相同数值填补验证数据。把文字类别转换为指示变量。保证两组列的含义及顺序一致。分类器的概率列必须对应正类 1。
- 训练模型后,为验证乘客计算生还概率。应用事先选定的阈值。读取混淆矩阵、accuracy、precision 和 recall。与多数类基准比较。训练成绩远高于验证成绩,提示需要检查过拟合。
- 若使用交叉验证,每一折都只在该折的训练部分学习填补和编码规则。若验证结果已用于改模型或阈值,该验证集就参与了选择。最终独立检验需要从未指导这些选择的数据。
Decision tree · Gini impurity · Regression tree
#从一组问题得到预测
决策树(Decision tree)逐步询问输入条件。最上方是根节点(Root)。每次分裂(Split)把样本分成两组。最终停在叶节点(Leaf)。一个样本只走一条路径。课程图中,条件成立走左侧,条件不成立走右侧。例如 age ≤ 10 时,年龄恰好为 10 也走左侧。下一层可继续询问年龄,也可询问另一个输入。训练算法学习分裂变量与切点。使用者选择可用输入及深度限制。
教学例子:读节点与概率
假设一名乘客先满足 age ≤ 10,再满足 fare > 20,进入某个叶节点。该叶显示 samples = 20,value = [12, 8]。课程类别顺序是 [未生还, 生还]。所以叶内生还概率为 8/20 = 0.4,多数类为未生还。所有进入这个叶的乘客都获得相同概率。默认按最大类别概率分类时,本例预测为 0。类别正好各半时,本练习的 sklearn 按类别顺序选择 0。
图中的 class 是该节点的多数类。gini 表示类别混杂程度。若开启比例显示,value 可能显示类别比例而非人数,因此先查看显示设置。树的绘图深度只控制显示几层。它不改变已经训练好的树。拟合深度才会限制模型可以学习的路径长度。已经拟合的树会确定地处理同一输入。随机性通常影响训练过程,不会让乘客在预测时随机选路。
#用加权 Gini 判断分裂
令 p 为节点中正类比例。二元 Gini impurity = 1 − p² − (1 − p)²。纯节点只有一种类别,Gini = 0。两类各半时,Gini = 0.5。树倾向于选择让子节点更纯的分裂,但必须按子节点人数加权。只看一个很小的纯节点,不能判断整个分裂好坏。贪心选择(Greedy choice)只选择当前较好的分裂,并不保证得到所有可能树中的全局最佳树。
教学例子:一次完整计算
父节点有 10 人,其中正类 5 人,Gini = 0.5。某次分裂得到左侧 4 人,其中正类 4 人;右侧 6 人,其中正类 1 人。左侧 Gini = 0。右侧 Gini = 1 − (1/6)² − (5/6)² = 10/36。加权子节点 Gini = 4/10 × 0 + 6/10 × 10/36 ≈ 0.167。减少量约为 0.333。不能直接把两个子节点 Gini 作不加权平均。Entropy 是另一种分类纯度指标。
回归树(Regression tree)预测连续数值。采用平方误差时,叶输出为该叶训练目标的平均值。例如叶内目标为 10、12、14,输出为 12。分裂要减少子节点的总平方误差 SSE。分类树强调类别纯度,回归树强调数值误差。它们都能通过多层条件表达非线性关系和输入之间的交互。普通回归树的叶输出为常数,因此对训练范围之外的数据通常不善于延伸趋势。
深树能形成更小的群组,也更容易追随训练噪声。一个只含一人的纯叶,不证明新样本预测一定正确。限制 max_depth、提高 min_samples_leaf 或提高 min_samples_split,可限制复杂度。后两者分别约束每个新叶的最少样本和允许分裂前的节点样本。两条规则必须同时满足。用验证结果决定限制程度。过浅的树也可能遗漏真实结构,造成欠拟合。
Random forest · Bootstrap · Feature importance
#为什么要组合多棵树
单棵树可能对训练样本的细小变化敏感。随机森林(Random forest,RF)训练多棵有差异的树,再汇总预测。各树不需要等待前一棵树的预测结果,因此可以并行训练。若各树的错误不完全相同,汇总可降低对某次抽样的敏感程度。各树仍使用同一来源的数据,不能据此宣称它们在统计上完全独立。若全部树都有同一偏差,增加树数不会自动消除该偏差。
教学例子:两种随机性
训练集有乘客 A、B、C、D。某树进行四次有放回抽样,可以得到 B、B、D、A。B 重复,C 没被抽到。这是 bootstrap。抽样次数等于原人数,不表示每个人都出现一次。另一种随机性发生在每次分裂:例如从 10 个模型输入列中随机提供 3 列,让树从这些候选中选择分裂。下一节点可以得到不同的 3 列。
课程前面的随机单树活动采用无放回抽人,并为整棵树一次选好原始输入。它与后面的标准森林不同。森林采用有放回抽样,并在每次分裂抽取候选模型列。类别编码后的列分别计数。例如登船港可形成三个指示列。不要把三个模型列理解为三个原始业务字段。实现有时会检查额外候选列,以找到有效分裂。
教学例子:平均概率
三棵树对同一人的生还概率分别为 0.2、0.7、0.9。森林概率为 (0.2 + 0.7 + 0.9)/3 = 0.6。最大概率类别为生还。它平均每棵树的类别概率,并非必须先把每棵树变成 0 或 1 再多数投票。例如三棵树给出 0.49、0.49、1.00,平均概率为 0.66,而硬投票只有一票为正。这两种汇总可得到不同类别。回归森林通常平均各树的数值预测。
| 设置 | 控制内容 | 判断方向 |
|---|---|---|
| n_estimators | 树数 | 更多树增加计算;收益可能趋缓 |
| max_depth | 路径的最大分裂次数 | 越深越灵活,也可能过拟合 |
| min_samples_split / leaf | 分裂前人数 / 子叶人数 | 更大通常限制小群组 |
| max_features | 每次分裂的候选列数 | 较少可增加差异,也可能削弱树 |
| bootstrap / max_samples | 是否有放回 / 每树抽样量 | 抽样量不等于不同样本数 |
这些方向是调参依据,不是性能保证。较少特征或较少抽样可能增加树之间的差异,也可能让每棵树缺少信息。增加树数通常使平均结果更稳定,但不能保证验证分数每次上升。深度和叶大小仍需验证。若训练准确率接近 100%,而验证分数较低,先检查泛化差距、泄漏和数据差异。不要只继续增加树数。
#特征重要性表示什么
本课森林的 impurity importance 汇总各输入在树中减少不纯度的贡献。通常会归一化,使重要性之和为 1;没有分裂时可全为 0。票价重要性为 0.3,表示在这一指标下的相对贡献。它不表示票价解释了 30% 的生还,也不表示提高票价会提高生还率。指标不提供作用方向或因果关系。可选切点较多的输入可能获得偏高的重要性。相关输入也可能分享贡献。比较图时应核对模型和编码列。
Gradient boosting · XGBoost · GridSearchCV
梯度提升(Gradient boosting)按顺序增加树。每棵新树针对当前组合仍存在的误差,提供进一步修正。树之间存在训练依赖。它不同于 RF 中分别训练树再平均的方式。XGBoost 是梯度提升的一种高效实现。分类时,新树修正的是模型分数,不是简单地对错误样本重新作一次独立投票。最终组合再产生类别概率。
教学例子:理解学习率
用平方误差回归说明纠错。真实目标为 10,当前预测为 6,残差为 4。假设新树建议增加 4,学习率为 0.1,则预测变为 6 + 0.1 × 4 = 6.4。下一轮面对的是更新后的误差。较小学习率让每次改变更小,通常需要更多轮。这是原理例子。二元分类按照其损失进行梯度修正,不能直接套用这个残差算式。
| XGBoost 设置 | 含义 | 主要取舍 |
|---|---|---|
| n_estimators | 本课二元模型的提升轮数 | 更多轮增加计算,也可能过拟合 |
| learning_rate | 新树修正的缩放比例 | 较小通常需要更多轮 |
| max_depth | 每棵树的最大深度 | 较深可表达更复杂的交互 |
| min_child_weight | 子节点所需的最少总权重 | 较大更限制分裂;并非最少人数 |
| subsample | 每轮使用的训练行比例 | 随机抽样可减少过拟合 |
| colsample_bytree | 每树使用的编码列比例 | 较小增加随机性,也可能丢信息 |
二元 logistic 目标中的 child weight 来自损失的曲率,即损失变化率如何变化。它不是直接数人数。可把 min_child_weight 理解为对叶节点证据量的限制,但不要把它当作 RF 的 min_samples_leaf。RF 侧重平均有差异的树。Boosting 侧重逐轮改进当前组合。两者都可能欠拟合或过拟合。不能根据算法较复杂就判定它必胜。
#公平选择:GridSearchCV
网格搜索(Grid search)列出各超参数的候选值,再评价所有组合。五折交叉验证把训练集分成五组。每轮用四组拟合,在剩余一组评分。轮流留出每一组,取五个分数的平均值。所有候选使用相同的折和相同指标,比较才更公平。若六个设置各有两个候选,共有 2⁶ = 64 个组合。五折需要 320 次拟合。选出配置后,再用全部训练数据拟合一次。
教学例子:不要只读排名
假设配置 A 的训练 accuracy 为 0.99,平均 CV 为 0.78;配置 B 分别为 0.88 和 0.82。若目标是 CV accuracy,则 B 排名更高。A 的训练优势不能弥补其泛化差距。还应查看各折成绩及波动。CV 标准差描述折间变化,不是现成的置信区间。差异很小时,不能把单次排名当成确定结论。搜索指标也必须符合业务目的。
每折只从其拟合数据学习缺失值填补和类别编码。Pipeline 把准备与训练连在一起,避免评分折提前提供信息。Bootstrap 则在某次森林拟合内部,为树抽取训练行。它不是交叉验证。搜索以外的验证集可以检查所选模型。但一旦用其结果继续调参,它就参与了选择,不能再作为完全独立的最终证据。
XGBoost 练习的特征重要性采用 gain:使用某输入的分裂带来的训练目标改善量取平均,再作归一化。它与 RF 的不纯度重要性不是同一尺度。较大的 gain 不说明作用为正,也不证明因果。最终解释应同时说明模型、评价数据、指标、错误代价和限制。
设置网格时,可以先用较宽范围和较大间隔搜索,再在有效区域细化。若分数改善很小或不稳定,应考虑停止扩张。搜索更多组合也会增加计算成本和选择偏差。
先理解数据的尺度,再判断降维保留了什么。
无监督学习(unsupervised learning)没有给定的目标标签。任务是发现数据结构。例如,银行有客户的消费额、交易次数和信用额度,但没有正确的客户分组。聚类可以探索相似客户。它不能直接回答谁会流失。主成分分析(Principal Component Analysis,PCA)则压缩变量。两种方法的目的不同。
#先清理,再统一尺度
先检查重复客户、缺失值和异常值。数值缺失可用该变量的中位数填补,但要保留缺失原因。人口属性中的 Unknown 是未知类别,不能当成数值零。四分位距 IQR 是第 75 百分位数 Q3 减去第 25 百分位数 Q1。低于 Q1 − 1.5 × IQR 或高于 Q3 + 1.5 × IQR 的值需要检查。这个规则只发出提示。真实的高消费客户可能正是研究对象。
教学例:标准化 Standardization
z-score =(原值 − 均值)÷ 标准差。标准差描述数值围绕均值的分散程度。若平均消费为 4000,标准差为 2000,则消费 6000 的 z-score 为 1。这表示高于均值一个标准差。标准化能减轻金额、次数和比例的单位差异。它不会删除异常值,也不会消除变量之间的相关性。
#PCA 寻找变化最大的方向
方差(variance)描述数值的分散程度。PCA 将原变量组合成新的轴。第一主成分 PC1 保留最大的方差。PC2 在与 PC1 垂直的方向中保留最多剩余方差。每个客户在新轴上的坐标叫成分得分。若消费额和交易次数高度相关,它们可能主要描述同一种客户活跃程度。PCA 可以用较少的轴表示这种重叠信息。
教学例:读系数与解释方差
设 z_消费和 z_次数是两个标准化特征。某成分为 PC1 = 0.707 × z_消费 + 0.707 × z_次数。两个值都是 1 时,PC1 约为 1.414。两项共同推高得分。若各成分解释率依次为 50%、30%、15%、5%,累计保留 85% 至少要留三个成分,实际保留 95%。不能保留半个成分。
成分系数(component coefficient)的绝对值说明该变量对该成分的权重。正负号说明方向。载荷(loading)也用于解释变量与成分的关系,但软件定义可能不同。结合本章的系数例子,检查哪些变量的权重较大,以及它们的符号是否相同。整条轴反转符号不会改变信息。解释率高表示保留较多方差,不表示分类准确率高,也不保证保留了最有用的业务信息。
易错点
PCA 得分在拟合数据上不相关,但不相关不等于统计独立。两个不相关的量仍可能存在非线性关系。标准 PCA 先中心化,不自动把每个变量缩放为相同标准差。消费额和交易次数单位不同,应先考虑标准化。选 85% 或 90% 是分析选择,不是通用正确答案。
理解分配、更新与 K 的选择,并识别评分的限制。
k-means 将客户分成 K 个簇(cluster)。K 由分析者指定。模型先设 K 个中心,再把每个客户分给最近的中心。它随后把每个中心移到当前成员的平均位置。这个平均位置叫质心(centroid)。重复分配和更新,直到变化很小或达到迭代上限。质心是一个平均坐标,不一定对应真实客户。
#距离说明什么叫相似
欧氏距离(Euclidean distance)是坐标空间中的直线距离。在二维平面中,两个坐标分别相差 3 和 4,距离就是 5。k-means 使用所选特征或保留的 PCA 得分计算距离。因此,特征、尺度和保留的成分都在定义相似。若金额直接用千位数,而比例只在 0 到 1 之间,金额通常会主导距离。
教学例:完整的一轮分配与更新
一维客户位置为 1、2、8、9。设 K = 2,初始中心为 1 和 8。第一轮把 1、2 分到第一簇,把 8、9 分到第二簇。更新后,质心分别为 1.5 和 8.5。再分配时成员不变,可以停止。这里的两簇很清楚,但真实客户可能连续分布,没有明显边界。
簇内平方和(within-cluster sum of squares,WCSS)也叫 inertia。它把每个客户到所属质心的距离平方后相加。上例中,每个客户离质心 0.5,故 inertia = 4 × 0.5² = 1。这个值越低,表示在当前空间中越紧凑。增加 K 通常会降低它。若每个客户自成一簇,它可以降为零。因此,不能只选 inertia 最小的 K。
| 方法 | 怎样读 | 限制 |
|---|---|---|
| 肘部法 Elbow | 找增加 K 后改善开始变小的位置 | 弯折可能不明显;不能保证唯一答案 |
| 轮廓系数 Silhouette | 接近 1:分离清楚;接近 0:重叠;负值:可能错分 | 只衡量所选距离下的分组;不直接衡量业务价值 |
教学例:轮廓系数
a 是客户到同簇其他客户的平均距离。先分别计算该客户到每个其他簇全部成员的平均距离。取这些平均距离中最小的一个,记为 b。轮廓系数为(b − a)÷ max(a,b)。若 a = 2,b = 5,得分为 0.6。若 a = 5,b = 2,得分为 −0.6,说明它平均更接近另一簇。总体得分是客户得分的平均。K = 1 时没有其他簇,不能用这个指标。全部客户各自成簇时也不能使用。单成员簇通常按软件约定记为 0。
实际选择要合看评分、簇大小、稳定性和可解释性。例如,K = 2 的平均轮廓系数为 0.30,K = 3 为 0.27。若第三簇揭示了可服务的小群体,仍可考虑 K = 3。但要说明评分下降的代价。不能说它在数学上更优。只在相同特征空间和一致的样本规则下比较这些评分。
模型限制
k-means 偏好围绕中心的紧凑分组。它可能难以识别弯曲、大小差异很大或密度不同的簇。异常值会拉动均值。不同初始中心也可能得到不同结果。多次初始化有帮助。固定随机种子只保证可复现,不证明结果稳定或正确。簇 1 和簇 2 的编号没有大小或风险含义。
用原始单位解释客户,再检查分组是否稳定且有用。
银行客户案例的目标是探索使用行为。先选关系时长、持有产品数、闲置月份、消费额、交易次数和额度等输入。客户编号只用于识别记录,通常不能表示行为。人口属性和流失状态可留作分组后的描述。是否把某列用作输入,要由问题决定。已有流失标签也不意味着本次分析就是流失预测。
判断步骤:一条完整流程
明确客户和观察期间 → 选择行为特征 → 检查缺失和极端值 → 标准化 → 用 PCA 检查并压缩方差 → 比较多个 K → 检查簇大小和原始特征 → 提出业务解释 → 验证行动效果。无监督分析没有正确标签,也仍需要验证。验证重点包括分组的稳定性、解释的一致性和实际用途。
强相关特征会使同一种行为在距离中得到重复权重。标准化只解决尺度。PCA 将坐标旋转到不相关的方向,保留全部成分,而且不再把各成分分别缩放到相同方差时,仍保留 PCA 输入空间中的距离。只有截取部分成分才真正降维,并改变所保留的距离信息。低方差方向也可能区分重要客户。因此,降维后必须回看客户画像。
| 教学例:画像 | A 簇:200 人 | B 簇:800 人 |
|---|---|---|
| 年消费均值 | 10000 | 3200 |
| 年交易次数均值 | 95 | 58 |
| 持有产品数均值 | 2 | 4 |
A 簇消费更多,交易更频繁,但持有的产品更少。可以提出一个假设:部分 A 簇客户可能需要其他银行产品。先访谈,再做小规模对照试验。不能直接断言 A 簇利润更高,因为还缺手续费、服务成本和坏账数据。B 簇交易较少也不等于客户将流失。还要核对观察期间,以及行为是否发生在流失之前。
#在 PCA 空间分组,在原始变量上解释
将簇标签按客户记录对应回原表。先比较消费金额、次数等原单位均值和中位数。二者差异大时,要检查是否少数高值拉高均值。再用全体客户的均值和标准差计算各簇的平均 z-score。蛇形图(snake plot)连接这些分数。某簇消费得分为 +1.5,表示其均值高于全体均值 1.5 个全体标准差。它不表示高出 150%。
三种容易误读的图和表
二维 PCA 图只显示两个轴。若聚类用了七个成分,图上重叠不能证明七维空间也重叠。人口属性应比较各簇内部百分比。例如,两簇各有 100 名某类客户,在 200 人簇中占 50%,在 800 人簇中只占 12.5%。信用额度表示可借用额度,不能直接当成收入或利润。
检查稳定性时,每次只改变一个选择。例如,更换初始种子、把保留方差从 85% 改为 90%,或对极端值做合理截尾。比较成员重叠、簇大小和原始画像。不要只比较簇编号。若小改动就颠倒业务解释,应降低结论强度。描述现有客户时可以用全体数据拟合。新客户必须沿用已拟合的填补值、缩放、PCA 和质心,才能进入同一分组体系。
理解单位、重复模式、滞后和差分。
时间序列(time series)是按时间排列的观测值。电力案例每小时记录需求。这里的顺序本身有信息。今天下午与昨天下午可能相似,也可能与一小时前相似。先检查时间戳(timestamp)、时区、重复记录、缺失时点和采样间隔。将记录按时间排序后,才解释滞后或建立预测模型。
教学例:时间戳与单位
10:00 有两条记录时,要先查明原因。课件将重复时间戳取均值,这是一项数据处理选择。若缺少 11:00,直接取上一行不能保证它代表上一小时。先补齐小时索引,再决定怎样填补。课件用过去最近值向前填补。此法只用过去信息,但会制造平坦段,也可能掩盖真实峰值。
重采样(resampling)把小时数据汇总为日或月数据。MW 是功率,MWh 是能量。小时功率求均值后仍是 MW。若两个小时的平均功率为 100 MW 和 200 MW,两小时平均功率是 150 MW,能量则为 100 × 1 + 200 × 1 = 300 MWh。日求和只有在每条值代表一小时平均功率且时段完整时,才数值对应日能量。缺失时段会影响总量。
| 模式 | 含义 | 电力教学例 |
|---|---|---|
| 趋势 Trend | 较长时期的水平变化 | 连续几年需求逐步上升 |
| 季节性 Seasonality | 在固定时间间隔重复 | 每日高低峰、每周工作日差异 |
| 不规则变化 | 未被稳定模式解释的变化 | 临时停电或异常天气造成偏离 |
滞后(lag)表示回看多少个时间步。用 y_t 表示当前小时需求。y_(t−1) 是上一小时,y_(t−24) 是昨天同一小时,y_(t−168) 是上周同一小时。这些解释要求每一步确实是一小时。自相关(autocorrelation)衡量序列与自身过去值的相关性。自相关函数 ACF 将不同滞后的相关系数画出来。lag 24 附近有峰值支持每日重复模式,但不证明因果。
#平稳性 Stationarity:统计特征是否稳定
这里关注均值、方差和同一时间间隔的相关结构是否随时间大致稳定。这叫弱平稳。平稳序列仍可有相邻时点的相关性,并不等于纯随机噪声。只有均值稳定还不够。若波动幅度越来越大,方差也在变。明显趋势或随时段改变的季节均值会妨碍直接使用平稳模型。
教学例:普通差分与季节差分
普通一阶差分为 w_t = y_t − y_(t−1)。序列 100、110、120 的差分为 10、10,上升水平被转为稳定变化。小时数据的每日季节差分为 y_t − y_(t−24)。若今天 10:00 是 130,昨天 10:00 是 120,差分为 10。它比较相同日内位置。每周季节差分则用 lag 168。
差分的目标是减轻不稳定结构。它不保证序列一定平稳。不要因模型名称包含 I 就自动差分一次。过度差分可能放大噪声,并降低预测质量。应在历史数据中检查差分后的图和预测表现。也不要把一阶差分的次数 1 与季节间隔 24 混为一谈。
会解释 p、d、q,并区分随机模型与可计算预测。
ARIMA 是自回归差分移动平均模型(AutoRegressive Integrated Moving Average)。它把三种信息结合起来:序列的过去值、为稳定序列所做的差分,以及过去的预测误差。写作 ARIMA(p,d,q)。这些参数说明结构,不表示准确率。模型是否有用,需要用真实的未来预测任务验证。
| 部分 | 参数含义 | 直观解释 |
|---|---|---|
| AR 自回归 | p:连续使用多少个过去值 | 最近的水平或变化会延续 |
| I 差分 | d:做几次普通差分 | 先预测较稳定的变化,再还原水平 |
| MA 移动平均项 | q:使用多少个过去创新项 | 最近未预期的偏差会影响现在 |
教学例:AR 不等于 ACF
设 d = 0,模型的一步预测为 ŷ_t = 10 + 0.8 × y_(t−1)。若上一小时为 100,预测就是 90。AR 是估计系数后建立的预测模型。ACF 则是描述各滞后相关程度的工具。看到 lag 24 的相关性高,不代表 ARIMA 的 p 自动等于 24,也不保证某种模型能准确预测。
创新项(innovation)是当前实际值与利用过去信息所得一步预测的差。拟合时用估计的误差表示这些未知创新。设模型预测上一小时为 30000 MW,实际为 32000 MW,则误差是 +2000 MW。如果最近的正误差具有可利用的持续影响,MA 项可以上调下一次预测。未来的创新尚未发生,不能作为已知输入。
教学例:完整 MA 模型与预测式
设 μ 是稳定均值,θ 是误差权重,ε_t 是当前创新。MA(1) 的完整模型为 y_t = μ + θ × ε_(t−1) + ε_t。若 μ = 30000,θ = 0.5,上一误差为 2000,且未来创新的条件均值为零,则一步预测为 31000 MW。完整模型保留当前创新;预测式用它的条件均值。两者不能直接混写。
#d 大于零时,模型处理的是差分序列
ARIMA(2,1,1) 先做一次差分。然后对差分后的变化量,使用过去两个变化量和过去一个创新项。它不是把差分开关打开后,仍直接对两个原始水平应用同一个 AR 解释。假设最后观测水平为 100,未来两个变化量的预测为 +3 和 +2,还原后的水平预测是 103 和 105。第二个预测要从 103 累加,不能从 100 重新加 2。
三个常见混淆
MA 项不是最近几个观测值的普通移动平均。d = 1 是做一次普通差分,不是自动减去昨天同一小时。非季节 ARIMA 不等于季节 ARIMA(SARIMA)。SARIMA 另有季节项和季节周期参数。本课的非季节模型可能难以表达强烈的每日模式。理解这个限制,比记住某个参数组合更重要。
模型在一个预测起点输出未来 24 小时结果时,后续步骤不能偷看尚未发生的实际需求。若预测需要尚未知晓的过去位置,模型会使用自己的预测及相应的误差假设。预测距离变远后,不确定性通常增大。业务若每小时获得新数据并更新预测,那是另一个任务。评估时必须复现实际使用方式。
建立简单基线,按时间验证,并保留最终测试期。
先定义预测任务。例如,每天 00:00 一次性预测当天未来 24 小时需求。此时最多能使用前一天 23:00 已取得的数据。预测窗口内的实际需求只能在事后评分时读取。数据清理、参数选择和任何额外输入也必须遵守这个时间边界。随机打乱后划分训练集,可能让未来信息进入过去的预测。
教学例:季节朴素基线 Seasonal naïve
以昨天同一小时作为今天的预测。若昨天 14:00 为 32000 MW,今天 14:00 就预测 32000 MW。生成今日 24 小时预测只需复制昨日 24 小时记录。它能利用每日重复模式,且不需拟合复杂模型。若今天是节假日,昨日的工作日模式可能失效。基线也有条件,但复杂模型应证明自己的额外价值。
#滚动起点验证 Rolling-origin evaluation
选多个历史预测起点。每次仅用该起点前的数据拟合,再预测随后的 24 小时。记录误差后向前移动。可用固定长度窗口,例如每次使用最近 180 天;也可用逐渐扩大的窗口。两者要与计划的使用方式一致。所有候选模型和基线应使用相同起点、预测长度和可用信息。比较不同日期的分数,不足以说明模型优劣。
| 指标 | 如何计算 | 怎样解释 |
|---|---|---|
| MAE 平均绝对误差 | 对每个 | 实际 − 预测 |
| RMSE 均方根误差 | 误差平方取平均,再开平方 | 对大误差更敏感;单位仍为 MW |
| MAPE 平均绝对百分比误差 | 对 | 误差 |
教学例:同一误差,不同摘要
三个小时的实际值均为 100 MW,预测为 90、100、70 MW。误差是 10、0、30 MW。MAE = 40 ÷ 3 ≈ 13.3 MW。RMSE = √[(100 + 0 + 900) ÷ 3] ≈ 18.3 MW。MAPE ≈ 13.3%。RMSE 更突出最后一个大误差。指标需结合业务成本选择。若漏报峰值的损失大,还应检查高峰时段。
假设四个验证日的平均 MAE 为:季节朴素 900 MW,ARIMA-A 为 1100 MW,ARIMA-B 为 950 MW。这些是教学数值。B 是两个 ARIMA 中较好的候选,但仍未超过基线。不能因为它复杂就选它。也要看各日期表现和最大失误,避免平均值掩盖某个季节的失败。一天胜出不足以建立可靠结论。
auto_arima 在限定范围内自动搜索参数。其内部准则通常平衡样本拟合与复杂度,例如 AIC。这个过程不等于已经证明未来 24 小时预测最好。必须把实际选出的参数用于同样的时间验证,并与基线比较。若先用较晚日期数据选好参数,再回测更早起点,参数选择也可能泄漏未来信息。自动搜索应在每个允许的训练边界内完成,或使用更早的独立选择期。
判断结论是否可信
用历史验证选方法后,保留一个未参与选择的末段做最终测试。验证分数是选择依据,不能替代最终测试。报告预测长度、训练窗口、日期、指标和基线。若复杂模型收益小且不稳定,简单基线可能更适合当前业务。
#用四步形成答案
- 先给结论。 直接回答是否合适,或应选什么方法。
- 指出证据。 引用题中的信息。说明哪些数据、错误或业务约束支持结论。
- 解释机制。 说明原因怎样影响结果。不要只写“会过拟合”或“会有偏差”。
- 提出检查或修正。 给出可实行的下一步,并说明结论的限制。
不要只写“取决于情况”。要说明它取决于什么,以及怎样据此作选择。
#完整示范:发现数据泄漏
题目。 分析者先用全部乘客数据的年龄中位数填补缺失,再划分训练和验证集。验证准确率很高。是否足以说明模型可以预测新乘客?
答案。 还不够。分析者在填补时使用了验证集的信息。验证集本应模拟尚未见到的新乘客。将它纳入中位数计算,会使评价流程与真实使用不同。应先划分数据,再只用训练集计算填补值。验证集沿用该值。若用交叉验证,每一折都重新拟合填补器。然后用合适指标重新评价。准确率本身也不能说明两类错误是否满足业务要求。
这里没有断言泄漏一定造成某个固定幅度的分数上升。问题在于独立评价的边界已经被破坏。
#常用英文答题句式
| 中文意思 | 简短英文表达 |
|---|---|
| 该指标没有反映两种错误的不同成本。 | This metric does not reflect the different costs of the two errors. |
| 验证集应代表未来会遇到的观测。 | The validation set should represent the observations that the model will encounter. |
| 只用训练数据估计预处理设置。 | Estimate preprocessing settings from the training data only. |
| 这个结果支持预测关系,不能证明因果。 | This result supports a predictive relationship. It does not prove causation. |
| 在相同日期和相同预测长度下比较模型。 | Compare the models on the same dates and for the same forecast horizon. |
| 先与简单基线比较,再判断复杂模型的价值。 | Compare the model with a simple baseline before you assess its added value. |
遮住右列。先口头作答,再检查。如果无法解释理由,回到对应章节的小例子。
| 检查问题 | 应掌握的答案 |
|---|---|
| SSE、MSE、RMSE 为什么会选同一个模型? | 同一批数据上,除以正的固定 n 和取平方根都保持排序。 |
| 验证集为何不能删除真实的困难样本? | 未来也可能遇到这些样本;删掉会改变被评估的人群或情形。 |
| 使用 CV 是否可以取消最终测试? | 不可以据此断言。CV 仍参与选择,反复搜索也会产生选择偏差。 |
| precision 与 recall 分别看谁? | precision 看预测为正者;recall 看实际为正者。 |
| 提高阈值能保证什么? | 固定评分下,预测正类集合缩小或不变。TP、FP 不增;recall 不增。precision 未必上升。 |
| RF 与 boosting 的树怎样组合? | RF 独立拟合多棵有随机性的树,再聚合。Boosting 依次加入树,改进当前模型的损失。 |
| PCA 保留 90% 方差意味着什么? | 保留输入变化的 90%,不是预测准确率 90%,也不保证业务信息保留 90%。 |
| inertia 更小是否代表 K 更好? | 不一定。增加 K 本身就能降低最优 inertia;还要看分离、稳定性、大小与用途。 |
| 聚类标签可以直接称为风险等级吗? | 不可以。编号没有顺序含义,风险解释需要额外证据。 |
| lag 24 在小时数据中表示什么? | 相隔 24 个小时步。它不表示每天的第 24 点钟。 |
| ARIMA 的 q 是最近 q 个观测的平均吗? | 不是。它描述过去 q 个创新项的作用。 |
| 复杂时序模型输给季节朴素基线时怎么办? | 先保留基线作为可用候选,再检查验证设计、季节结构与复杂模型的收益。 |
以下清单用于追溯范围。阅读和解题不需要再打开这些文件。 当前目录没有第 1–2 周的独立 notebook;本文已补充理解现有材料需要的数据与统计基础。时间序列文件在 wk8 目录,但 notebook 内标题使用 Week 09。本文按主题组织,避免周次差异造成遗漏。
| 原文件 | 本文覆盖 |
|---|---|
VK.wk9.2026 (1).pdf,第 4、6–9 页 | 课程判断框架、四类任务、考试规则 |
IS5126_week03_linear_regression.ipynb | 第 1–3 章:常数基线、OLS、损失、编码、特征工程 |
IS5126_week04_Hyperparameters.ipynb | 第 2、4、6 章:指标、泛化、超参数、异常值、非负预测 |
IS5126_week05_Classification.ipynb | 第 5、7–9 章:CV、缺失、分类、阈值、错误成本 |
IS5126_week05_logistic_regression_tutorial.ipynb | 第 7–9 章:Titanic 流程、混淆矩阵、阈值变化 |
IS5126_week06_Decision_Trees.ipynb | 第 10–12 章:树、RF、boosting、超参数与搜索 |
IS5126_week06_decision_trees_handson.ipynb | 第 10–12 章:Gini、叶概率、bootstrap、CV 与重要性 |
IS5126_week06_xgboost_exercise.ipynb | 第 12 章:XGBoost 六项设置、验证、gain 解释 |
IS5126_week07_clustering.ipynb | 第 13–15 章:标准化、PCA、聚类、客户画像 |
IS5126_wk8_timeseries.ipynb | 第 16–18 章:时间模式、ACF、ARIMA、基线、滚动验证 |
原 notebook 的操作细节,例如安装依赖、上传文件、导出作业 CSV,没有列为复习重点。这与本次考试不考编程能力的说明一致。本文保留这些流程背后的分析与验证原则。
本文已校正几处容易误导学习的简化:IQR 上下界采用标准四分位数边界;PCA 的不相关不等同于独立;precision 不保证随阈值提高而提高;MA 随机模型保留当前创新项;RF 的课程实现使用树概率均值。原 notebooks 未被修改。