老肥今天和大家分享的是“梧桐杯”中国移动大数据应用创新大赛的智慧金融赛道的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
生成预测文件。
-
def find_best_t(y_pred, y_true):
-
best_score = f1_score(y_true, np.where(y_pred >=
0.5,
1,
0))
-
t =
0.5
-
for i in tqdm(
range(
300,
700)):
-
current_score = f1_score(y_true, np.where(y_pred >= i /
1000,
1,
0))
-
if current_score > best_score:
-
best_score = current_score
-
t = i /
1000
-
print(f
'best score: {best_score}, best t: {t}')
-
return t
-
-
t =
0.5
-
t = find_best_t(oof_lgb, y)
对于该二分类问题,我们还可以通过调整阈值的后处理方法来提分,选择本地验证集最高f1_score
的阈值, 在预测时采用相同的阈值(原来阈值为0.5),大于该阈值取1,小于该阈值则取0。
完整的代码我已上传至后台,回复「梧桐」即可获得。
——END——
扫码二维码
获取更多精彩
老肥码码码
转载:https://blog.csdn.net/lyc44813418/article/details/114362587