机器学习的一般性步骤------以互联网的下单率预测为例

本文主要讲述机器学习在实际应用中的一般性步骤,包括基本技术、经验和技巧。
下面先给出一张机器学习整体的概览图:
这里写图片描述
从上图可以看出,有两个流程:

  • 离线训练流程(蓝色箭头),包含数据筛选和清洗、特征抽取、模型训练和优化模型等环节;
  • 应用流程(绿色箭头),对需 要预估的数据,抽取特征,应用离线训练得到的模型进行预估,获得预估值作用在实际产品中

通过以上可以得出机器学习应用的整个步骤如下:

业务问题->技术目标->对问题建模->准备训练数据->数据预处理->特征选择->训练模型->优化模型->模型应用->上线部署

以互联网的下单率预测为例说明上述机器学习的一般性步骤:

业务问题

提高用户的用户体验,帮助用户更快更好地找到自己想买的单子

技术目标

上述目标看起来比较虚,我们需要将其转换成一个技术目标,便于度量和实现。最终确定的技术目标是点击下单率预估,去预测用户点击或者购买团购单的概率
将预测出来点击或者下单率高的单子排在前面,预测的越准确,用户在排序靠前的单子点击、下单的就越多,省去了用户反复翻页的开销,很快就能找到自己想要的单子

对问题建模

模型选择

单个模型或多个模型

模型评价
  • 离线我们用常用的衡量排序结果的AUC指标
  • 在线的我们通过ABTest来测试算法对下单率、用户转化率等指标的影响

准备训练数据

数据确定

从业务经验来判断,可能影响用户是否点击下单的因素有:

  • 距离,很显然这是一个很重要的特征。如果购买一个离用户距离较远的单子,用户去消费这个单子需要付出很多的代价。 当然,也并不是没有买很远单子的用户,但是这个比例会比较小;
  • 用户历史行为,对于老用户,之前可能在网站有过购买、点击等行为;
  • 用户实时兴趣
  • 单子质量,上面的特征都是比较好衡量的,单子质量可能是更复杂的一个特征
  • 用户评价人数
  • 购买数
数据获取

在确定好要使用哪些数据之后,我们需要对使用数据的可用性进行评估,包括:数据的获取难度,数据的规模,数据的准确率,数据的覆盖率

  • 数据获取难度
    例如获取用户id不难,但是获取用户年龄和性别较困难,因为用户注册或者购买时,这些并不是必填项。即使填了也不完全准确。这些特征可能是通过额外的预测模型预测的,那就存在着模型精度的问题。

  • 数据覆盖率
    数据覆盖率也是一个重要的考量因素,例如距离特征,并不是所有用户的距离我们都能获取到。PC端的就没有距离,还有很多用户禁止使用它们的地理位置信息等。
    用户历史行为,只有老用户才会有行为

  • 数据的准确率
    单子质量,用户性别等,都会有准确率的问题

数据预处理

数据清洗

在了解特征数据放在哪儿、怎样获取之后。下一步就是考虑如何处理特征和标注数据了。

  • 样本采样
    • 对于分类问题:选取正例,负例。
    • 对于回归问题,需要采集数据。对于采样得到的样本,根据需要,需要设定样本权重。当模型不能使用全部的数据来训练时,需要对数据进行采样,设定一定的采样率。
    • 采样的方法包括随机采样,固定比例采样
  • 样本过滤
    • 结合业务情况进行数据的过滤,例如去除crawler抓取,spam,作弊等数据
    • 异常点检测,采用异常点检测算法对样本进行分析,常用的异常点检测算法包括
      • 偏差检测,例如聚类,最近邻等
      • 基于统计的异常点检测算法
        例如极差,四分位数间距,均差,标准差等,这种方法适合于挖掘单变量的数值型数据。全距(Range),又称极差,是用来表示统计资料中的变异量数(measures of variation) ,其最大值与最小值之间的差距;四分位距通常是用来构建箱形图,以及对概率分布的简要图表概述
      • 基于距离的异常点检测算法,主要通过距离方法来检测异常点,将数据集中与大多数点之间距离大于某个阈值的点视为异常点,主要使用的距离度量方法有绝对距离 ( 曼哈顿距离 ) 、欧氏距离和马氏距离等方法
      • 基于密度的异常点检测算法,考察当前点周围密度,可以发现局部异常点,例如LOF算法
数据分类

