获奖团队简介
团队名称:今天不练腿
团队成员:关俊生、陈熠、张蓬浩、周贤军
团队成员均系重庆邮电大学计算机科学与技术专业硕士研究生二年级学生,隶属于计算智能重庆市重点实验室,研究方向均为大数据人工智能相关方向。团队成员对数据分析、数据挖掘、人工智能有着浓厚的兴趣,并具有相关专业知识。
团队获奖经历如下:第二届中国移动“梧桐杯”大数据应用创新大赛初赛第六名、复赛第七名;遗址文化领域知识抽取与问答挑战赛初赛第一名;2022年MathorCup高校数学建模挑战赛一等奖。
所获奖项:二等奖
摘 要
以北京、上海、广州、深圳等城市为首的一线大城市,带领着我国经济稳步发展。然而,随着一线城市的生活压力不断增大,越来越多的年轻人选择了返回家乡发展。因此,本文的任务便是基于中国联通的大数据能力,通过使用对联通的信令数据、通话数据、互联网行为等数据进行建模,对个人是否会返乡工作进行判断。
数据主要分为三类特征,分别为位置类、互联网和通话类共46个特征,且都是匿名特征。通过对数据进行建模分析对个人是否返乡进行预测,预测任务为二分类任务。评测标准使用ROC曲线下面积AUC(Area Under Curve)作为评价指标,AUC越大,预测越准确。
整个过程包括数据分析、特征构造、特征筛选、模型选择、模型融合等步骤。通过数据分析,删除干扰数据,选取训练集前50000条数据作为训练数据。由于数据均为匿名特征,因此特征构造尤为重要。除了常规的统计特征,我们还使用DAE(Denoising Auto-Encoder)降噪自编码器[2]、遗传算法进行特征组合的迭代、XGBoost[1]、autox[4]等方式进行特征构造。当然,上述方法构造的特征中存在冗余甚至是干扰特征,因此,还需要对特征进行筛选。而在模型选择上,我们使用了LightGBM[3]和深度神经网络两个模型。最终,将不同模型的预测结果进行概率密度加权融合生成最终结果。
关 键 词
返乡,匿名特征,二分类预测,DAE,XGBoost,LightGBM,神经网络
1 数据分析
模型的构建离不开数据的挖掘与分析,本次比赛所给数据均为匿名数据,在不知道特征表达是何种具体业务的情况下,更加凸显出数据挖掘与分析的重要性。因此从数据入手,挖掘出数据背后所隐藏的规律是本次大赛的关键所在。
1.1 数据概览
本次比赛的任务是基于中国联通的大数据能力,通过使用对联通的信令数据、通话数据、互联网行为等数据进行建模,对个人是否会返乡工作进行判断。其中训练集占全量数据集的70%,测试集占全量数据集的30%,训练集中包含部分无标签数据。其中数据均已经过脱敏处理,并采用匿名特征的方式进行竞赛。
得益于联通大数据能力,数据主要基于三大特征构造,分别是位置类特征、互联网类特征以及通话类特征,如表1,下文的特征构造和特征选择均围绕着此三大特征展开。在数据集中每条数据均有一个唯一标识id并对应一个唯一标签label。
1.2 数据可视化分析
数据可视化能够更加直观的展示比赛数据之间的关系,更方便我们对数据进行进一步的挖掘分析。通过对训练集和测试集进行作图分析挖掘其中的关系,更有利于特征构造。
1.2.1 数据整体分布
训练集测试集分布不一致,模型容易过拟合训练集,而在测试集中表现不好,造成线上成绩不稳定。因此核密度估计法画图观察训练集和测试集分布是否一致,核密度估计不利用有关数据分布的先验知识,对数据分布不附加任何假定,是一种从数据样本本身出发研究数据分布特征的方法,能够更加准确的捕获训练集和验证集之间分布关系。其中,图1、图2、图3、图4、图5为训练集和验证集之间特征分布情况。
图1:位置类特征分布情况
图2:互联网特征分布情况(a)
图3:互联网特征分布情况(b)
图4:互联网特征分布情况(c)
图5:通话特征分布情况
图6:训练集标签分布情况
通过观察图1-5发现,位置类和通话类特征在训练集和测试集上分布并无明显差异,而在部分互联网特征中存在少量差距,对预测结果影响不大。通过图6可以看到训练集标签有不平衡现象,常见的处理标签不平衡的方法有过采样和欠采样,但是由标签不平衡现象并不是很显著,因此这里不做处理。
1.2.2 相关性分析
数据相关性分析主要是为了挖掘出特征变量与分类标签之间的联系。在这里我们采用Pearson相关系数进行度量,Pearson是用来反应两变量之间相似程度的统计量,在机器学习中可以用来计算特征与类别间的相似度,即可判断所提取到的特征和类别是正相关、负相关还是没有相关程度。特征相关性如图7所示。
图7:特征相关性热力图
通过图7,我们可以看到位置特征中的f4,f5,f6与目标变量之间有较高的相关性,这也是接下来构造特征的重点。
1.3 数据清洗
通过对训练集数据进行可视化分析后以及模型初步训练后,发现数据中存在部分噪声数据,导致模型训练差,因此需要对这部分噪声数据进行清洗。这里我们使用LightGBM[3]模型,将训练集数据切割成60份,对每一份数据单独作为验证集。结果显示0到49折AUC均在0.9左右,50折到59折AUC均在0.5左右,为噪声数据。50折到59折结果如表2所示,因此对50到59折数据进行删除处理,最后得到五万条数据。
2 特征构造
数据和特征决定了机器学习的上限,好的特征能够提高预测的精度,而本赛题提供的原始数据均为匿名特征,在不知道特征表达是何种具体业务的情况下,如何构造出优秀的特征是本题的重中之重。我们采用多种方法进行特征构造以达到更好的预测效果。
2.1 DAE(降噪自编码器)
因经过数据清洗之后,训练集与测试集仍存在一定分布差距,即训练集中仍存在噪声。为此,我们使用的网络是一个 Auto-Encoder网络,中间层是 transformer 样式的编码器块。
在神经网络模型训练阶段开始前,通过Auto-Encoder对模型进行预训练可确定编码器W的初始参数值。然而,受模型复杂度、训练集数据量以及数据噪音等问题的影响,通过Auto-Encoder得到的初始模型往往存在过拟合的风险。简单理解,在人类的感知过程中,某些模态的信息对结果的判断影响并不大。举个例子,一块圆形的饼干和一块方形的饼干,在认知中同属于饼干这一类,因此形状对我们判断是否是饼干没有太大作用,也就是噪声。如果不能将形状数据去除掉,可能会产生“圆饼干是饼干,方饼干就不是饼干”,即过拟合的问题。
当采用无监督的方法分层预训练深度网络的权值时,为了学习到较鲁棒的特征,可以在网络的可视层(即数据的输入层)引入随机噪声,这种方法称为DAE(Denoising Auto-Encoder)降噪自编码器[2]。对于有噪音的输入数据,区别于一般自编码机,降噪自编码机要做的就是数据的降噪。
图8:DAE降噪流程图
关于降噪的过程如图:对于输入层x,以一定概率将其节点置0,得到,用去计算y,再计算z,并将z与原始x做误差迭代,对结果误差较小的节点可以认为是噪声。每层处理重复上述工作。
自编码器的本质是学习一个相等函数,即网络的输入和重构后的输出相等,这种相等函数的表示有个缺点就是当测试样本和训练样本不符合同一分布,效果不好,而降噪自编码器在这方面的处理有所进步。
在获得学习的表示后,注意到它们非常稀疏。通过使用Transformer解决隐层表示稀疏的问题。
训练网络执行两项任务:1) 预测数据损坏掩码,2) 重建干净的输入。我们从用于下游任务的Transformer编码器输出中提取特征,供后续模型训练使用。Denoise Transformer Auto-Encoder网络图如下:
图9:DAE网络图
2.2 分位数变换
此方法将特征转换为服从均匀分布或正态分布。因此,对于给定的特征,此转换倾向于分散最频繁的值。它还减少了异常值的影响,因此,这是一种强大的预处理方案。
转换独立应用于每个特征。首先,使用特征的累积分布函数的估计将原始值映射到均匀分布。然后使用关联的分位数函数将获得的值映射到所需的输出分布。低于或高于拟合范围的新或未见数据的特征值将映射到输出分布的边界。请注意,此变换是非线性的。它可能会扭曲以相同尺度测量的变量之间的线性相关性,但会使以不同尺度测量的变量更直接地具有可比性。
分位数基于特征的单调变换,因此保留了每个特征值的等级。分位数变换根据公式G-1(F(X))将所有特征放入相同的期望分布中, 其中F是特征的累积分布函数,G-1是所需输出分布的分位数函数。该公式使用以下两个事实:
(1)如果X是具有连续累积分布函数F的随机变量,则F(X)均匀分布在[0,1]上;
(2)如果U是在[0,1]上均匀分布的随机变量,则G-1(U)具有分布G。
通过执行秩变换,分位数变换可以平滑异常分布,并且比缩放方法更不易受异常值的影响。
2.3 密集和稀疏特征的单独聚合
通过对数据的分析我们发现,部分列存在某一值较多的情况(如f16、f27、f40、f41等特征零值比率超过百分之九十),数据列存在稀疏的情况,我们将零值比率小于百分之七十的列称为密集群,将零值比率大于百分之七十的列称为稀疏群。分别对密集群和稀疏群做sum、var、mean、std、min、skew、kurtosis统计特征。
2.4 其他特征构造
AutoX[4]是一个高效的自动化机器学习工具。其具有效果出色、简单易用、通用、自动化、灵活性等优点,我们利用AutoX工具从原始46个匿名特征中进行特征提取,最终提取出30个数据特征。
XGBoost模型特征构造,原始数据包含三类数据,分别为位置类、互联网和通话类,我们以其中两类为训练特征,另一类的每一项为label 使用XGBoost模型进行训练,将最终的模型预测值作为新的生成特征,以发现三类特征之间的关联性。
Rank特征构造,对类别特征进行分组,通过rank函数对分组下的数值特征进行排名,并将其排名作为新的特征加入数据集。通过rank特征我们能够捕获到数据之间的上下关系更利于模型训练。
离散化特征构造,首先对原始特征进行离散化,通过log函数对原始数据进行对数变换并且取整。在对特征离散化后,模型会更稳定,不会因为数值变动轻易改变所处的区间,并且使用离散化后对决策树模型效果更好。最后对离散化后的数据进行特征交叉,得到新的数据集。
遗传编程特征构造,我们采用gplearn[5]中的SymbolicTransformer对特征进行转换,SymbolicTransformer是转换器,它并不直接预测目标变量,而是转化原有的特征、输出新的特征。通过加减乘除、min、max、log函数、三角函数等把已有特征进行组合转换,然后Pearson相关系数输出与标签最相关的新特征。最终得到9个新的特征。
位置特征、通话特征、互联网特征分别暴力交叉构造特征;
3 特征筛选
在特征构造中,我们构造了大量特征,其中存在冗余甚至是干扰特征,因此,还需要对特征进行筛选。我们主要使用以下方法进行特征筛选。
1. 删除特征缺失率大于90%的特征;
2. 删除特征中某一值占比率超过90%的特征;
3. 删除对抗验证结果中训练集与测试集不同分布的特征;
4. 按照LightGBM特征重要度对特征进行排序,选择特征重要度较高的特征;
4 模型选择
在模型选择上,我们使用了LightGBM和深度神经网络两个模型。由于训练数据的中标签分布极度不平衡,因此使用sklearn库的StratifiedKFold分层抽样对数据进行5折交叉验证。并且在模型训练中,我们使用多seed值对模型进行训练以增加模型的鲁棒性。
4.1 LightGBM
LightGBM[3] 具有高效的训练速度、更低的内存占用、更高的准确率、大数据处理能力、支持并行学习。由于lightGBM采用了Histogram直方图算法,加快了模型的收敛速度;lightGBM采用leaf-wise的增长策略,同大多数GBDT的Level-wise相比,Leaf-wise的优点是:在分裂次数相同的情况下,Leaf-wise可以降低更多的误差,得到更好的精度;使用binary损失,即log-loss,设置early-stop轮数为200,配合auc评价指标用于防止过拟合;并在5折交叉验证过程中,每折训练的模型都对测试集进行标签预测,最后将5折的预测结果平均作为最终结果。
4.2 神经网络
由于给出的数据为匿名特征,不清楚特征含义,无法构造业务相关特征,因此选用简单深度网络进行特征自动交叉,来构造无法手动构造的特征。
4.2.1 RankGauss归一化
在深度神经网络进行训练时,需要对数据进行归一化处理,我们使用RankGauss[6]对数据进行处理。通过比对,我们发现相比较于传统的数据归一化,RankGauss归一化后的深度预测效果要更好。
1.将原始数值进行排序,得到其排序特征,这里使用的是numpy.argsort函数实现,第一次argsort是应该在该引位置的数字索引,第二次argsort是该位置数值的实际排序。
(1)
2.尺度转化为[-1,1], 将该位置的排序除以最大排序,在扩大2倍,我们还增加了一个bound,避免数值为-1或者1从而导致erfinv为无穷。
(2)
3.调整极值,主要使用的工具是numpy.clip
(3)
4.erfinv使用的是scipy的sepcial接口,因为 erfinv(1) 等于正无穷,erfinv(-1)等于负无穷。
(4)
5结果融合
利用LightGBM和神经网络模型,我们分别训练不同的特征得到4个结果文件,Result1-4。
首先将Result3 *0.99 + Result2* 0.01进行简单权重融合得到Result5,然后我们对Result1、Result4和Result5进行融合得到最终的预测结果,使用的融合方法不是普通的加权融合,而是概率密度加权融合。最终,我们的B榜成绩为0.89982095,排名第三。
观察每个预测结果的概率分布。如果概率密度更高,则为其赋予更多权重。
1.通过指定每个分布的每个潜在变量,使用 norm.cdf 提取概率密度;
2.对所有模型预测的概率密度求和;
3.最终的预测结果为每个预测结果乘上相应的概率密度除以概率密度和,即
(5)
致 谢
从九月初接触返乡预测这道赛题到十一月初赛结束,历时两个多月,我们深入理解赛题数据并尝试了多种方法来提高预测精度,最终进入决赛。这期间的经历让我们觉得非常充实,也提高了我们数据分析、数据挖掘、数据建模等方面的能力。非常感谢CCF大数据与计算智能大赛和联通数字科技有限公司提供这样公平、开放的平台及优秀的赛题,让我们能够有展现自我、提升自我的机会 。最后,感谢团队成员,能进入决赛是每一个团队成员共同努力的结果。
参 考
[1] Chen T, He T, Benesty M, et al. Xgboost: extreme gradient boosting[J]. R package version 0.4-2, 2015, 1(4): 1-4.
[2] 陌鲸,降噪自编码器 denoising autoencoder, https://zhuanlan.zhihu.com/p/467926176
[3] Ke G, Meng Q, Finley T, et al. Lightgbm: A highly efficient gradient boosting decision tree[J]. Advances in neural information processing systems, 2017, 30.
[4] https://github.com/4paradigm/autox
[5] Searson D D . GPTIPS: Genetic Programming and Symbolic Regression for Matlab[J]. 2009.
[6] michaeljahrer,GitHub – michaeljahrer/rankGauss
—End—
戳“阅读原文”,速来报名参会~
原文始发于微信公众号(DataFountain):【二等奖方案】返乡发展人群预测「今天不练腿」团队思路