模型设计
目标变量
模型构建的特征以及模型的目标变量不一样。在模型设计阶段最重要的就是定义模型目标变量,以及抽取数据样本。
不同的目标变量,决定了这个模型应用的场景,以及能达到的业务预期。
样本的抽取
模型是根据我们选择的样本来进行训练的,所以样本的选取决定了模型的最终效果。需要根据模型的目标、业务的实际场景来选择合适的样本。
在样本选取上,你必须要考虑季节性和周期性的影响。另外,我们还要考虑时间跨度的问题。一般情况下,我建议你选择近期的数据,并结合跨时间样本的抽取,来降低抽样的样本不能描述总体的这种风险。
总的来说,因为不同的应用场景下模型设计的时间完全不同,所以这个阶段具体的开发时间也很难量化。
特征工程
模型的构建:从样本数据中提取可以很好描述数据的特征,再利用它们建立出对未知数据有优秀预测能力的模型。 数据和特征决定了机器学习的上限,而模型和算法只是逼近这个上限而已。
什么是特征工程?
对一个模型来说,因为它的输入一定是数量化的信息,也就是用向量、矩阵或者张量的形式表示的信息。所以,当我们想要利用一些字符串或者其他类型的数据时,我们也一定要把它们先转换成数量化的信息。像这种把物体表示成一个向量或矩阵的过程,就叫做特征工程(Feature Engineering)。
什么是建立特征工程呢?
比较常见的,我们可以通过一个人的年龄、学历、工资、信用卡个数等等一系列特征,来表示这个人的信用状况,这就是建立了这个人信用状况的特征工程。同时,我们可以通过这些特征来判断这个人的信用好坏。
建立特征工程的流程:1做数据清洗,2特征提取,3特征筛选,4生成训练 / 测试集。
1. 数据清洗
通常会通过数据可视化(Data Visualization)的方式直观地查看到数据的特性,然后才会对数据进行处理,也就是数据清洗,来解决这些数据可能存在的数据缺失、有异常值、数据不均衡、量纲不一致等问题。
数据缺失问题,算法工程师可以通过删除缺失值或者补充缺失值的手段来解决它。
数据异常的问题,可以选择的方法就是对数据修正或者直接丢弃,当然如果你的目标就是发现异常情况,那就需要保留异常值并且标注。
数据不均衡的问题,因为数据偏差可能导致后面训练的模型过拟合或者欠拟合,所以处理数据偏差问题也是数据清洗阶段需要考虑的。
一般来说,我们需要的都是比较均衡的样本数据,也就是量级差别不大的样本数据。
2. 特征提取
一般提取出的特征会有 4 类常见的形式,1数值型特征数据、2标签或者描述类数据、3非结构化数据、4网络关系型数据。
数值型特征数据
这类特征可以直接从数仓中获取,操作起来非常简单,为了能更多地提取特征。一般来说,会首先提取主体特征,再提取其他维度特征。
比如,在京东浏览页面的次数,这就是业务属性相关的主体变量特征,而页面的停留时长,浏览次数排名等数据就是一些度量维度的特征。
除此之外,一系列聚合函数也可以去描述特征,比如总次数、平均次数,当前次数比上过去的平均次数等等。
标签或描述类数据
这类数据的特点是包含的类别相关性比较低,并且不具备大小关系。
这类特征的提取方法也非常简单,一般就是将类别转化为特征,让每个特征值用 0、1 来表示
非结构化数据(处理文本特征)
非结构化数据一般存在于 UGC(User Generated Content,用户生成内容)内容数据中。比如我们的用户流失预测模型用到了用户评论内容,而用户评论都是属于非结构化的文本类数据。
在挖掘用户评论的过程中,如果遇到“这个酒店有亲子房,我家孩子很喜欢” 这样的评论,我们还能挖掘出当前用户可能是亲子用户,这也可以作为画像标签。
提取非结构化特征的一般做法就是,对文本数据做清洗和挖掘,挖掘出在一定程度上反映用户属性的特征。
网络关系型数据
网络关系型数据和前三类数据差别非常大,前三类数据描述的都是个人,而网络关系型数据描述的是这个人和周围人的关系。
比如说,在京东购物时,你和一个人在同一收货地址上,如果这个收货地址是家庭地址,那你们很可能就是家人。如果在同一单位地址上,那你们很可能就是同事,这代表着一个关系的连接。
根据复杂网络的关系去挖掘任意两人关系之间的强弱,像是家庭关系、同学关系、好友关系等等。具体来说,算法工程师可以利用通讯录、收货地址、LBS 位置信息、商品的分享和助力活动等等的数据,挖掘出一个社交关系网络,这个网络中的信息就能作为我们特征提取的参考了。
3. 特征选择
排除掉不重要的特征,留下重要特征
算法工程师会对希望入模的特征设置对应的覆盖度、IV 等指标,这是特征选择的第一步。然后,再依据这些指标和按照经验定下来的阈值对特征进行筛选。最后,还要看特征的稳定性,将不稳定的特征去掉。
首先去掉覆盖度过低的投诉次数,因为这个特征覆盖的人群很少,从经验上来讲,如果特征覆盖度小于 50% 的话,我们就不会使用这个特征了。然后去掉 IV 值过低的登录次数,IV 值指的是信息贡献度,表示了特征对这个模型有多少贡献, 那简单来说,就是这个特征有多重要。在用户流失项目中,如果 IV 小于 0.001 的话,我们就不会使用这个特征了。最后去掉稳定性过低的浏览时长,剩下的就是我们可以入模型的特征变量了。
4. 训练 / 测试集
把数据分成训练集和测试集,他们会使用训练集来进行模型训练,会使用测试集验证模型效果。