用好简单的算法
我最近经常做评委,常会问选手一些算法问题。我发现:用的好的几乎都是简单算法。但有的团队喜欢用新鲜或者古怪的辞藻进行包装。不过,遇到不熟悉算法的评委,似乎还真的有效。如果符合“砖家”的口味,他还会拿出去到处宣传。
好的算法往往很简单。但问题的另一面则是:简单的算法往往不容易用好。如何来理解这对矛盾呢?
在我看来:简单办法好用,往往是因为简单方法可靠度高、容易理解、容易与领域知识结合。而简单方法不容易用好,则是因为:简单方法的应用是有条件的,而条件往往并不满足。
线性回归是最简单的建模方法。但是,应用这个方法也是有条件的。例如:1、自变量的检测误差可以忽略不计;2、对结果的干扰服从正态分布、没有显著的系统性干扰。但是,现实中,这样的条件往往并不满足啊!
类似地,在分析一个变量有没有显著影响的时候,经常会用到F检验。但我却发现,在大数据时代,对任何变量的F检验几乎总是有效。换句话说,这种做法其实是失效的。原因也是一样的:算法的条件不满足。
再如,先进工业企业普遍使用的SPC方法。这个方法中,有许多判断异常的判据。部分判据的依据,是发生这种事件的概率小于0.27%。这意味着,每生产1万件产品,平均就会有27件判断异常。但是,如果生产过程真的很稳定、极少发生异常,这种方法显然也是会失效的。
几年前,清华数学系的谢老师请我和宾州大学林教授一起吃饭。林教授谈到他的困惑:在大数据时代,统计学知识难道就没有用了吗?我回答说:大数据能让统计算法用得更好。
我的意思是说:在大数据时代,人们可以有足够多、足够好的数据,验证(采用简单算法的)条件是不是成立。如果不成立的话,还可以通过选择和改造数据,让它们符合要求。而不是盲目地利用这些数据建模。
我国有一种现象:滥用统计学方法。我在宝钢时,曾有过一次冲动:把看到的论文记下来,作为反面案例——看看这些作者是如何滥用统计方法的。在现实中,工业数据不符合统计学要求是种常态,符合要求才是偶然的。盲目采用数据分析方法时,滥用就成了一种常态。
数据分析理论中有个著名的CRISP_DM模型。这个模型中有一个步骤叫做数据理解。滥用数据分析方法的根源,往往就是数据理解做得不够、没有进行适当的处理。而数据理解得不够,往往又是因为对业务的理解不到位。我认为:人们有较好的业务知识,才能把数据理解到位。
我讲数字化转型课时,经常提到一个例子:
斯特宁先生被国际慈善组织派到越南,解决当地儿童营养不良问题。他通过调查,发现了三条有效的做法:营养好的孩子一天吃四顿饭;2. 妈妈们会抓小鱼小虾给孩子吃;3妈妈会把地瓜叶的汁淋在饭上。我们注意到:斯特宁发现这三条做法,不仅是靠数据分析能力,还靠专业知识:孩子胃小、消化快,多吃一次有利于吸收;鱼虾中含有孩子成长必须的蛋白质;叶子汁中含有孩子必须的维生素。所以,把专业知识和数据分析结合在一起,才能发现这些知识。
所以,用好简单的算法,关键要把数据准备工作做到位,并具备较好的专业知识。但是,要做到这一点是不容易的。