【二等奖方案】系统访问风险识别「LOL四缺一」团队解题思路

news2024/11/25 21:21:42

第十届CCF大数据与计算智能大赛(2022 CCF BDCI)已圆满结束。大赛官方竞赛平台DataFountain(简称DF平台)将陆续释出各赛题获奖队伍的方案思路。本方案为【系统访问风险识别】赛题的二等奖获奖方案,赛题地址:

https://www.datafountain.cn/competitions/580(戳底部“阅读原文”可直达)

获奖团队简介

团队名称:LOL四缺一

团队成员:团队成员是来自华南理工大学2020级软件学院的四名大三学生。在校期间成员数次获得学校以及企业奖学金,积极参加实验室活动,积极参加华为众智计划以及智能基座项目,打下了良好编程的基础。

所获奖项:二等奖

摘要

当前IAM的探索进程当中,目前最为可具落地的方法,是基于规则的行为分析技术。

但其局限性很明显,它是基于经验的,有宁错杀一千,不放过一个的特点,缺少从数据层面来证明是否有人正在尝试窃取或验证非法获取的身份信息,又或者正在使用窃取的身份信息,以此来提前进行风险预警和处置。

针对此问题,我们团队结合机器学习,建立了一个完整的项目流程。

关键词

lgb模型、特征工程、误判率分析

数据分析

变量名称

业务含义

说明

id

样本ID

_

user_name

用户名

若该变量为空,则说明该条日志为用户登录系统前产生

department

用户所在部门

_

ip_transform

认证IP

(加密后)

真实认证 IP 与加密字符一一对应脱敏处理

device_num_tran

sform

认证设备号

(加密后)

真实认证设备号与加密字符一一对应脱敏处理

browser_version

浏览器版本

_

browser

浏览器

_

os_type

操作系统类型

_

os_version

操作系统版本

_

op_datetime

认证日期时间

_

ip_type

IP 类型

_

http_status_code

HTTP类型码

_

op_city

认证城市

_

log_system_trans

form

接入系统

(加密后)

真实接入系统与加密字符一一对应脱敏处理

url

访问URL

_

op_month

认证月份

_

is_risk

是否存在风险

1:有风险;0:无风险。仅train.csv数据包含该字段

数据集除去id字段一共有16个特征,其中一个是是否被系统判断为风险的特征,其他的是例如用户名、ip号、网络状况、操作时间等登录信息,由此可以还原出用户的行为,以及网络的特征信息等。接着我们分析了所有特征中字段的构成以及数据分布,同时分析了各个字段间的关系,试图还原出这个系统的现实场景。

因为所以能登录进的ip类型都是内网,因此我们判断这是一个公司的私有系统,不对外开放,公司分为5个部门,会计、工程师、销售、人力以及其他,每一个部门都只能访问与其部门内容相对应的网页,不能跨部门访问,例如工程师不能登录到会计网站。各个部门的上下班时间大致相同,但又不完全一致,例如工程师的在岗时间要比其他岗位要再长一些。各部门电脑配备都配备有多种操作系统、浏览器、浏览器版本等。该公司在全国12个主要城市设立分公司,因此访问也相对集中,访问记录正常,因此在国外以及未知地点的访问通常会被判断为危险。同样,当试图登录进系统时,如果触发获取登录码或者获取登录类型时,被系统识别为风险的概率也会较高。

特征工程

2.1 特征拆解

原始数据集中的操作时间特征包含许多信息,因此我们把操作时间拆分成了年、月、日、时、星期几等信息,并且将其转化成了便于运算操作的int64类型。

2.2 特征提取

我们观察了数据集中的数据类型并且绘制了数据分布散点图,通过方差过滤法去除了取值一样的年特征。同时因为检验集中的月份特征与测试集不一样,所以去除了月份特征。

2.3 时序特征衍生

