系统认证风险预测-Baseline
比赛任务
本赛题中,参赛团队将基于用户认证行为数据及风险异常标记结构,构建用户认证行为特征模型和风险异常评估模型,利用风险评估模型去判断当前用户认证行为是否存在风险
利用用户认证数据构建行为基
采用监督学习模型,基于用户认证行为特征,构建风险异常评估模型,判断当前用户认证行为是否存在风险
比赛数据集
https://www.heywhale.com/mw/dataset/6189288bebdfaf0017562059/file
赛题baseline:
导入包
import warnings
warnings.simplefilter('ignore')import os
import re
import gc
import jsonimport numpy as np
import pandas as pd
pd.set_option('max_columns', None)
pd.set_option('max_rows', 200)
pd.set_option('float_format', lambda x: '%.3f' % x)
from tqdm.notebook import tqdm
from sklearn.preprocessing import LabelEncoder
from sklearn.model_selection import KFold, StratifiedKFold
from sklearn.preprocessing import StandardScaler, MinMaxScaler
from sklearn.metrics import roc_auc_score
import lightgbm as lgb
合并数据集
train = pd.read_csv("E://data//DF//CCK-系统认证风险预测/train_dataset.csv", sep='\t')
test = pd.read_csv('E://data//DF//CCK-系统认证风险预测/test_dataset.csv', sep='\t')
data = pd.concat([train, test])
特征转换
data['location_first_lvl'] = data['location'].astype(str).apply(lambda x: json.loads(x)['first_lvl'])
data['location_sec_lvl'] = data['location'].astype(str).apply(lambda x: json.loads(x)['sec_lvl'])
data['location_third_lvl'] = data['location'].astype(str).apply(lambda x: json.loads(x)['third_lvl'])data['auth_type'].fillna('__NaN__', inplace=True)for col in tqdm(['user_name', 'action', 'auth_type', 'ip', 'ip_location_type_keyword', 'ip_risk_level', 'location', 'device_model','os_type', 'os_version', 'browser_type', 'browser_version','bus_system_code', 'op_target', 'location_first_lvl', 'location_sec_lvl', 'location_third_lvl']):lbl = LabelEncoder()data[col] = lbl.fit_transform(data[col])
时间的处理
data['op_date'] = pd.to_datetime(data['op_date'])
data['op_ts'] = data["op_date"].values.astype(np.int64) // 10 ** 9
# data["op_date"].values.astype(np.int64)
# data = data.sort_values(by=['user_name', 'op_ts', "action"]).reset_index(drop=True)
data = data.sort_values(by=['user_name', 'op_ts', "action"]).reset_index(drop=True)
# data['last_ts'] = data.groupby(['user_name',"action"])['op_ts'].shift(1)
data['last_ts'] = data.groupby(['user_name'])['op_ts'].shift(1)
data['ts_diff1'] = data['op_ts'] - data['last_ts']
data["weekday"] = data["op_date"].dt.dayofweek+1
# data.groupby("weekday")["ts_diff1"].sum()
data["year"] = data["op_date"].dt.year
data["year"] = data["year"].map({2018:0, 2019:1, 2020:2})
data["month"] = data["op_date"].dt.month
data["day"] = data["op_date"].dt.day
特征构建:
data["ts_diff1_log"] = data["ts_diff1"].apply(np.log)
data["ts_diff1_log_log"] = data["ts_diff1"].apply(np.log).apply(np.log)
for f in ['ip', 'location', 'device_model', 'os_version']:data[f'user_{f}_nunique'] = data.groupby(['user_name',"action"])[f].transform('nunique')
for method in ['mean', 'max', 'min', 'std',"prod"]:data[f'ts_diff1_{method}'] = data.groupby(['user_name',"action"])['ts_diff1'].transform(method)=```
构建与标签相关性高的数据(但是并没有业务意义)```python
data["auth_type//ip_risk_level"] = data["auth_type"]/data["ip_risk_level"]
data["ip_risk_level//auth_type"] = data["ip_risk_level"]/data["auth_type"]
data["browser_type//auth_type"] = data["browser_type"]/data["auth_type"]
data["browser_version//auth_type"] = data["browser_version"]/data["auth_type"]
查看相关性
data.corr()["risk_label"]# 与标签的相关性
ip_risk_level//auth_type -0.032
auth_type//ip_risk_level -0.028
browser_type//auth_type -0.025
browser_version//auth_type -0.021
op_ts -0.021
last_ts -0.021
year -0.017
browser_version -0.009
browser_type -0.009
weekday -0.009
day -0.008
month -0.008
ip_risk_level -0.007
auth_type -0.006
删除没用的特征
data.drop(['client_type', 'browser_source', "user_name", "bus_system_code"], axis=1, inplace=True)
# data.drop(['client_type', 'browser_source', "browser_type"], axis=1, inplace=True)
train = data[data['risk_label'].notna()]
test = data[data['risk_label'].isna()]
查看相关性热力图
选取feature_names
ycol = 'risk_label'
feature_names = list(filter(lambda x: x not in [ycol, 'session_id', 'op_date', 'last_ts'], train.columns))
训练模型
model = lgb.LGBMClassifier(objective='binary',boosting_type='gbdt',tree_learner='serial',num_leaves=32,max_depth=6,learning_rate=0.05,n_estimators=3000,subsample=0.8,feature_fraction=0.6,reg_alpha=0.,reg_lambda=0.,random_state=1983,is_unbalance=True,metric='auc')oof = []
prediction = test[['session_id']]
prediction[ycol] = 0
df_importance_list = []kfold = StratifiedKFold(n_splits=5, shuffle=True, random_state=1983)
for fold_id, (trn_idx, val_idx) in enumerate(kfold.split(train[feature_names], train[ycol])):X_train = train.iloc[trn_idx][feature_names]Y_train = train.iloc[trn_idx][ycol]X_val = train.iloc[val_idx][feature_names]Y_val = train.iloc[val_idx][ycol]print('\nFold_{} Training ================================\n'.format(fold_id+1))lgb_model = model.fit(X_train,Y_train,eval_names=['train', 'valid'],eval_set=[(X_train, Y_train), (X_val, Y_val)],verbose=500,eval_metric='auc',early_stopping_rounds=50)pred_val = lgb_model.predict_proba(X_val, num_iteration=lgb_model.best_iteration_)df_oof = train.iloc[val_idx][['session_id', ycol]].copy()df_oof['pred'] = pred_val[:, 1]oof.append(df_oof)pred_test = lgb_model.predict_proba(test[feature_names], num_iteration=lgb_model.best_iteration_)prediction[ycol] += pred_test[:, 1] / kfold.n_splitsdf_importance = pd.DataFrame({'column': feature_names,'importance': lgb_model.feature_importances_,})df_importance_list.append(df_importance)del lgb_model, pred_val, pred_test, X_train, Y_train, X_val, Y_valgc.collect()df_importance = pd.concat(df_importance_list)
df_importance = df_importance.groupby(['column'])['importance'].agg('mean').sort_values(ascending=False).reset_index()
df_oof = pd.concat(oof)
print('roc_auc_score', roc_auc_score(df_oof[ycol], df_oof['pred']))## roc_auc_score 0.5131761316649879prediction['id'] = range(len(prediction))
prediction['id'] = prediction['id'] + 1
prediction = prediction[['id', 'risk_label']].copy()
prediction.columns = ['id', 'ret']
prediction.head()# id ret
6147 1 0.378
6148 2 0.488
6149 3 0.502
6150 4 0.509
6151 5 0.480
系统认证风险预测-Baseline相关推荐
- DataFountain2021丨系统认证风险预测 TOP方案(附代码)
前段时间组队参加了DataFountain上"系统认证风险预测"挑战赛, 最后排名A榜第2, B榜第14, 遗憾未能进入决赛, 在这里分享下比赛过程, 最后有代码供各位参考. 比赛 ...
- 【2021CCF基线系统】基于飞桨实现系统认证风险预测-异常检测
[2021CCF基线系统]系统认证风险预测-异常检测 本项目基于百度飞桨PaddlePaddle实现系统认证风险预测-异常检测 一.赛题背景 随着国家.企业对安全和效率越来越重视,作为安全基础设施之一 ...
- 系统认证风险预测方案总结
文章目录 1. 算法方案解析 1.1 题目理解 1.2 数据探索 1.3 特征构造 1.3.1 原始特征 1.3.2 时间特征 2.3.3 统计交叉特征 2.3.4 特征构造-词嵌入特征 2.4 模型 ...
- uci数据集中的缺失数据_从uci早期糖尿病风险预测数据集中创建分类器
uci数据集中的缺失数据 To begin we must first go and download the dataset from the UCI dataset repository. The ...
- 2020CCF BDCI 企业非法集资风险预测-线上0.848(水哥的baseline),在此基础已做到线上0.848,排名前1%(参赛队伍3000+))。
首先感谢DataWhale这个组织,今年上半年在学校机器学习的过程中得知有这么个开源组织,南瓜书也是他们一起编写,看过西瓜书<机器学习-周志华>的同学应该都知道吧.感谢组织内的水哥和鱼佬b ...
- 【参赛记录】糖尿病遗传风险预测
[参赛记录]糖尿病遗传风险预测 一.选题背景 二.题目任务 2.1 数据集字段说明 2.2 训练集说明 2.3 测试集说明 三.评估指标 四.数据分析和处理 4.1 缺失值和异常值分析 缺失值 异常值 ...
- 面向适航符合性的智能航电系统认证研究进展
摘要 民用飞机航电系统引入人工智能/机器学习技术会带来可信性.不确定性和可解释性等问题,有必要通过有效的符合性方法向公众与利益攸关方证实智能航电系统的适航安全性.首先,分析了智能航电系统的等级分类和应 ...
- 企业非法集资风险预测_2020CCF--企业非法集资风险预测83.35baseline
企业非法集资风险预测 竞赛 - DataFountainwww.datafountain.cn 代码地址github.com 欢迎大家开源关注我的github仓库以及该知乎专栏,该仓库用于记录和定 ...
- 怎样判断一个诊断(风险预测)模型的好坏?
有一类研究看似简单,其实水挺深的. 比如你觉得前列腺特异性抗原(PSA)用来筛查前列腺癌不准确,你收集临床样本做了个癌和癌旁组织的lncRNA检测,筛选出差异表达的,建立回归模型,看它们对前列腺癌的预 ...
最新文章
- matplotlib 设置图形大小时 figsize 与 dpi 的关系
- 用户密码登录改造实现
- 记一次热更新上传补丁包失败问题
- 非常有趣的Console
- trc20地址监听php,Tron/USDT-TRC20对接PHP开发包 - 人人都是架构师
- java 接口数据类型_Java 数据类型(中): 抽象类与接口
- mysql 窗口函数_MySQL数分:窗口函数
- 《程序员面试宝典》精华 面向对象部分
- 生活中的数学 —— 操场几何学
- YOLO: Real-Time Object Detection 遇到的问题
- 深圳90后小伙拿到14所国外名牌大学offer
- ISM模型的MATLAB代码
- 天闻角川超人气IP「画猫·雅宋」数字藏品限量开售!
- 小游戏1024纯C语言
- LCD自适应LED背光控制技术
- B/S文件上传下载解决方案
- ews java 新建邮箱_通过EWS发送电子邮件时使用自定义显示名称
- python 字符串的输入和输出
- 如何将MAC的文件存储至NAS网络存储?
- 内存管理-内存池的实现