返回首页

Roadmap
更新于 2026年10月21日 全文 597 字未阅读

数值型数据:好特征的三条准则#

通过前面内容的学习,我们已经陆续了解了「怎么把原始数据变换成合适的特征向量」,但是想要模型更稳,光这些还不够,因为还得每一个数值特征本身的质量也守住了才行。在这一节内容中,我们将把评判特征「够好」这把尺子里的三条准则摊开来说。

含义清楚#

每一个特征都应该有一个清晰、合理、不言自明的名字,项目里任何同事瞟一眼就能懂。

例如下面这个特征值就让人一头雾水:

不推荐

house_age: 851472000

而下面这个就清楚得多:

推荐

house_age_years: 27

提示: 你的同事可能会被这种模糊的名字劝退,但模型其实并不在意——只要归一化做得对,模型照样能跑。

训练前自检#

异常值(outliers)这一节其实讲过好几回了,但这里值得再啰嗦一句:糟糕的数据(而不是糟糕的工程决策)也会让数值变得可疑。

比如下面这个 user_age_in_years 就来自一个没做值域校验的数据源:

不推荐

user_age_in_years: 224

但人确实可以活到 24 岁:

推荐

user_age_in_years: 24

赶快查一下你的数据吧!

取值合理#

魔法值(magic value)是连续特征里故意制造的不连续,即用一个特殊值去表达「没测量」。

比如下面这个本应在 0 到 30 之间任意取值的 watch_time_in_seconds,用 -1 表示「没测量」:

不推荐

watch_time_in_seconds: -1

把 watch_time_in_seconds 设成 -1,等于逼着模型去揣摩「倒着看一部电影到底是什么意思」。这样训出来的模型,大概率给不出靠谱的预测。

更好的做法是再加一个布尔特征,单独标出「watch_time_in_seconds 有没有给出」。比如:

推荐

watch_time_in_seconds: 4.82  

is_watch_time_in_seconds_defined=True

当这一列没有给出测量值时:

watch_time_in_seconds: 0  

is_watch_time_in_seconds_defined=False

这也是处理「连续型数据 + 缺失」的一种标准思路。


再看离散型数值特征,比如 product_category,它只能从一个有限集合里取值。这种情况下「缺失」可以用集合里多塞一个新值来表示——模型为每个值都会学到独立权重,包括给「缺失」单留一个权重。

下面这组取值就是合理的搭配:

{0: 'electronics', 1: 'books', 2: 'clothing', 3: 'missing_category'}

关键术语:

阅读 --