我在前面的文章中提到:应该像提出“软件工程”的概念一样,把工程方法引入工业大数据分析。这样,才能让数据分析的质量和效率可控、让大数据分析成为一种具有经济性的“知识生产”、让数据分析作为一种可以健康发展的行业。
但是,很多人会怀疑:这种想法是不是太理想,能做到吗?本文打算就这个问题进一步展开讨论。
我认为:工程方法的一个重要思想,就是重视前期的准备、把不确定性因素压缩、避免无效的劳动。对工业大数据分析来说,要关注三个方面的问题:对用户价值目标的理解、对物理过程的理解、对数字化条件的理解。有意思的是:这恰好对应《三体智能革命》所提到的人、物质、赛博三个方面。我认为,这些准备工作,或许需要占据40%的时间。而不像现在很多人做的那样,拿来数据就匆匆来做分析。
下一个问题就是:怎么才算是说清楚了呢?我给出的(理想)标准是:在下一步的数据分析过程中,不需要理解用户,就是真的说清楚了。
这个目标提得其实很高,为完成目标设置了跟大的困难:如何才能说清楚呢?
工业过程及其需求千差万别,要达到上述目标真的是非常困难。对于这个疑惑,我的想法是:关注那些可以用20%的时间解决的80%问题(这是二八原则的说法。按照经验,或许是90%的问题可以用10%的时间来解决)。剩下的少量难题,留给学者们去探索。
这80%容易解决的问题是什么呢?能否用统一的方式来描述呢?有了统一的方式,方法 论也才能落地、不至于是一句空话。我的观点是,重点关注两类问题:
1、判断在某个范围内、条件下,某个数值是不变、近似不变的常数,或者只受到较小随机干扰的影响。
2、判断在某个范围内、条件下,两个变量之间的函数关系是不变、近似不变的、在特定变化下是不变的,或者只受到较小随机干扰的影响。
这两类问题虽然简单,但大多数的数据分析问题,都可以归结到这两类问题上来。我们知道,三种类型的运算语句,可以完成各种程序。这里的情况似乎也是类似的、适用面很广。例如,判断异常就是判断常量或者函数关系发生了变化;所谓的模式分类,就是判断数值或者函数关系不同。这些方法的另外一个重要用途,是判断某些因素在何种条件下“有影响”、“没有影响”。这样,这个方法就可以应用到很多多元问题上。
人们对机理和数据的认识,可以归结到这类问题中:比如,变量之间可能的关系、数据稳定的程度、数据真实性的判别、关系失效的条件等等。我们知道:人们对工业过程的理解往往是很全面的,只是不够清晰。按照我的经验,人们对数据本身的认识往往相对模糊。但是,只要问清楚一些问题、进行初步的分析,数据特征也容易说清楚。这样,就可以在人类已有的认识基础上进行深化、让知识发现超越人类,从而有利于价值创造。
两类问题看似简单,其实也很不容易:在多要素的前提下,高度确认某个要素“没有影响”或“产生影响”都是很费劲的。算法的核心看似寻找数值和函数,其实是寻找背后对它们产生影响的范围。换个角度看,这个过程,是在范围变化的过程中进行一系列的“求同”、“求异”——在我看来,大数据之所以蕴藏知识,就是因为可以和别人比较、和过去比较。
我的想法当然是有局限性的。比如,本质复杂的多元非线性问题,就很难解决。但是,根据我多年的经验:真正复杂的问题往往非常少,多数问题是看似复杂、没能把复杂问题简单化。
多数人做数据分析时,对物理对象、数据特征、用户需求上花得功夫太少;在算法上花的时间过长、算法也太复杂。所谓工程化方法,就是把重点颠倒过来。
最后,我想用《孙子兵法》的观点,来描述本文的想法。孙子说:“知己知彼百战不殆”、“胜兵先胜而后求战”。意思是说,在打仗之前,要知道尽量多的信息、有了胜利的把握再去打。孙子还说:“古之善战者,胜于易胜者也。故善战者之胜也,无智名,无勇功。” 意思是说,善于打仗的人,是专找容易打胜的机会去打。同样,我们搞数据分析,也要充分理解用户需求、物理对象和数据条件,这要才能做到“知己知彼”;还要善于把复杂问题转化成简单的问题去做,这就是“胜于易胜者也”。
本文还是个初步的想法,有待深化。欢迎讨论和批评指正。