04-Pandas数据清洗与特征工程实战:基于AI4I2020设备故障数据集
第 4 篇:Pandas 数据清洗与特征工程实战——基于 AI4I 2020 设备故障数据集
本文为「从零到落地:机器学习分析数据实战系列」第 4 篇,完整系列持续更新中。
前言
本篇用一份真实的公开工业数据集,完整演示数据工程的全流程。所有代码可直接复制运行。
上一篇我们搞清了算法选型,知道了不同场景该用什么方案。但在跑模型之前,有一个更关键的环节——数据工程。
业界有句话:「数据和特征决定了模型的上限,算法只是逼近这个上限」。很多项目模型效果不好,不是算法选错了,而是数据没处理好——缺失值没补、异常值没清、特征没构造好,再好的模型也白搭。
本篇使用 AI4I 2020 Predictive Maintenance Dataset(UCI 机器学习仓库公开数据集),完整演示:数据加载 → 探索性分析 → 异常值处理 → 特征工程 → 特征选择 → 效果验证。
本篇学完你将掌握:
- 用 Pandas 完成工业数据的加载、探索和清洗全流程
- EDA 的核心方法和可视化技巧
- 异常值检测的 3 种实用方法
- 5 种工业场景常用的特征工程手法
- 特征选择的 3 种策略和适用场景
- 特征工程前后模型效果对比(直观看到提升)
一、环境准备与数据集下载
1.1 安装依赖
1 | # 创建并激活 Python 3.11 虚拟环境(整个系列通用) |
💡 提示:本系列统一使用环境
ml-data(Python 3.11),每次开始实验前先conda activate ml-data即可。
1.2 数据集下载
AI4I 2020 Predictive Maintenance Dataset 来自 UCI 机器学习仓库,是一份模拟 CNC 铣床预测性维护的数据集。
什么是 CNC 铣床?
CNC(Computer Numerical Control,计算机数控)铣床是制造业中最常见的加工设备之一。你可以把它理解为一台「由程序控制的自动铣刀」——操作人员把加工图纸写成 G 代码(一种数控编程语言),机器就按照代码自动完成切削、钻孔、打磨等工作,无需人工手动操作。
它在工厂里的角色类似于「工业版的3D打印机反过来」:3D打印机是一层层堆材料,CNC 铣床是一层层削材料,把一块金属毛坯削成精确的零件形状。汽车发动机缸体、手机金属外壳、飞机结构件……背后都离不开 CNC 加工。
为什么需要「预测性维护」?
CNC 铣床在长时间运行后,刀具会磨损、轴承会老化、电机会过热——这些都会导致加工精度下降甚至突然停机。传统做法是「定期换零件」或「坏了再修」,前者浪费成本,后者造成停产损失。
预测性维护的思路是:通过传感器实时采集温度、振动、转速、扭矩等数据,用机器学习模型提前判断「设备快坏了」,在故障发生前精准安排维护——既不浪费零件,也不耽误生产。
本数据集正是模拟了这一场景:10,000 条运行记录,每条包含温度、转速、扭矩、刀具磨损等传感器读数,以及是否发生故障的标签,适合用来练习分类和特征工程。
| 维度 | 详情 |
|---|---|
| 来源 | UCI Machine Learning Repository(CC BY 4.0) |
| 规模 | 10,000 条 × 14 列 |
| 格式 | CSV,509 KB |
| 下载 | Kaggle 镜像 或 UCI 官方 |
下载后把 ai4i2020.csv 放到项目目录下的 data/ 文件夹中。
1.3 加载数据
1 | import pandas as pd |
1 | 数据规模: 10000 行 × 14 列 |
1 | # 查看数据类型和缺失值 |
1 | 数据类型 非空数量 缺失数量 缺失率 |
14 列数据分为 3 类,先搞清楚每列是「什么角色」,后面才知道该怎么用:
| 类别 | 列名 | 含义 | 在建模中的角色 |
|---|---|---|---|
| ID 列 | UDI |
唯一编号,从 1 到 10000 | 不参与建模,构造特征矩阵时排除 |
Product ID |
产品编号(如 L51112) | 不参与建模,只是追踪用 | |
| 类别特征 | Type |
产品规格:L(低)/ M(中)/ H(高) | 需要编码为数值后才能用 |
| 传感器特征 | Air temperature [K] |
车间环境温度(开尔文) | 数值特征,直接使用 |
Process temperature [K] |
加工温度(开尔文) | 数值特征,直接使用 | |
Rotational speed [rpm] |
主轴转速(转/分钟) | 数值特征,直接使用 | |
Torque [Nm] |
电机扭矩(牛顿·米) | 数值特征,直接使用 | |
Tool wear [min] |
刀具已工作时间(分钟) | 数值特征,直接使用 | |
| 标签(目标) | Machine failure |
是否故障:0 = 正常,1 = 故障 | 模型的预测目标 |
TWF / HDF / PWF / OSF / RNF |
5 种故障子类型,1 = 是,0 = 否 | 本篇不用,后续多分类任务可用 |
💡 提示:这份数据集没有缺失值,这是数据质量好的情况。实际工业数据缺失率通常在 5%-30%,缺失值处理是数据清洗的重头戏,后面会单独讲方法。
本篇路线图:接下来我们按照数据分析的标准流程走:
- EDA(探索性分析)——先搞清楚数据长什么样,哪些特征和故障有关,哪些地方需要特别留意
- 数据清洗——基于 EDA 的发现,处理异常值和缺失值
- 特征工程——基于 EDA 的线索,构造新特征让模型更容易学习
- 特征选择——从所有特征中筛选出真正有用的,去掉噪声
- 效果验证——用对比实验证明特征工程真的有效
每一步都是基于前一步的发现来做的,不是孤立的步骤。
二、探索性数据分析(EDA)
EDA 的目的不是画图好看,而是在建模之前搞清楚数据长什么样。我们按从粗到细的顺序看四个层面:
- 基础统计(2.1)——每个特征的大致范围、波动幅度,有没有明显不合理的值
- 标签分布(2.2)——目标变量是否均衡,直接影响模型训练策略
- 特征分布(2.3)——正常样本和故障样本在特征上有什么差异,找潜在的区分力
- 相关性分析(2.4)——特征之间是否冗余,哪些特征和故障最相关
每个层面的发现,都会直接影响后面的特征工程和建模决策。
2.1 基础统计
在做任何建模之前,第一步永远是「先看数据长什么样」。df.describe() 会一次性输出所有数值特征的 8 个统计量,是每个数据分析项目的起手式:
| 统计量 | 含义 | 看什么 |
|---|---|---|
count |
非空记录数 | 是否有缺失值 |
mean |
均值 | 数据的中心位置,反映设备的「常态」 |
std |
标准差 | 数据波动幅度,std 越大说明工况变化越剧烈 |
min / max |
最小/最大值 | 是否超出物理合理范围(如温度出现负数就是传感器故障) |
25% / 50% / 75% |
四分位数 | 50% 就是中位数;25%–75% 区间包含了中间一半的数据,反映「主体工况」 |
1 | # 数值特征的统计描述 |
结合 CNC 铣床的实际工况,重点关注以下特征:
| 特征 | 均值 | 标准差 | 最小值 | 最大值 |
|---|---|---|---|---|
| Air temperature [K] | 300.0 | 2.0 | 295.3 | 304.5 |
| Process temperature [K] | 310.3 | 1.5 | 305.7 | 314.8 |
| Rotational speed [rpm] | 1537 | 161 | 1168 | 2886 |
| Torque [Nm] | 39.9 | 9.9 | 3.8 | 76.6 |
| Tool wear [min] | 107.6 | 63.6 | 0 | 253 |
每个特征为什么要关注?
- Air temperature(环境温度):车间环境温度是所有传感器的「背景值」。它本身很少直接导致故障,但如果和其他特征组合——比如加工温度不变而气温飙升,说明冷却系统在失效。单独看意义有限,但它是构造「温差」特征的原材料。
- Process temperature(加工温度):切削时产生的实际温度。均值 310K(约 37℃)比气温高 10K 是正常的切削热量,但一旦温度过高,刀具材料会软化、工件会变形,直接触发散热故障(HDF)。本数据集中最大值 314.8K(约 42℃)仍在合理范围内,但分布尾部值得留意。
- Rotational speed(主轴转速):转速直接反映加工负载。注意最大值 2886 rpm 远超均值(1537 rpm)的 1.8 倍,属于统计上的异常值——但「异常」不等于「错误」,超高转速往往就是过载工况的信号,后面会验证这一点。
- Torque(扭矩):电机输出的旋转力矩,是切削阻力的直接反映。标准差 9.9 Nm(占均值 25%)说明工况波动较大。刀具变钝、材料变硬、进给过快都会让扭矩升高,是与故障相关性最高的单一特征。
- Tool wear(刀具磨损时间):0 代表刚换新刀,253 分钟代表接近报废。它本质上是一个「时间戳」特征,记录刀具已经工作多久。磨损越久,切削性能越差,所有其他传感器读数都会随之变化——它是串联其他特征的关键线索。
2.2 标签分布:样本不均衡问题
在训练分类模型之前,最重要的一件事是看标签(目标变量)的分布。如果正负样本差距悬殊,模型很容易「偷懒」——只要全部预测为多数类,准确率就能很高,但完全检测不出故障。
本数据集有两层标签:
Machine failure:总标签,0 = 正常,1 = 故障- 5 种故障类型(细分标签):
| 缩写 | 全称 | 工业含义 |
|---|---|---|
| TWF | Tool Wear Failure | 刀具磨损故障:刀具使用时间过长,切削精度下降 |
| HDF | Heat Dissipation Failure | 散热故障:设备温度过高,冷却系统跟不上 |
| PWF | Power Failure | 功率故障:电机供电异常,功率波动超出阈值 |
| OSF | Overstrain Failure | 过载故障:加工负载过大,超出设备承载能力 |
| RNF | Random Failure | 随机故障:无法归因于以上类型的偶发故障 |
1 | import matplotlib.pyplot as plt |
1 | 正常样本: 9661 (96.6%) |
⚠️ 注意:故障样本只占 3.4%,这是典型的样本不均衡问题。
为什么不均衡是问题? 假设一个模型什么都不学,直接对所有样本预测「正常」,准确率就有 96.6%——看起来很高,但一条故障也检测不出来。这种模型在工业场景毫无价值,甚至会造成事故。
后续的故障预测篇会用 SMOTE、类别权重等技术处理不均衡问题,本篇先标记这个问题。
2.3 特征分布
知道了标签分布,接下来要看每个特征在正常样本和故障样本下有什么区别。
这里用 KDE(核密度估计)图来展示分布——你可以把它理解为「平滑版的直方图」。横轴是特征值,纵轴是密度(出现概率的相对高低),曲线围起来的面积 = 1。
怎么看这张图? 如果绿色(正常)和红色(故障)的曲线高度重叠,说明这个特征区分故障的能力较弱;如果两条曲线明显错开,说明该特征对故障有区分力,值得重点关注。
1 | # 数值特征的分布可视化 |
关键发现(这些发现会直接指导后面的特征工程):
- Torque(扭矩) 和 Rotational speed(转速) 的故障样本分布和正常样本有明显差异——高扭矩 + 低转速区域故障概率更高。这两者在物理上是关联的:电机负载越大,需要的扭矩越高,转速会被动下降,这是典型的「过载工况」信号。
- Tool wear(刀具磨损) 在磨损后期(> 200 min)故障概率上升,符合直觉——刀具用久了会变钝,切削力增大,更容易引发各类故障。
- Air temperature 和 Process temperature 各自的分布差异不明显,但两者的差值可能更有意义:正常情况下气温与加工温度的差值相对稳定,差值突然变小说明散热出了问题——这就是后面特征工程中要构造「温差」特征的原因。
2.4 相关性分析
特征分布看的是「单个特征与故障的关系」,相关性分析则进一步回答两个问题:
- 各特征之间是否互相冗余?(高度相关的特征可以只保留一个)
- 哪些特征和故障最相关?(优先选用相关性高的特征)
这里用 Pearson 相关系数衡量线性相关程度,取值范围 ([-1, 1]):
| 相关系数 | 含义 |
|---|---|
| (+1) | 完全正相关:A 增大,B 必然增大 |
| (0) | 无线性关系 |
| (-1) | 完全负相关:A 增大,B 必然减小 |
| (\pm 0.1) 以下 | 几乎无相关性 |
| (\pm 0.3) 以上 | 中等以上相关,值得关注 |
注意:Pearson 只衡量线性相关。如果两个特征是非线性关系(如 U 形),Pearson 可能接近 0,但关系其实很强。后续会用模型捕捉非线性关系。
1 | # 计算数值特征之间的相关系数 |
1 | 与 Machine failure 相关性最高的特征: |
💡 解读:Torque(扭矩)与故障的相关性最高,但也只有 0.23——按上表的标准,仅属于「弱相关」。这并不意味着模型效果差,而是说明:
- 单靠一个特征确实不够——故障是多种因素叠加的结果(高扭矩 + 高磨损 + 温度异常同时出现才触发),单个特征的线性相关性必然有限。
- 这正是特征工程和机器学习的价值所在——通过构造组合特征(如扭矩 × 磨损时间、温差等),把非线性关系「翻译」成模型更容易学习的形式,再用树模型(XGBoost/LightGBM)捕捉特征之间的交叉效应,最终效果会远好于单看相关性。
📌 EDA 小结与下一步:到目前为止,我们已经发现了三个关键线索:
- 故障样本只占 3.4%,严重不均衡
- 高转速/高扭矩的「异常值」可能就是故障信号
- 单个特征相关性都偏低,需要构造组合特征
接下来进入数据清洗:在构造特征之前,先确认这些「异常值」到底该保留还是该处理——这个判断会直接影响后续特征工程的效果。
三、数据清洗
EDA 告诉我们这份数据集没有缺失值,但发现了一些统计上的「异常值」(如转速最大值 2886 rpm 远超均值)。在进入特征工程之前,必须先回答一个关键问题:这些异常值该保留还是删除? 判断错误会直接毁掉后面的模型效果。
3.1 异常值检测
首先用 IQR(Interquartile Range,四分位距) 方法找出异常值。它的原理很简单:
- 取数据的第 25 百分位(Q1)和第 75 百分位(Q3),两者之差就是 IQR,代表「中间 50% 数据的范围」
- 超出
Q1 - 1.5×IQR到Q3 + 1.5×IQR范围的点,被标记为异常值 - 这个方法不依赖正态分布假设,对工业数据很稳健
1 | def detect_outliers_iqr(df, columns): |
1 | 下界 上界 异常值数量 异常率 |
发现:
- Rotational speed 有 196 条异常值(2.0%),主要是超高转速
- Torque 有 185 条异常值(1.9%),主要是超高扭矩
- 这两个特征的异常值数量接近,可能存在高转速 + 高扭矩同时出现的情况
3.2 异常值处理策略
工业数据中,异常值不能随便删——它可能就是故障信号。
1 | # 检查异常值中的故障比例 |
1 | 高转速样本数: 196 |
⚠️ 注意:高转速样本的故障比例是全量的 6 倍!这些「异常值」恰恰是最有价值的故障信号。不能删除,必须保留。
工业数据异常值处理原则:
| 异常值类型 | 判断方法 | 处理方式 |
|---|---|---|
| 传感器故障导致的跳变(如温度 -999) | 数值明显不合理 | 用中位数替换或插值 |
| 设备异常工况(如高扭矩 + 高转速) | 数值合理但极端 | 保留,这往往就是故障信号 |
| 数据传输错误(如重复记录) | 时间戳和值完全相同 | 去重 |
1 | # 本数据集的异常值属于「异常工况」,保留不处理 |
3.3 缺失值处理(通用方法模板)
本数据集没有缺失值,所以上面的代码用不到。但缺失值处理是工业数据的必备技能——实际项目中传感器故障、网络中断都会导致数据缺失。这里给出通用代码模板,遇到缺失值时可以直接套用。
1 | def handle_missing_values(df, method='interpolate'): |
💡 建议:时序数据优先用线性插值(
interpolate),能保持趋势连续性。不要用均值填充时序数据,会破坏时间上的变化规律。
四、特征工程
数据清洗完成后,进入本篇的核心——特征工程。
为什么需要特征工程? EDA 告诉我们:单个特征与故障的相关性最高只有 0.23,单靠原始传感器数据很难让模型学到足够强的信号。特征工程的思路是:基于对业务的理解,把原始数据加工成模型更容易学习的形式。就像人学数学,不是把所有数字都记住,而是学会加减乘除这些运算规则。
基于 EDA 的 3 个发现,我们对应构造 5 类新特征:
| EDA 发现 | 构造的特征 | 思路 |
|---|---|---|
| 气温和工艺温度单独看相关性低 | 温度差 | 两者的差值 = 设备自身产热量,可能更有区分力 |
| 扭矩和转速与故障相关性最高 | 功率近似 + 转速/扭矩比 | 两者在物理上是关联的,组合起来捕捉「过载工况」 |
| 磨损后期故障率上升 | 磨损阶段 | 把连续时间分箱为阶段,直接反映风险等级 |
| Type 是类别特征(L/M/H) | One-Hot 编码 | 模型只能吃数值,类别文本必须转换 |
4.1 温度差特征
EDA 发现气温和工艺温度单独看与故障相关性低,但两者的差值可能更有意义:
1 | # 工艺温度 - 气温 = 设备自身产热量 |
1 | Temperature_diff 与 Machine failure 的相关性: 0.127 |
温度差的相关性(0.127)比单独气温(0.01)和工艺温度(0.04)都高——组合特征确实更有效。
4.2 功率近似特征
物理上,电机的输出功率 = 扭矩 × 角速度。所以把这两个最有区分力的特征组合起来,可能比单独看任意一个更有效。同时构造一个「转速/扭矩比」来捕捉过载工况:
1 | # 功率近似 = 扭矩 × 转速(物理含义:设备输出功率) |
1 | Power_approx 与 Machine failure 的相关性: -0.143 |
Speed_torque_ratio 的相关性达到 -0.226(绝对值接近 Torque 本身的 0.23),是一个有效特征。含义:转速低 + 扭矩高 → 设备过载 → 容易故障。
4.3 磨损阶段特征
EDA 发现 Tool wear 在后期故障概率上升。但原始磨损时间是一个连续值(0-253 分钟),模型不容易直接从中学到「超过某个阈值风险急剧上升」的非线性关系。所以我们把它分箱为 4 个阶段,让模型直接看到风险等级:
1 | # 把刀具磨损分为 4 个阶段 |
1 | 样本数 故障率 |
发现:末期磨损阶段(> 200 min)的故障率是初期的 3 倍。这个分箱特征比原始 Tool wear 值更能直接反映风险等级。
4.4 产品类别编码
Type 列的值为 L(低规格)、M(中规格)、H(高规格),是文本类别,不能直接喂给模型——模型会把 L/M/H 当作字符串报错,或者当作用 0/1/2 编码的数字(这会引入不存在的「大小关系」)。
One-Hot 编码是最常用的解决方案:为每个类别创建一列 0/1 指示器。例如 Type_L = 1 表示这是低规格产品,其他列为 0。这样模型就能单独学习每种规格对故障的影响,不会被强加顺序关系。
1 | # One-Hot 编码 |
1 | 编码后新增列: ['Type_L', 'Type_M', 'Type_H'] |
4.5 特征工程汇总
1 | # 汇总所有构造的特征 |
现在总特征数从原来的 5 个增加到 13 个。但问题来了:这些特征都有用吗?有没有余余的? 这就是下一步特征选择要回答的问题。
五、特征选择
特征不是越多越好。原因有两个:
- 无关特征引入噪声——模型会被无关信息干扰,反而学不好(就像考试时桌上的杂物太多容易分心)
- 冗余特征浪费算力——两个高度相关的特征只保留一个就够了
下面用 3 种方法从不同角度筛选,每种方法有各自的优缺点:
| 方法 | 原理 | 优点 | 缺点 |
|---|---|---|---|
| 相关性过滤 | 看每个特征与目标的线性相关度 | 快速、简单 | 只捕捉线性关系 |
| 模型重要性 | 训练模型看每个特征的贡献度 | 能捕捉非线性关系 | 依赖模型选择 |
| 递归特征消除 | 反复删除最不重要的特征,找最优子集 | 自动化、考虑特征组合 | 计算量大 |
5.1 相关性过滤
1 | # 准备特征矩阵 |
1 | 特征与 Machine failure 的相关性排序: |
💡 提示:
Speed_torque_ratio(我们构造的特征)相关性排名第一(0.226),超过了所有原始特征。这就是特征工程的价值。
5.2 基于模型的特征重要性
相关性过滤只能捕捉线性关系。为了捕捉特征之间的非线性关系和交叉效应,我们用一个实际的模型来判断特征重要性。
这里用 XGBoost——一种基于决策树的集成模型,在工业数据和竞赛中表现非常强。它的「特征重要性」反映的是:在所有决策树的分裂过程中,每个特征被用了多少次、每次带来了多少信息增益。用得越多、增益越大的特征,重要性越高。
1 | from xgboost import XGBClassifier |
5.3 递归特征消除(RFE)
前两种方法都是独立评估每个特征。但特征之间可能存在组合效应——两个单独看不重要的特征,组合起来可能很有用。RFE(Recursive Feature Elimination,递归特征消除) 的思路是:
- 先用所有特征训练模型,找出最不重要的特征
- 删掉它,用剩余特征重新训练
- 重复以上步骤,直到剩下指定数量的特征
这个过程会综合考虑特征之间的搭配关系,是更可靠的筛选方法。这里用随机森林作为 RFE 的底层模型,目标保留 8 个特征:
1 | from sklearn.feature_selection import RFE |
1 | 特征 是否选中 排名 |
结论:RFE 选出了 8 个核心特征,去掉了 Type 的三个 One-Hot 编码列和 Process temperature。值得注意的是,我们构造的特征(Speed_torque_ratio、Temperature_diff、Power_approx、Wear_stage_code)全部被保留,说明它们确实有价值。
但「被模型选中」和「真的提升效果」还不是一回事。下一步我们用对比实验来验证。
六、效果验证:特征工程的价值
最关键的一步——用数据证明特征工程真的有效,而不是「凭感觉觉得有用」。
6.1 实验设计
思路很简单:用同样的模型、同样的数据,唯一的区别是特征不同。如果增强模型明显更好,就说明特征工程有效:
| 对比组 | 特征 | 说明 |
|---|---|---|
| 基线模型 | 5 个原始特征 | 不做任何特征工程 |
| 增强模型 | 8 个 RFE 选中特征 | 含构造特征 |
6.2 对比实验代码
在跑代码之前,先解释几个关键概念:
为什么不用「准确率」? 回忆 EDA 发现的样本不均衡问题(故障只占 3.4%)。如果用准确率,模型全部预测「正常」就有 96.6% 的准确率,但一条故障也检测不出来。所以我们用两个更适合不均衡数据的指标:
| 指标 | 含义 | 看什么 |
|---|---|---|
| F1 Score | 精确率和召回率的调和平均。精确率 = 预测为故障中真正是故障的比例;召回率 = 所有故障中被检测出来的比例 | F1 越高,说明模型既能找出故障,又不会误报太多 |
| AUC | 模型区分正负样本的综合能力,取值 0-1。0.5 = 随机猜,1.0 = 完美 | AUC 越高,模型区分正常/故障的能力越强 |
什么是 5 折交叉验证? 把数据随机分成 5 份,每次用 4 份训练、1 份测试,轮流跑 5 次取平均。好处是每一条数据都会被用作测试,评估结果更稳定、更可信。
scale_pos_weight=28 是什么? 这是 XGBoost 的类别权重参数,值 = 负样本数 / 正样本数 = 9661/339 ≈ 28。它告诉模型「故障样本很少,所以每条故障样本的重要性是正常样本的 28 倍」,直接解决 EDA 中发现的样本不均衡问题。
1 | from sklearn.model_selection import StratifiedKFold, cross_val_score |
1 | 特征工程前后效果对比(5 折交叉验证): |
结果分析:
| 指标 | 基线模型 | 增强模型 | 提升幅度 |
|---|---|---|---|
| F1 Score | 0.4523 | 0.5267 | +16.4% |
| AUC | 0.8134 | 0.8621 | +6.0% |
💡 提示:只增加了 3 个构造特征,F1 提升了 16.4%。这还是在没用任何高级调参的情况下。实际项目中,精细的特征工程 + 调参可以带来更大的提升。
6.3 特征重要性解读
最后一步:看看增强模型中哪些特征贡献最大。如果构造的特征排名靠前,就再次印证了特征工程的价值。
1 | # 用增强模型输出最终的特征重要性 |
红色标记的特征是我们构造的,它们占据了 Top 5 中的 3 个位置——这意味着模型在决策时,大量依赖了我们构造的特征,而不是只用原始数据。
总结与回顾
| 要点 | 总结 |
|---|---|
| EDA 核心发现 | 故障样本仅 3.4%(不均衡)、Torque 与故障相关性最高(0.23)、高转速样本故障率 6 倍于平均 |
| 异常值处理 | 高转速/高扭矩异常值不能删(就是故障信号),传感器跳变用 clip 截断 |
| 特征工程 5 招 | 温度差、功率近似、转速/扭矩比、磨损阶段分箱、类别编码 |
| 特征选择 3 法 | 相关性过滤(快但粗)、模型重要性(准)、RFE(自动化) |
| 效果提升 | F1 +16.4%、AUC +6.0%,只增加了 3 个构造特征 |
| 核心教训 | 构造特征的物理含义比数量重要——Speed_torque_ratio 有明确物理含义,所以有效 |
下篇预告
第 5 篇:设备故障提前预警 —— 基于本篇处理好的 AI4I 2020 数据集和特征工程方法,正式进入模型实战。用孤立森林做异常检测、XGBoost 做分类、SHAP 做解释,完整跑一遍故障预警的全流程。
本文为「从零到落地:机器学习分析数据实战系列」第 4 篇,完整系列持续更新中。