在数据驱动的当代社会,机器学习已成为揭示复杂现象、预测未来趋势的重要工具。特别是在商业决策、健康管理、交通出行等多个领域,机器学习技术的应用日益广泛(点击文末“阅读原文”获取完整数据)。
相关视频
本文集合了多个基于R语言、python的机器学习预测案例,涵盖了众筹平台筹款结果、机票折扣预测、糖尿病患者分类以及员工满意度预测等多样化场景,旨在帮助客户展示机器学习在不同领域中的实际应用价值和潜力。
Kickstarter众筹平台筹款结果预测
数据变得越来越重要,其核心应用“预测”也成为互联网行业以及产业变革的重要力量。众筹利用互联网和 SNS 传播的特性,让小企业、艺术家或个人对公众展示他们的创意,争取大家的关注和支持,进而获得所需要的资金援助。随着互联网的发展,众筹成为了现代社会越来越重要的筹款模式。基于项目数据提前预测筹款结果具有较大价值。
解决方案
任务/目标
基于众筹项目基本数据,预测此项目筹款结果是否成功
数据 预处理
将众筹项目数据进行缺失值与极端值处理,同时合并较小分组等,数据预处理便于后续更好进行数据建模分析。
数据可视化
在对数据进行建模前,我们可以先对数据进行可视化描述初步判断数据分布特征,便于后续模型选择。
接下来看各个种类项目项目设置的奖励物品层次数量和项目预设的目标与最终是否成功的关系散点图。
构造
我们大致有如下训练样本(只列举部分特征)。
划分训练集和测试集
为了更真实的测试模型效果,以时间来切分训练集和测试集。具体做法如下:随机抽取0.7数据作为训练数据集,0.3数据作为测试数据集。
最终得到实验数据规模如下:
建模
Logistic Regression
逻辑回归常用于二分类建模分析,因此适用于本文探究是否成功的建模场景。最终交叉矩阵如下所示:
KNN Method
KNN 算法的思想是基于某种距离度量找出训练 集中与其最靠近的 k 个实例点,然后基于这 k 个最 近邻的信息来进行预测。对本项目数据分析,找出 最优的 K 值为 9,利用此 K 值建立模型。
Adaboost 算法
Boosting 算法是一种重要的集成学习技术,而Adaboost 是其中的优秀代表。Adaboost 是一种迭代算法,其核心思想是针对同一个训练集训练不同的分类器(弱分类器),然后把这些弱分类器集合起来,构成一个更强的最终分类器(强分类器)。
在此案例中,三个模型准确度都较高,都在0.9以上,其可视化图形如下:
Logistic Regression
最终交叉矩阵如下所示:
准确度为0.96。
KNN Method
准确度为0.94。
Adaboost 算法
准确度为0.97。
可以看出,是否成功的预测值与真实值在绝大部分的情况下是一致的。
但是评估效果要综合考虑,需要参考业务对接,预测精度,模型可解释性和产业链整体能力等因素综合考虑;不能简单作为企业利润增加的唯一标准我们的经验是,预测结果仅作为参考一个权重值,还需要专家意见,按照一定的权重来计算。
繁忙干线中的机票折扣预测——以北京到上海的航班为例
对于繁忙干线上的机票而言,折扣有着不同于其余航线上的特征,如何根据其特征选择合适的模型;在实际的构建模型和预测的过程中,数据量过大成为一个严重的问题,因此合理科学的划分数据成为了必须要解决的问题。
研究方法分为 3 个主要步骤:
- 数据清洗与特征提取。
- 问题转化与模型运用
- 性能的衡量与优化
首先就是数据的预处理,本项目所使用的数据集不存在缺失数据的问题,但在探索中发现一部分数据存在错误(如较高的价格对应的折扣为 0等),对于这部分较为明显的错误数据直接去除;对于可识别性的属性(如订单号)和一些与研究不相关的属性(如出发、到达机场、订票时间等)同样不予考虑。为了方便后期的分析,将起飞时间分成了起飞日期和具体时间两个特征。对于航班号,提取了代表航空公司的前两位作为一个新特征。在探索数据时发现,现有数据中中
转机场这一属性只有空和“LYA”两种情况,所以讲其转化成更方便处理的布尔量。另外,将2019 年所有节假日放入文档,根据起飞日期对是否是节假日做了判断,并放入数据集中,对每个航班是否处于节假日做了判断。而后通过以上属性对折扣的可视化及相关性分析,进一步去除了数据量较少的类别,同样也证实了其对折扣是高度相关的,这与相关文献的研究相吻合,证明了用这些变量来预测机票折扣的合理性。
解决数据量过大有两种思路,一是随机抽取一部分数据划分训练集测试集。另一种思路就是预设用户使用场景,在用户确定出行时间以后,提前购买的天数和自己想要购买的舱位必然是确定的信息,不妨使用提前天数和舱位对数据进行划分。显然第一种方法可以将影响变量更全面的考虑进去,第二种方法更为贴近实际情况,但却无法考虑提前天数和舱位对其的影响。在处理后,不同种类的数据量降低到了几千条,适合进行操作。
对于本项目中的研究数据来说,并不满足使用时间序列的充分条件。所以本文先采用线性回归进行预测,而后选用集成算法来提升准确度。在线性回归模型中,先将所有特征加入模型进行回归,发现 F 统计量呈极高度显著,但反映回归系数显著性的 t 统计量对于某些变量不显著,在第二次线性回归中,将不显著的变量(p值>0.05)去除,再次得到回归结果,此时所有变量呈高度显著,由此得出线性回归方程,从而在测试集上得到预测结果。
集成算法可以分为 bagging 和 boosting 两种集成方式。Bagging 独立训练(可并行)多个基分类器,基分类器相互之间独立,然后用方法(投票法、平均法、stack⁃ing)把基分类器集成起来。代表算法为随机森林,也即本文使用的集成算法。
因数据量较大,先提取部分数据(去除相关性不高的变量),使用随机森林模型对不同参数的重要程度做了模拟。
可以看出,在随机森林重要性度量中,航空公司的重要性最高,其次是 OTA 平台,再次是提前购买天数。
错误率在树的数目在 100 左右时达到一个相对最优值,因此保持了 mtry 值的保持默认,ntree为 100。
对比随机森林和线性回归模型的 MAE 及 RMSE,可以看到随机森林算法在准确度上表现较为优秀。通过分析各个变量对模型的贡献程度,我们可以大致得到影响北京上海机票折扣的重要变量,进而合理地为顾客做推荐,选择合适的 OTA 平台对于购买到合适折扣的机票尤为重要;对于价格敏感的顾客来说,可以选择折扣较大的航空公司;针
对北京上海的机票而言,提前购买天数影响因素较小,所以顾客可以无需考虑提前安排行程。模型还有进一步优化的空间,可尝试模型融合来提高预测准确度。
基于机器学习和神经网络对糖尿病患者二分类
现如今,用机器学习中的ML经典算法以及各种神经网络制作分类器,这些技术已经相对成熟。
解决方案
任务/目标
根据现有的被检者特征以及个体的诊断结果制作分类器,并选出一个最优分类器出来。
数据源准备
数据是经过处理过的。定量变量的异常值用样本特征值(平均值、中位数等)或者拉格朗日插值或者线性模型修改过,缺失值都被填补过(当然,个体缺失值过多便直接删除)。
特征转换
基于这些特征去构建分类器,前期工作是直接调用决策树和随机森林去进行变量筛选,发现最终筛选出来的显著特征不超过三个(以显著性0.1去筛选,第一张图为决策树筛选图,第二张图为随机森林筛选图):
并且,做出来的分类效果并不理想,在不设置随机种子的情况下大部分分类器的ACC还不超过60%,特征维度太低,数据不容易分开,所以特征选择这一工作在进行完之后被跳过。
构造
以上说明了如何抽取相关特征,我们大致有如下训练样本(只列举部分特征)。
划分训练集和测试集
设定随机种子,先随机选择其中的600个个体作为训练集,之后分开特征与分类结果。
建模
BP 神经网络, 最原始的神经网络模型,理论上只要隐藏层的层数大于1,便可逼近任意一个函数,所以,我们可以根据这一性质制作出我们想要的分类器
概率神经网络(PNN)
最简单的概率神经网络为高斯判别模型,判别思路与PNN一样,严格来讲PNN比高斯判别更为广义,PNN只有一层隐藏层,隐藏层的神经元个数为样本个数,不仅可以做二分类分类器、也能做多分类分类器。
支持向量机(SVM)
SVM原理很简单,只需找到一个超平面将两类样本分隔开即可,使得支持向量(离超平面最近的那个样本)与超平面的距离达到最大,也被广泛用于二分类问题。
费雪线性判别
将两类样本通过线性变换映射到一维直线上(降维),计算两类样本映射后的平均值,通过平均值之间的欧式距离达到最大求出该线性变换,从而得到一条直线,判断样本映射后距离两类样本均值的大小,做出分类。
模型优化
1. BP网络不需要用来优化,其作用就是用来模型比对的;PNN其中需要估计的参数为平滑性参数,从数理统计的角度来看,平滑性参数为正态分布的协差阵,在这里我采用矩估计参数优化平滑性参数,这一优化是有大数定理作为保证的。(即便该方式优化效果已取得不错的成绩,该项目至今还在进行,对平滑性参数作贝叶斯估计、以及条件似然估计)
- 传统SVM估计超平面的处理方法是理由凸优化进行问题转化,进而估计超平面,实际数据远没有理论那么理想,所以,一反常态,python本身能做SVM,但无法改变其中已封装好的包的算法,所以我用excel做了一套SVM分类器,对其超平面采用演化算法以及非线性算法直接进行求解。
1.PNN在给定平滑性参数都为0.1的情况下ACC正确率为67.7%,用矩估计估计的平滑性参数ACC正确率高达81.3%,即使重新设定随机种子,平均正确率也不低于80%,这次优化是一个质的飞跃。
2.SVM效果并不是很理想,excel功能强大,弊端在于处理数据量大的数据集,效率过于低下,我并没有放弃SVM算法的改进,现阶段还在进行凸优化中KKT条件的代码编写,以便对超平面直接求解。
3.BP神经网络ACC正确率为77%,远不及改进过后的矩估计PNN。
4.费雪判别训练集ACC为78.4%,稳定在78%左右。
综上所述,矩估计优化后的PNN分类器优化效果是这几个模型中最好的。
预测分析·员工满意度预测
员工满意度又称雇员满意度,是团队精神的一种参考,也就是个体对他所从事的工作的一般态度。是组织成员对其工作特征的认知评价,是员工通过比较实际获得的价值与期望获得的价值之间的差距后,对工作各方面满足与否的态度和情绪反映。通过持续的员工满意度调查,企业可以对自身管理中所存在的问题进行“诊断”,进而系统地解决问题,改善企业的管理,提高生产效率、降低人员流失率。因此,科学的员工满意度分析对于提高企业管理的有效性意义重大,但人是多思维生物,需要考虑到各种多条件。用机器学习达到精准计算的实现很困难,预测的精准性永远是痛点。
解决方案
任务/目标
通过持续的员工满意度调查,运用多种数据源分析实现精准销量预测。
数据源准备
沙子进来沙子出,金子进来金子出。无数据或数据质量低,会影响模型预测效果。在建立的一个合理的模型之前,对数据要进行收集,搜集除已有调查数据之外的额外信息(比如病假情况,不可因素的离职等),再在搜集的数据基础上进行预处理。
有了数据,但是有一部分特征是算法不能直接处理的,还有一部分数据是算法不能直接利用的。
特征转换
把不能处理的特征做一些转换,处理成算法容易处理的干净特征举例如下:
是否有工伤,用数字0表示没有,数字1表示有。
过去5年是否升职,用数字0表示没有,数字1表示有。
构造
以上说明了如何抽取相关特征,我们大致有如下训练样本(只列举部分特征)。
划分训练集和测试集
考虑到最终模型会预测将来的某时间段的销量,为了更真实的测试模型效果,以统计序号来切分训练集和测试集。具体做法如下:假设我们有序号15000以内相关数据。以1-12000的调查人数据作为训练,12001-15000的数据作为测试。
建模
a) 模型选用随机森林和支持向量机(SVR);
b) 模型训练结束后,使用训练集来验证模型的预测准确度,准确度以mse计算;
c) 对测试集进行预测,在文档中展示部分预测结果;
模型优化
1.相关数据显示
2.各因素的可视化结果
满意度
b. 项目数量
c. 工龄
该厂96.27%的员工工龄在2~6。
d. 福利
e.
四种满意度数据分布图:
员工的工龄集中于2~5年,大于5以上的工龄数量变少,说明该公司员工的留存率低。
评价非常不满意的员工中,负责项目数量为6个或7个(多),工龄集中在4年5年,并且福利待遇偏低。同时评价不满意的员工中负责2个项目的人数增多,评价为满意和非常满意的员工的项目项目数集中于3到5个。公司应考虑设定负责项目数量的上限,和调整相对应的福利体系。