本文主要完成项目的数据处理以及统计学分析部分,包括构造新字段,数据类型转换、相关性分析等等。为后续的网络模型搭建及训练做准备。
本项目使用Jupyter Notebook进行操作,使用PaddlePaddle框架进行实战操作
1 项目介绍 ✅
为了有效保护企业敏感数据,践行企业安全操作行为准则,杜绝由异常操作行为导致的企业敏感数据泄露安全事件发生,用户异常行为分析与识别成为重难点技术之一。
本项目将使用Paddle搭建人工神经网络,通过机器学习的手段预测用户上网异常评分,本项目包括数据处理与分析、数据预处理、模型搭建、模型训练、模型预测、模型评估等完整流程,尝试搭建三种不同的网络解决该问题。
2. 数据集介绍 ✅
训练数据集保存在csv文件中,数据样本量较大,包括528690条数据,其中ret字段为需要预测的标签值。
具体表头字段及字段含义如下表所示:
字段名称 | 字段说明 |
---|---|
id | 日志数据记录编号 |
account | 用户账号,已脱敏 |
group | 用户归属部门 |
IP | 终端IP |
url | 终端上网网址 |
port | 终端上网应用端口 |
vlan | 终端所在虚拟网域编号 |
switchIP | 终端连接交换机IP |
time | 终端上网行为发生时间 |
ret | 异常行为评价得分 |
3. 数据处理
3.1 导入数据集及依赖库
解压数据集
! unzip -o /home/aistudio/data/data147183/train_data.zip
导入依赖库
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
import numpy as np
3.1.1 读取数据
- 本项目使用的数据集已经过脱敏处理,也是网络上开源的数据集。
直接读取数据会出现中文乱码或者报错问题,需要指定:encoding='gbk'
train_data = pd.read_csv("train_data.csv", encoding='gbk')
train_data.head()
运行结果如下图所示:
# 查看列索引
train_data.columns
运行结果如下图所示:
3.1.2 构造新字段
训练集中的time字段为datetime64类型,可以将其分别拆分成年、月、日、周、小时等字段,考虑将其作为训练特征(features)。
train_data['time'] = pd.to_datetime(train_data['time'])
train_data['hour'] = train_data['time'].dt.hour
train_data['weekday'] = train_data['time'].dt.weekday
train_data['year'] = train_data['time'].dt.year
train_data['month'] = train_data['time'].dt.month
train_data['day'] = train_data['time'].dt.day
这样,新表中就生成了hour、weekday、year等相关字段数据。
3.1.3 查看数据类型
查看数据集中各个字段的数据类型,对于object字段,我们需要对其进行特征编码。
# 查看训练集中各字段的数据类型
train_data.dtypes
运行结果如下图所示:
- 经过字段类型查看,我们发现有些字段是int64类型
- 在后续数据处理中,我们还需要将int64类型转换为float类型,方可传入模型进行训练
3.1.4 查看数据统计学描述
# 查看各字段的基本统计学数据描述
train_data.describe()
运行结果如下图所示:
- 可以观察基本统计学信息
- 比如均值、最大值、中位数等
3.2 重复值检测
使用如下方法判断数据集中是否存在重复值,返回False说明不存在重复值。
train_data.duplicated().any()
3.3 缺失值检测
使用如下方法查看数据集是否存在缺失值(NaN空值),返回True说明非空,即不存在缺失值。
pd.notnull(train_data).all()
3.4 相关性分析
corr = train_data.corr()
# 调用热力图绘制相关性关系
plt.figure(figsize=(15,15),dpi=100)
sns.heatmap(corr, square=True, linewidths=0.1, annot=True)
运行结果如下图所示:
- 可以观察特征变量与标签目标值(ret)的相关性
- 发现两者之间相关性并不是很强,hour特征与其存在一些相关性
- 因此,网络结构搭建也无需太复杂
4. 总结
本文主要完成了基本数据处理部分以及统计学分析部分,为后续搭建神经网络做准备。因为数据集特征并不是很多,我们构造了一些新字段进行相关性分析,合适的新字段也可作为特征传入神经网络进行训练。另外,我们拿到数据的时候,还需要对各个字段的数据类型进行查看,有时候需要转换相应的字段类型才可用于后续模型训练。
本文正在参加「金石计划 . 瓜分6万现金大奖」