因为系统的使用者是人,而人的行为特征与时间特征具有很强的相关性。在反常的时序中操作必定会伴随一定的风险性。因此我们着重处理时序特征。我们首先引入chinese_calendar 库来进行假期处理,同时统计相同用户的登录时间间隔,并且按照离散型变量分类求出每种离散型变量登录间隔的均值和标准差。最后,因为小时时间是一个周期型变量,单纯用数值型来进行编码是欠妥的,会严重误导模型的训练结果,因此我们将小时正余弦化加入到特征中,取得了不错的效果。

2.4 分组统计特征衍生

除了时序特征之外,我们也可以从登录链路的角度进行分析,如果某些访问与一些系统攻击行为有相同的特征,那么其风险的概率也会增大。因此我们把同一用户前一分钟的访问下载次数纳入考量,如果一分钟之内访问次数过多,可能会有数据泄露的风险。另外,统计部门以及整个系统的前段时间访问量也对总体的访问趋势有影响,因此我们统计了这些访问量并且加入到模型中。

2.5 LabelEncoder 标签编码

因为本题许多离散型变量的取值都是字符类型,因此我们使用labelEncoder对离散型变量进行编码,有利于模型的预测,提高模型的准确率。

模型构造

3.1 数据集选取方法

本次我们使用了五折交叉验证的方法,把训练集划分成五份,并且使用了StratifiedKFold分层抽样,使得每一份子集中都保持和原始数据集相同的类别比例,避免由于样本分配不均而导致的模型偏差。然后将每个子集都做一次验证集,其他四个子集作为训练集,训练出五个不同的模型,用这五个模型最终的验证集的分类准确率的平均数作为此K-CV下分类器的性能指标,可以有效地避免过拟合。

3.2 模型选择

本次我们使用了XGBoost、LightGBM和CatBoost三个模型,因为本次我们处理的训练样本是数据较少的结构化数据领域,因此这三个模型具备较大优势。实验后发现LightGBM表现较好,因此选择其为主模型进行优化。

3.3 参数调整

首先通过人工调参的方式依据拟合程度调整num_leaves、lambda_l1、lambda_l2、learning_rate、max_depth等参数,然后再通过网格搜索搜寻最佳参数,发现了模型的最佳参数。

3.4 模型融合

我们尝试了多个模型的加权融合以及单模型的融合,得到了新的数据结果。

3.5 模型与特征工程的结合——误判率修正

在评估一个分类模型预测效果的好坏时,会出现两个重要的概念:假阳性(False Positive):指的是预测为阳性,但实际上是阴性的情况;假阴性(False Negative):指的是预测为阴性,但实际上是阳性的情况。显而易见,要想继续提高我们现有模型的预测准确度,关键就是减少假阳性和假阴性的情况。

在模型的训练过程当中,会通过五折交叉验证来评估模型预测效果的好坏。其中对于训练集的每一个样本,都会被选中作为验证集的样本被模型预测。将预测结果与实际标签进行比对,就可以识别出假阳性和假阴性的情况。

图1:误判样本的判定演示图

下面是对hour的误判率分析:

图2:不同hour类别对应的样本误判率

这里我们列出了训练集中以访问时间hour分类的不同类别对应的误判率曲线,可以看到,在24个小时中,误判率最低的是第一个小时,仅有百分之1.04,而最高的是第12个小时,有百分之13.18,两者的差值高达百分之12.14。

在实际场景中,这种误判率的不同很有可能是因为这家公司在第8个小时和第12个小时这两个高峰时段有更多的突发事件,因此容易导致模型误判。引入误判率的修正使得模型对特定时段的访问记录的风险判断有了更多的反馈信息。

图3:实际模型训练操作的演示

实际操作中,我们首先对模型进行第一次训练,然后用该模型去预测训练集样本的访问风险概率,将预测结果按hour进行分类,统计得到若干个类别的误判率,将得到的不同类别的误判率作为新特征,用来对模型进行第二次训练,最终得出对测试集预测结果。