特征主要分为:

  • Low level特征和High level特征
    • Low level特征是较低级别的特征,主要是原始特征,不需要或者需要非常少的人工处理和干预
    • High level特征是经过较复杂的处理,结合部分业务逻辑或者规则、模型得到的特征,例如人工打分,模型打分等特征,可以用于较复杂的非线性模型
  • 稳定特征与动态特征
    • 稳定特征是变化频率(更新频率)较少的特征,例如评价平均分,团购单价格等,在较长的时间段内都不会发生变化。
    • 动态特征是更新变化比较频繁的特征,有些甚至是实时计算得到的特征,例如距离特征,2小时销量等特征。
  • 二值特征、连续特征、枚举特征
    • 二值特征主要是0/1特征,即特征只取两种值:0或者1,例如用户id特征:目前的id是否是某个特定的id
    • 续值特征是取值为有理数的特征,特征取值个数不定,例如距离特征,特征取值为是0~正无穷。连续值处理为二值特征方法:先将连续值离散化(后面会介绍如何离散化),再将离散化后的特征切分为N个二元特征,每个特征代表是否在这个区间内
    • 枚举值特征主要是特征有固定个数个可能值,例如今天周几,只有7个可能值:周1,周2,…,周日。枚举特征处理为二值特征技巧:将枚举特征映射为多个特征,每个特征对应一个特定枚举值,例如今天周几,可以把它转换成7个二元特征:今天是否是周一,今天是否是周二,…,今天是否是周日
数据处理及分析
  • 归一化
    为了平衡取值范围不一致的特征,需要对特征进行归一化处理,将特征取值归一化到[0,1]区间;

    • 函数归一化,通过映射函数将特征取值映射到[0,1]区间,例如最大最小值归一化方法,是一种线性的映射。还有通过非线性函数的映射,例如log函数等
    • 分维度归一化,可以使用最大最小归一化方法,但是最大最小值选取的是所属类别的最大最小值,即使用的是局部最大最小值,不是全局的最大最小值:
    • 排序归一化,不管原来的特征取值是什么样的,将特征按大小排序,根据特征所对应的序给予一个新的值
  • 离散化
    为了便于表示和在模型中处理,需要对连续值特征进行离散化处理。常用的离散化方法包括等值划分和等量划分。

    • 等值划分是将特征按照值域进行均分,每一段内的取值等同处理。例如某个特征的取值范围为[0,10],我们可以将其划分为10段,[0,1),[1,2),…,[9,10)
    • 等量划分是根据样本总数进行均分,每段等量个样本划分为1段。例如距离特征,取值范围[0,3000000],现在需要切分成10段,如果按照等比例划分的话,会发现绝大部分样本都在第1段中。使用等量划分就会避免这种问题,最终可能的切分是[0,100),[100,300),[300,500),..,[10000,3000000],前面的区间划分比较密,后面的比较稀疏
  • 缺失值处理
    有些特征可能因为无法采样或者没有观测值而缺失,例如距离特征,用户可能禁止获取地理位置或者获取地理位置失败,此时需要对这些特征做特殊的处理,赋予一个缺省值。缺省值如何赋予,也有很多种方法。例如单独表示,众数,平均值等

特征降维

降维的原因:
1. 特征维数越高,模型越容易过拟合,此时更复杂的模型就不好用
2. 特征数量增加带来的训练、测试以及存储的开销都会增大
3. 相互独立的特征维数越高,在模型不变的情况下,在测试集上达到相同的效果表现所需要的训练样本的数目就越大
4. 在某些模型中,例如基于距离计算的模型KMeans,KNN等模型,在进行距离计算时,维度过高会影响精度和性能
5. 可视化分析的需要。在低维的情况下,例如二维,三维,我们可以把数据绘制出来,可视化地看到数据。当维度增高时,就难以绘制出来了
降维的目的:
将高维空间中的数据集映射到低维空间数据,同时尽可能少地丢失信息,或者降维后的数据点尽可能地容易被区分
降维的方法:
PCA、LDA、核PCA、SVD等

特征选择

  • 特征选择的目标:
    寻找最优特征子集。特征选择能剔除不相关(irrelevant)或冗余(redundant )的特征,从而达到减少特征个数,提高模型精确度,减少运行时间的目的。另一方面,选取出真正相关的特征简化模型,协助理解数据产生的过程。

  • 特征选择过程主要分为:

    • 产生过程和生成特征子集方法
    • 有效性分析
  • 特征选择的方法:
    过滤式、包裹式、嵌入式

猜你喜欢

转载自blog.csdn.net/ge341204/article/details/80722316