人工智慧對戰小數據-談生成模型的應用

巡洋艦科技的機器學習項目也展開一段了,這幾個月的一個突出感受是是, 人工智慧的真正挑戰是數據缺乏, 而我們面對的通常是小數據而非大數據問題。

人工智慧如火如荼,很多公司想抓住機器學習人工智慧的風口走一個,然而這些公司里,有很多人對數據的存留方式幾乎可以用「落後」來形容……從幾十萬張紙片上的信息,到各路聯絡員腦子裡的記憶,講道理,客戶說他有十萬組數據,清洗完能有一千行可用的都謝天謝地了。

就比如說之前接的甲方預測農村土地報價的項目,甲方給我們做模型用的數據,大大小小清洗完,也就剩下了六百來個可用的……這可用的裡面還有某些莫名其妙的原因導致應該肉眼去除的數據,比如北京某塊十幾畝的地一萬塊錢賣了這種,就算數據真實……對於我們想要構建的模型來說他也是雜音。

與大部分想像的大數據時代不同, IT時代走到現在這個階段, 大部分公司面臨的是小數據問題, 而非大數據。 就算是攜程這樣擁有巨量數據的公司, 深入到某個具體問題, 我們依然面臨的是小數據問題, 比如雲南的旅遊線路推薦。 那些fancy的深度學習, 比如人臉識別和alphago中用到的卷積網路, 是註定無緣這些問題的。 那麼這些領域是不是註定沒法做呢?

數據小了, 我們怎麼辦? 其實小數據學習這件事,最會做的是我們人類自己, 我們的人腦, 最擅長根據小量數據舉一反三 , 我們通過形成對客觀世界的常識和概念來學習。 比如俗語說的一朝被蛇咬, 十年怕井繩這件事, 就是說當我們被蛇咬了一次(典型的小數據)然後我們就連看到井裡的繩子,都會誤以為那是蛇 。你掌握了規律, 看到蘋果落地, 就懂得萬有引力, 所以你能舉一反三, 而目前的大數據卻不能。

所以得目前一個征服小數據的有效手段,就是人為的錄入規則,把這種「人類的方法」 加到機器學習里,從而大大減少需要學習的數據量。

好了, 鐵哥的解決方法是什麼? 出差和土地聯絡員面基!(田野調查),在親吻大地的同時,了解土地價格裡面到底了藏了多少秘密。 尼馬,亂報價那是相當明顯啊, 京郊普通土地雖然1000出頭每畝每年比較正常, 然而多出幾倍叫價的情形是會非常普遍,往高了叫2~5倍的價格,有些地方叫到十幾倍都有可能……純粹是看心情。這一觀測使得我們團隊果斷選擇了「範圍內準確率」替代原有的相對誤差。選擇觀測對象和角度, 有時是我們改善心情的唯一方法。

調查之後, 團隊技術核心@子楠 商議之後找出了一套更加適合小數據機器學習方法:

第一種要提到的是貝葉斯方法, 貝葉斯定律把已有的常識性信息通過先驗概率嵌入到公式里, 而新的觀測會修正先驗得到後驗概率,如果我們要通過為數不多的統計得到某城市的男女比例分布, 那我們把已知的全球男女比例102:100放入到先驗里, 會大大加快少量數據下的結果穩定性。 先驗概率里包含的常識信息, 可以大大減少我們需要的數據量

實踐中我們更多採用符合實踐的旁門左道而非直接用貝葉斯公式,但是思想里無疑不包含著貝葉斯種子。

首先我們合理假設去除臟數據,越是小數據, 個別的雜訊對模型的影響可能就越明顯, 我們首先把土壤轉讓價格轉化成單價,然後根據我們在其他數據集上土地單價的相關知識, 把價格大於1600元每畝每年的都去掉。 我們發現, 在小數據問題上, 像Statistical tests, parametric models, bootstrapping這類的傳統方法依然是大大有用的 。

