微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

IsolationForest,转换数据

如何解决IsolationForest,转换数据

我和一位同事正在尝试检测大型数据集中的异常情况。我们想尝试不同的算法(LOF、OC-SVM、DBSCAN 等),但我们目前正在与 IsolationForest 合作。

我们的数据集目前的形状如下。它是对每个用户每天记录的事件类型数量的计数,包含 > 300.000 条记录:

日期 用户 事件 计数
6/1/2021 user_a 打开 2
6/2/2021 user_a 打开 4
6/1/2021 user_b 修改 3
6/2/2021 user_b 打开 5
6/2/2021 user_b 删除 2
6/3/2021 user_b 打开 7
6/5/2021 user_b 移动 4
6/4/2021 user_c 修改 3
6/4/2021 user_c 移动 6

我们的目标是自动检测每个用户的异常事件计数。例如,通常每天记录 5 到 10 个“打开”事件的用户,400 的计数将是异常值。我和我的同事正在讨论我们应该如何为 IsolationForest 算法准备数据集。

我们中的一个人说我们应该删除日期字段并对其余数据进行标签编码 => 用整数编码所有字符串,并让 IF 为每条记录计算一个异常值。

一个观点是不应该进行标签编码,因为不能用整数替换分类数据。然而,数据应该被缩放,用户列应该被删除(或设置为索引),并且事件列中的数据应该被旋转以生成更多维度(下面的例子展示了他想要做什么):

日期 用户 event_Open event_Modify event_Delete event_Move
6/1/2021 user_a 2 NaN NaN NaN
6/2/2021 user_a 4 NaN NaN NaN
6/1/2021 user_b NaN 3 NaN NaN
6/2/2021 user_b 5 NaN 2 NaN
6/3/2021 user_b 7 NaN NaN NaN
6/5/2021 user_b NaN NaN NaN 4
6/4/2021 user_c NaN 3 NaN 6

所以我们在几点上存在分歧。我将在下面列出它们并包括我对它们的看法:

问题 评论
标签编码 是必须的,不会影响数据集的分类性质
缩放 IsolationForest 天生对缩放不敏感,因此缩放是多余的
拖放数据列 日期实际上不是数据集中的一个特征,因为日期与每个用户每个事件类型的计数的异常性没有任何相关性
删除用户 用户实际上是一个(关键)功能,不应删除
透视事件列 这会生成一个备用矩阵,这可能是不好的做法。它还在数据中引入了现实中不存在的关系(例如 user_b 在 2. 6 月记录了 5 个打开事件和 2 个删除事件,但这些被认为是不相关的,因此不应形成单个记录)

我很好奇你对这些观点的看法。在使用 IsolationForest 算法进行异常检测时,关于上述问题的最佳实践是什么?

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。