用机器学习来预测一个活动的总交易额值

我们常把机器学习问题划分为有监督学习和无监督学习。对于我而言,这两种学习方式,我心里明白,但总是感觉难以将二者的区别表述清楚。干脆拿个比喻来举例: 有监督学习更像是有老师的督促下学习,从老师那里学到知识和经验用到自己身上。 无监督学习更像是群魔乱舞。于茫茫人海中寻找和自己相似的人物。只通过样本和样本的特诊来区分。没有标签。输入数据有标签,则为有监督学习,没标签则为无监督学习。

下面重点关注下有监督学习,因为在工业界,有监督学习更常见。在工业界,有监督学习又被细分为两个流程。离线和在线。工作量主要在离线方面。

离线里面有这些工作:

1. 数据筛选

2. 数据清洗

3. 特征抽取

4. 模型训练

5. 模型优化

线上工作有以下几个方面:

1. 对线上的数据进行特征提取

2. 利用提取的特诊进行结果预估

下面的图很清晰的展现整个离线工作的工作过程

model

解决交易额预估问题,可以用下面的方式

deal_problem

预测交易额,可以直接对交易额本身进行预估。也可以将交易额问题拆分为若干的小问题,分步解决。用子问题的结果来计算原问题。

  • 不同方式有不同优缺点,具体如下:
模式 缺点 优点
单模型 1. 预估难度大
2. 风险比较高
1. 理论上可以获得最优预估(实际上很难)
2. 一次解决问题
多模型 1. 可能产生积累误差
2. 训练和应用成本高
1. 单个子模型更容易实现比较准地预估
2. 可以调整子模型的融合方式,以达到最佳效果

选择哪种模式?
1)问题可预估的难度,难度大,则考虑用多模型;
2)问题本身的重要性,问题很重要,则考虑用多模型;
3)多个模型的关系是否明确,关系明确,则可以用多模型。

划分为多个子问题后。多个子问题的结果如何汇总成总结果?

model_merg

对于下面这种模型,我仍然有疑问。因为偏下的这张图并没有明确告诉我该如何去融合。

下面针对访购率模型进行估计。

主要考虑
1)选择与业务目标一致的模型;
2)选择与训练数据和特征相符的模型。

训练数据少,High Level特征多,则使用“复杂”的非线性模型(流行的GBDT、Random Forest等);
训练数据很大量,Low Level特征多,则使用“简单”的线性模型(流行的LR、Linear-SVM等)。
关键来了,什么是high level类型的特征,什么又是low level 类型的特征呢?
low level的特征一般指的是较为原始的特征。需要较少的人工干预与处理。能够一眼就能看出来的特征,如用户id,商品id,年龄等等,不需要人工计算,从原始数据就能得到的特征。这种特征维度一般比较高,维度高的意思是这种特征的可选的值很多,如年龄,年龄可选的范围很大。但是这也不是绝对的,如性别,只有两个选项。一般情况下,可选值是非常多的。
high level的特征往往是人工干预,人工计算得到的特征,如人给商品贴的标签,打的分数等等。
low level的特征覆盖面比较小。长尾样本的预测值受high level特征影响大。 热门样本的预测只受low level的影响比较大。
对于非线性模型
1. 使用high level的特征比较好。但是这种特征的维度不适合特别高,因为求得high level 的特征的复杂度比较大。
2. 对high level特征做非线性映射可以较好的拟合目标。
线性模型:
1. 特征体系尽可能全面。特征尽可能的多。high level和low level 尽可能都要有
2. 尽可能的将high level的特征转换为多个low level的特征。
1. 注意: 逻辑回归算是一种广义的线性回归分析模型。

特征处理方面:

1. 归一化:包括按照均匀分布归一化还是按照标准正太分布进行归一化

2.

Filter:
假设特征子集对模型预估的影响互相独立,选择一个特征子集,分析该子集和数据Label的关系,如果存在某种正相关,则认为该特征子集有效。衡量特征子集和数据Label关系的算法有很多,如Chi-square,Information Gain。

Wrapper:
选择一个特征子集加入原有特征集合,用模型进行训练,比较子集加入前后的效果,如果效果变好,则认为该特征子集有效,否则认为无效。

Embedded:
将特征选择和模型训练结合起来,如在损失函数中加入L1 Norm ,L2 Norm。

利用正则项可以起到特征选择的效果。

优化算法:

1.梯度下降 分为随机梯度下降和批量梯度下降

2.牛顿法 以及 拟牛顿法

3.Coordinate Descent 固定其他维度不变,只对一个维度进行搜搜,确定最佳下降方向。

模型的优化:

1. 反思目标是否可以进行评估。

2. 分析模型是否过拟合

训练集表现 测试集表现 问题
< 期望目标值 < 期望目标值 Underfitting
> 期望目标值 接近或略逊于训练集 合适
> 期望目标值 远差于训练集 Overfitting

问题 数据 特征 模型
Underfitting 清洗数据 1. 增加特征
2. 删除噪音特征
1. 调低正则项的惩罚参数
2. 换更“复杂”的模型(如把线性模型换为非线性模型)
3. 多个模型级联或组合
Overfitting 增加数据 1. 进行特征选择
2. 降维(如对特征进行聚类、主题模型进行处理等)

1. 提高正则项的惩罚参数
2. 减少训练迭代次数
3. 换更“简单”的模型(如把非线性模型换为线性模型)

总结:

1. 要理解业务,分解业务目标

2. 数据要尽可能的可靠。训练集/测试集分布与线上的环境的数据尽可能的一致。

3. 合理的进行特征抽取和特征选择。

4. 模型: 针对不同的数据和特征,选择不同的模型。

原文地址:https://www.cnblogs.com/chengxuyuanxiaowang/p/5440571.html