【问题标题】:Categorical Embeddings in an Unsupervised Setting for Anomaly Detection用于异常检测的无监督环境中的分类嵌入
【发布时间】:2021-03-15 04:44:06
【问题描述】:

背景: 我正在研究一个无人监督的用例。 我拥有的数据集具有以下字段:TimeStamp、UserName 和 eventName 例如。用户 A 在时间戳 C 完成了事件 B

我的目标是执行异常检测任务。 即如果 UserA 执行了一个新事件 C,判断这是否异常。

我的假设是,如果我可以学习事件的嵌入,这可以让我很好地比较新事件 C 与用户 A 之前执行的事件的相似性,从而判断这是否是异常情况。

现在,对于大多数用户来说,eventName 是一个分类的长尾特征(即很少有事件会大量完成,而用户执行的大多数事件很少发生)。不同事件名称的数量在 300-400 范围内,平均而言,用户每天可能只执行这 300-400 个事件中的 10 个。

问题: 我无法思考如何去学习样本空间中事件的嵌入。

我将非常感谢任何有关如何建模此问题的指导。

如果我错过提供任何可能有帮助的信息,请告诉我。

【问题讨论】:

  • 如果分组或序列很重要,您可以构建 N-gram。
  • 您可能希望将非常常见的事件与罕见事件分开建模。尤其是如果常见动作掩盖了罕见动作的顺序
  • 为了给稀有事件更多的权重,可以考虑自然语言处理中的TF-IDF之类的东西

标签: python machine-learning word-embedding unsupervised-learning anomaly-detection


【解决方案1】:

从简单开始。将数据划分为合适的时间间隔,例如 1 天。然后计算这个区间内的基本统计数据。例如,每种事件类型的事件数。跨用户和时间可视化这些统计数据,以了解数据中的模式。 要计算异常分数,请找到一种方法来计算与典型统计数据相比的时间段内特征的距离函数。一个基本的起点可能是Mahalanobis distance。或者尝试一些简单的异常检测算法,例如 IsolationForest、LocalOutlierFactor。

只有在此之后才考虑更高级的方法。比如对事件的分组/序列建模,或者用户的子群体建模等。c

【讨论】:

  • 我已经对周、日和小时的时间范围进行了一些数据可视化,并观察了这些模式。与每种事件类型相关的工程特性的问题在于,事件类型太多,而且其中很多很少发生(但它们很重要,因为我正在做异常检测)。因此想到了嵌入事件或用户来帮助解决这个问题。
猜你喜欢
  • 2018-11-06
  • 2020-06-02
  • 2014-06-11
  • 2015-09-28
  • 1970-01-01
  • 2014-07-10
  • 1970-01-01
  • 2018-05-25
  • 2021-02-26
相关资源
最近更新 更多