我對數據挖掘和機器學習是新手,從去年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)數據的分析結果,要讓人能看得懂,知道接下來要干什么,而不是為了數據而數據。
搞數據挖掘的人很多,但成功的案例卻不多(相比起大量的嘗試來說),就目前而言,我似乎覺得目前的數據挖掘的技術是一種過渡技術,還在摸索階段。另外,好些數據挖掘的團隊搞得業務不業務,技術不技術的,為其中的技術人員感到惋惜……
不好意思,我只給出了問題,沒有建議,這也說明數據分析中有很多的機會……
最后,還要提的一個是“數據中的個人隱私問題”,這似乎就像那些有悖倫理的黑魔法一樣,你要成功就得把自己變得黑暗。是的,數據就像一個王座一樣,像征著一種權力和征服,但登上去的路途一樣令人膽顫。