订单重要的“渠道分析”

时间:2019-07-15 02:43:53

标签: python sql pandas anomaly-detection

渠道分析通常是通过获取基本数据来完成的,然后从该数据中进行子查询以查看可以将多少数据存储到该部分中。一个很好的用例是:

User signup (1,290) ==> Sign in (897) ==> User purchase (42)

我正在尝试分析各种日志以进行序列/异常检测。与常规渠道分析不同,事件的顺序和时间戳非常重要。让我们以下面的示例为例,当用户打开文本编辑器然后发出网络请求时,我们试图标记可疑活动(例如恶意软件安装)。日志如下所示:

[2019-07-14 17:54:04,251] generic.py:98@main [INFO] File opened
[2019-07-14 17:56:03,566] generic.py:98@main [INFO] Network request made
[2019-07-14 17:58:03,883] generic.py:98@main [INFO] File closed

由于文件打开后立即发出了网络请求,因此我们将其标记为可疑。

但是,这并不是可疑的:

[2019-07-14 17:54:04,251] generic.py:98@main [INFO] File opened
[2019-07-14 17:58:05,883] generic.py:98@main [INFO] File closed
[2019-07-14 17:56:06,566] generic.py:98@main [INFO] Network request made

并且,我们还将从首次打开文件到发出网络请求的时间限制设置为“ 10秒”。因此,这也不会被标记为可疑:

[2019-07-14 17:54:04,251] generic.py:98@main [INFO] File opened
[2019-07-14 18:56:06,566] generic.py:98@main [INFO] Network request made
[2019-07-14 18:58:05,883] generic.py:98@main [INFO] File closed

当前,这是通过for循环和许多用于检查条件的内部对象来完成的。但是,我想知道是否可以在SQL中直接进行这种类型的“错误检测”,因为这样会更快(如果可能),并且我可以轻松地以timestamp / action的形式使用数据,例如:

session_id          timestamp                       action
123                 2019-07-14 17:54:04,251         file_opened
123                 2019-07-15 17:54:04,251         network_request
123                 2019-07-16 17:54:04,251         file_closed

所以,回到上面的问题:

  • 这种特定类型的异常检测是否有名称?
  • 是否可以将SQL用于它(以现实的方式)?尽管上面的示例非常简单,但条件可能会变得更加复杂。
  • 如果不是SQL,那么做这种事情的最常用工具是什么(例如,熊猫?如果是,可以举个例子)吗?

1 个答案:

答案 0 :(得分:1)

SQL是一种查询语言,不适用于计算。此外,数据库也不是为计算而设计的。它专注于写,读,存储,一致性等,但不包括计算。

因此,在这种情况下,我认为SQL可以用于您的简单示例,但由于过于复杂,因此它不适合您的实际情况。

回到计算,这取决于数据量。对于相对简单的任务,我们通常使用__init__(result)pandasscipy作为工具。对于某些繁重的任务,我们可能使用numpy作为计算引擎,并使用连接器将spark与数据库连接,然后使用spark处理数据。

这是根据您给出的示例的pyspark的示例:

pandas