在 sklearn 中处理具有多个值的分类数据

Handling Categorical Data with Many Values in sklearn

我正在尝试使用各种功能预测客户保留率。

其中一个是 org_id,代表客户所属的组织。它目前是一个浮点列,数字范围从 0.0 到 416.0 和 417 个唯一值。

我想知道在将此列提供给 scikit-learn RandomForestClassifier 之前对其进行预处理的最佳方法是什么。通常,我会一次性编码分类特征,但这里有太多的值,所以它会从根本上增加我的数据维度。我有 12,000 行数据,所以我可能没问题,只有大约 10 个其他功能。

备选方案是让列保留浮点值,将浮点值转换为整型值,或将浮点值转换为 pandas' 分类对象。

非常感谢任何提示。

org_id 似乎不是为分类带来任何信息的功能,您应该删除此值而不是将其传递给分类器。

在分类器中,您只想传递对您尝试执行的任务具有辨别力的特征:此处是可能影响保留或流失的元素。公司 ID 在此上下文中不会带来任何有价值的信息,因此不应使用它。

根据 OP 的评论进行编辑:

在进一步说明之前,让我们说明一下:关于样本数量 (12000) 和模型的相对简单性,可以多次尝试轻松尝试不同的特征配置。

因此,作为基准,我会按照我之前所说的那样,将此功能全部删除。这是您的基准分数,即您可以将其他特征组合与之进行比较的分数。

我认为尝试热编码 org_id 不需要花费任何成本,无论您观察到哪种结果,都会增加您对随机森林在这种情况下的行为方式的经验和知识。由于您只有 10 个特征,布尔特征 is_org_id_1is_org_id_2、...

然后我会尝试通过寻找可以 "describe" 这 400 多个组织的新特征来减少布尔特征的数量。例如,如果他们只是美国组织,他们的状态是大约 50 个特征,或者他们的用户数量(这将是一个单一的数字特征),他们的存在年限(另一个单一的数字特征)。请注意,这些只是说明创建新功能过程的示例,只有知道全部问题的人才能巧妙地设计这些功能。

另外,我会发现有趣的是,一旦你解决了你的问题,你就会回到这里并为你的问题写下另一个答案,我相信很多人 运行 在处理真实数据时都会遇到这样的问题: )