数据分析是一个庞大的工程,有的时候过于抽象且依赖经验。本文是博主对学习和实践数据分析的一个总结,希望提供一种通用的数据分析思路,并在分析思路的每个步骤中介绍相关的分析算法及其应用场景,对于算法只做浅层次的介绍,待读者在实际使用中自行深入了解。本文主要针对刚刚接触数据分析或者面对一堆数据不知道如何下手的读者,经验丰富的数据分析师们可以跳过。同时,本文介绍的分析思路由于笔者的经验和知识有一定的局限性,希望读者在分析中合理参考。
在进行数据分析之前,首先应该做好以下准备:
一、熟悉业务、了解数据来源
这一点是数据分析的前提。数据分析,除了我们面对的数据之外,更多的是这些数据背后隐藏的各种业务。例如当我们看到用户的消费记录时,它可能不仅仅是收银系统购买商品,还包含了为了会员系统的满减而做的凑单,活动管理系统的开业折扣商品,或者是推荐系统的推荐商品。对于业务深入的了解,有助于更好的发现分析的维度,快速锁定问题和原因。
二、明确分析的目的
数据分析不是模型算法和可视化的堆砌,而是有目的地发现某种现象,支撑某些决策。所以在分析之前,一定要明确自己分析的目的,切忌照搬其他的项目的分析内容,或者随意组合手上的分析模型算法,这样会导致分析结果华而不实。
三、多视角观察
要想达到某种分析目的,需要从多个视角观察数据,这样不仅可以对数据整体有个全面的了解,也有助于发现潜在的信息。例如当我们需要找出潜在的会员的时候,最直接的当然是消费比较多但还不是会员的人。但从促销活动的角度看,那些热衷购买打折商品的人很大概率也是潜在的会员,因为加入会员他们会获得更多的折扣,这是他们希望的。同时,从推荐系统的角度看,那些对推荐系统推荐的商品满意的人,也不太会拒绝你推荐他加入会员。
做好准备工作后,接下来就进入正题,开始分析:
一、它是什么?
数据分析一定是针对某一些对象的,就像消费记录针对的是某一店铺。那首先要做的,就是通过数据来描述这一对象。就像了解一个人一样,首先要了解他是个怎样的人,然后便是他的特点,比如我的一位朋友是个学霸,他的特点就是每晚学习到12点,每科成绩基本满分。所以,主要从两个方面关注一个对象,整体描述和特征:
1、基础统计
统计是最直接的方法,而且应用起来也很简单。常用的方法有总和、平均数、最大最小值、中位数、方差、增长率、类型占比、分布、频率频次等等。这里不多做介绍。
2、聚类
“物以类聚,人以群分”,聚类属于非监督学习,聚类可以将一组数据分成多个类别,每个类别内部的数据相似,但两个类别之间相异。聚类有助于发现数据分布上的特点,可以大量减少分析的数据量。比如在轨迹分析和预测中,通过聚类,我们会发现某个人主要出现在三个地方,宿舍周围、食堂周围、教学楼周围,那么当我们预测他在哪的时候,就可以从对无数经纬度坐标的分析变成对三个地点的分析。
3、特征分析
特征工程是很庞大,正如描述的那样,数据和特征决定了机器学习的上限,而模型和算法只能逼近这个上限而已。特征工程包含了特征提取和特征选择,由于其算法众多且比较复杂,这里不一一介绍。特征分析首先要明确分析的单位,包括时间、空间和类型等等。就像轨迹预测中,分析每十分钟的所在地要比分析每秒钟的经纬度坐标要实际得多,而分析每小时的所在地又太过粗糙。然后就是特征提取,特征提取的算法有很多,线性的PCA(主成分分析)、LDA(线性判别分析)、ICA(独立成分分析),文本的F-IDE、期望交叉熵,图像的HOG、LBP等。特征分析的主要目的是降维、减少冗余,提高存储计算能力。举个不太恰当的例子,比如我们要描述二氧化碳的化学特性,有颜色、气味、酸性、碱性、氧化性、还原性、热稳定性等等,同样一氧化碳也一样,那这时候我们把这些特性降维到C和O上,那么认为由C和O的组成的一氧化碳和C和2个O组成的二氧化碳有相似的特性,都是无色无味的气体。
二、它发生了什么?
它发生了什么包涵正常和异常,而我们通常会更加关注异常,这里也着重于异常分析。它发生了什么与它是什么在分析思路和方法上是一致的,只是针对不同的阶段,比如时间上本月与上月。对于异常分析,主要有两部分,发现异常和推送预警。推送预警比较简单,只要注意预警的级别和推送的人。而异常发现,除了能直接观察的异常,比如我们的学霸这次居然有一科没及格,更多的需要注意暗物质。所谓暗物质,就是无法直接观测的现象和关联。还是拿我们的学霸君说,这次他依旧像往常一样全部考了满分,这是正常的,然而我们发现他这次考试的复习时间只有以往的一半,这就不正常了,而我们又发现这次考试题目很简单,所以这又正常了?错,它依旧是异常,因为考试前学霸君并不知道考试的难度,所以对于复习时间减半依旧是异常。所以,重要的事说多遍,一定要熟悉业务和多视角观察。
在异常判断的时候,通常会根据具体的业务设置一些系数,通过这些系数的突变来发现潜在的异常。回到刚刚那个例子,我们可以简单的用成绩与复习时间的比值作为系数。这些系数在轨迹分析中尤为重要,例如我们要分析一个人的轨迹是否异常,首先会看他是否出现在从来没去过的地方,如果没有,第二步则用一个轨迹的向量去分析。例如通过聚类,我们的学霸君主要出现在教室、图书馆、寝室三个地方,每个地方呆的时间假设都是每天8小时,那这时候就形成一个(8,8,8)的向量,而今天学霸的向量是(2,2,20),通过计算两个向量的距离来发现异常,通常是欧式距离和余弦距离。
三、为什么发生?
每当发生什么的时候,我们都会问一句为什么?为什么是对数据的深层次挖掘与诊断,精确的问题诊断有利于正确的决策。一般可以用到以下的方法:
1、趋势、同比环比
这是很简单的方法,既观察其过去和其他周期的情况,这里不多介绍。
2、下钻
下钻绝对是最常用且有效的找原因的办法,既一层层抽丝拨茧,直到找到最根源的原因。只是在下钻的过程中,一定要注意下钻的区域和方向,就像挖井一样,并不是随便找个地方向任何方向打下去就会出水的。就拿某商场的销售额下降来说,要找出销售额下降的原因,首先会想到去找那些销量减少最多的商品,比如我们发现咖啡减少最多,为什么咖啡减少呢,因为气温变高,人们更偏爱冷饮了。但是对比去年前年,每年这个时候咖啡都会减少,而取而代之的是冷饮的增加,它恰好弥补了咖啡的减少。所以这时我们需要变化思路,去寻找那些以往销量很好而当下销量很少的产品。而为了不犯上述的错误,我们可以分为多个层次下钻,既一开始只关注大的分类的变化,如服装、饮食等等,再从变化较大的类开始继续下钻。
3、相关分析
相关分析是对不同特征或数据间的关系进行分析,发现业务的关键影响和驱动因素。例如时间到春运了,车票就不好买了一样。相关分析常用的方法有协方差、相关系数、回归和信息熵等,其中相关系数和回归也可以用于下面将会提到的预测。其中相关是回归的前提,相关系数表示了两个变量有关系,而回归则表示两个变量是何种关系。其中相关系数与回归也可以延伸到典型相关分析(多元)与多元回归。例如经典的“啤酒和尿布”,如果想要知道啤酒销量为什么增加,可以分析下它与尿布销量的相关性。
四、它还会发生什么?
它还会发生什么就是纯粹的预测了,预测的算法有很多,但也并不是说所有的预测都需要借助难以理解的算法。比如万精油的趋势、增长率、同比环比、基本概率等,有的时候就很能说明问题。但在这里,还是介绍一些常用的预测方法:
1、特别的点
对于实时性和连续性要求不高的预测,这绝对是最省心省力的办法,但是这与具体的业务深度挂钩,所以,重要的事说多遍,一定要熟悉业务和多视角观察。比如,我有件事情必须要给我的领导当面汇报,然而他经常不在办公室,不是在开会就是去现场了,或者正在哪见某个客户,然而清楚的是,他每天早上8:30-9:00之间一定会来公司打卡,那我只要这段时间在打卡机旁候着就一定能见上他一面。
2、分类与回归
分类与回归都是通过已知的数据构建和验证一个函数f,使得y=f(x),对于未知的x,通过f预测y,不同在于回归的输出是连续的而分类的输出是离散的。例如,我们预测明天的温度是回归,而预测明天是下雨天还是晴天则是分类。分类方法有逻辑回归、决策树、支持向量机,而回归一般会用到线性回归。
当然,预测算法还有很多,比如隐马尔可夫(HMM),最大熵,CRF等等,这里也不做过多的介绍。只是需要根据预测的数据的具体情况选择正确的方法,这些可以从我们的算法工程师们那里得到很好的建议,当然前提是我们要将数据的特点和需要预测的东西准确的告诉他们。
五、该怎么办?
该怎么办是数据分析的最终目的。大多数情况下,当知道了问题出在哪,为什么出这个问题的时候,都知道接下来该怎么办了。那么接下来就介绍一些即使知道哪出问题了也不知道该怎么办的时候可以用的方法:
1、拟合与图论
这是在做路线规划的时候最常用的,比如某商场频发商品被偷的事件,我们发现有几个地方的商品特容易被偷,那可以将这些地方串连起来,拟合成一条巡逻的路线给保安。同样,也可以通过构建图并用求最短路径的算法(Dijkstra、Floyd等)构建巡逻的路径。
2、协同过滤
协同过滤属于是利用集体智慧的办法,就像那个经典的面试题一样,当你遇到一个谁也没遇到过的问题时,你该怎么办?那就是问那些比你更厉害的人他们会怎么办。协同过滤最多的是用在推荐引擎之中,一般的方式是寻找一个用户的n个相似用户,然后推荐给这个用户他相似用户喜欢的产品,或者找到当前用户喜欢的前n个物品,然后挑选出和这n个物品相似的m个物品推荐给当前用户。即使不用在推荐,它的思想也很容易延伸在其他方面,比如一个新手侦探不知道这个案件怎么破,那可以去看看柯南君类似的案件破案的步骤。有感兴趣的童鞋,也可以参考博主介绍推荐引擎的博客:
基于spark2的推荐引擎(上)
以上介绍的,是博主总结出的数据分析中的一个常规思路和可以用到的一些常规的方法。希望对读者有所帮助,同时,不恰当的地方,也烦请批评指导。最后再次强调,数据分析不是算法与可视化的堆砌,需要我们对业务深入的了解。