#用户出行偏好
****
**一、概览**
采用机器学习解决问题最关键的一步是找准问题:
1、这种问题能否用机器学习方法解决?
2、是否存在其他更简单的方法?如字符串匹配、正则或特定数据结构就可以简单解决,采用机器学习方法反而很麻烦,得不偿失;
3、如果能用机器学习方法,如何表示这个机器学习问题?如何抽取特征?又可能归类为哪类机器模式(分类、聚类、回归等?);
针对**用户出行偏好**主题,最近半个月大致做了以上几个问题的思考,现将从业务及目标的角度分析用户出行偏好属于普通的统计分析问题,还是数据挖掘问题:
A、业务上包括高德地图及开放平台两条业务线,能够覆盖全中国绝大多数智能终端用户;
B、单业务线统计分析存在用户准确率及覆盖度较低的情况,且用户活跃等级混乱数据稀疏。
C、目标是提供智能推送服务,不仅涉及用户智能终端上所有能检测到的行为,还包括用户将来几天甚至一段时间行为的推断及预测;
基于以上几个特点,**用户出行偏好**属于数据挖掘问题,下面将从机器学习相关的几个方面进行分析及阐述。
****
**二、问题建模**
出行偏好是基于历史行为来判断或预估用户出行的交通方式,简单分为三类:
A、驾车或打车出行;
B、公共交通出行(公交、地铁、长途汽车等);
C、其他
这是一个典型的**分类**问题,至于**模型选择**,需先进行数据上的调研及特征工程方面的工作。
****
**三、数据调研**
业务线上概览:
1、高德地图 (以20150708为例):
**概况** 当天主动活跃用户数1000W左右,其中新增用户数45W左右,总启动次数4000W次,**人均启动次数4.1次**;
**行为**
A、**搜索状况** 搜索总次数2360W,搜索总人数600W,**人均搜索次数3.887次**;
B、**出行状况**
a. 总体概况 出行接口总次数3430W,出行接口总人数600W,**人均出行接口访问5.65次**;
b. 驾车状况 驾车规划总次数890W,驾车规划总人数280W,**人均规划次数3.16次**;驾车导航总次数1600W,驾车导航总人数325W,**人均导航次数4.92次**;
c. 公交状况 公交规划总次数686W,公交规划总人数200W,**人均规划次数3.33次**;
d. 步行状况 步行规划总次数230W,步行规划总人数93W,**人均规划次数2.47次**;步行导航总次数26W,步行导航总人数10W,**人均导航次数2.44次**;
C、**定位状况** 定位总次数5290W,定位总人数830W,**人均定位次数6.397次**;
D、**用户重合度**
a. **搜索**600W,**出行**600W 重合用户数**419W**;
b. **搜索**600W,**驾车规划**280W 重合用户数**184W**;
c. **搜索**600W,**驾车导航**325W 重合用户数**227W**;
d. **搜索**600W,**公交规划**200W 重合用户数**154W**;
e. **搜索**600W,**步行规划**93W 重合用户数**78W**;
f. **搜索**600W,**步行导航**10W 重合用户数**9.5W**;
g. **驾车规划**280W,**驾车导航**325W 重合用户数**94W**;
h. **步行规划**93W,**步行导航**10W 重合用户数**10W**;
i. **驾车导航**325W,**公交规划**200W 重合用户数**35W**;
j. **驾车导航**325W,**步行导航**10W 重合用户数**4W**;
k. **公交规划**200W,**步行导航**10W 重合用户数**7W**;
**周活跃**
周活跃用户数:3390W,DAU/WAU:28.72%,**周平均活跃天数:1.94天**;
**月活跃**
月活跃用户数:6900W,DAU/MAU:14.12%,**月平均活跃天数:4.12天**,**平均每次使用时长:238秒**;
2、开放平台:
**用户量(月)** 导航 SDK 517W,地图 SDK:13390W,定位 SDK:40933W,搜索 SDK:4585W,所有 SDK:47944W。
以上用户量不包括Rest及JS请求,只包括AND、IOS、WP。
**行为(天)**
A、搜索:搜索总次数 8145W,主要请求集中在:**周边查询、关键字查询、搜索意图分析、行政区查询、1002、ID查询、电话号码查询、公交路线关键字、1000、搜索服务-多边形查询、公交路线ID查询、公交站关键字查询**,以上查询总次数占比99%;
B、驾车:驾车总次数4067W,主要请求集中在:**驾车路径规划、行驶距离测量**,以上服务总次数占比99%;
C、公交:公交总次数130W,主要请求集中在:**公交路径规划、公交路径规划(未结合步行)**,以上服务总次数占比99%;
D、步行:步行总次数1356W,主要请求集中在:**步行路径规划**,其服务总次数占比99%;
E、交通:交通总次数13W,主要请求集中在:**圆形区域内交通态势查询**,其服务总次数占比99%;
在确定了目标之后,下一步,就是确定使用哪些数据来达到目标,即:梳理哪些特征数据可能与用户出行偏好相关。
****
**四、特征工程**
**1、特征分类与提取:**直接特征和间接特征
从业务经验来判断,可能影响用户出行偏好的因素大致分为以下几个方面
A、接口PV:
启动次数;
搜索次数、搜索驾车类别次数、搜索公交(地铁)类别次数;
驾车规划次数、驾车导航次数;
公交规划次数;
步行规划次数、步行导航次数
B、活跃度:
周均活跃天数、月均活跃天数、总活跃天数;
单次使用定位频率(均值);
单次使用实时路况频率(均值)
C、时长与实效:
单次均使用时长、日均使用时长、周均使用时长、月均使用时长;
单次均驾车导航时长、日均驾车导航时长、周均驾车导航时长、月均驾车导航时长、正常结束驾车导航次数、中途结束驾车导航次数、总驾车导航次数;
单次均步行导航时长、日均步行导航时长、周均步行导航时长、月均步行导航时长、总步行导航次数
D、距离与速度:
活跃半径(均值);
单次均驾车导航距离、日均驾车导航距离、周均驾车导航距离、月均驾车导航距离;
单次均驾车导航速度、日均驾车导航速度、周均驾车导航速度、月均驾车导航速度;
单次均步行导航距离、日均步行导航距离、周均步行导航距离、月均步行导航距离;
单次均步行导航速度、日均步行导航速度、周均步行导航速度、月均步行导航速度
E、其他(针对开放平台):
搜索次数、搜索驾车类别次数、搜索公交(地铁)类别次数;
驾车服务请求次数、驾车服务活跃天数、驾车服务App数;
公交服务请求次数、公交服务活跃天数、公交服务App数;
步行服务请求次数、步行服务活跃天数、步行服务App数;
交通地图请求次数、交通地图活跃天数、交通地图App数;
定位服务请求次数、定位服务活跃天数、定位服务App数
以上**65个特征**为与**出行偏好**相关的直接特征,而**间接特征**可以从直接特征或者各种数据组合里计算推导出来,期间会用到一些机器学习技术或统计规则(如性别职业等特征)。
**2、特征处理与分析:**
A、归一离散缺省值
- **归一化** 为了解决不同特征具有不同取值范围问题,需要进行特征归一化,将有量纲度量变换为无量纲度量,即统一度量衡(类似线性模型或距离相关模型如聚类、KNN等,特征的取值范围会对最终结果产生非常大影响,因为**模型会更偏向于取值范围较大的特征**)。其中主要的方法包括:**a. 函数归一化:**单位长度向量、Min-Max、Log函数;**b. 统计归一化:**正态分布Z-score、泊松分布。
- **离散化** 对连续值特征进行离散化处理,主要包括
a. 等值划分:将特征按照值域进行均分,每一段内的取值等同处理;
b. 等量划分:根据样本总数进行均分,每段等量个样本划分为一段;
c. 分布划分:根据特征值进行聚类分析形成多个簇,每个簇划分为一段。
另外,离散化还有增加系统抗噪声的能力。
- **缺省值** 某些特征可能因为无法采样或者没有观测值而缺失,此时需要做特殊处理,赋予一个缺省值。主要包括:0默认、众数,平均值等填充。
B、特征降维
机器学习中VC维理论:VC维越高,打散能力越强,可容许的模型复杂度越高,而维度越高,就会带来非常经典的**维度灾难**问题,因此要进行特征降维。
其意义在于:
a. 特征维数越高,模型越容易过拟合,此时更复杂的模型就不好用了。
b. 相互独立的特征维数越高,在模型不变的情况下,在测试集上达到相同的效果所需要的训练样本的数目就越大。
c. 特征数量增加带来的训练、测试以及存储的开销都会增大。
d. 在某些模型中,如KMeans,KNN等模型,距离计算时,维度过高会影响模型的精度和性能。
e. 可视化分析,低维能可视化地看到数据,高维难以绘制了。
主要包括:**a. 线性降维方法:**PCA、LDA、MDS;**b. 非线性降维方法:**流形学习、等距特征映射、局部线性嵌入等。
C、特征选择
**方法**
a. 完全搜索:广度优先搜索、分支限界搜索、定向搜索、最优优先搜索
b. 启发式搜索:序列前向选择、序列后向选择、双向搜索、增L去R、序列浮动选择、决策树
c. 随机搜索:随机产生序列、模拟退火算法、遗传算法
**有效性分析**
Filter:相关性、距离、信息增益、一致性
Wrapper:分类器错误率
机器学习任务中,70%的效果由特征带来的,进行完特征工程之后,就该是模型的选择及验证相关了。
****
**五、模型选择**
出行偏好属于分类问题,常用的分类模型包括决策树、随机森林、GBDT、贝叶斯、逻辑回归、分片线性模型MLR、支持向量机等
1、训练数据
注意点:
a. 与待解决问题的数据本身分布尽量一致;
b. 训练集/测试集分布与线上预测环境数据分布尽可能一致,这里分布指 (x,y) 的分布,不仅仅指 y 的分布;
c. y 数据噪音尽可能小,尽量剔除y有噪音的数据;
d. 非必要不做采样,采样可能使实际数据分布发生变化,但若据太大无法训练或者正负比例严重失调(如超过100:1),则需采样解决。
出行偏好训练样本集的选择可从两方面入手:
a. 车系车住、交通强制险等获得正样本集,通过规则过滤出负样本集;
b. **正样本:**前3个月(或6个月)有相应行为,最后1个月(或2个月)有相应行为;
**负样本:**前3个月(或6个月)有相应行为,最后1个月(或2个月)无相应行为;
2、模型比较
样本选择方法的区别:
第一种方法,在得出出行特征后,直接套用分类模型,然后验证即可;
第二种方法,基于用户**过去3个月(或6个月)历史数据**预测**下1个月(或2个月)**相应的行为
出行偏好挖掘目标在于确定交通方式的**权重**,最直观上就是贝叶斯、逻辑回归及支持向量机等。基于以下几个方面的分析,更**倾向于采用逻辑回归模型**:
1、逻辑回归Sigmoid函数是一个S形的曲线,它的取值在[0, 1]之间,在远离0的地方函数的值会很快接近0/1,这个性质天生地适合以概率的方式来解释;
2、属于**判别模型的逻辑回归**与**生成模型的高斯贝叶斯**在假设P(x|y)服从高斯分布,P(y)服从多项式分布时会学习到同一个模型;
3、其决策函数选择0.5作为阈值属于一般的做法,实际应用时经常**根据情况选择不同的阈值**,如果对正例的判别准确性要求高,可以选择较大阈值,若要求正例的召回要求高,则可以选择较小阈值,当然,支持向量机也支持这样的特征;
4、根据特征的复杂度,可以现在可以选择
5、与决策树、朴素贝叶斯、支持向量机一样,逻辑回归也能进行多分类;
6、根据特征可以选择简单的逻辑回归,也可以选择复杂的分片线性模型MLR(参见ATATech:海量数据下的非线性模型探索);
另外,当模型的参数过多时,很容易导致过拟合,需要在优化目标中加入正则项,通过惩罚过大的参数来防止过拟合。
****
**六、验证方式**
1、Precision-Recall 评估模型
2、ROC 评估模型
3、AUC 评估模型
****
**七、其他**
1、搜索特征提取可利用Word2Vec来判断Query是否属于某一类;
2、产品的迭代很大程度上会引起用户行为的变化,必然导致特征的变化,因此应引入特征监控以在发现特征异常时,及时采取措施;当然还有模型监控。