使用异常值检测来检测未经授权的访问

数据挖掘 机器学习 Python 无监督学习 异常检测 离群值
2021-10-01 01:03:28

我正在做一个项目,我的任务是使用任何机器学习技术找到未经授权的访问。

让我清楚我的问题定义。

  1. UserA使用 chrome 浏览器从 windows PC 访问网站。
  2. UserB使用 Internet Explorer 从 Windows PC 访问网站。
  3. UserA从来没有使用 safari 访问网站,但突然间它使用 safari 从 mac 系统访问网站。

第 1 点和第 2 点是正常登录,但第 3 点可能会被攻击者使用,因为它与UserA的行为不匹配。

因此,我正在尝试在 python 中实现一个无监督模型,以首先学习所有用户的正常行为,以便通过其他功能访问网站,例如 -

  • 用户名
  • 国家
  • service_key(唯一标识符)
  • 系统
  • app_type(客户端、服务器、企业等)

下面我分享我的示例数据集。

+==========+=========+=============+=========+==========+
| username | country | service_key | system  | app_type |
+==========+=========+=============+=========+==========+
| userA    | india   | e08fe2d     | windows | 2        |
| userA    | india   | e08fe2d     | android | 2        |
| usreB    | china   | bb15d36     | windows | 3        |
| userB    | india   | bb15d36     | windows | 3        |
| userB    | russia  | bb15d36     | mac     | 3        |

| userA    | usa     | e08fxxx     | mac     | 3        |
| userB    | china   | bb1xxxx     | ios     | 1        |
+==========+=========+=============+=========+==========+

以上5条记录是人工分析并标记为正常日志,并从不同用户系统收集。但是最后两条记录是异常的,应该被检测为异常值,因为它们在特征上不匹配。这里需要注意的是,登录可以有不同的国家和系统,但不能有不同的用户名、service_key 和 app_type。

任何人都可以建议我对此建模或可以在 python 中共享博客或示例吗?

3个回答

这个问题相当广泛。我会尽量让你走上正确的道路,而不是提供一个真正完整的答案。


理论背景

正如其他人所提到的,您尝试执行的任务通常称为异常检测,也称为新奇检测

有许多可能的方法来处理此类任务,具体取决于您愿意对数据做出的假设。


在我们开始探索替代方案之前,重要的是要在这里提到您的所有变量都是分类的(国家、服务密钥、系统、应用程序类型)。这很重要,因为通常算法通常处理连续变量离散变量,而分类变量则属于后一种类型。

但是,您可以采取一些技巧来交替处理它们。One-hot 编码简单且流行,可让您将分类变量转换为 N 个二进制变量对于某些类型的算法,您可以将这些二进制变量当作连续的一样使用。您甚至可以混合使用二进制变量和真正的连续变量


现在,通常有两种方法可以解决这类问题:参数非参数

参数方法要求您对数据的潜在概率分布进行假设。然后,您可以使用您的数据估计这些参数。

另一方面,非参数方法更易于使用,因为它们不需要假设基础分布。它们也可能不那么强大/精确,特别是如果您没有大量数据并且您的数据非常接近已知的概率分布。


实用建议

如果您愿意做一些统计工作,请研究贝叶斯推理

对于更简单的非参数方法,请查看 One-Class SVM。这是一个使用 python 和 scikit-learn 的代码示例以及有关异常检测的更多实用信息

但是,老实说,你在这里给了我们一个重要的线索:

这里需要注意的是,登录可以有不同的国家和系统,但不能有不同的用户名、service_key 和 app_type。

如果您已经知道所有这些,您可能希望完全跳过复杂的部分。只需直接比较这些值,将它们汇总为距离度量(例如,您可以为 service_key 和 app_type 赋予不同的权重),看看这是否足够好

我猜你需要异常检测算法。这就像发现异常行为的欺诈检测。

在数据挖掘中,异常检测(也称为异常检测)是识别不符合预期模式或数据集中其他项目的项目、事件或观察结果。通常,异常项目将转化为某种问题,例如银行欺诈、结构缺陷、医疗问题或文本错误。异常也被称为异常值、新奇、噪声、偏差和异常。

我强烈建议你看看这里

这是您需要元数据集的场景。您发布的示例数据不适合建模。我将努力开发一个数据集,该数据集将建立您在帖子其余部分中列出的相同模式。他们从多少个国家登录?白天有几次?在晚上?等等。要清楚,这将是一个数据集,其中每行一个用户 ID,每个 ID 只有一个记录。如果您可以开发它,那么您将处于一个更好的位置来模拟它。