今天老肥和大家分享的是山东省第二届数据应用创新创业大赛-日照分赛场-公积金贷款逾期预测的baseline, 这个赛题是结构化数据的分类问题,相对来说入门门槛较低,那就一起来看看吧!

赛事介绍

山东省第二届数据应用创新创业大赛以“数聚赋能,智惠山东”为主题,鼓励企业、社会组织和个人积极探索开展大数据创新应用,加快推进公共数据资源开发利用,在数据供给方和数据需求方之间形成常态化对接机制,推动数字经济、数字社会融合发展,促进发挥数据“优政、惠民、兴业”作用,助力“数字山东”建设。公积金贷款逾期预测是本次创新创业大赛算法赛的其中一题。

公积金贷款逾期预测Baseline分享_Baseline

比赛数据

本题的目标是从真实场景和实际应用出发,利用个人的基本身份信息、个人的住房公积金缴存和贷款等数据信息,来建立准确的风险控制模型,来预测用户是否会逾期还款。

赛题一共提供了40000带标签训练集样本,15000不带标签的测试集样本,需要注意的是本赛题测试样本包含干扰样本(干扰样本不参与得分计算),未可得知这些样本究竟是真样本但不参与评测还是本身就是代码生成的假样本,这可能会在很大程度上影响样本的分布。数据仅有一张表,一共有19个基本特征,且均不包含任何缺失值。

评价标准

本赛题成绩排名根据测试集的在公积金逾期风险监控中,需要尽可能做到尽可能少的误伤和尽可能准确地探测,使用了“在FPR较低时的TPR加权平均值”作为平均指标,这个指标的波动性非常大,而且几乎不能直接优化,于是我采取AUC指标来优化我的模型。

Baseline方案

我的思路也非常简单,主要就是两块内容,分别是对类别特征和数值特征的处理。我们首先将所有类别特征字段做目标编码,并统计所有类别特征的频数,将频数极小的类别特征归为一类;数值特征提取出偏离特征,即单个个体与分组之间的距离。

def kfold_mean(df_train, df_test, target, target_mean_list):
folds = StratifiedKFold(n_splits=5)

mean_of_target = df_train[target].mean()

for fold_, (trn_idx, val_idx) in tqdm(
enumerate(folds.split(df_train, y=df_train['label']))):
tr_x = df_train.iloc[trn_idx, :]
vl_x = df_train.iloc[val_idx, :]

for col in target_mean_list:
df_train.loc[vl_x.index, f'{col}_target_enc'] = vl_x[col].map(
tr_x.groupby(col)[target].mean())

for col in target_mean_list:
df_train[f'{col}_target_enc'].fillna(mean_of_target, inplace=True)

df_test[f'{col}_target_enc'] = df_test[col].map(
df_train.groupby(col)[f'{col}_target_enc'].mean())

df_test[f'{col}_target_enc'].fillna(mean_of_target, inplace=True)
return pd.concat([df_train, df_test], ignore_index=True)

模型采用了lightgbm,采用auc指标和默认参数以五折交叉验证的形式训练,不知是否是评价指标的关系,本方案的线上线下成绩gap较大。

最终该baseline方案可以获得0.5左右的线上分数。显然,改进的方案有很多,使用公积金贷款的相关知识来做特征工程就是一个不错的方向。

完整的代码我已经上传,在后台回复「公积金」即可。

 

——END——

 

 

公积金贷款逾期预测Baseline分享_Baseline_02