好的算法往往很簡單。但問題的另一面則是:簡單算法往往不容易用好。如何來理解這對矛盾呢?
在我看來:簡單辦法好用,往往是因為簡單方法可靠度高、容易理解、容易與領域知識結合。而簡單方法不容易用好,則是因為:簡單方法的應用是有條件的,而條件往往并不滿足。
線性回歸是最簡單的建模方法。但是,應用這個方法也是有條件的。例如:1、自變量的檢測誤差可以忽略不計;2、對結果的干擾服從正態分布、沒有顯著的系統性干擾。但是,現實中,這樣的條件往往并不滿足啊!
類似地,在分析一個變量有沒有顯著影響的時候,經常會用到F檢驗。但我卻發現,在大數據時代,對任何變量的F檢驗幾乎總是有效。換句話說,這種做法其實是失效的。原因也是一樣的:算法的條件不滿足。
再如,先進工業企業普遍使用的SPC方法。這個方法中,有許多判斷異常的判據。部分判據的依據,是發生這種事件的概率小于0.27%。這意味著,每生產1萬件產品,平均就會有27件判斷異常。但是,如果生產過程真的很穩定、極少發生異常,這種方法顯然也是會失效的。
幾年前,清華數學系的謝老師請我和賓州大學林教授一起吃飯。林教授談到他的困惑:在大數據時代,統計學知識難道就沒有用了嗎?我回答說:大數據能讓統計算法用得更好。
我的意思是說:在大數據時代,人們可以有足夠多、足夠好的數據,驗證(采用簡單算法的)條件是不是成立。如果不成立的話,還可以通過選擇和改造數據,讓它們符合要求。而不是盲目地利用這些數據建模。
我國有一種現象:濫用統計學方法。我在寶鋼時,曾有過一次沖動:把看到的論文記下來,作為反面案例——看看這些作者是如何濫用統計方法的。在現實中,工業數據不符合統計學要求是種常態,符合要求才是偶然的。盲目采用數據分析方法時,濫用就成了一種常態。
數據分析理論中有個著名的CRISP_DM模型。這個模型中有一個步驟叫做數據理解。濫用數據分析方法的根源,往往就是數據理解做得不夠、沒有進行適當的處理。而數據理解得不夠,往往又是因為對業務的理解不到位。我認為:人們有較好的業務知識,才能把數據理解到位。
我講數字化轉型課時,經常提到一個例子:斯特寧先生被國際慈善組織派到越南,解決當地兒童營養不良問題。他通過調查,發現了三條有效的做法:營養好的孩子一天吃四頓飯;2. 媽媽們會抓小魚小蝦給孩子吃;3媽媽會把地瓜葉的汁淋在飯上。我們注意到:斯特寧發現這三條做法,不僅是靠數據分析能力,還靠專業知識:孩子胃小、消化快,多吃一次有利于吸收;魚蝦中含有孩子成長必須的蛋白質;葉子汁中含有孩子必須的維生素。所以,把專業知識和數據分析結合在一起,才能發現這些知識。
所以,用好簡單算法,關鍵要把數據準備工作做到位,并具備較好的專業知識。但是,要做到這一點是不容易的。
作者:郭朝暉(工學博士,教授級高工。企業研發一線工作20年)
