近来在浏览DataCastle竞赛平台时,注意到了上面挂载的一些数据挖掘训练赛题目,因为是定位于训练赛,主要用于帮助初学者快速熟悉和练手机器学习技能,所以赛题难度相对基础,也没有提供实质性的竞赛奖励。
正好,前期个人在调研一些AutoML相关工具,其中较为好用的一个是AutoGluon,源于亚马逊出品,华人大佬李沐参与研发设计,并曾发文感慨“三行代码击败99%数据科学家”,“调得一手好参的时代要过去了”,可谓攒足了噱头。
网络图片
所以,就刚好拿这个训练赛的题目来检验一下AutoGluon的能力。
赛题数据说明:
数据主要包括企业客户样本信息。数据分为训练数据和测试数据,分别保存在train.csv和test_noLabel.csv两个文件中。字段说明如下: (1)ID:编号 (2)Contract:是否有合同 (3)Dependents:是否有家属 (4)DeviceProtection:是否有设备保护 (5)InternetService:是否有互联网服务 (6)MonthlyCharges:月度费用
(7)MultipleLines:是否有多条线路 (8)Partner:是否有配偶 (9)PaymentMethod:付款方式 (10)PhoneService:是否有电话服务 (11)SeniorCitizen:是否为老年人 (12)TVProgram:是否有电视节目 (15)TotalCharges:总费用 (16)gender:用户性别 (17)tenure:任期年数 (18)Churn:用户是否流失
训练集数据样例:
注意到,该数据集不存在缺失问题,但多数特征字段都是类别型,包括分类标签也未转化为0/1。但应用AutoGluon的便利之处就在于,该框架可以自动完成数据预处理、特征工程、模型选择、模型调参、模型交叉验证、模型集成等必要环节,并最终给出最优方案。而且这些操作仅需简单调用sklearn中.fit()和.predict()的API接口风格即可。
下面给出核心代码:
# 调包
from autogluon.tabular import TabularDataset, TabularPredictor
# TabularDataset是一个继承pandas.DataFrame的数据集类
train_data = TabularDataset('train.csv').drop(columns="ID")
test_data = TabularDataset('test_noLabel.csv').drop(columns="ID")
# 自动模型训练
predictor = TabularPredictor(label='Label').fit(train_data=train_data)
# 模型预测
y_pred = predictor.predict(test_data)
当然,想具体了解这个TabularPredictor模型背后实际训练了哪些模型、效果如何以及最优方案,可以简单的调用learnboard()函数,并得到如下结果:
从中可以看出,AutoGluon训练了13个单模型,并完成了一个集成模型,其中集成模型是最优方案。提前指出一个细节:CatBoost在所有单模型中表现最好,仅次于集成模型。
把这个预测结果提交到DataCastle平台,系统评分0.7972,大概能排到30名左右。这是未加任何调试,仅使用了几行傻瓜调包代码的结果,应该说还是不错的。
当然,为了横向对比其他结果,我也尝试了一下另一个AutoML框架TPOT以及三大集成学习工具XGB、LGB和CAB,发现CatBoost效果居然可以硬刚AutoGluon,而且更重要的是CatBoost也支持对类别型特征以及缺失值的处理等,所以也相当于是具有了一定的AutoML能力。此外,我又简单的对几个模型的输出结果做了进一步的融合,并提交到竞赛平台,大概只有一种情况下取得更好的成绩,达到了0.7988,在当前平台上总排名为19,目前平台已提交队伍数约为200,也即这份预测结果大概能占据10%的水平。