我曾经用了12年的时间做了一个数据建模工作。这件事做完以后,我就在想:这些时间到底花在哪里了?再遇到类似的问题,能不能把效率提高、时间缩短?
这12年的时间,都用在什么地方了?
这些年大体上分成两个阶段:前面一个阶段是战略层面探索阶段,目的给出技术目标、以便“做正确的事”;后面一个阶段是战术探索阶段,目的是把模型建立起来,以便“正确地做事”。两个阶段花的时间大体相当。
先谈战略层面的探索。
很多人不明白,为什么技术目标还需要探索?做创新的第一步,不就是确定用户需求吗?的确如此。但用户需求不一定是那么清楚的。确切地讲:用户的原始需求是非常清楚的,但原始需求往往是不能实现的(参见我经常说的人择难题)。我们要找到需求和可行性的交汇点,要比世界上其他人更接近用户的原始需求。
打个比方:癌症病人的原始需求是:尽快、用没有痛苦的办法把病治好。但现实可能是:既治不好更谈不上快、也不可能没有痛苦。好的医疗方案是要在延长寿命、减少痛苦两个方面做出权衡。而要找到这样的方案,需要做大量的检查和测试。特别地,如果这个病非常奇怪,确诊过程都是件困难的事情。
具体回到数据建模,我要考虑的是:模型的精度到底能多高、应用范围应该有多大、可靠性如何;根据这些条件,模型适合用在哪些场合、要用到这些场合还需要解决哪些问题。特别地,这些问题都与产品(如钢种、用户具体需求)有关。
如果再有机会做这样的项目,我觉得完全可以用10%左右的时间完成这些探索。提高效率的原因,是减少一些不必要的探索。当然,前提是数据条件足够的好。如果条件很差,得到的结论可能是:这件事根本没法做。我希望有时间,把这些探索过程抽象成一个方法套路。
再谈战术级别的探索。
战术层面的探索,主要是不断地修订模型和参数。我和很多人说过:我用的方法很简单,几乎都是线性回归、甚至主要是一元线性回归,而不是一些时髦、高深的做法。采用线性回归,不是因为不会其他方法,而是我不太相信这些方法。因为我追求的一个目标就是可靠性。要追求可靠性,就要与专业知识联系起来。如果用了主成分分析、神经元等方法,对机理的认识就难以融合了。当然,我也不完全排斥这些方法。比如,这些方法可以用在纯粹的拟合问题上,只是没有遇到合适的应用场合。我记得有个大科学家曾经说过类似这样的话:世界的本质是简单的。世界最不可思议的地方,在于它是可以理解的。
能用线性回归解决这个问题,可以说是“上帝的眷顾”。这个项目做到后面,我真的是必须坚持下去:否则前功尽弃了。为了减少失败的风险,我还让尽量少的人加入到这个团队中。我的想法是:如果一旦失败,损失也小一点。
线性回归为什么会花这么长时间呢?很多的时间确定模型和参数。探索时间过长源自于可靠性和准确度要求高。要满足这个要求,教科书和论文上的做法,往往不靠谱:因为我们很难满足“定理”的条件。要做好这件事,要回归认识论、有点哲学思考,然后再落实到可操作的工作上。
比如,波普的科学哲学强调科学原理的特点是“可证伪”。而具体操作层面的做法,就是要从不同的角度对分析结论进行验证。一个重要的做法是:在不同的组别内做严恒,要求各个组别的分析结果基本一致。这时我们经常遇到:在一批数据中,某个参数的系数是750,在另外一批数据中则是850。当这种差异不能忽视时,就要进行深入的研究。
一般来说,这种差异可能来自几个方面:忽视了某个要素、忽视了非线性因素(用线性回归方法得到的模型未必都是线性的,可能含有一些非线性项。这里不解释,参见教科书)。总之,建模的过程可能存在系统性的干扰。这时,就要把这种系统的干扰拿进来,重新修订模型。
“把干扰因素拿进来”意味着开始分析的时候,只用了部分变量。为什么不在一开始的时候,就把尽量多的变量拿来一起建模呢?其实,建模一定是从简单到复杂的:如果一开始就把很多变量拿进来,可能每个参数都不靠谱,模型就变成了“沙漠中的大厦”、没有办法深入下去。所以,我们的思路是先把最简单的问题搞清楚,搞清楚一个算一个,一步一个脚印地往前走。当然,把最初的几个变量分析清楚是有条件的。关键是找到合适的数据集,这是要碰运气的。
“战术级别探索”的大体流程是这样的:
1、选择适当的数据集,把某些关键要素的影响搞清楚。
2、用分组的办法,检验模型的稳定性;如果满意,进入第4步。
3、如果模型稳定性差,考虑其他因素的干扰,重新修订参数,直到满意。
4、对精度和要素的全面性做评估;评估满意,项目结束。否则进入下一步。
5、回到第1步,选择新的数据集,加入新的影响因素。
这个过程,就像微分方程中的“李雅普诺夫函数”,让运动不断收敛。收敛的过程就是认识不断加深的过程。我也知道:这个流程还没有把工作过程完全说清楚,还涉及到很多技术性问题:如对模型的评估、数据集的构造等。这些还有待以后的细化。总之,过程相当复杂。
即便是同样的问题,如果让我重新再来,也要花很长的时间,比如40%。在项目开展的过程中,我曾经试图用一些算法,提高分析效率。但这些努力的效果不大。当然,在这一方面的努力也不够:作为企业研究人员,真的是想快点把具体的研究结果拿出来,而不是研究通用方法。但这个梦想却一直都在。
不久前,我在工程院谈了一个观点:在未来智能制造时代,物质生产主要交给机器去做,人类主要做知识生产者。数据分析过程,是一种典型的知识生产过程。今后,要提高人类的生产力水平,就要提高知识生产的效率。
数据分析的过程,是利用计算机分析数据;对效率影响最大的就是人的介入。这样,要提高知识生产的效率,就要把人的介入尽量减少,提高分析的自动化水平。为此,就要把分析过程流程化、标准化——这个原理和物质生产的自动化是一样的。
这件事或许值得我把后半生的学术生涯投入进来。