当一个特征仅适用于模型中的某个组时如何在模型中插入两个特征

数据挖掘 机器学习 机器学习模型 预言 特征
2021-10-08 23:20:48

我正在用 Python 构建一个机器学习模型来预测足球运动员的价值。考虑数据框的以下特征列:

         [features]
---------------------------------
position | goals | goals_conceded 
-------- |-------|---------------       
Forward  |  23   |     NaN
Defender |   2   |     NaN
Defender |   4   |     NaN
Keeper   |   NaN |     20
Keeper   |   NaN |     43

由于守门员通常不进球,因此他们在“进球”列中几乎总是有空值,但他们仍然可以有这个统计数据,所以用 0 填充 NaN 就可以了。另一方面,因为线球员不能有“goals_conceded”统计数据,他们在该列中也会有空值,但在这种情况下,球员永远不会有这个统计数据,因为这是一个仅限守门员的统计数据。如何将这两列视为特征来构建机器学习模型?

我曾想过将它们放在一个列中,但这不可能发生,因为对于一名线球员来说,他的进球越多越好。守门员则相反,他丢球越少越好。我也不能用零填充列,因为它会影响例如“goals_conceded”列中的模型预测,因为 98% 的行包含在线球员信息。

这发生在我的数据框中的许多列中,例如“干净的床单”(只有守门员会有这个统计数据)和“目标射门”(只有线球员会有这个统计数据)。我该如何处理它们?

3个回答

对我来说,当前形式的数据对于为所有玩家训练模型似乎是错误的,这就像试图判断一个苹果是否比一个网球更好。它们具有完全不同的特性。

你可以做的是将具有相似特征的玩家分组在不同的集合中,并训练模型来预测与他们的特征集相关的分数。因此,例如守门员将与其他守门员进行比较并相应地分配分数。之后,您需要为每组设置一个基线值,并相应地调整不同类别的分数。

请记住,任何模型都会有特征(X)和标签(y)之间的关系,所以你的想法是正确的。更好的是取决于您的数据,因此请尝试两者,如果可以的话尝试更多的想法。最好的模型将是对新数据具有更好泛化能力的模型,因此请根据数据做出最终决定。

请注意,您的特征至少有 3 个,goals、goals_conceded和 position,所以最后一个将有助于解决问题。

我建议不要用 0 填充 NaN,而是用 -1(或任何其他不可能/无效的整数)填充 NaN,因为新手玩家的特征中会包含 0,这是正确的,并且您想要识别这一点。

这是一个有趣的问题。在这种情况下,我怀疑训练数据是否正确。因为两个不同的观察结果本身没有可比性。对于 ML 模型来说或理解两个观察结果有何不同,它们都应该具有可比性。一个值是未知的,一个值不适用于数据,这是另一回事。

注意:我不知道以下是否有效,因为我对足球不是很了解。可能有不同的方式来看待这个问题。由于Forw​​arder也可以被指定为keeper。(没有人会这样做,因为他可能不擅长,但他仍然可以担任守门员)。因此,在您的数据中,转发器根本不承认目标,因此您可以将 NaN 替换为 0。