该做的都做了,为什么模型预测数据的准确率依旧上不去呢?
版权声明
本文首发于微信公众号
这样和数据相处(data_gentleman)
无需授权即可转载
转载时请注明出处
“小明,这周我们需要预测一下xx平台上的消费者复购情况,这是交易数据……”总监说。
小明,公司新入职的数据分析师,略显慵懒的靠着椅背,头也不抬,说:“好的,老大。”
一般说来,会有两个结果。
1. 小明运气爆棚,搭建的预测模型完美的解决了问题;
2. 模型搭建失败,在预测未知数据时的准确率低的感人。
而这第二种情况,出现的频次相对高一些。
倒不是搭建模型的难度太大。这可能是因为太依赖数据处理的套路了,导致自己没有深入理解数据集,也就更别说挖掘出数据集的价值信息了。
诚然,和其他行业一样,数据分析师搭建模型预测数据的过程也是有套路的。
看吧,从原始数据集到最后的部署监测,概括起来就两步:一步是数据准备(也叫数据清洗);另一步是训练模型。如果训练模型的结果不满意,那就返回到数据清洗阶段,重新开始。
相信你也发现了,数据准备在整个过程中的占了60%以上的比重。重要性可见一斑。
当然,我们在准备数据的时候,也是有套路的。主要由两个阶段:数据预处理与特征工程。先来说说数据预处理的套路,一般说来,有以下六步:
1. 选择子集。
2. 列表重命名。
3. 处理缺失数据。
4. 转换数据类型。
5. 数据排序。
6. 处理异常值。
特征工程也不例外:
1. 特征处理。主要有三方面内容,1)处理不均衡样本、异常样本;2)对已有特征进行归一化或标准化处理;3)特征降维。
2. 特征选择。在sklearn官网文档中,给了我们3种选择方案:移除低方差的特征、使用SelectFromModel选择特征、融合为pipeline的一部分选择特征( 传送门)
3. 特征提取。在第二步的基础上,提取出恰当的数据特征,以便更好的训练模型。
是不瞬间觉得整个世界都光明了?你看,就算我们以后拿到原始数据,即便没有思路,也可以按照上面的这些个套路,一步一步的往下做,直至得出结果。爽的不要不要的。
如果你是这样想的话,其实我也可以理解你的本意是说:数据分析师与其他人的区别,就在于如何运用好处理数据的这些套路吧。
其实并不是这样。
因为套路终究是套路,它只普适于符合某种前提的一般情况。而且,我们拿到的数据,要解决的问题,在每个人身上,每个时刻都是不同的,因此也就不能对数据处理做一般化定义。
换句话说,数据分析师存在的价值不是在于他们处理数据的能力,而是挖掘数据价值的思维。我甚至认为,这是每个数据分析师的核心竞争力。好的数据分析师,是有能力在一堆数据垃圾里挖出金矿的。
当然,我也并不是说上面说的套路不正确,毕竟它是经过很多实践检验的,值得信任。
只不过,作为一名数据分析师,在进行数据清洗之前,应该有一个意识:对原始数据进行试探性分析(Exploratory Data Analysis)的意识。这非常重要。
为什么要对数据进行EDA?
在统计学中,试探性数据分析(EDA)是分析数据集并总结出它们的主要特征的一个方法。即通过汇总统计、图表可视化、方程拟合等方式,初步调查现有数据,探索数据结构与规律的关键过程。
特别是在我们对数据中的信息没有足够经验,不知怎么入手分析的时候,尤为有效。
同时,它对绝大多数的数据科学项目来说是很宝贵的。
因为它不仅可以让我们知道未来的结果是否能有效、正确、可解释并且适用于所需的业务环境。
而且,我们可以界定和提炼出更多、更好的可用于机器学习的特征变量。毕竟数据集最初的特征可能并不能达到我们预期的目的。因此,一旦我们深入理解了数据集,也就不得不回到数据加工这一步,评估缺失值和异常值的处理是否得当,评估新提炼的特征是否有效,等等。
坊间不有这么一句话么?数据和特征决定了机器学习的上限,而模型和算法只是逼近这个上限而已。如果整体数据的质量不好,特征不优,那你也就别想要得到一个理想结果了。而试探性数据分析恰好就能解决这类问题。
既然EDA如此重要,我们应该怎样进行EDA呢?
怎样进行EDA?
一般说来,使用EDA理解数据的方法有两大类:一类是非图形的或图形的;另一类是单变量或是多变量的。
非图形的分析方法主要包含汇总统计计算,也称描述统计;而图形类方法则主要用图表、图形来汇总数据,俗称可视化统计。
除此之外,还有两种常用的方法:
1. 降维。是指在某种限定条件下,降低随机变量个数,得到一组“不相关”主变量的过程。
2. 聚类分析。它是把相似变量通过静态分类方法,分成不同组别或者更多的子集的分析过程。
但回过头来,我们做好了EDA,提炼了更有用的特征,就能提升模型的准确率了吗?尽管大概率如此。这还是不够的。因为影响模型准确率的,不仅仅是特征,还有这几个方面:
1. 数据量。不用多说,数据量越大,你能预测的结果也就越加准确。
2. 缺失值与异常值的处理。针对缺失值,我们可以用均值、中位数、众数等方式来填补,也可以搭建算法预测缺失值,甚至可以直接删掉。而对于异常值,除了用处理缺失值那套方法之外,还可以转换、合并或者分别处理。
3. 特征工程。即从现有数据中提取更多信息,再经过分析提炼出新特征。比如说我们要根据交易日期来预测店铺成交量,可能从日期中很难得到答案。但同时,有了日期,也就等于说知道了每月和每周的情况,这就是一个隐含的特征。
4. 特征选择。找到最好属性子集的过程,以便更好解释自变量与目标变量的关系。
5. 多种算法组合。选择正确的机器学习算法是实现模型高精度的理想方法,但由于选择的过程是很难的,它需要你有大量的实战经验。因此,我们通常会用多个算法进行对比选择。
6. 算法优调。也被称为调参。因为算法是由参数控制的,因此更优的参数值通常能带来更准确的预测结果。
7. 集成方法。即融合多个弱模型来得到更好的结果。
8. 交叉验证。即我们在训练模型之前,将数据集切割成多个子集(一般为两个)。先在一个子集上做训练分析,而后用其他子集做后续对比分析的确认及验证。
换句话说,虽然经过深入理解数据,我们挖掘出了一些有效特征,能帮助我们在提升模型准确度方面跨了一大步。但是对完美来说,仍然还是有很多可提升的地方。比如说算法,比如说数据量。
但如果我们已经竭力做了自己该做的,模型准确度也是没有提升太多,其实也不用在意了。因为那很可能就是数据集本身的问题了,不是你的可控范围。毕竟你已经在自己的可控领域,做到了让自己不遗憾了。
当然,如果你想要了解到更多关于大数据的有趣事件,或是数据分析师入门与进阶的相关讯息,欢迎轻戳文末二维码。
参考资料:
1. InData Labs, Exploratory Data Analysis: the Best way to Start a Data Science Project.
2. Jean-leah Njoroge PhD, Significance of Exploratory Data Analysis (EDA).
3. KGzhang, 8中提升模型精度的方法。
http://weixin.qq.com/r/ADhaQobEgdv_rcIh920S (二维码自动识别)