很多刚入行的人有个误区,觉得模型越复杂越好。XGBoost、LightGBM 轮番上阵,参数调得眼花缭乱,最后准确率却卡在瓶颈期动弹不得。
问题往往不在算法本身,而在输入的数据。垃圾进,垃圾出(Garbage In, Garbage Out)。如果底层的 特征工程 没做好,再强大的算法也只是在噪音里打转。
现实世界的数据是脏的、乱的、充满缺失值的。直接把“2023-10-01”这样的字符串扔进模型,它看不懂日期,只看到一串无意义的字符。
你需要把它拆解。提取出“星期几”、“是否节假日”、“月份”。对于电商场景,“双11”这个标签的价值,可能远超具体的日期数值。
这就是特征工程的本质:把业务理解翻译成数学语言。它不是简单的清洗,而是创造信息。
在做 机器学习 项目时,最容易被忽视的是对业务的洞察。比如预测用户流失,单纯看“最后登录时间”不够。
如果你结合客服记录,发现用户最近三次投诉都未解决,这个“未解决投诉次数”就是一个强特征。这种特征,靠自动化工具很难挖掘,必须靠人脑。
我曾见过一个团队,花两周时间调参,效果提升 0.5%。后来他们加了一个“用户近期价格敏感度变化”的特征,模型效果直接提升了 5%。
这就是差距。代码可以复制,但对业务的理解无法拷贝。
特征不是越多越好。有些新手喜欢把所有能想到的变量都塞进去,结果导致维度灾难。

更危险的是特征泄露。比如预测明天股价,你不小心把“收盘价”作为特征放进去了。训练集表现完美,上线就崩盘。这种错误低级但常见。
记住:特征必须在预测时刻是可获取的。任何依赖未来信息的字段,必须剔除。
另外,不要过度加工。对连续变量进行不必要的离散化,可能会丢失大量信息。除非你有明确的业务理由,否则保留原始分布往往更安全。
不要试图一开始就构建完美的特征体系。先跑通基线模型(Baseline)。
这个过程是循环的。每次迭代,只加几个关键特征,观察效果变化。这样你能清楚知道哪个特征真正起了作用,而不是在一堆变量中迷路。
模型调参是锦上添花,特征工程才是雪中送炭。把 80% 的精力花在理解数据和构造特征上,剩下的 20% 交给算法去拟合。
当你的特征足够清晰、有力,哪怕只用一个简单的逻辑回归,也能跑出令人尊敬的结果。这时候,再去考虑复杂的深度学习,才有意义。
