FacebookTwitterLineHatena

文 | 郭朝暉
源 | 蟈蟈創新隨筆

我曾經用了12年的時間做了一個數據建模工作。這件事做完以後,我就在想:這些時間到底花在哪裡了?再遇到類似的問題,能不能把效率提高、時間縮短?

這12年的時間,都用在什麼地方了?

這些年大體上分成兩個階段:前面一個階段是戰略層面探索階段,目的給出技術目標、以便「做正確的事」;後面一個階段是戰術探索階段,目的是把模型建立起來,以便「正確地做事」。兩個階段花的時間大體相當。

先談戰略層面的探索

很多人不明白,為什麼技術目標還需要探索?做創新的第一步,不就是確定用戶需求嗎?的確如此。但用戶需求不一定是那麼清楚的。確切地講:用戶的原始需求是非常清楚的,但原始需求往往是不能實現的(參見我經常說的人擇難題)。我們要找到需求和可行性的交匯點,要比世界上其他人更接近用戶的原始需求。

打個比方:癌症病人的原始需求是:儘快、用沒有痛苦的辦法把病治好。但現實可能是:既治不好更談不上快、也不可能沒有痛苦。好的醫療方案是要在延長壽命、減少痛苦兩個方面做出權衡。而要找到這樣的方案,需要做大量的檢查和測試。特別地,如果這個病非常奇怪,確診過程都是件困難的事情。

具體回到數據建模,我要考慮的是:模型的精度到底能多高、應用範圍應該有多大、可靠性如何;根據這些條件,模型適合用在哪些場合、要用到這些場合還需要解決哪些問題。特別地,這些問題都與產品(如鋼種、用戶具體需求)有關。

如果再有機會做這樣的專案,我覺得完全可以用10%左右的時間完成這些探索。提高效率的原因,是減少一些不必要的探索。當然,前提是數據條件足夠的好。如果條件很差,得到的結論可能是:這件事根本沒法做。我希望有時間,把這些探索過程抽象成一個方法套路。

FineReport報表與BI商業智慧軟體-如何提高數據分析的工作效率

再談戰術級別的探索

戰術層面的探索,主要是不斷地修訂模型和參數。我和很多人說過:我用的方法很簡單,幾乎都是線性回歸、甚至主要是一元線性回歸,而不是一些時髦、高深的做法。採用線性回歸,不是因為不會其他方法,而是我不太相信這些方法。因為我追求的一個目標就是可靠性。要追求可靠性,就要與專業知識聯繫起來。如果用了主成分分析、神經元等方法,對機理的認識就難以融合了。當然,我也不完全排斥這些方法。比如,這些方法可以用在純粹的擬合問題上,只是沒有遇到合適的應用場合。我記得有個大科學家曾經說過類似這樣的話:世界的本質是簡單的。世界最不可思議的地方,在於它是可以理解的。

能用線性回歸解決這個問題,可以說是「上帝的眷顧」。這個專案做到後面,我真的是必須堅持下去:否則前功盡棄了。為了減少失敗的風險,我還讓盡量少的人加入到這個團隊中。我的想法是:如果一旦失敗,損失也小一點。

線性回歸為什麼會花這麼長時間呢?很多的時間確定模型和參數。探索時間過長源自於可靠性和準確度要求高。要滿足這個要求,教科書和論文上的做法,往往不靠譜:因為我們很難滿足「定理」的條件。要做好這件事,要回歸認識論、有點哲學思考,然後再落實到可操作的工作上。

比如,波普的科學哲學強調科學原理的特點是「可證偽」。而具體操作層面的做法,就是要從不同的角度對分析結論進行驗證。一個重要的做法是:在不同的組別內做嚴恆,要求各個組別的分析結果基本一致。這時我們經常遇到:在一批數據中,某個參數的係數是750,在另外一批數據中則是850。當這種差異不能忽視時,就要進行深入的研究。

一般來說,這種差異可能來自幾個方面:忽視了某個要素、忽視了非線性因素(用線性回歸方法得到的模型未必都是線性的,可能含有一些非線性項。這裡不解釋,參見教科書)。總之,建模的過程可能存在系統性的干擾。這時,就要把這種系統的干擾拿進來,重新修訂模型。

「把干擾因素拿進來」意味著開始數據分析的時候,只用了部分變數。為什麼不在一開始的時候,就把盡量多的變數拿來一起建模呢?其實,建模一定是從簡單到複雜的:如果一開始就把很多變數拿進來,可能每個參數都不靠譜,模型就變成了「沙漠中的大廈」、沒有辦法深入下去。所以,我們的思路是先把最簡單的問題搞清楚,搞清楚一個算一個,一步一個腳印地往前走。當然,把最初的幾個變數分析清楚是有條件的。關鍵是找到合適的數據集,這是要碰運氣的。

「戰術級別探索」的大體流程是這樣的:

1、選擇適當的數據集,把某些關鍵要素的影響搞清楚。

2、用分組的辦法,檢驗模型的穩定性;如果滿意,進入第4步。

3、如果模型穩定性差,考慮其他因素的干擾,重新修訂參數,直到滿意。

4、對精度和要素的全面性做評估;評估滿意,專案結束。否則進入下一步。

5、回到第1步,選擇新的數據集,加入新的影響因素。

這個過程,就像微分方程中的「李雅普諾夫函數」,讓運動不斷收斂。收斂的過程就是認識不斷加深的過程。我也知道:這個流程還沒有把工作過程完全說清楚,還涉及到很多技術性問題:如對模型的評估、數據集的構造等。這些還有待以後的細化。總之,過程相當複雜。

即便是同樣的問題,如果讓我重新再來,也要花很長的時間,比如40%。在專案開展的過程中,我曾經試圖用一些演算法,提高分析效率。但這些努力的效果不大。當然,在這一方面的努力也不夠:作為企業研究人員,真的是想快點把具體的研究結果拿出來,而不是研究通用方法。但這個夢想卻一直都在。

不久前,我在工程院談了一個觀點:在未來智慧製造時代,物質生產主要交給機器去做,人類主要做知識生產者。數據分析過程,是一種典型的知識生產過程。今後,要提高人類的生產力水平,就要提高知識生產的效率。

數據分析的過程,是利用計算機分析數據;對效率影響最大的就是人的介入。這樣,要提高知識生產的效率,就要把人的介入盡量減少,提高分析的自動化水平。為此,就要把分析過程流程化、標準化——這個原理和物質生產的自動化是一樣的。

這件事或許值得我把後半生的學術生涯投入進來。

喜歡這篇文章嗎?歡迎分享按讚,給予我們支持和鼓勵!

熱門文章推薦

立即試用,可獲取更多 報表範本和案例

免費試用