我對資料採礦和機器學習是新手,從去年7月份在Amazon才開始接觸,而且還是因為工作需要被動接觸的,以前都沒有接觸過,做的是需求預測機器學習相關的。 後來,到了淘寶後,自己憑興趣主動地做了幾個月的和使用者位址相關資料採礦上的工作,有一些淺薄的心得。 不管怎麼樣,歡迎指教和討論。
另外,注明一下,這篇文章的標題模仿了一個美劇《權力的遊戲:冰與火之歌》。 在資料的世界裡,我們看到了很多很牛,很強大也很有趣的案例。 但是,資料就像一個王座一樣,像征著一種權力和征服,但登上去的路途一樣令人膽顫。
大資料採礦中的三種角色
在Amazon裡從事機器學習的工作時,我注意到了Amazon玩資料的三種角色。
Data Analyzer:資料分析員。 這類人的人主要是分析資料的,從資料中找到一些規則,並且為了資料模型的找不同場景的Training Data。 另外,這些人也是把一些髒資料洗乾淨的的人。
Research Scientist:研究科學家。 這種角色主要是根據不同的需求來建立資料模型的。 他們把自己戲稱為不近人間煙火的奇異性物種,就像《生活大爆炸》裡的那個Sheldon一樣。 這些人基本上玩的是資料上的科學
Software Developer:軟體發展工程師。 主要是把Scientist建立的資料模型給實現出來,交給Data Analyzer去玩。 這些人通常更懂的各種機器學習的演算法。
我相信其它公司的做資料採礦或是機器學習的也就這三種工作,或者說這三種人,對於我來說,
最有技術含量的是Scientist,因為資料建模和抽取最有意義的向量,以及選取不同的方法都是這類人來決定的。 這類人,我覺得在國內是找不到的。
最苦逼,也最累,但也最重要的是Data Analyzer,他們的活也是這三個角色中最最最重要的(注意:我用了三個最)。 因為,無論你的模型你的演算法再怎麼牛,在一堆爛資料上也只能幹出一堆垃圾的活來。 正所謂:Garbage In, Garbage Out! 但是這個活是最髒最累的活,也是讓人最容易退縮的活。
最沒技術含量的是Software Developer。 現在國內很多玩資料的都以為演算法最重要,並且,很多技術人員都在研究機器學習的演算法。 錯了,最重要的是上面兩個人,一個是苦逼地洗資料的Data Analyzer,另一個是真正懂得資料建模的Scientist! 而像什麼K-Means,K Nearest Neighbor,或是別的什麼貝葉斯、回歸、決策樹、隨機森林等這些玩法,都很成熟了,而且又不是人工智慧,說白了,這些演算法在機器學習和資料採礦中,似乎就像Quick Sort之類的演算法在軟體設計中基本沒什麼技術含量。 當然,我不是說演算法不重要,我只想說這些演算法在整個資料處理中是最不重要的。
資料的品質
目前所流行的Buzz Word——大資料是相當誤導人的。 在我眼中,資料不分大小,只分好壞。
在處理資料的過程中,我第一個感受最大的就是資料品質。 下面我分幾個案例來說明:
案例一:資料的標準
在Amazon裡,所有的商品都有一個唯一的ID,叫ASIN——Amazon Single Identify Number,這個ID是用來標識商品的唯一性的(來自于條碼)。 也就是說,無論是你把商品描述成什麼樣,只要ASIN一樣,這就是完完全全一模一樣的商品。
這樣,就不像淘寶一樣,當你搜索一個iPhone,你會出現一堆各種各樣的iPhone,有的叫「超值iPhone」,有的叫「蘋果iPhone」,有的叫「智慧手機iPhone」,有的叫「iPhone白色/黑色」......, 這些同一個商品不同的描述是商家為了吸引使用者。 但是帶來的問題有兩點:
1)使用者體驗不好。 以商品為中心的業務模型,對於消費者來說,體驗明顯好于以商家為中心的業務模型。
2)只要你不能正確讀懂(識別)資料,你後面的什麼演算法,什麼模型統統沒用。
所以,只要你玩資料,你就會發現,如果資料的標準沒有建立起來,幹什麼都沒用。 資料標準是資料品質的第一道關卡,沒這個玩意,你就什麼也別玩了。 所謂資料的標準,為數據做唯一標識只是其中最最基礎的一步,資料的標準還單單只是這個,更重要的是把資料的標準抽象成數學向量,沒有數學向量,後面也無法挖掘。
所以,你會看到,洗資料的大量的工作就是在把雜亂無章的資料歸併聚合,這就是在建立資料標準。 這裡面絕對少不了人肉的工作。 無非就是:
聰明的人在資料產生之前就定義好標準,並在資料產生之時就在幹資料清洗的工作。
一般的人是在資料產生並大量堆積之後,才來幹這個事。
另外,說一下Amazon的ASIN,這個事從十多年前就開始了,我在Amazon的內網裡看到的資料並沒有說為什麼搞了個這樣一個ID,我倒覺得這並不是因為Amazon因為玩資料發現必需建議個商品ID, 也許因為Amazon的業務模型就是設計成以「商品為中心」的。 今天,這個ASIN依然有很多很多的問題,ASIN一樣不能完全保證商品就是一樣的,ASIN不一樣也不代表商品不一樣,不過90%以上的商品是保證的。 Amazon有專門的團隊Category Team,裡面有很多業務人員天天都在拼命地在對ASIN的資料進行更正。
案例二:資料的準確
使用者位址是我從事過資料分析的另一個事情。 我還記得當時看到那數以億計的使用者位址的資料的那種興奮。 但是隨後我就興奮不起來了。 因為位址是使用者自己填寫的,這裡面有很多的坑,都不是很容易做的。
第一個是假/錯位址,因為有的商家作弊或是使用者做測試。 所以位址是錯的,
比如,直接就輸入「該位址不存在」,「13243234asdfasdi」之類的。 這類的位址是可以被我的程式識別出來的。
還有很難被我的程式所識別出來的。 比如:「宇宙路地球社區」之類的。 但這類位址可以被人識別出來。
還有連人都識別不出來的,比如:「北京市東四環中路23號南航大廈5樓540室」,這個位址根本不存在。
第二個是真位址,但是因為使用者寫的不標準,所以很難處理,比如:
縮寫:「建國門外大街」和「建外大街」,「中國工商銀行」和「工行」......
錯別字:「潮陽門」,「通慧河」......
顛倒:「東四環中路朝陽公園」和「朝陽公園(靠東四環)」......
別名:有的人寫的是開發商的社區名「東恒國際」,有的則是寫行政的地名「八裡莊東裡」......
這樣的例子多得不能再多了。 可見資料如果不准確,會增加你處理的難度。 有個比喻非常好,玩資料的就像是在挖金礦一樣,如果含金量高,那麼,挖掘的難度就小,也就容易出效果,如果含金量低,那麼挖掘的難度就大,效果就差。
上面,我給了兩個案例,旨在說明——
1)資料沒有大小之分,只有含金量大的資料和垃圾量大的資料之分。
2)資料清洗是一件多麼重要的工作,這也是一件人肉工作量很大的工作。
所以,這個工作最好是在資料產生的時候就一點一滴的完成。
有一個觀點:如果資料準確度在60%的時候,你幹出來的事,一定會被使用者罵! 如果資料準確度在80%左右,那麼使用者會說,還不錯! 只有資料準確度到了90%的時候,使用者才會覺得真牛B。 但是從資料準確度從80%到90%要付出的成本要比60%到80%的付出大得多得多。 大多資料的資料採礦團隊都會止步于70%這個地方。 因為,再往後,這就是一件相當累的活。
資料的業務場景
我不知道有多少資料採礦團隊真正意識到了業務場景和資料採礦的重要關係? 我們需要知道,根本不可能做出能夠滿足所有業務的資料採礦和分析模型。
推薦音樂視頻,和電子商務中的推薦商品的場景完全不一樣。 電商中,只要你買了一個東西沒有退貨,那麼,有很大的概率我可以相信你是喜歡這個東西的,然後,對於音樂和視頻,你完全不能通過使用者聽了這首歌或是看了這個視頻就武斷地覺得使用者是喜歡這首歌和這個視頻的,所以,我們可以看到, 推薦演算法在不同的業務場景下的實現難度也完全不一樣。
說到推薦演算法,你是不是和我一樣,有時候會對推薦有一種感覺——推薦就是一種按不同維度的排序的演算法。 我個人以為,就提一下推薦這個東西在某些業務場景下是比較Tricky的,比如,推薦有兩種(不是按使用者關係和按物品關係這兩種),
一種是共性化推薦,結果就是推薦了流行的東西,這也許是好的,但這也許會是使用者已知的東西,比如,到了北京,我想找個飯館,你總是給我推薦烤鴨,我想去個地方,你總是給我推薦天安門故宮天壇(因為大多數人來北京就是吃烤鴨, 就是去天安門的),這些我不都知道了嘛,還要你來推薦? 另外,共性化的東西通常是可以被水軍刷的。
另一種是一種是個人化推薦,這個需要分析使用者的個體喜好,好的就是總是給我我喜歡的,不好的就是也許我的口味會隨我的年齡和環境所改變,而且,總是推薦符合使用者口味的,不能幫使用者發掘新鮮點。 比如,我喜歡吃辣的,你總是給我推薦川菜和湘菜,時間長了我也會覺得煩的。
推薦有時並不是民主投票,而是專業使用者或資深玩家的建議;推薦有時並不是推薦流行的,而是推薦新鮮而我不知道的。 你可以看到,不同的業務場景,不同的產品形態下的玩法可能完全不一樣,
另外,就算是對於同一個電子商務來說,書、手機和服裝的業務形態完全不一樣。 我之前在Amazon做Demand Forecasting(使用者需求預測)——通過歷史資料來預測使用者未來的需求。
對於書、手機、家電這些東西,在Amazon裡叫Hard Line的產品,你可以認為是「標品」(但也不一定),預測是比較准的,甚至可以預測到相關的產品屬性的需求。
但是地于服裝這樣的叫Soft Line的產品,Amazon幹了十多年都沒有辦法預測得很好,因為這類東西受到的干擾因素太多了,比如:使用者的對顏色款式的喜好,穿上去合不合身,愛人朋友喜不喜歡...... 這類的東西太容易變了,買得人多了反而會賣不好,所以根本沒法預測好,更別Stock/Vender Manager提出來的「預測某品牌的某種顏色的衣服或鞋子」。
對於需求的預測,我發現,長期在這個行業中打拼的人的預測是最准的,什麼機器學習都是浮雲。 機器學習只有在你要面對的是成千上萬種不同商品和品類的時候才會有意義。
資料採礦不是人工智慧,而且差得還太遠。 不要覺得資料採礦什麼事都能幹,找到一個合適的業務場景和產品形態,比什麼都重要。
資料的分析結果
我看到很多的玩大資料的,基本上幹的是資料統計的事,從多個不同的維度來統計資料的表現。 最簡單最常見的統計就是像網站統計這樣的事。 比如:PV是多少,UV是多少,來路是哪裡,瀏覽器、作業系統、地理、搜尋引擎的分佈,等等,等等。
嘮叨一句,千萬不要以為,你一天有十幾個T的日誌就是資料了,也不要以為你會用Hadoop/MapReduce分析一下日誌,這就是資料採礦了,說得難聽一點,你在做的只不過是一個統計的工作。 那幾個T的Raw Data,基本上來說沒什麼意義,只能叫日誌,連資料都算不上,只有你統計出來的這些資料才是有點意義的,才能叫資料。
當一個使用者在面對著自己網店的資料的時候,比如:每千人有5個人下單,有65%的訪客是男的,18-24歲的人群有30%,等等。 甚至你給出了,你打敗了40%同類型商家的這樣的資料。 作為一個商戶,面對這些資料時,大多數人的表現是完全不知道自己能幹什麼? 是把網站改得更男性一點,還是讓年輕人更喜歡一點? 完全不知道所措。
只要你去看一看,你會發現,好些好些的資料分析出來的結果,看上去似乎不錯,但是其實完全不知道下一步該幹什麼?
所以,我覺得,資料分析的結果並不僅僅只是把資料呈現出來,而更應該關注的是通過這些資料後面可以幹什麼? 如果看了資料分析的結果後並不知道可以幹什麼,那麼這個資料分析是失敗的。
總結
綜上所述,下面是我覺得資料採礦或機器學習最重要的東西:
1)資料的品質。 分為資料的標準和資料的準確。 資料中的雜音要儘量地排除掉。 為了資料的品質,大量人肉的工作少不了。
2)資料的業務場景。 我們不可能做所有場景下的來,所以,業務場景和產品形態很重要,我個人感覺業務場景越窄越好。
3)資料的分析結果,要讓人能看得懂,知道接下來要幹什麼,而不是為了資料而資料。
搞資料採礦的人很多,但成功的案例卻不多(相比起大量的嘗試來說),就目前而言,我似乎覺得目前的資料採礦的技術是一種過渡技術,還在摸索階段。 另外,好些資料採礦的團隊搞得業務不業務,技術不技術的,為其中的技術人員感到惋惜......
不好意思,我只給出了問題,沒有建議,這也說明資料分析中有很多的機會......
最後,還要提的一個是「資料中的個人隱私問題」,這似乎就像那些有悖倫理的黑魔法一樣,你要成功就得把自己變得黑暗。 是的,資料就像一個王座一樣,像征著一種權力和征服,但登上去的路途一樣令人膽顫。