1. 特征工程导论:什么是特征工程、它在机器学习中的位置、核心流程与思维框架
1.1 到底什么是特征工程?
先问个问题:你给模型喂的是什么?
很多人觉得,机器学习嘛,把数据丢进去,调个参,模型就自己学出来了。我刚开始做项目时也这么想。结果呢?模型跑出来一团糟,准确率还不如瞎猜。
后来我才明白——模型吃的不是原始数据,而是特征。特征工程,说白了就是把原始数据转换成模型能理解、能利用的形式。
我的定义:特征工程 = 从原始数据中提取、构造、选择对预测任务最有用的信息,并把它组织成模型喜欢的格式。
举个例子。你有一堆用户行为日志,里面全是时间戳、页面URL、点击坐标。模型看不懂这些。你得把它变成「用户是否在深夜访问」「访问页面数」「平均停留时长」——这才是特征。
1.2 特征工程在机器学习中的位置
我经常跟团队说一句话:数据和特征决定了机器学习的上限,而模型和算法只是逼近这个上限。
你想想看,一个烂特征配上最好的模型,能赢过一个好特征配上普通模型吗?我在Kaggle上见过太多次了——冠军方案往往不是模型最复杂的,而是特征做得最扎实的。
| 环节 | 对最终效果的影响 | 投入时间占比(我个人的经验) |
|---|---|---|
| 数据采集与清洗 | ★★★★★ | 30% |
| 特征工程 | ★★★★★ | 40% |
| 模型选择与调参 | ★★★☆☆ | 20% |
| 模型评估与部署 | ★★☆☆☆ | 10% |
嗯,这里要注意:特征工程不是独立的一步。它贯穿整个ML流程——从数据理解开始,到特征构造、选择,再到模型迭代时反复调整。
1.3 特征工程的核心流程
我习惯把特征工程拆成四个阶段。每个阶段都有坑,我一个个说。
阶段一:数据理解与探索
拿到数据别急着写代码。先看看数据长什么样。
- 数据类型:数值型?类别型?文本?时间序列?
- 数据质量:缺失值多不多?有没有异常值?
- 分布情况:是不是长尾?有没有偏态?
我曾经接手过一个项目,对方说数据很干净。我一跑describe(),发现某个特征99%都是0,剩下1%是缺失值。这要是直接丢进模型,后果可想而知。
阶段二:特征构造
这是最花心思的地方。从原始数据里「变」出新特征。
- 数值特征:做对数变换、分箱、交叉相乘
- 类别特征:独热编码、标签编码、目标编码
- 时间特征:提取星期几、是否节假日、距上次事件的天数
- 文本特征:TF-IDF、词向量、主题模型
我的小技巧:构造特征时,多问问自己「这个特征对业务意味着什么?」。比如预测用户是否会付费,那「用户最近7天登录次数」就比「用户ID」有意义得多。
阶段三:特征选择
特征不是越多越好。我见过有人一口气造了500个特征,结果模型过拟合得一塌糊涂。
常用的方法:
- 过滤法:算相关系数、卡方检验、互信息
- 包裹法:递归特征消除(RFE)
- 嵌入法:L1正则化、树模型的特征重要性
阶段四:特征变换与缩放
这一步很多人会忽略。但模型对尺度很敏感。
- 标准化:减去均值,除以标准差。适合正态分布的数据。
- 归一化:缩放到[0,1]区间。适合有边界的数据。
- 幂变换:Box-Cox、Yeo-Johnson,处理偏态分布。
避坑指南:我曾经在时间序列预测中,不小心用未来数据做了标准化。结果模型在验证集上表现完美,上线后直接崩了。切记:所有变换都只能用训练集的数据来拟合,再应用到验证集和测试集。
1.4 特征工程的思维框架
做特征工程,光有技术不够,还得有思路。我总结了一个四步思维框架,每次做特征工程前都过一遍。
这个框架的核心就一句话:从业务出发,回到业务验证。别为了造特征而造特征。我见过有人花了两周时间构造了100多个特征,结果上线后业务方说「这个特征我们根本采集不到」——白干了。
1.5 一个简单的例子:房价预测
光说不练假把式。我们拿房价预测来走一遍流程。
原始数据长这样:
| 面积(㎡) | 卧室数 | 建造年份 | 位置 | 价格(万) |
|----------|--------|----------|----------|----------|
| 120 | 3 | 2010 | 朝阳区 | 850 |
| 85 | 2 | 2015 | 海淀区 | 620 |
| 200 | 4 | 2005 | 西城区 | 1200 |
我们能做什么特征?
- 面积平方:房价和面积往往不是线性关系,大房子单价可能更高
- 房龄:当前年份 - 建造年份
- 位置编码:按区域平均房价做目标编码
- 每平米价格:面积和价格的交叉特征(但注意数据泄露)
- 卧室密度:卧室数 / 面积,反映户型紧凑程度
经验之谈:构造特征时,先做10个精的,别做100个糙的。我每次迭代都只加3-5个新特征,然后看模型效果有没有提升。没提升就砍掉,别舍不得。
1.6 总结
特征工程不是什么高深莫测的东西。它就是帮模型把话说清楚。你给模型讲得越明白,它学得越快、越准。
记住三个要点:
- 理解业务:不懂业务,特征就是瞎造
- 从简到繁:先做基础特征,再慢慢加复杂的
- 反复验证:每个特征都要问自己「它真的有用吗?」
嗯,这一章就到这里。后面的章节我们会深入每个环节,手把手带你做特征工程。到时候我会把踩过的坑、试过的错,都一一讲给你听。