带你上手 AI 大赛
原创:晏茜
资料来源:陈旸
本文的主要内容包括以下环节,首先既然文章内容是关于 AI 大赛的,我希望大家直接跟随作者上手去打一场比赛,在这篇文章中,会以保险反欺诈预测比赛为例,通过介绍整个比赛的过程,我们会了解到常用的机器学习神器,同时也会给大家介绍一个工具 —— AutoML。
那么,AutoML 代表什么含义呢?AutoML 在工作中会有所使用,在比赛中,有些选手也会使用。在去年的 CCF 个贷违约预测这场比赛中,广发银行的选手就使用了 AutoGluon。AutoGluon 这个软件是亚马逊开源的一个自动机器学习的工具,自动机器学习的价值就是帮你做一些自动特征工程。我们知道在打比赛的过程中,特征工程是一个非常消耗时间,并且需要不断试错的一个过程,AutoML 就是把它包装好的一种工具,可以让它自己自动的去做一些特征组合,我们在下文会带大家了解这个工具的情况,未来大家可以尝试去使用。在 AutoML 这个细分领域里面,其实很多大厂都已经开源了一些工具。本文给大家介绍一种工具 AutoGluon,该工具的作者之前专门打过 kaggle 比赛( kaggle 社区是专门为数据科学准备的社区),所以对于 kaggle 比赛的规则,怎样去提分,怎样在项目中取得很好的名次都有所了解。他将所有的规则融合到了一个工具里面,这个工具就是 AutoGluon。所以相比于其他的 AutoML 来说,AutoGluon 的结构会更精准一些,它的提分效果也会比一般的 AutoML 好一些。
一、保险反欺诈
首先我们来了解一下保险反欺诈预测比赛。
说到这个场景,先给大家普及一下保险反欺诈的实际价值。在全球的保险中,用于理赔的金额,有将近 20 %,有的甚至高达 50 % 是欺诈行为,每年有将近 800 亿美元被保险欺诈,如果我们能够把这个行为识别出来,哪怕只识别 1 %,都具有非常大的价值。保险欺诈仅次于偷税,是第二大的犯罪行为。近年来,我国对税收的监管越来越严格,保险反欺诈也更成为一个重要的应用场景。在对于过去倒闭的保险公司的调查中,我们发现有将近 1 / 3 的保险公司倒闭的原因都直接与保险反欺诈相关。保险公司遭遇一些诈骗团伙的保险欺诈,会造成非常大的经济损失。那么,保险公司就束手无策了吗?有没有方法可以帮助保险公司去识别风险呢?
举个例子,南非最大的短期保险公司 —— Santam,通过调查发现,这家公司每年有将近 10 % 的保费是属于欺诈行为,既然他们已经发现了这种行为,那么我们就有了 label,有了这个标签,我们试想能否去做一个机器学习的预测,预测它可不可能是欺诈。如果这种行为的欺诈概率很低,保险公司就快速进行理赔,如果这种行为的欺诈概率很高,保险公司就需要人工的来进行进一步的勘察。这样做的好处是可以将理赔行为进行分类,在之前的行为过程中,保险公司都会花费将近三个工作日才能完成理赔,因为他们要将所有的行为都去做一个勘测,这样人工成本就会非常的高,人工成本很高的话,用户的保险理赔的速度就会很慢,那么所有的保险基本上都需要三个工作日才能完成理赔,对于我们正常的用户来说,就会耽误自己的赔保的效率,欺诈成本会以更高的保费形式转嫁到其他客户身上。因此我们有必要帮助保险公司去做第一关的把控,而这个把控可以通过数据建模的方式来实现。
第二个例子是关于支付宝安全险的案例。支付宝于 2015 年推出了账户安全险,它可以保障你的支付宝账户的安全性。假如你购买了一份支付宝安全险,如果你的账户被盗或被偷刷,它最高会赔付 100 万的金额。有一则新闻报道,在 2016 年的时候,温某曾经欠下一笔巨款,于是他就动了一个歪点子,他想支付宝的账号被盗的情况下,他最高可获得 100 万的赔偿,于是就购买了 900 多次游戏点卡,花了将近 70 万元,之后他就向警方去报案说自己的账号被盗了,说他并没有消费,但实际上这个钱已经花出去了。那么保险公司听到这件事肯定要去分析这到底是正常的行为还是异常的行为。后来蚂蚁金服通过数据分析,建立了一个行为的规则库,与温某以前的行为做了对比,发现此次消费行为与温某以前的行为还是比较吻合的,包括使用支付宝的时间、频次、场景等等都是比较吻合的,因此断定温某的支付宝账户被盗的可能性极低,此次理赔行为不会进入到快速的理赔环节中,需要人工来进行介入。警方通过对温某的调查发现,温某之前是有一些赌博行为的,最终判定温某的行为属于骗保的行为。这个案例也充分说明了我们是可以通过数据分析去做一些预判的。
这些保险欺诈的场景对我们的现实的工作是非常有价值的,保险公司也招聘了很多的建模师来做这方面的工作。
我们来看一个关于保险反欺诈预测的项目,在这个项目中,我们拿到了车险的一些数据,车险的数据里面包含成为客户的时长、年龄、保险单号、绑定的日期、上保险所在的地区、csl(一种组合式保险)、保险的扣除费、保险的保费、责任上限、被保人的信息,包括他的邮编、性别、职业、兴趣爱好,还有与理赔人的关系等等。
除此以外还有关于资产情况及出险的情况的数据,其中 incident 是关于出险的情况的数据。而由于是车险,所以除去车辆的损失,还会涉及一些财产和人身的损失。大家都知道无论是自己开车还是租车的情况,都会涉及一些第三方的责任险,所以这里的数据也会包括关于人身的和财产方面的损失。既然是车险,数据中还会包括汽车的品牌和型号,make 在这里指的是一些品牌信息,比如奥迪、宝马、Toyota、大众等等。这里的 model 指具体的型号,比如说凯美瑞、帕萨特、A3、宝马 X5 等等。还包括汽车购买的年份,最后还有是否欺诈。我们拿到这个数据,去进行建模。在数据中,训练集有 700 条,测试集有 300 条,评分标准是 AUC。AUC 是在 curl 曲线下的面积,如图所示,图中画了一条曲线,曲线下的面积大小就是 AUC(阴影部分)。AUC 越大越好。如果 AUC = 0.5,说明这个模型建的没有任何的意义,它跟随机的情况是一样的。如果你做一个项目,它的上线的标准是什么呢?是 AUC ≥ 0.8,这时说明这个模型是有一定价值的。反之,如果 AUC < 0.8 的话,我们还需要进一步对数据来进行优化。产生的原因可能是你的数据太少了,或者你的字段没有充分的体现出来,再或者建模的模型的选择上有问题等等,此时我们都需要对模型进行进一步的优化。
所以根据这样一个数据,我们要做保险反欺诈的预测,需要预测哪个字段呢?我们应该对 fraud_reported 字段进行预测。如果是这个字段的话是什么任务?是分类任务还是回归任务呢?这个字段应该是一个非常经典的二分类任务,所以我们的思考路径是先确定它的任务类型。那么分类任务,一般用什么模型效果会比较好呢?不论是打比赛还是在工作中,比较常见的模型有三种,分别为 XGBoost、lightGBM、CatBoost。
接下来我们来梳理一下整个过程。
Step1,数据加载
Step2,数据探索(缺失值,唯一值个数)
数据探索一般会探索哪些呢?我们可以查看数据是否完整,有无缺失值。我们可以再查看这个唯一值会是什么样的情况。比如说我们的数据现在有 700 条,我们的唯一值有 700 个,这说明什么呢?说明它有可能是一个回归类型的值,还有可能说明它本身就有可能是这样的一个 ID 的属性,所以我们的唯一值个数也是一个比较关键的因素。如果唯一值个数等于 1,又说明什么?就说明我们所有的 700 个人,在这个字段都是完全一样的,那么这个字段还会放到模型中来去做预测吗?答案是不会的。所以唯一值个数也可以帮助对变量的取舍做判断。
Step3,特征工程
1)日期类型字段
在特征工程中,通常我们可能会遇到日期类型的字段,比如上文中提到的出险日期,举例来说,假如出险日期写做2022-1-18,这种形式的日期直接放到模型中是无法处理的,我们需要将它转换成为数字。这里有两种转换的方法,第一种方法是时间多尺度。我们把 2022 年,1 月,和 18 号分别提取出来,year 提取出来是 2022,month 提取出来是 1,day 提取来是 18。同时我们还可以提取出来 weekday,比如说这一天是星期二,我们将 weekday提取为2,这种多尺度的方法,是通过将年月日拆分出来而实现的。第二种方法是时间 diff,也就是时间差。我们在所有的日期里面找一个原点,你可以把它理解成是一个 base。基于原点的距离,它也是一个数值类型。
2)分类字段处理
第二个部分是关于分类字段的处理,我们可以先去找到什么是分类字段,在我们上文的数据中是否有一些类别呢?出险类型,碰撞类型,事故的严重程度都属于类型的情况。
3)是否构造新特征
我们这些数值里面有没有一些新的特征可以去做,这些都是可以去做一些判断的。比如说每年的保费金额和扣除的保费等等,是不是可以做一个加罚等等,我们可以做一个组合的特征。
Step4,机器学习神器使用
XGBoost, LightGBM, CatBoost
对于常见的分类任务,我们会用到 XGBoost, LightGBM, CatBoost 三种常用工具。
Step5,五折子模型融合
我们最后还可以用到五折交叉子模型作为一个融合。模型融合是在比赛最后采用的一种提分策略,你可以把你的 1 个模型拆成 5 个,通过投票的形式,让你的分数得到进一步的提升。
所以,整个过程从加载开始,再到探索,探索就是为了后面的数据预处理做一些准备,探索之后,再到特征工程,之后我们就可以建模了,建模之后我们可以提交结果,当然后面你也可以尝试一下,用五折子模型去做一些融合,这是整个的逻辑流程。
唯一值个数可能很少,可能是 1,唯一值个数可能很多,可能是 1000,如果把所有的数值加到一起,有可能就是 1000。那么对于唯一值个数等于 1000 的字段,我们应当如何处理呢?如图所示,我们把它们按照它们的 value 展示出来。
我们对数据做可视化,也可以把它做成图表的形式。通过图表可以查看数据集是否平衡,在二分类的问题中,是比较容易遇到数据集不平衡的问题的。我们要做欺诈的预测,那么欺诈与哪些特征之间的关系是强关系呢?它与被保人他的兴趣爱好有没有关系?与汽车的品牌有没有关系呢?在前期,我们可以用可视化的方式先把这张图表画出来,这样更易于找到解决问题的方法。
二、常用机器学习神器
三种模型在flight-delays预测中的训练速度和准确度在后面的话我们会用到三种方法,XGBoost,LightGBM,和 CatBoost。这三种方法各有特点。在比赛过程中,三种方法都建议去使用一下。
• XGBoost,计算速度快,效果好,可用于分类和回归任务, AI 大赛必备神器
• LightGBM,训练速度和效率更快、使用内存更低、准确率更高、并且支持并行化学习与处理大规模数据
• Catboost( Categorical Features + Gradient Boosting)降低过拟合的同时保证所有数据集都可用于学习。性能卓越、鲁棒性与通用性更好, 可以匹敌任何机器学习算法
三、保险反欺诈预测
2020年IIHS顶级安全车榜单(部分展示)IIHS ( 美国公路安全保险协会 )
运营资金来源于美国的保险公司,IIHS 定期进行碰撞测试,用于评估不同车型的安全风险。
Thinking:每年 IIHS 都会公布顶级安全车认证榜单,对保险公司和个人消费者,价值是什么?
这里给大家介绍一个组织叫做 IIHS,这个组织叫做美国公路安全保险协会,他们定期会做一些碰撞实验,来评估不同车的安全级别。每年会公布各品牌型号汽车的安全评分,实验方式是它会给汽车做正面的冲撞,侧面的 40 度的冲撞和 25 度的冲撞,这些评分以后可以对你的汽车去做一个打分,如果打分不合格,说明汽车安全系数不高。在国内有一个组织叫做中保研,他们也在做类似的事情,对标了美国的公路安全协会。美国工作安全协会做的碰撞实验,花费很多的资金,毕竟这个车碰撞完以后就报废了。那么这个资金来自谁呢?美国公路安全保险协会不必自掏腰包去做碰撞实验,因为保险公司会给它一大笔钱让它去做这样的实验,那么为什么保险公司愿意给它钱呢?或者说去做了这样的实验,找到了那些顶级安全的车并颁发了认证,对于保险公司和消费者来说,有没有价值呢?其实它的价值还是很大的,如果某汽车在安全检测过程中没有合格,很多消费者就不会买它。对于保险公司而言,这个汽车越安全,它需要赔付的金额就越少,那么对于消费者而言,也会带来很实在的利益,试想一下,如果你买了一辆很安全的车,你的保费是较高还是较低呢?保险公司还能赚取你很多的保费吗?当然不能。所以如果你的车它的安全系数很高的话,是相对不容易出事故的,或者说事故的费用是不高的,所以保费应该就相对会节省很多,这是对于我们消费者的情况。那么我们说,如果一个经过认证的安全性能很高的汽车,它经常出险,就有可能是欺诈行为。它也能从侧面证明我们特征重要性的价值。它从侧面也可以反馈出来哪些行为更有可能是欺诈行为,帮助你来去完善你的保险的产品设计,这个案例为我们的保险反欺诈预测提供了思路。
实际上还有一些工具可以帮助你来去打一些比赛,这里我们介绍一种工具叫做 AutoML,那么这工具是用来做什么的呢?
使用 AutoML 工具( AutoGluon )
1)自动判断任务:'binary', 'multiclass', 'regression'
2)自动特征工程:自动处理表格数据的神经网络(将每个类型特 征单独训练 Embedding 向量),连续特征处理
3)多模型融合:KNN, LightGBM, RandomForest, CatBoost, ExtraTrees 等
那么这个模型怎么用呢?
AutoGluon 是亚马逊开源的 AutoML 工具,使用 15 倍于单次训练的代价,得到调参结果比手调要好,适用于 CV, NLP 和 Tabular 表格,他的特点是无需数据清洗,自动进行特征工程、超参优化、模型选择。这个模型是一个很好用的一个工具,它不仅可以对我们的表格数据能产生作用,它还可以对图像、自然语言等等都会产生作用。
AutoGluon 可以执行的任务:
对Tabular表格预测的特点:
1)使用表格神经网络
2)多模型融合
3)鲁棒的数据预处理
AutoGluon 中的多模型融合
Stack Level 1:多模型的输出结果
Stack Level 2:通过 WeightedEnsemble 模型进行加权融合
AutoGluon 的训练参数:
model = TabularPredictor(label, eval_metric=metric,
path=save_path).fit(train_data, presets='best_quality')
• time_limit : 模型训练的最长等待时间,通常不设置
• eval_metric: 评估指标,AUC还是精度等
• presets: 默认为medium_quality_faster_train,损失了精 度但是速度比较快,如果设置为best_quality,会做 bagging和stacking以提高性能
总结
去接触一个比赛,去打比赛,对于 AI 的从业者,是一个非常好的锻炼的机会,也是非常好的镀金的机会。真正在工作场景中,每天在做的事情不一定只是写代码,你可能花了很长的时间在跟领导、同事、客户沟通或者开会,而当你真正想去写程序时,会发现数据的质量可能不够好,或者这个数据可能存在各种各样的问题。AI 大赛会直接带大家进入到比赛的场景中,真正进入建模的过程,这时当我们再去做项目时,更容易产出成果。同样,作者也希望大家通过打比赛的方式,能够加强自己在某个领域的项目经验。