算法
随着面向对象(Orient Object)编程方法兴起,“程序=数据结构+算法”【1】的光荣时代似乎已经一去不复返。如今许多分析人员也不曾听过Knuth【2】和他的The Art of Computer Programming。有一种观点是,在各工具将算法封装得很好的情况下,深入了解算法似乎是没必要的——Just run it。的确,如果你只想做到中级分析师,可以不去理会。但是要成为一名高级分析师,那肯定得有一定深度的研究。一是为了知道针对特定的数据集,选用什么样的算法,如何抽取样本,抽取多大量的样本(样本出问题,整个项目都完蛋),算法适用条件是什么,比如线性回归的:独立性、常方差、正态性,怎么理解,哪些必须满足。这些使用如果不熟悉的话,很容易导致分析出问题。一些做这方面工作的BIer,不求甚解,做出来的东西是错的,做分析最可怕的是错了还没意识!二是客户问到一些问题,知道如何去解释,比如用决策树计算出来的得分,为什么很多样本得分是一样的?客户细分中,有没有算法可以使得同一个客户细分至两个不同的客户群?没有的话,如何用现有算法解决该客户既有A群属性又有B群属性的问题?三是你能写出针对特定问题的算法,现实中许多问题拥有其他问题一样的共性,也有它自己的个性,某些时候针对个性的东西越强,分析效果越好,这就需要你手写算法解决。获得Netflix 100万推荐算法大奖的绝不可能是封装好的现成算法不是么。另外还有一类商业智能问题,是封装算法解决不了的,这类问题大多见于与地理结合的GIS决策系统,这类系统就要求分析人员有图形算法功底。可见如果你想成为顶级的数据分析师,算法与数据结构的知识必不可少。搜索,排序,树,图之所以经典,是因为它们简单有效而且通用。如果你能把这些算法在数据库里实现,那么你分析技术这方面,确实达到很高的境界了。