清华博士带你做AI反欺诈预测任务

开课吧开课吧科科2021-04-08 17:35

点赞
有用
分享分享

反欺诈领域一直是银行业研究的重点,在信贷领域中存在信用卡违约和欺诈的风险,通过用户行为数据,分析申请借款用户的信用状况,可以有效判断是否存在逾期,为银行避免额外的损失。

这类业务场景大多数机器学习工程师也会经常遇到,4月7日的《HelloWorld公开课》,清华大学博士,阿里云MVP,陈旸老师用一小时的时间带你做点击反欺诈任务,一不小心还上了排行榜的前三名,赶快搬好小板凳去看看吧。

AI建模流程

在正式开始任务前,先来看下常规的AI建模的步骤都有哪些,常规的AI建模流程分为数据探索、数据预处理、特征工程、模型建立、参数调优、模型融合六大步骤。

这里有几点需要注意,常见的机器学习模型有XGBoost,LightGBM等,一般情况下优先使用LightGBM,因为它更快,对内存的占用更少。在参数选择上,建议前期采用经验参数,因为这些参数都是经过验证的,一般会得到相对比较好的结果。

有了以上的知识,以下面这个案例为背景,我们来分析下信用卡反欺诈任务的业务特点

2013年9月份两天时间内的信用卡交易数据为284807笔交易,492笔欺诈行为数据样本包括了28个特征,以及交易时间Time和交易金额Amount,因为数据隐私,28个特征值是通过PCA变换得到的结果。字段Class代表该笔交易的分类,Class=0为正常(非欺诈),Class=1代表欺诈

反欺诈

现在,我们需要对上面的任务做一个baseline,套用之前讲过的AI建模流程,将整个任务分为以下五个步骤

数据加载

数据探索,查看label情况

数据预处理,切分数据集

模型选择与训练

预测结果,计算混淆矩阵

接下来,我们思考一下,因为样本的分布非常不均衡,是否可以用准确率来评估模型?这显然是不行的,如果模型一笔欺诈交易都没有识别出来,准确率依然很高。所以我们要引入混淆矩阵,不仅要看准确率,还要看召回率和精确度,所以下面我们将通过代码来显示误差矩阵以及绘制召回率曲线。

显示误差矩阵

def plot_confusion_matrix(cm, classes, normalize = False, title = 'Confusion matrix"', cmap = plt.cm.Blues) :
    plt.figure()
    plt.imshow(cm, interpolation = 'nearest', cmap = cmap)
    plt.title(title)
    plt.colorbar()
    tick_marks = np.arange(len(classes))
    plt.xticks(tick_marks, classes, rotation = 0)
    plt.yticks(tick_marks, classes)
    thresh = cm.max() / 2.
    for i, j in itertools.product(range(cm.shape[0]), range(cm.shape[1])) :
        plt.text(j, i, cm[i, j],
                 horizontalalignment = 'center',
                 color = 'white' if cm[i, j] > thresh else 'black')
    plt.tight_layout()
    plt.ylabel('True label')
    plt.xlabel('Predicted label')
    plt.show()

反欺诈

绘制准确率-召回率曲线

# precision-recall curve
def plot_precision_recall():
    plt.step(recall, precision, color = 'b', alpha = 0.2, where = 'post')
    plt.fill_between(recall, precision, step ='post', alpha = 0.2, color = 'b')
    plt.plot(recall, precision, linewidth=2)
    plt.xlim([0.0,1])
    plt.ylim([0.0,1.05])
    plt.xlabel('召回率')
    plt.ylabel('准确率')
    plt.title('准确率-召回率 曲线')
    plt.show();

反欺诈

 

点击反欺诈预测

有了以上的内容作为铺垫,接下来陈旸老师带着学员们一起做了百度的MarTech Challenge 点击反欺诈预测任务,还是老规矩,我们先来看下业务背景。

广告欺诈是数字营销需要面临的重要挑战之一,点击会欺诈浪费广告主大量金钱,同时对点击数据会产生误导作用。本次比赛提供了50万次点击数据。

比赛文件说明:

train.csv 训练集

test1.csv 测试集(第一阶段)

test2.csv 测试集(第二阶段)

submission.csv 提交数据样例

比赛地址:https://aistudio.baidu.com/aistudio/competition/detail/52

首先要明确,这是一个典型的分类任务,能采用的机器学习模型有XGBoost, LightGBM等,搞明白这个了,套用前面的经验,我们把这个任务分为数据加载、数据EDA、特征筛选、模型训练及预测四个步骤来做。

通过之前学习的步骤使用LightGBM训练出的结果,我们可以非常轻松的排在排行榜的前面,如果将模型换成XGBoost,甚至可以排在排行榜的前三的位置

当然,我们不能仅仅满足这个结果,针对这个Baseline,还有哪些可以优化的地方么?这里举几个常用的方法,利用osv特征和TimeStamp,提取时间多尺度。使用五折交叉验证,将单个模型的多个版本进行融合,或者在LightGBM中对于类别型的特征的处理等等。

千言万语汇总一句,找到关键特征才是王道,如何更智能的找到关键的特征值?对此内容感兴趣的同学可以点击从0到1搭建反欺诈模型观看公开课回放视频!在公开课上,陈旸老师将带你手敲代码实现文章说的全部功能,如果你对机器学习和反欺诈预测任务感兴趣,这堂公开课你千万不能错过

讲师介绍

反欺诈

陈旸,清华大学计算机博士,九三学社成员,清华企业家协会YoungTEEC成员,阿里云MVP,腾讯云TVP,百度AI比赛教练,CCF数据库专委,企业服务客户包括:腾讯、蚂蚁金服、美的、京东、汽车之家、易车、上汽大众、中国银联、中原银行,平安银行,航天信息等

《Hello ,World公开课》是由开课吧推出的面向广大开发工程师的免费加餐课,集结业内名师大咖,聚焦热门技术和实战解决方案,以专业知识分享交流为桥梁,链接正在创造世界的一群科技主力们,向初心致敬,为技术发烧。无论你是初入职场的应届生,还是准备升职加薪的职场精英,相信这里都有你需要的养料。

更多《Hello,World公开课》尽在开课吧广场动态信息频道!

小编推荐:

《Hello,World公开课》你真的懂Zookeeper么?

初窥Web前端工程化:web-pack核心组件设计(下)

《Hello,World公开课》移动互联网后下一个浪潮在哪里?

有用
分享