比赛地址http://bdc.saikr.com/c/cql/34541

赛题

鼠标轨迹识别当前广泛运用于多种人机验证产品中,不仅便于用户的理解记忆,而且极大增加了暴力破解难度。但攻击者可通过黑产工具产生类人轨迹批量操作以绕过检测,并在对抗过程中不断升级其伪造数据以持续绕过同样升级的检测技术。我们期望用机器学习算法来提高人机验证中各种机器行为的检出率,其中包括对抗过程中出现的新的攻击手段的检测。

数据格式

评测指标

F = 5PR/(2P+3R)*100

数据读取和处理

######数据读取和处理
import pandas as pd
import osdef get_data(file):data1=[]count=0with open(file) as f:for i in f.readlines():count+=1arr = i.split(" ")[1].split(';')[:-1]for j in arr:temp = [count]temp.extend(j.split(','))data1.append(temp)data2=[]with open(file) as f:for i in f.readlines():count += 1arr = i.split(" ")[2]data2.append(arr.split(','))data=pd.DataFrame(data1, columns=["id", 'x', "y", "t"])d2=pd.DataFrame(data2, columns=["target_x", "target_y"])d2.target_y=d2.target_y.apply(lambda x:x[:-1])d2['id'] = range(1, 100001)data = pd.merge(data, d2, on="id")return data

数据可视化

import matplotlib.pyplot as plt
%matplotlib inline
# plt.xticks(list(range(len(b))), b['x'].values)
import os
path='F:\\competition_data\\Bigdata\\images'
# os.mkdir(path)
for i in range(1, 3001):b = data[data.id==i]k = list(b['x'].values)# k.extend(set(b['target_x'].values))l = list(b['y'].values)# l.extend(set(b['target_y'].values))plt.plot(k,l,'o-')fig = plt.gcf()fig.set_size_inches(30,15)fig.savefig(path+'\\'+str(i)+'.png', dpi=100)plt.close()

特征提取

###特征提取
def get_features(data):a=pd.DataFrame()data_length = len(set(data.id.values))import numpy as npfor i in range(data_length):test = data[data.id==i]if len(test) != 1:test.index = range(len(test))temp = test[['x', 'y', 't']].diff(1).dropna()temp['distance'] = np.sqrt(temp['x']**2+temp['y']**2)temp['speed'] = np.log1p(temp['distance']) - np.log1p(temp['t'])temp['angles'] = np.log1p(temp['y'])-np.log1p(temp['x'])speed_diff = temp['speed'].diff(1).dropna()angle_diff = temp['angles'].diff(1).dropna()test['distance_aim_deltas']=np.sqrt((test['x']-test['target_x'])**2+(test['y']-test['target_y'])**2)distance_aim_deltas_diff=test['distance_aim_deltas'].diff(1).dropna()arr=pd.DataFrame(index=[0])arr['id']=iarr['speed_diff_median'] = speed_diff.median()arr['speed_diff_mean'] = speed_diff.mean()arr['speed_diff_var'] = speed_diff.var()arr['speed_diff_max'] = speed_diff.max()arr['angle_diff_var'] = angle_diff.var()arr['time_delta_min'] = temp['t'].min()arr['time_delta_max'] = temp['t'].max()arr['time_delta_var'] = temp['t'].var()arr['distance_deltas_max'] = temp['distance'].max()arr['distance_deltas_var'] = temp['distance'].var()arr['aim_distance_last'] = test['distance_aim_deltas'].values[-1]arr['aim_distance_diff_max'] = distance_aim_deltas_diff.max()arr['aim_distance_diff_var'] = distance_aim_deltas_diff.var()arr['mean_speed'] = temp['speed'].mean()arr['median_speed'] = temp['speed'].median()arr['var_speed'] = temp['speed'].var()arr['max_angle'] = temp['angles'].max()arr['var_angle'] = temp['angles'].var()arr['kurt_angle'] = temp['angles'].kurt()arr['y_min'] = test["y"].min()arr['y_max'] = test["y"].max()arr['y_var'] = test["y"].var()arr['y_mean'] = test["y"].mean()arr['x_min'] = test["x"].min()arr['x_max'] = test["x"].max()arr['x_var'] = test["x"].var()arr['x_mean'] = test["x"].mean()arr['x_back_num'] = min( (test['x'].diff(1).dropna() > 0).sum(), (test['x'].diff(1).dropna() < 0).sum())arr['y_back_num'] = min( (test['y'].diff(1).dropna() > 0).sum(), (test['y'].diff(1).dropna() < 0).sum())arr['xs_delta_var'] = test['x'].diff(1).dropna().var()arr['xs_delta_max'] = test['x'].diff(1).dropna().max()arr['xs_delta_min'] = test['x'].diff(1).dropna().in()# arr['label'] = test['label']a = pd.concat([a,arr])return a

