老肥今天和大家分享的是“梧桐杯”中国移动大数据应用创新大赛的智慧金融赛道的Baseline方案(抱歉鸽了很久),线上成绩为0.9438
,处于一个相对靠前的排名位置。
赛题介绍
背景
在金融领域,活跃着一批“职业羊毛党”,他们通过套现、套利行为大肆牟利,影响普通用户本应享有的权益。他们制作各种自动、半自动的黑产工具,如自动注册机、刷单自动机、短信代接平台、分身软件、猫池等,并捆绑手机卡、银行卡或通过第三方平台交易完成套现,从而实现“薅羊毛”活动,自身获利的同时对商家、银行、平台、运营商的利益造成损失。如何从普通用户中有效鉴别出羊毛党,从而提前进行防范,在实际商业应用中有着重要的意义。
任务
防羊毛党评分模型旨在从普通用户中区分出羊毛党用户号码,本次挑战赛设置了更具挑战性的任务,相比其他竞赛,本次竞赛所提供的训练字段相对较少,总体为低资源的竞赛任务,具体包含:
初赛——利用用户通信、流量、app使用等行为数据识别真实羊毛党群体,即简单的二分类问题,是羊毛党,或者不是羊毛党。
数据
每一个号码样本包含两个月的数据,由加密过的手机号码和月份
共同构成主键。包含两个基础特征以及多个月消费特征、APP访问特征、短信特征。训练数据是一月份以及二月份的特征,测试数据为三月份以及四月份的特征。
评价指标
评价指标为标准的F1 score
, 我们可以在这个指标上做很多后处理来提升成绩。
Baseline方案
本方案未做细致特征工程,非常简单的Baseline,将特征分为数值类型的和类别特征。
data=pd.read_csv('data/data_a.csv')#将\N替换为空值data.replace('\\N',np.NaN,inplace=True)#数值特征f_features=['gprs_fee','overrun_flux_fee','out_actvcall_dur','actvcall_fee','out_activcall_fee','monfix_fee','gift_acct_amt','call_cnt','up_flux','down_flux','p2psms_up_cnt','p2psms_cmnct_fee','p2psms_pkg_fee']data[f_features]=data[f_features].astype('float')#类别特征cat_cols=['if_family','if_group','sms_inpkg_ind']data.sort_values('month',inplace=True)data.drop_duplicates('phone',inplace=True)data.reset_index(drop=True,inplace=True)data[cat_cols]=data[cat_cols].astype('category')
并且只选择了一月份的数据来做训练数据,镜像地选用测试集的三月份数据作为测试集数据,使用分层五折进行lgb模型的训练,模型的参数使用祖传参数,评价标准为binary_error
生成预测文件。
deffind_best_t(y_pred,y_true):best_score=f1_score(y_true,np.where(y_pred>=0.5,1,0))t=0.5foriintqdm(range(300,700)):current_score=f1_score(y_true,np.where(y_pred>=i/1000,1,0))ifcurrent_score>best_score:best_score=current_scoret=i/1000print(f'bestscore:{best_score},bestt:{t}')returntt=0.5t=find_best_t(oof_lgb,y)
对于该二分类问题,我们还可以通过调整阈值的后处理方法来提分,选择本地验证集最高f1_score
的阈值, 在预测时采用相同的阈值(原来阈值为0.5),大于该阈值取1,小于该阈值则取0。
完整的代码我已上传至后台,回复「梧桐」即可获得。
——END——
扫码二维码
获取更多精彩
老肥码码码