我想找出导致特定事件发生的因素。然而,该事件仅发生大约 1% 的时间。因此,如果我有一个名为 event_happened 的类属性,则 99% 的时间该值是 0,而 1 只有 1% 的时间。传统的数据挖掘预测技术(决策树、朴素贝叶斯等)似乎在这种情况下不起作用。关于如何挖掘这个数据集的任何建议?谢谢。
3 回答
这是任务异常检测任务的典型描述, 它定义了自己的一组算法:
在数据挖掘中,异常检测(或异常值检测)是识别不符合预期模式或数据集中其他项目的项目、事件或观察结果。
以及关于可能方法的声明:
存在三大类异常检测技术。无监督异常检测技术在假设数据集中的大多数实例是正常的情况下,通过寻找似乎最不适合数据集其余部分的实例来检测未标记测试数据集中的异常。监督异常检测技术需要一个已标记为“正常”和“异常”的数据集,并涉及训练分类器(与许多其他统计分类问题的关键区别在于异常值检测固有的不平衡性质)。半监督异常检测技术根据给定的正常训练数据集构建表示正常行为的模型,然后测试由学习模型生成的测试实例的可能性。
你会选择什么是个人口味的问题。
这些方法将有助于“学习”找出异常事件;然后“预测”它们的模型将定义您感兴趣的因素。
这是一个不平衡的分类问题。
我很确定我已经看过一些关于可以很好地处理不平衡数据的方法的调查和概述文章。您应该研究这个术语(“偏斜”有点宽泛,可能无法为您提供所需的结果)。
假设我的属性是 hour_of_the day、day_of_the_week、state、customer_age、customer_gender 等。我想找出这些因素中的哪些因素导致了我的事件发生。
基于这个答案,我相信你需要分类,但你的结果将是模型本身。
因此,您执行逻辑回归,但您的特征本身就是数据属性(有些文献甚至没有将特征和属性分开)。
你必须以某种方式规范化这些数据。这可能很棘手。我会选择布尔功能(比如hour_of_event==00, hour_of_event==01, hour_of_event==02
,...)
然后,您应用任何分类模型,最终得到针对每个属性的权重。具有(最高权重将是您需要的因素)的属性。