我有来自 Active Directory 数据的用户数据登录日志,其中列出了用户登录到服务器的时间。我正在寻找用户正常行为的偏差。例如,如果用户通常在上午 9 点到下午 5 点处于活动状态,如果在此之外有一些活动,则应该检测到它。我不确定是否应该考虑最小(第一次登录)和最大(最后一次登录)。任何输入将不胜感激。
如何从活动目录日志中确定用户最活跃的时间
与往常一样,首先查看数据。选择一个用户,然后查看他们的典型登录时间。也许绘制一个直方图来显示他们登录时间的分布。选择另一个用户,然后查看他们。再选几个。你看到什么模式了吗?它们有共同的形状吗?用户是否属于几个集群?试着很好地理解数据。
然后,一旦您对正常行为的外观以及它在用户之间的差异有所了解后,您就可以开始考虑如何构建一个模型来捕捉这种随机行为并帮助您区分正常与异常行为(也许通过某种异常检测)。
但一如既往:从可视化数据开始。在您对数据有更好的理解之前,询问如何解决问题或使用哪种机器学习方法还为时过早。
好的,这是一个非常令人兴奋的问题。与我们通常在此站点上看到的完全不同。而且,更令人兴奋的是,我认为书中最古老的方法之一就是你真正想要的。
因此,根据我收集的信息,您将用户每天活跃的时间作为您的数据,并且您希望确定他们登录的时间偏离了他们的日常活动。
例如:用户 1,从上午 9:00 到下午 15:00 活跃。
这通常称为异常检测。您试图检测来自特定用户的行为何时异常(不同)而不是他们的正常行为。那么这是怎么做到的呢?
异常检测算法能够学习一组标签(正常活动)的分布,然后它能够在异常发生时进行标记(异常活动)。这是当一个实例与学习分布有很大不同的时候。
要在您的情况下获得基线分布,这非常容易,这非常令人兴奋!您需要做的就是在老化期间收集有关用户的信息。在这里,您需要做出选择。您是想每天跟踪用户活动,还是在整个星期、每月跟踪用户活动?等等......如果我们谈论的是用于工作的服务器中的活动,那么每周可能会更好。但是,如果它是游戏服务器,那么每天可能会更好。您需要考虑与您托管的服务器类型有关的用户计划的规律性。假设您对他们的日常活动感兴趣。然后你可以有几个星期的老化期。
所以建立一个概率图,这将是你的概率分布函数。这-axis 将是一天中的时间,并且-axis 将是频率(您需要在之后对其进行归一化以便数学计算出来)。因此,每次用户登录时,您都会在绘图上添加一个框单元 1 (-axis) 用于该时间段。这本质上是一个直方图!!最后,您将得到一条曲线,显示用户在一天中的任何给定时间处于活跃状态的可能性。
现在,如果您看到用户一次登录,您可以使用概率密度函数从该分布中获取事件的概率。换句话说,用户一次在线的可能性是多少. 如果这种可能性低于阈值那么你可以安全地假设它是异常的。这通常称为广义似然比检验 (GLRT)。
这种技术的缺点是需要训练超参数,你的门槛。鉴于您有标记的数据,这很容易做到。你知道什么行为是正常/异常的。如果你没有这些信息。您可以设置任意阈值并根据您将遇到的误报率或误报率在您认为合适的情况下对其进行修复。
我建议这样做是因为您可以轻松获得概率分布的参数化。所以如果你不使用它,你会错过很多信息。
另一种进行异常检测的非参数方法是使用专门的 K-NN 方法,该方法利用-以非常聪明的方式进行统计测试。我发现使用他们的方法在非常有限的数据集上取得了很多成功。你应该开始的论文是:
从 KNN 图中学习最小体积集和异常检测器 https://arxiv.org/pdf/1601.06105.pdf
然后你可以继续他们最简单的实现,然后你可以通过阅读他们的其他论文(装袋、排名等)来扩展它
基于最近邻图的评分函数异常检测 https://papers.nips.cc/paper/3723-anomaly-detection-with-score-functions-based-on-nearest-neighbor-graphs.pdf