【问题标题】:Handling Categorical Data with Many Values in sklearn在 sklearn 中处理具有多个值的分类数据
【发布时间】:2019-08-12 15:15:36
【问题描述】:

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

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

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

替代方法是将列保留浮点值,将浮点值转换为 int 值,或将浮点数转换为 pandas 的分类对象。

非常感谢任何提示。

【问题讨论】:

    标签: python pandas scikit-learn categorical-data


    【解决方案1】:

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

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

    编辑以下 OP 的评论:

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

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

    我认为尝试对org_id 进行热编码并不需要任何成本,无论您观察到哪种结果都会增加您对随机森林在这种情况下如何表现的经验和知识。由于您只有 10 个以上的特征,布尔特征 is_org_id_1, is_org_id_2, ... 将非常重要,分类结果可能会受到这些特征的高度影响。

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

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

    【讨论】:

    • 感谢您的回复。我理解你的观点,这是一个很好的观点。但我有两点回应:1)假设 org_id 确实带来了分类信息,你会如何处理它?即我一般如何解决这个问题? 2)我实际上并没有试图预测留存率本身,而是试图确定我的数据集中的哪些因素可以预测未来的用户留存率。我的想法是为这些数据创建一个随机森林分类器,然后从分类器中获取特征重要性,这样我就可以确定哪些因素可以预测未来的用户留存率。
    • 感谢您的提示。总结您的观点,我有 3 个选项:1)删除列; 2)one-hot-encode它; 3)想出除id以外的其他特征。好的建议。我应该提一下,我不是在处理“真正的”问题,因为这是一个带回家的挑战数据集,我无权访问除 org_id 之外的组织数据。所以我做不到 3. 根据我自己的阅读,我认为分箱是处理高基数分类数据(例如邮政编码)的标准方法。所以我可以尝试对我的组织进行分箱。那里的问题是我不知道这是否适用于名义数据。
    • 与序数数据相反,序数数据在数据值之间存在更大/更小/顺序的概念。在这种情况下,一个 org_id 与其他任何一个 org_id 相同,即使其中一些比其他“大”。
    • 您最后的评论正是此类数据在类别数量很大时通常难以处理的原因。
    • 好的,我会看看我的数据,看看是否有任何分箱模式对我来说是有意义的。例如,如果三分之一的行的 org_id 为 0,三分之一的 org_id 为 1,最后三分之一的 org_ids 为 2 到 416,则最好使用 3 个 bin。显然,我认为我的数据不会这么简单。所以我可能最终会按原样离开专栏。我不想放弃它,因为我想看看它是否有任何功能重要性,它会破坏我放弃它的目的。就像你说的,我认为 one-ho-encoding 会压倒其他功能。
    猜你喜欢
    • 2021-01-16
    • 2019-05-09
    • 2018-09-11
    • 2018-06-01
    • 2019-10-21
    • 2015-10-21
    • 2014-06-13
    • 1970-01-01
    • 2021-06-27
    相关资源
    最近更新 更多