我们已经探索了将原始数据映射到合适的特征向量的方法,但这只是工作的一部分。现在,我们必须探索哪些类型的值实际上是这些特征向量中的良好特征。
避免很少使用的离散特征值
好的特征值在数据集中出现的次数应超过 5 次。这样一来,模型就可以学习此特征值与标签之间的关系。也就是说,有许多离散值相同的样本可让模型有机会在不同设置中看到相应特征,进而确定何时可以很好地预测标签。例如,house_type
特征可能包含多个值为 victorian
的示例:
✔This is a good example:house_type: victorian
相反,如果特征的值仅出现一次或极少出现,则模型无法根据该特征进行预测。例如,unique_house_id
是一个不好的特征,因为每个值只能使用一次,所以模型无法从中学习任何东西:
The following is an example of a unique value. This should be avoided.✘unique_house_id: 8SK982ZZ1242Z
最好能提供清晰明确的含义
每个特征都应对项目中的任何人而言都有明确的含义。例如,下面的良好特征有明确的名称,且值在名称方面有意义:
✔The meaning of the following value is clear from the label and value.house_age_years: 27
相反,对于以下特征值的含义,除了创建它的工程师之外,其他人几乎都无法理解:
✘The following is an example of a value that is unclear. This should be avoidedhouse_age: 851472000
在某些情况下,噪声数据(而不是糟糕的工程选择)会导致值不明确。例如,以下 user_age_years 的来源未检查值是否正确:
✘The following is an example of noisy/bad data. This should be avoided.user_age_years: 277
请勿将“神奇”的值与实际数据混用
良好的浮点特征不包含超出范围的异常不连续或“神奇”值。例如,假设一个特征具有一个介于 0 到 1 之间的浮点值。因此,如下所示的值没有问题:
✔The following is a good example:quality_rating: 0.82 quality_rating: 0.37
但是,如果用户没有输入 quality_rating
,则数据集可能使用如下特殊值表示不存在:
✘The following is an example of a magic value. This should be avoided.quality_rating: -1
如需明确标记魔法值,请创建一个布尔值特征来指示是否提供了 quality_rating
。将此布尔特征命名为 is_quality_rating_defined
。
在原始特征中,替换特殊值,如下所示:
- 对于采用一组有限值的变量(离散变量),请向集合中添加一个新值,并使用该值来表示特征值缺失。
- 对于连续变量,请使用特征数据的平均值,确保缺失值不会影响模型。
考虑上游不稳定性
特征的定义不应随时间而变化。例如,以下值是有用的,因为城市名称一般不会更改。(请注意,我们仍需将“br/sao_paulo”这样的字符串转换为独热矢量。)
✔This is a good example:city_id: "br/sao_paulo"
但收集其他模型推断出的值会产生额外的费用。也许值“219”目前代表圣保罗,但在将来运行另一个模型时,这种表示法很容易改变:
✘The following is an example of a value that could change. This should be avoided.inferred_city_cluster: "219"