“若敕政则躬,杜渐防萌,则凶妖消灭,害除福凑矣。” ——《后汉书·丁鸿传》
东汉重臣丁鸿在给和帝的上书中劝勉皇帝须在事情的萌芽阶段就开始预防,这样才可以消除隐患,使得国家长治久安。也正是因为丁鸿的直言劝谏,和帝才果断出手平乱,避免事情进一步向消极的方向发展。
治国如此,治理企业也同样如此,在标准化程度亟待提升的物流行业,万亿级的市场最终由两千余万的卡车司机和一千余万的卡车如蚂蚁搬家一般完成,每一条运输的数据记录就好比全身经脉中那细小到肉眼看不见的毛细血管,细微至极但却重要至极。
在互联网+物联网浪潮的推动下,物流行业的数据积累呈指数级的爆发,面对如此海量的数据,规模以上企业往往不知所措,首当其冲的问题就是数据是否真实可信?换句话说就是数据是否有异常值?以及如何在浩如烟海的数据中快速准确的发现异常值并及时处理?
现在假设有一份某公司项下某项目某三个月的运单记录如下,数据分析的目的是在这三个月中,所有运费金额是否有异常值?为了方便理解可以将数据字段做深度裁剪,只保留“运单单号”“货物名称”“起始点”“目的地”“运输距离”“货物数量”“运费金额”“运输时间”等字段,字段截图如下图:
如果数据只有23条记录,那么异常值的获取完全可以依靠经验识别,但是这份数据其实一共有3505行记录,这就超出了经验识别的框架,必须通过数据分析的方式来辨别其真假。
而从数据分析的角度来看这份数据,至少有三种方式快速高效的识别异常值。
Ø 箱线图
箱线图是对数据进行描述性分析的时候最经常使用的算法,最适宜提供有关数据的位置与分散的参考,尤其在不同的总体数据时更可表现其差异。对于原始数据集中的运费金额做箱线图的最终结果如下:
以出发点为类别轴分别做A出发点和B出发点的箱线图,图中的灰色箱子可以简单的看做是正常值的集合(如果将所有的数值从大到小依次排序,那么灰色箱子中的数据就是中间50%的数据),从灰色箱子到上下界线的垂直线可以简单的看做是另外几乎50%的数据,为什么说是几乎?因为还有异常值。
超过上下界线的数值都可能被认为是异常值,在本例中,上下界线的参数设置为1.5倍的正常数据集(灰色箱子)的跨度。可以看出,根据箱线图的算法,以B地点为出发点为例,原始数据集中第785,1405,2543,1028,2018,1299,1009,1504,2524,612,737,2126条运输记录在运费金额上可能存在异常。
箱线图在识别数据异常上的最大优势不仅仅在于速度快,更在于对于异常值的定义是根据原始数据集的整体趋势变化的,弹性且灵活,而不是一个简单的大于多少或者小于多少的硬性指标,这对于运价随天气,政策,供求,品类,急缓等多方因素随时变化的物流行业来说尤为重要。
Ø 回归
回归是数据分析的灵魂,当然回归也可以检测到数据的异常值。
用回归的算法检测异常值与箱线图相比最大的不同在于,箱线图是根据单变量的数据变化发现异常值,但是箱线图的的不足之处也恰恰在于切断了关联性,在物流行业中,数据从来不会是单独存在,每一条运输记录都是大量的字段数据共同组成,刻意的切断数据的关联性分析得到的结果往往也是不全面的。这时,回归算法就更为符合关联性的要求。
用回归的算法识别异常值的方式有很多,在本例中只使用较为易于理解的一种,得到的最终结果如下:
在以“运费金额”为因变量,“货物数量”和“运输时间”为自变量的线性回归中,由模型推导出的预测值与实际值之间的差值(残差)应该符合正态分布,利用这一点对标准化的残差和标准化的的预测值做散点图。
从最终结果图来看,原始数据集的残差与预测值之间大体上是符合正态分布的,这时通过3倍标准差的辅助线(图中虚线)就可以发现辅助线外的异常值(5%可能性存在的值),从图中可以看到可能的异常值是第3234,3217,3293,3349,3304,3285,3226,3219条运输记录。
回归算法将运费金额不再视为一个单独的变量看待,而是将其视为主变量(为了便于理解的说法),将货物数量和运输时间视为辅变量,通过主变量与辅变量之间的逻辑关系来论证数据是否可能异常。
Ø 聚类
在回归算法中,作为因变量的“运费金额”是要研究的对象,是一个很重要很“昂贵”的指标,作为自变量的“货物数量”和“运输时间”是为了研究运费金额而使用的对象,是相对不重要和“较为廉价”的指标。所以回归算法其实就是用一系列“较为廉价”的指标去验证一个“昂贵”的指标,这其中天然存在着“不平等性”。
聚类算法将所有的字段视为同等重要,从而避免了这种“不平等性”,在数据量较小且不讲求数据精度的初步筛选中通过使用K均值聚类算法,在本例中,得到的最终结果如下图:
聚类的基本原理可以简单的理解成物以类聚,在一条条的运输记录中,每条记录中都包含有大量的平等的数据字段,通过聚类的算法,具有相似特性字段值的记录就会被聚成一类。在这样的逻辑上,可能包含异常值的“与众不同”的运输记录就会凸显出来,成为单独的某一类或者某几类。
从本例的最终结果图可以看到,第一类和第二类都有着极为丰富的数据集合,具有相似字段特性的运输记录集合在一起成为一类,而第三类却特别显眼,通过后续的数据处理可以发现第三类只包含两行数据,分别是第3234行数据和第3217行数据,那么这两行就是可能的异常数据。
大数据辅助各个行业发展的今天,我们更多的都在说如何取得数据,以及如何进行数据分析。但是,有人的地方就是江湖,江湖险恶,总会有真假。所以我们在分析数据之前,务必要搞清楚,哪些是有价值的数据,哪些是“异常值”。
但是,从另外一个角度来说,风险往往与机遇往往是共存的,在发现异常值的背后也不全然是风险,也同样有可能蕴藏着产品与管理的创新与开拓,前提是,必须先发现它。