用户登录行为聚类分析

文章目录二、登录行为聚类过程 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、模型测试
模型保存与再利用
利用模块进行模型的保存和索引使用 。
模型测试
将近一周的用户登录数据,输入到各次迭代的聚类模型中,通过与各模型总的簇心计算距离比较,看哪些登录行为归类为异常集群,则判断该登录行为是异常的 。