应用效果

图4:模型迭代过程中的得分曲线

加入了每分钟访问量和法定节假日在内的多个特征之后,我们的a榜分数从baseline的0.928607提升到了0.937540。后面,误判率修正这个方法对测试集的预测正确率有了很大的提升,A榜分数从0.940143提升到0.945732,排名上升30多名。最后B榜成绩出来,我们的成绩位列第二名。

致谢

感谢主办方提供的这么一个平台,让我们在这里遇到了更好的自己。也要感谢蔡毅老师以及谢嘉元师兄的指导,他们渊博的学识令我们深深敬佩,他们悉心的指导我们不胜感激。最后,也要感谢那个一直努力奋斗的自己,路漫漫其修远兮,吾将上下而求索。

参考

[1] datafountain,系统访问风险识别数据与评测,https://www.datafountain.cn/competitions/580/datasets

[2] Meng Q . LightGBM: A Highly Efficient Gradient Boosting Decision Tree. 2018.n/

[3] 黄博的机器学习圈子,XGBoost、LightGBM与CatBoost算法对比与调参,https://cloud.tencent.com/developer/article/1814287

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/650042.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

从原理到实践,分析 Redis 分布式锁的多种实现方案(一)

一、为什么要用分布式锁 在分布式系统中,为了保证多个进程或线程之间的数据一致性和正确性,需要使用锁来实现互斥访问共享资源。然而,使用本地锁在分布式系统中存在问题。 本地锁的问题 无法保证全局唯一性:本地锁只在本地生效&…

2023年打印机电商市场数据分析

近年来,伴随自动化办公及在线教育等场景的常态化,文件或学习资料等的打印需求不断增长,这也使得打印机需求暴增,打印机市场的市场规模也越来越大。 根据鲸参谋电商平台的相关数据显示,今年1月份至4月份,打印…

进程等待

文章目录 一、进程的结果二、进程等待 一、进程的结果 在现实生活中找别人帮忙办事,别人同意帮忙之后,会反馈给自己的结果无非就是三种: 别人把事办完了,结果是自己想要的别人把事办完了,由于办事的方法错误&#xf…

利用代理ip实现自动化爬虫任务管理

我们在进行爬虫任务管理时,需要对爬取目标、爬取频率、数据存储等多个方面进行规划和管理。使用HTTP代理可以帮助我们提高爬虫效率,同时也可以实现自动化的爬虫任务管理。下面我们来分析一下怎么利用代理ip实现自动化爬虫任务管理。 一、选择代…

Server - 配置 Kubeflow Notebooks 的 JupiterLab 环境

欢迎关注我的CSDN:https://spike.blog.csdn.net/ 本文地址:https://blog.csdn.net/caroline_wendy/article/details/131231501 Kubeflow 的 Notebook 功能是一种方便的方式,让用户可以在 Kubernete s集群上创建和管理交互式的 Jupyter Notebo…

招生 | 北京大学—知识图谱能力提升培训

