探索性数据分析(EDA)
探索性数据分析 (EDA) 分析和调查数据集并总结其主要特征,通常采用数据可视化方法。 它有助于确定如何最好地操纵数据源以获得所需的答案,从而更容易发现模式、发现异常、检验假设或检查假设。
EDA 主要用于查看在正式建模或假设检验任务之外可以揭示哪些数据,并提供对数据集变量及其之间关系的更好理解。 它还可以帮助确定您正在考虑用于数据分析的统计技术是否合适。
您可以使用 EDA 工具执行的特定统计功能和技术包括:
- 聚类和降维技术,有助于创建包含许多变量的高维数据的图形显示。
- 原始数据集中每个字段的单变量可视化,带有汇总统计。
- 双变量可视化和汇总统计,可让您评估数据集中每个变量与您正在查看的目标变量之间的关系。
- 多变量可视化,用于映射和理解数据中不同字段之间的交互。
- K-means 聚类是无监督学习中的一种聚类方法,其中数据点被分配到 K 个组中,即聚类的数量,基于与每个组质心的距离。 最接近特定质心的数据点将聚集在同一类别下。 K-means 聚类通常用于市场分割、模式识别和图像压缩。
- 预测模型,例如线性回归,使用统计数据和数据来预测结果。
本文要点:
- 模拟登录尝试,创建我们的数据集
- 执行探索性数据分析,了解模拟数据
- 使用规则和基准进行异常检测
模拟登录
为了运行模拟,我们将构建一个 Python 包来模拟需要正确用户名和密码的登录过程(无需任何额外的身份验证措施,例如双因素身份验证)和一个可以在命令行上运行的脚本。
模拟器对网站的有效用户做出以下假设:
- 依据泊松过程,有效用户以每小时频率访问,具体取决于星期几和一天中的时间。 泊松过程将每单位时间(我们的模拟将使用一小时)的访问建模为具有均值 λ (lambda) 的泊松分布。 访问间隔时间呈指数分布,均值为 1/ λ。
- 有效用户从 1-3 个 IP 地址进行连接,这些地址由 4 个以句点分隔的 [0, 255] 范围内的随机整数组成。 两个有效用户共享一个 IP 地址是有可能的,尽管可能性极小。
- 有效用户在输入凭据时不太可能犯很多错误。
- 黑客试图通过仅测试几个用户名密码组合来避免帐户锁定,而不是全面的字典攻击。
- 由于黑客不想造成拒绝服务,因此他们限制了攻击的数量,并且一次只进行一次尝试。
- 黑客知道系统中存在的帐户数量,并且对用户名的格式有一个很好的了解。 他们会选择尝试猜测所有 133 个用户名,或者其中的一部分。
- 每次攻击都是独立的,这意味着每次攻击都有一个黑客在执行,并且黑客不会多次攻击。
- 黑客不会分享有关哪些用户名-密码组合正确的信息。
用户模拟登陆Python包
import ipaddress
import itertools
import json
import random
import string
def make_user_base(out_file):
"""Generate a user base and save it to a file."""
with open(out_file, 'w') as user_base:
for first, last in itertools.product(
string.ascii_lowercase,
['smith', 'jones', 'kim', 'lopez', 'brown']
):
user_base.write(first + last + '\n')
for account in ['admin', 'master', 'dba']:
user_base.write(account + '\n')
...
def read_user_ips(file):
"""Read in the JSON file of the user-IP address mapping."""
with open(file, 'r') as file:
return json.loads(file.read())
我们的模拟使用了许多不同的分布,因此了解它们的样子会很有帮助。 以下子图显示了我们使用的每个分布的示例。 请注意,泊松分布的绘制方式不同。 这是因为泊松分布是离散的。 出于这个原因,我们经常使用它来模拟事件出现 - 在这里,我们用它来模拟尝试登录的用户的出现。离散分布具有概率质量函数 (PMF) 而不是概率密度函数 (PDF):
从命令行模拟
使用探索性数据分析
分析的数据:
- 调查尝试和失败中的任何峰值
- 检查失败原因是用户名不正确的情况
- 查看每个 IP 地址的故障率
- 查找尝试使用许多不同用户名登录的 IP 地址
基于规则的异常检测
进行 EDA 之后,我们对如何解决这个问题有了一个想法。在这里,对其进行了简化,我们希望找到尝试次数过多且成功率低以及尝试使用更多的唯一用户名登录的 IP 地址(异常)。 为此,我们将采用基于阈值的规则作为我们首次涉足异常检测。
Tukey fence | Z-score
源代码
详情参阅 - 亚图跨际
|