模型

###xgb
import xgboost as xgb
test_x = test.drop('id', 1)
train_x = train.drop(['id', 'label'], 1)dtest = xgb.DMatrix(test_x)
# dval = xgb.DMatrix(val_x, label=val_data.label)
dtrain = xgb.DMatrix(train_x, label=train.label)
params = {'booster': 'gbtree','objective': 'binary:logistic',# 'scale_pos_weight': 1500.0/13458.0,'eval_metric': 'auc','gamma': 0.1, #0.2 is ok'max_depth': 3,
# 'lambda': 550,'subsample': 0.7,'colsample_bytree': 0.4,
# 'min_child_weight': 2.5,'eta': 0.007
# 'learning_rate': 0.01,'seed': 1024,'nthread': 7,
}watchlist = [(dtrain, 'train'),
# (dval, 'val')] # The early stopping is based on last set in the evallist
model = xgb.train(params,dtrain,feval=feval,
#                   maximize=False,num_boost_round=1500,
#                   early_stopping_rounds=10,
#                   verbose_eval =30,evals=watchlist)
# model=xgb.XGBClassifier(
# max_depth=4,
#     learning_rate=0.007,
#     n_estimators=1500,
#     silent=True,
#     objective='binary:logistic',
# #     booster='gbtree',
# #     n_jobs=-1,
#     nthread=7,
# #     gamma=0,
# #     min_child_weight=1,
# #     max_delta_step=0,
#     subsample=0.7,
#     colsample_bytree=0.7,
# #     colsample_bylevel=0.7,
# #     reg_alpha=0,
# #     reg_lambda=1,
#     scale_pos_weight=1,
#     base_score=0.5,
# #     random_state=0,
#     seed=1024,
#     missing=None,
# )# xgb.cv(params,dtrain,num_boost_round=1500,nfold=10,feval=feval,early_stopping_rounds=50,)
# model.save_model('./model/xgb.model')
# print "best best_ntree_limit",model.best_ntree_limit  

评价函数

def eval(clf, x,y):prob = clf.predict(x)for i in range(len(prob)):if prob[i] >= 1:prob[i] = 1else:prob[i] = 0p = ((y==0)&(prob==0)).sum()/(prob==0).sum()print("TP"+" : "+str(((y==0)&(prob==0)).sum()) + " " +"预测"+" :"+str((prob==0).sum())+" " +"真实"+" :"+str((y==0).sum()))r = ((y==0)&(prob==0)).sum()/(y==0).sum()if p==0 or r==0:print(0.0)return 0.0f = 5*p*r/(2*p+3*r)*100print(f)return f
def feval(pred, dtrain):y = dtrain.get_label()for i in range(len(pref)):if pred[i] >= 0.5:pred[i] = 1else:pred[i] = 0p = ((y==0) &(pred==0)).sum()/(pred==0).sum()print("-------------------------------------")
#   print("TP"+" : "+str(((y==0)&(pred==0)).sum())+"  "+"预测"+" : "+str((pred==0).sum())+"  "+"真实"+" : "+str((y==0).sum()))r = ((y==0)&(pred==0)).sum()/(y==0).sum()if p==0 or r==0:print(0.0)return "f", 0.0f = 5*p*r/(2*p+3*r)*100print(f)return "f", f
def target(score, num):x=score*(40000+3*num)/5return x

线下cv

from sklearn import cross_validation
score=cross_validation.cross_val_score(m,train.ix[:,1:-1],train.label,cv=10,scoring=eval)
score.mean()

提交结果

pred=model.predict(dtest)
test['prob']=pred
submit=test.sort_values(by="prob").head(20000)
submit=submit[['id']]
submit=submit.astype(int)

线上成绩0.91

第二届高校大数据比赛之鼠标轨迹识别相关推荐

  1. 大数据应用项目创新大赛_第二届海南大数据创新应用大赛收官

    来源:新华网 第二届海南大数据创新应用大赛颁奖仪式现场.新华网发 6月7日,第二届海南大数据创新应用大赛颁奖仪式举行,历经半年角逐,第二届海南大数据创新应用大赛收官.本届大赛总共吸引1664支队伍参赛 ...

  2. 【20保研】中国科学技术大学2019年第二届大学生大数据夏令营通知

    点击文末的阅读原文或者公众号界面左下角的保研夏令营或者公众号回复"夏令营"是计算机/软件等专业的所有保研夏令营信息集合,会一直更新的. 1.申请资格 1)国内大学相关专业(如,数学 ...

  3. 第二届阿里巴巴大数据智能云上编程大赛亚军比赛攻略

    比赛详细情况请看比赛地址: https://tianchi.aliyun.com/competition/entrance/231728/introduction?spm=5176.12281957. ...

  4. 基于Hadoop的高校大数据治理融合系统设计与实现

    本文通过深入分析体验大数据生态圈主流技术,调研分析高校常见信息化系统数据特征,以学生相关数据(如图书数据.一卡通数据.就业数据.医院数据.上网数据)为融合分析研究对象,构建了高校大数据治理融合平台.平 ...

  5. 会议通知|第3届全国高校大数据教学研讨会

    第3届全国高校大数据教学研讨会    通   知 各高校负责人.骨干教师: 国家十三五规划纲要明确提出"实施国家大数据战略,推进数据资源开放共享",为我国在大数据领域的未来发展绘制 ...

  6. 高校大数据专业竞赛建设方案

    第一章 建设背景 1.1 政策分析  2017年1月 工业和信息化部正式发布了<大数据产业发展规划(2016-2020年)>,明确了"十三五"时期大数据产业的发展思路 ...

  7. 数智十年,向新而行:2022 第十届CCF大数据与计算智能大赛在京启动

    9月5日,中国计算机学会主办的大数据与AI领域顶级盛事--第十届CCF大数据与计算智能大赛(简称2022 CCF BDCI)在北京正式启幕.大赛指导委员会主席.中国科学院院士.CCF理事长梅宏,与苏州 ...

  8. “第六届中国大数据应用论坛”隆重举行

    2017年7月16日,由中国新一代IT产业推进联盟指导, CIO时代学院主办,北大 软件工程研究所.全国高校大数据 教育联盟.北达软协办,CIO时代APP承办的"第六届中国大数据应用论坛&q ...

  9. 2021中国高校大数据挑战赛A题复盘+解题思路

    引言 由于个人安排的原因,没有时间参加微信大数据挑战赛,倒是参加了2021年中国高校大数据挑战赛.这次比赛做的是中国电信提供数据集的A题,是一个异常检测的题目,一个人做的本科组二等奖,觉得还是不错的. ...

最新文章

  1. wpf计算字符大小占像素_[读书笔记]《计算机科学速成课》——23 屏幕与2D图像显示...
  2. 使用Angular CLI从蓝本生成代码
  3. python使用正則表達式
  4. ubuntu 14.04设备OVS虚拟OpenFlow交换机配置汇总
  5. @FunctionalInterface
  6. 容器编排技术 -- Kubernetes kubectl rollout pause 命令详解
  7. Android 应用开发---ViewPager---4自主实现滑动指示条
  8. GNS3思科模拟器详细安装教程附下载链接
  9. 5-前置处理器:Pre Processors
  10. Mask R-CNN算法详解
  11. 基于SSM框架的考勤签到请假系统
  12. 机器学习基础(二)——训练集和测试集的划分
  13. hive生产实践问题(一)在使用Hive Client跑job时,一直提示job被kill,
  14. bugkuctf 游戏通关玄学式速通
  15. Linux系统中的内存划分-- VM split
  16. signalr php,继SignalR 持久链接 Web客户端
  17. 服务网格峰会 Service Mesh Summit 2022 重启报名
  18. mysql 时区设定_设置MySQL默认时区
  19. CSDN-迪米特法则
  20. 1:Web开发入门-Java Web

热门文章

  1. 24小时临时邮箱_实用网站 | 临时邮箱,悄悄来悄悄去~
  2. 容器学习 之 管理Volumn(十七)
  3. CSS3的弹性盒子flex详解(2)
  4. 【最佳解法】剑指 Offer 42. 连续子数组的最大和
  5. 【最新合集】编译原理习题(含答案)_2程序设计语言及其文法_MOOC慕课 哈工大陈鄞
  6. html网页访问计数器,HTML添加网站计数器(Cookie)
  7. 邮宝打印面单尺寸调整_摆脱束缚,自由轻松!无线打印奥利给(上)
  8. 成为进阶Linux大佬的第一步
  9. android自定义滤镜,【Android】自定义View那点事(三)ColorFilter篇
  10. 无线路由器和计算机怎么连接网络连接,华为无线路由器怎么连接宽带上网