北京大学继续教育项目 《北京大学—知识图谱能力提升培训班》 招生简章 培训安排 (一)培训时间 上课时间:2023年7月15日—7月17日 上课方式:在北京大学燕园校区(校本部)线下集中授课 (二&a…

科技云报道:大模型时代,AI基础软件机会何在?

科技云报道原创。 大模型时代,离不开算力,算法、数据的喂养。如果将视角放至整个产业链上,算法背后,还有一个关键要素值得被关注,那就是AI基础软件。 算法是实现AI功能的关键,而基础软件则为算法提供运行…

【Unity】代码控制视频的播放(视频播放器-更新)

结果如上图,之前写过一个使用代码控制视频播放器的Demo,但是好多小伙伴说我附带的链接没法下载,这次我直接做一个完整版的,不用下载,照着一步一步做就能做出来。 之前写了如何设置RawImage进行自动播放,大…

movetoThread应用的注意点

分析 官网的说明: void QObject::moveToThread(QThread *targetThread) Changes the thread affinity for this object and its children. The object cannot be moved if it has a parent. Event processing will continue in the targetThread. To move an objec…

流动微管反应器的精密压力控制解决方案

摘要:针对目前连续流反应器或微反应器压力控制中存在手动背压阀控制不准确、电动或气动背压阀响应速度太慢、无法适应不同压力控制范围和控制精度要求、以及耐腐蚀和耐摩擦性能较差等诸多问题,本文提出了相应的解决方案。解决方案的核心是分别采用了低压…

装配式从上世纪就开始了?到现在与BIM还干了这件大事!

​大家好,这里是建模助手。 说起装配式,相信各位都不会陌生。在我国传统建筑业资源浪费率高、污染重而饱受诟病的背景下,施工污染少、建造速度快、资源利用率高的装配式越来越受社会关注。 除了一些常规化的特点,如:…

4.2.2 基础指令的操作

显示日期与时间的指令: date 显示日历的指令: cal 简单好用的计算机: bc 1. 显示日期的指令: date 如果在命令行中想要知道目前Linux系统的时间,那么就直接在命令行界面输入date即可显示: [dmtsaistud…

小程序开发的优点和挑战:全面解析

小程序开发的优点是什么? 对于许多人来说,小程序的出现并没有给他们带来太多惊喜。然而,在过去的几年里,微信一直在努力成为更具影响力的社交平台,并且对于小程序开发的需求也在不断增加。随着小程序应用程序在其生态…

Spring Boot 属性加载原理解析

基于Spring Boot 3.1.0 系列文章 Spring Boot 源码阅读初始化环境搭建Spring Boot 框架整体启动流程详解Spring Boot 系统初始化器详解Spring Boot 监听器详解Spring Boot banner详解Spring Boot 属性配置解析Spring Boot 属性加载原理解析 在《Spring Boot 框架整体启动流程详…

MAYA柔体与弹簧一起使用 6个例子

例子2 Q弹 隐藏物体设置移动动画 例子 3 柔体和粒子 例子4 坑的反弹 例子5 例子6

021+limou+C语言内存管理

0.在Linux下验证C语言地址空间排布 这里是limou3434的博文系列。接下来,我会带您了解在C语言程序视角下的内存分布,会涉及到一点操作系统的知识,但是不多,您无需担忧。 注意:只能在Linux下验证,因为Windo…

如何在客户验收环节搞垮一个项目,大佬是有一套方法的

通过产品、UI、开发、测试撸起袖子加油干,经历需求、设计、研发、测试层层关卡终于进入到了期待已久的客户验收环节。在项目的尾声,连空气里都充满了快活的气氛。 而励志要搞垮项目的大佬心里就不爽了“小样儿,你们认为你们就赢了吗&#xf…

Nginx的安装和配置

下载 访问官网:https://nginx.org/ 点击最新的版本下载, 进入详情页,选择下载任意版本 解压编译安装 tar zxvf nginx-1.22.1.tar.gz解压之后得到文件夹 nginx-1.22 安装之前保证使用的工具和库存在 # 安装gcc yum install -y gcc # 安装…

STM32开发——串口通讯(第2篇)——WIFI(Esp8266)

目录 1.ESP8266 作为设备 2.ESP8266作为服务器 注意:1.在中断中一般不直接在中断服务函数里处理数据,而是在收到数据后直接丢给队列,再处理数据; 2.在中断服务函数里尽量减少使用延时函数及打印函数。 1.ESP8266 作为设备 1.1…

mongo副本集的一些操作

开启副本集 修改配置文件/etc/mongod.conf replication:replSetName: main重启mongod相关服务systemctl restart mongod 注意:每个在副本集中的成员,无论主副replSetName都一样,表示一个副本集的名称 如果添加的节点的replSetName和主节点不一致&…