文章目录二、登录行为聚类过程 3、模型训练 4、模型测试
一、项目说明 1、背景
EDR通常会收集到大量的有关用户登录行为的告警日志,但并不是所有登录行为都是异常的,因此需更准确地辨别哪些登录行为异常行为 。
2、概述
登录行为聚类分析,主要是以EDR所采集的公司内各终端数月的win-登录行为告警数据为基础,对用户登录行为进行聚类,
通过多次聚类,得到异常集群,然后与业务人员一同对该集群进行分析,判断其是否产生异常行为 。
二、登录行为聚类过程 1、数据读取:
数据类型:win-的登录成功行为告警数据
数据读取:(1)连接数据库直接读取形成(实时更新);(2)读取数据下载到本地处理(离线分析) 。
2、数据预处理和参数确定: (1)数据形式
如特征表数据字典,该数据集由57个特征组成的12月1日至今的登录行为告警数据 。
(2)初步业务特征选择
业务筛选特征:
首先通过业务了解,对特征进行初步筛选,仅选择与登录成功行为相关的特征 。
保留以下特征:
['dtdlcgs','jycdlcgsjd','j7tdlcgs','j14tdlcgs','j28tdlcgs','ljdlcgs','t1_zhmyms','t7_zhmyms', 't14_zhmyms','t28_zhmyms','lj_zhmyms','t1_jcxxs','t7_jcxxs','t14_jcxxs','t28_jcxxs','lj_jcxxs','t1_gzts','t7_gzts','t14_gzts','t28_gzts','lj_gzts','t1_zydzs','t7_zydzs','t14_zydzs','t28_zydzs','lj_zydzs','t1_dljcs','t7_dljcs','t14_dljcs','t28_dljcs','lj_dljcs']
(3)缺失值处理、标准化
缺失值处理
删除缺失值:.方法 。
离散属性处理
文章插图
pd.独热编码,处理离散变量,处理后得到73个特征
标准化处理
最大最小标准化
dataSet_sc = (dataSet-dataSet.min())/(dataSet.max()-dataSet.min())
(4)聚类簇数选择
轮廓系数法
采用轮廓系数法,簇心个数区间设置为3到8,对于不同的k值计算聚类模型的轮廓系数值,确定当前聚类阶段的簇数k-
K = range(3,8) # 设置个数区间coef = []for k in K:km = KMeans(n_clusters=k,random_state = 0).fit(dataSet_sc) #构建kmeans模型并训练score = silhouette_score(dataSet_sc, km.labels_,sample_size=915) # 计算对应模型的轮廓系数coef.append(score)plt.plot(K,coef) # K为x轴输出,coef是y轴输出plt.xlabel('k')font = FontProperties(fname=r'c:\windows\fonts\msyh.ttc', size=20)plt.ylabel(u'轮廓系数', fontproperties=font)plt.title(u'轮廓系数确定最佳的K值', fontproperties=font)plt.show()
(5)二次特征选择
方差阈值法进行特征选择
统计各特征的方差,得到最小方差,最大方差,设定最小阈值,最大阈值,按10等分取步长.
根据不同的阈值,剔除方差大于阈值的特征,得到不同的特征矩阵,然后训练k=k-的聚类模型,计算轮廓系数值,
得到阈值a,筛选特征 。
3、模型训练
###(1)形成新
根据特征筛选的结果,标准化后的剔除未被选择的特征生成新的特征矩阵
如:[FalseTrue False False False FalseTrueTrueTrueTrueTrueTrueTrueTrueTrueTrueTrueTrueTrueTrueTrueTrueTrueTrueTrueTrueTrueTrueTrueTrueTrue]False表示剔除,True表示保留 。drop_fea为剔除特征组成的列表 。newdata为dataSet_sc剔除相关特征后形成的数据集 。new_data = http://www.kingceram.com/post/dataSet_sc.drop( drop_fea,axis=1)
(2) 训练模型
文章插图
训练模型,簇数k=,初始化簇心方法init为++,默认为10,选择最优结果 。
model = KMeans(n_clusters=k-certain, random_state=0,max_iter=1000).fit(new_data.iloc[:,:].values)
(3) 模型结果输出
简单打印结果
统计各类别种的样本数目,得到聚类中心,进行横向连接 。
r1 = pd.Series(model.labels_).value_counts() #统计各个类别的数目r2 = pd.DataFrame(model.cluster_centers_) #找出聚类中心r = pd.concat([r2, r1], axis = 1) #横向连接(0是纵向),得到聚类中心对应的类别下的数目0123...6970710 00.2174590.3811370.3751330.326451...0.0600000.5000000.0600005010.0039740.0048130.0038800.003232...0.0324010.3460970.05007467920.0032750.0040070.0033230.002924...0.0478470.3887560.039474836
输出原始数据及其所属簇类
r = pd.concat([new_data, pd.Series(model.labels_, index = new_data.index)], axis = 1)#详细输出每个样本对应的类别r.columns = list(new_data.columns) + [u'聚类类别'] #重命名表头r.to_csv(r'E:\EDR_log_analysis\数据\聚类结果.csv') #保存结果
利用TSNE进行数据降维展示聚类结果
(4) 迭代聚类
输出多次聚类的结果
迭代聚类,直到各集群内的样本数目没有数量级上的明显差别 。
如:第一次聚类结果:0123...2829300 00.4187830.8030300.7647920.761314...0.9000000.9500000.9500002410.0051500.6147310.0058050.004565...0.2975180.3045260.30452668520.0031900.6297790.0039060.003237...0.1792060.1920560.192290856第二次聚类结果:0123...2829300 00.0081720.6368180.0107100.011190...0.2150000.2318750.23218780010.0121680.6119420.0146930.014675...0.3755270.3843180.38431871120.0000570.5212120.0001000.000116...0.2500000.2500000.25000030第三次聚类结果:0123...2829300 00.0044660.6823180.0066650.007494...0.0256410.0329670.03296727310.0229270.8097250.0268400.025029...0.5038760.5116280.51162825820.0173510.5826450.0200060.016401...0.2500000.2500000.2500002230.0093150.6049360.0119450.012408...0.3305230.3524450.35286759340.0058870.4871730.0075280.008668...0.2753420.2828770.282877365第四次聚类结果:0123...2829300 00.0126120.8614050.0163130.016264...0.3191210.3468990.34689938710.0044250.6745670.0062730.007159...0.0116730.0194550.01945525720.0058870.4758110.0074300.008622...0.2755850.2828950.28289534230.0241540.8009730.0282460.026189...0.5102880.5123460.51234624340.0034860.2601400.0047890.006070...0.3413460.3567310.357692260
(5) 对多次聚类结果进行分析
【用户登录行为聚类分析】
迭代聚类过程中,已经将聚类结果中的异常集群标注为xxx_ourlier_an,表示它是与其他集群有明显异常的 。接下来会将该集群内的样本和其他正常集群内的样本进行对比分析,并与专业人士探讨其异常原因 。具体方法:统计分析各集群内样本特征的均值及标准差,将异常集群与正常集群进行对比分析,得出哪些特征差异性较大,并与专业人士探讨该特征起到的作用,以及该异常行为的归类 。
4、模型测试
模型保存与再利用
利用模块进行模型的保存和索引使用 。
模型测试
将近一周的用户登录数据,输入到各次迭代的聚类模型中,通过与各模型总的簇心计算距离比较,看哪些登录行为归类为异常集群,则判断该登录行为是异常的 。
- linux中一些常见的入门级命令
- cas单点登录实现原理
- vmware 用户在命令行发出了EULAS_AGREE = 1 【终极解决办法
- 电脑安全小知识
- Google 的客户参与团队解释了他们如何使用人工智能来取悦全球数十亿用户
- 内含福利 小程序如何用data的数据控制页面展示_小程序实战之登录的原理和实现
- 微博活跃用户连续10季度增长超30%
- x86实模式保护模式
- QQ、微信、新浪等第三方登录,集成到基于机智云框架的APP上
- 理论培训安驾365登录显示苹果设备不支持支付功能