再有我們決定削減冗餘特徵,做足特徵工程,最早網路抓取的特徵dummy化(如性別變成男,女,和中性三個特徵,每個特徵只取0,1)化後我們有200多特徵 ,如水井, 農村土地補貼這些都納入了因子特徵, 我們大膽的把特徵合併後得到10個左右核心特徵, 如經濟地理指數, 交通指數, 土地用途這一類, 準確率果然比200多特徵還高

數據量較小, 複雜模型是災難而不是福祉, 不要過多特徵, 更不要特徵之間還有相互作用,神經網路表示跑出來的結果還不如線性回歸

不過我們還玩了一種更猛更激進的方法, 就是數據生成法,又稱模擬大法, 就是我們在已有的原生數據里混入一些根據已有數據加上人為經驗合成的人工數據,再放在一起來學習。 你說這不是造假嗎? 其實不然,這裡我們通過生成數據,在原數據中強化了我們對客觀規律的認知。

比如這塊地叫價50萬,一般會往高了叫10萬,那麼,預測40~60萬都認為是準確的,由於實際市場上人們偏向於報個高價(萬一瞎貓碰上死耗子呢)而非叫低價, 於是我們考慮人類本性,選擇 - 33% 到 + 50 %的價格範圍來做價格評估。 這樣準確率就輕鬆超越40% ,這反映了雖然存在大量瞎報價, 但是合理報價依然還是佔有不少比例的。

然後在調查中我發現, 人報價的方法往往是一定按照單位面積的價格乘以面積(而土地上有房產則這種關係一定不成立,所以在數據統計中反而很難看出趨勢), 而價格隨著年份呈現一定的貼現率關係,當年數增大一倍, 價格並不翻倍,而是以一定指數折損,這背後的原理很簡單, 我們對10年後的事情相對不關心, 所以10年後的價值要用現在的錢來買, 是要乘以一個折損率的。

我們把這些客觀經驗加進去,以此來增加模型中的有效信息,進而提高模型效果, 怎麼樣 ?

。反正提前拿出一部分數據藏起來作test集,然後再去對train集隨便折騰。比如我的方法就是,copy一份train的數據出來,其他特徵不變,面積全部增加或減少1.1倍,或年份增加或減少要1.1倍,用這些生成的數據混合原生數據,然後看看準確率是否得到了提高……

我們發掘的規律從數據擬合中得到了印證,價格和年份的關係果真符合一定的貼現率,而這個比率竟然是5% ,居然符合國家基本利率! 果然經濟規律無處不在!

結果,果不其然(令人驚訝)的是,我們所採集的各個數據集上準確率都有提高,多的10%,低的2%,平均提高了5%左右。

到目前為止,在甲方的A數據集上,利用對訓練集加兩倍數據的輔助方式進行學習,每次重新隨機測試集藏起來,穩定能夠達到50%的準確率了(土地報價亂叫價的情況下感覺撐死也就這麼高了)。然而這種生成數據的思想,卻是可以推衍的。

大量的中小型企業都存在這種數據少,質量差的情況,然而各個中小型企業能維生,主要是因為大家腦海中有個「經驗公式」。那麼,把這個經驗公式取出來,用某種方法來強化數據,這也許也是一條獨特的,符合中國特色的人工智慧化道路,畢竟我們的數據包含了太多國情特殊性啊。

大公司都在搞大數據,但是全國大多數還是只有小數據的小公司,也許這部分小公司利用好自己的經驗,強化數據,運用機器學習,也是一種人工智慧走向千家萬戶的一種方式呢。或許巡洋艦會秉承貝葉斯的這種核心思想, 在中小企業ai化的路上殺出一片藍海。

小數據,大智慧。信貝爺,得永生。


推薦閱讀:

創新工場人工智慧戰略白皮書 2017(全文)

TAG:机器学习 | 大数据 | 人工智能 |