杜曉夢 北京百分點信息科技有限公司研發總監,博士
發展策略
基于分布式架構的大數據建模實踐
杜曉夢 北京百分點信息科技有限公司研發總監,博士
大數據時代的到來,數據的量、數據的源都發生了劇烈的變化,這種變化引發了變革。開源運動的進一步發展,為這場變革提供了催化劑。本文重點討論了百分點的商業建模技術架構是如何應對這種變化的。
分布式架構;大數據;建模
大數據時代的到來,數據的量、數據的源都發生了劇烈的變化,這種變化引發了變革。開源運動的進一步發展,為這場變革提供了催化劑。本文重點討論了百分點的商業建模技術架構是如何應對這種變化的。
百分點大數據商業建模的基礎架構基本分為業務需求層、模型層和數據管理層。進一步細分的話,數據管理層又可以細分成計算層、數據文件系統層以及操作系統層;模型層又可分成模型和可視化、分析工具以及接口層。從需求層來看,在大數據時代,企業和消費者的接觸點變得越來越多,包括線下門店、精準廣告、社交平臺等接觸點。企業要實現它的業務需求,首先要從這些接觸點上采集消費者的數據,然后進行分析和挖掘,以滿足不同業務部門的需求,這個是業務層或者需求層要解決的一些問題。
在小數據時代,數據分析師需要考慮的往往只有需求和模型設計本身,考慮輸入變量是離散的還是連續性的變量,要用線性的模型還是要用非線性的模型就夠了。小數據時代,會用到一些建模工具,比如SaaS、SPSS等,會去跑一個模型,然后分析系數的顯著性,得出分析的結果。但是在大數據時代,這種方式發生了很大的變化,建模變成了一個體系的問題,需要從整個需求層到模型層,再到數據管理層進行一個綜合的考慮。
以一個典型業務層的需求為例,首先要考慮用什么模型。在模型層,要將商品進行分類,要結合統籌學和優化的模型去對這個問題進行分析。在分析工具上,可能會用Python去進行數據的清洗,或者會選用R進行數據的建模,會考慮這個模型的實時性有多高?它的數據量多大?它是單機就能跑,還是要上分布式的架構?如果是上分布式架構的話,用Hadoop還是用Spark?用Rhadoop去調用數據,還是用SparkR去進行分析等問題。進一步地,需要有數據管理層的分布式架構去進行支撐。
在大數據的時代,建模演化成一個要結合7層去考慮的整體問題。其實需求層在大數據和小數據的時代,變化不太大,差異不太大,都是解決這些企業不同業務部門的需求,銷售有銷售的需求,例如銷量預測、個性化定價、庫存優化等。營銷有營銷的業務需求,例如如何定位目標人群,通過哪些渠道去觸達消費者,營銷投放的ROI怎么樣等。這些需求在大數據時代和小數據時代沒有特別大的差異,只不過是在大數據時代,數據分析師能夠利用它去進行分析的數據更廣泛了,變成了多源異構的數據,建模工具的性能大大提升了,因此數據分析方式也要跟著去發生變化。
本文主要對數據管理層和模型層進行介紹(見圖1、2)。數據管理層又可以進一步分成操作系統層、數據文件系統層和計算層3層。操作系統層是硬件之上第一層,大部分的公司有Linux、Unix、Windows這些系統,所有的建模工具、數據管理和處理都依賴于這些操作系統。在數據文件系統層,有HDFS分布式文件系統、消息隊列、磁盤文件系統等,這一層和計算層是緊緊相連的。計算層提供數據的處理、計算的框架和方式,包括Hadoop、Spark、Storm計算框架。當然,也包括像Oracle和MySQL這種傳統數據庫提供結構化數據管理和處理的方法論。一些非結構化的數據庫,如像Redis可以和Storm很好地結合,目前百分點的實時推薦架構就是這樣做的。

圖1 數據管理層

圖2 模型庫
模型層又可以細分成模型和可視化、分析工具層以及接口層。模型和可視化層解決不同業務應用場景的問題,這里面會有各種統計模型、機器學習的模型,運籌學、優化學的模型、經濟學的模型等。要實現這些模型,就要去選擇合適的分析工具。例如,在客戶運營領域里有RFM模型,用于分析客戶的價值度。這個模型可以是用R語言實現,也可以用Python、Java、C++等工具實現。還有一些常用的算法,比如因子分析、聚類分析、決策樹等,既可以用Weka,也可以用SAS進行實現。包括一些當需要集成一些可視化組件的時候,可以通過一些Processing的工具。
分析工具也是需要選型的,不同的數據分析師可能會根據自己的偏好去鉆研某一個到兩個數據分析工具,例如R和Python。數據接口層,通過分析工具,利用數據管理層提供的API進行模型實現。大多數時候會借助一些現有的工具,比如RHadoop、Python Hadoop Streaming等。當然,也會因為性能問題和工具無法提供的功能,而借助各個系統的API封裝實現自己的模型,這個時候就可能會用到C++和Java等這些編程語言去實現。以上是對模型層和管理層進一步的細分。
接下來給大家介紹一下百分點大數據商業建模的流程九宮格(見圖3)。
第一步,在任何大數據分析、建模之前,首先要做業務問題的定義。要定義清楚你想要分析什么東西,業務需要什么樣的結果,如何去量化這個業務問題。業務問題定義是很重要的,它直接決定了模型的價值和意義所在,如果模型最后的結果不能回答最開始的業務問題,或者不能滿足業務的需求,認為這個模型分析其實是失敗的。

圖3 大數據商業建模流程九宮格
第二步是數據的提取和理解,要針對一個已經定義清楚的一個業務問題去提取相關的數據。數據在哪里?去哪些數據庫提取,去MySQL、SQLServer提取,還是去Greenplum提取,或者去HBase或Codis集群里提取?不同的數據庫需要用到不同的工具和語言去做數據提取。對于數據的提取部分,一般大數據公司都會有專門的數據工程師去做。接下來到數據的理解部分,拿到數據之后千萬不要馬上進入到分析的環節去,先要做大量數據理解,包括描述性的統計分析、一些相關性分析、繪制大量的圖表,例如散點圖、殘差圖等,幫助我們建立對數據的理解,這一步非常關鍵。往往通過數據的理解,就能部分回答你的業務問題,或者說建立起一系列的假設。
第三步進入到數據預處理的環節。數據預處理會占據大概50%的時間,有一些大數據工程師或數據分析師認為拿來數據,只要嘗試各種模型,就能解決這個業務問題,其實這種做法是不對的。通常來說,50%以上的時間需要花在數據的預處理部分,這也是大數據和小數據的一些差異。因為在大數據建模的領域,數據的噪音是非常大的。需要首先去做一些數據的清洗、降噪,例如補充缺失值,怎么去填充缺失值?是全用均值去填充?還是用模型預測值去填充?異常值要不要去除?怎么定義Outlier?這些都有相關的技術。需要做數據的集成,包括冗余的屬性,冗余的維度,進一步在數據預處理時,還要做數據的變換,包括數據的平滑。要去做數據的規范化,數據量綱的統一,如果數據量綱差異太大的話,可能分析出來某個系數有的是0.0000幾,那它的可讀性是非常不好的。在數據預處理的部分,還要去做一些數據的規約,這個部分其實是要在海量數據中提取出有代表性的數據。因為如果這個數據太大的話,其實分析起來是浪費資源的。所以如果能用一些代表性的數據去分析,而不損失信息量的話,就是規約的目的。數據的規約包括數據離散化、抽樣的技術等。這些都是數據預處理的技術,也是筆者認為在大數據建模的過程里最重要的一個環節。有一個說法叫Garbage In,Garbage Out,意思就是說,如果你不做任何數據的清洗加工,就直接進入模型的話,它其實是垃圾進入,然后出來的也會是垃圾,沒有價值的結果。
第四步是模型算法選型。面對無數的模型算法,要選擇哪個?其實是取決于你的數據情況,取決于你的業務問題。當然有大量可供選擇的模型,例如在統計建模的領域有線性、非線性的回歸,有時間序列的算法等。在機器學習領域,有分類、聚類、關聯規則、神經網絡等。在優化運籌領域,有線性、非線性規劃,模擬退火、遺傳算法等。但模型的算法不是越復雜越好,從經驗來看,線性模型和邏輯回歸能解決很多的問題。因此,能解釋業務問題的模型就是好的模型,而不要盲目追求算法的復雜度。
第五步在模型算法選型之后,要做分析工具和語言的一個選型。通常會有一些熟知的工具,例說R、Python、Java、C++等,某個模型算法,例如分類,可以用R實現,也可以用Python,甚至可以直接用C++去寫,這個其實取決于數據建模工程師的偏好,或者取決于分析團隊負責人的偏好。一般來說,建議大家掌握2~3種工具,精通其中的一種。
第六步建模挖掘的部分,會利用模型算法選型決定的模型,利用分析工具選型決定的工具去進行建模的挖掘。大多數情況會嘗試幾種模型,然后對比單個模型效果,或者通過Bagging、Boosting方法去投票,做組合,提高準確率。前五步的功夫做足,真正的建模挖掘步驟反倒不會是多么困難的部分。
第七步進入到模型評估。模型評估其實也是一個非常重要的部分,什么樣的模型才是好模型?評估模型優劣性的指標有很多種,比如說準確率、召回率。如果是統計模型,會用RSquare去評估模型對于方差的解釋度;會用均方根誤差,RMSE這個指標去評估模型的預測效果。模型的速度、健壯性也很重要,包括模型的擴展性,在數據量大的時候,能否保證運算的效率,也是需要評估的一個指標。另外,模型的可解釋性,對于業務人員也是很重要的。有一些黑箱模型、神經網絡等,它天生不具備像邏輯回歸的可解釋性。另外,筆者認為最重要的指標是模型的結果是否是可用的,是否回答了業務的問題,這個其實是評估模型的一個最重要的指標。
第八步,在通過了模型的評估之后,就要把這個結果可視化,需要用大量的圖表去展示模型的結果,要讓它的可讀性變得很強,邏輯很清晰,結論很清楚,這樣才能講給業務人員聽,讓業務人員理解模型是怎么出來的,數據分析的結果如何支撐業務,如何回答業務問題。有些數據分析師不重視可視化,會認為模型預測準就好,其實可視化的過程也是幫助你總結的一個過程。
第九步,當模型通過了所有的評估、業務審核等,就要去做模型的部署,模型與企業現有的應用系統、生產系統,包括推薦、營銷系統、CRM等對接,把這個模型投入到生產和業務中,讓它切實發揮作用。
以上就是在大數據時代做數據建模流程的9個步驟。
分享一個應用場景,即如何通過大數據建模解決客戶的業務問題。這個案例是某品牌手機新品上市營銷的業務方案,幫它做了兩件事情,第一件事情是老用戶的營銷,通過建模找到新品手機的目標人群(見圖4);第二件事情是微博的營銷,對于這一點做了以下3件事:
(1)幫它甄別這個行業比較有話語權的微博。
(2)幫它識別了網友中的意見領袖。
(3)幫它找到想買手機的用戶。
這個項目的關鍵點,其實就是定義清楚業務問題。定義清楚一系列業務問題之后,選取一些建模的方法去實現,幫助它解決這些業務問題。例如,如何通過老用戶建模分析找到新品手機的目標人群?

圖4 老用戶營銷
首先,提取了這個品牌手機的電商旗艦平臺及線下門店的用戶歷史交易數據,作為原始數據要做描述性的統計,之后做數據清洗和預處理。在數據清洗的過程中,發現了很多數據錯誤,需要和客戶進行確認,決定修改的原則,并將對數據的修改記錄下來,具體參見圖5、6。

圖5 數據概括

圖6 數據問題概括
在數據清洗之后,運用關聯規則模型度量這個新品手機和其他品類的相似性。主要步驟如下:
(1)選擇滿足最小支持度的商品項集。
(2)選擇滿足最小置信度的規則。
(3)選擇提升度大于1的規則,不斷迭代,找出所有滿足要求的關聯規則。
(4)選擇滿足最低KULC系數的規則。
(5)選擇IR偏向的關聯規則。
其中,篩選規則為:
●提升度>3(電視品類提升度>1)。
●未設置最小支持度。
●KULC:采取放寬KULC限制,同時設置最低不平衡度,再從中選取對當前rhs有利規則;P(KULC>0.5)規則非常少;當前設置>0.25。
●IR:在一定不平衡度基準以上進一步篩選偏向當前rhs的關聯規則;絕大多數關聯關系很不平衡;當前設置>0.5。
●置信度,當前篩選結果最小置信度達0.5,因此不再針對置信度進一步設置。
經關聯規則模型得到如圖7的結果,運用關聯規則模型,找到和新品品類A最相近的細分品類B,將購買過B品類的用戶作為再營銷的重點老用戶群體。
當然,也使用了其他的模型預測,例如購買概率的預測、協同過濾模型、產品生命周期的推測等。之后,建立用戶特征的過濾,識別這個終端消費用戶的購買頻次、消費的品類、價格承受度,最后鎖定目標人群,輸出目標群體的營銷列表,找到整個老用戶群體里有可能去購買新品手機的用戶群體,并做了基于購買概率的排序。
對于新品手機的微博營銷方案,首先爬取了在新浪微博上行業相關的微博,通過關鍵詞提取了所有博文的內容,包括評論內容、轉發內容、用戶信息等。進一步構建了3個模型,篩選出來用于微博營銷新品手機的潛在目標用戶。這3個模型分別是通過構建影響力指數模型去找到具有行業話語權的行業公眾號、通過社會網絡模型識別微博中的意見領袖,以及通過語義分析模型找到想買手機的人群,從而實施新品手機廣告的轉發和推薦。下面具體介紹一下這3個模型:
(1)影響力指數編制
首先,對微博公眾號影響力指數進行了編制。基于此分類下的藍V用戶的微博影響力數據,綜合利用AHP方法計算出不同行業在微博平臺影響力的指標,然后找到這些最具有影響力的微博公眾號或者藍V的用戶去做新品手機廣告的觸達,具體參見圖8。
(2)社會網絡分析

圖7 關聯規則結果
運用社會網絡模型去找到這款手機的意見領袖。社會網絡分析模型廣泛地運用在這種具有網絡特征的大數據分析中,例如通過計算節點的連接數去找到一個社交群體中的意見領袖和活躍分子等。同時,SNA模型還可以用來計算社交網絡的密度,監控這個網絡的健康度等,目前在輿情監控領域、電信網絡的數據分析等都有比較廣泛的應用。利用SNA模型,去找到微博中和手機相關的意見領袖,進行新品手機營銷文章的推送,引發這個意見領袖的關注和討論,從而帶動大多數跟隨者對某品牌新品手機的一個關注,這是第二個模型,具體參見圖9。

圖8 影響力指數編制

圖9 社會網絡分析
(3)文本挖掘模型
第三個模型是文本挖掘(見圖10)。在文本挖掘模型中,首先建立了一系列的規則,例如在微博正文中含有“想買手機”、“挑選手機”等關鍵詞的微博,針對規則對抓取的博文進行了標注和過濾,經過SVM分類模型的訓練,把微博進行分類,最后篩選出可能會對某品牌手機感興趣,或者近期有購買手機意愿的人群,由營銷人員進行觸達,推廣這個新品的手機。
接下來看一下這幾個模型一些應用的效果。首先第一部分,在老用戶營銷中,經過建模加權之后的結果,找到不同等級的目標,用戶群體超過10萬人。通過篩選之后進行短期的推送,效果比盲投廣告提升了3倍。在微博營銷中,通過3個模型,獲取了超過10萬人的目標用戶群,經過運營人員進行觸達,有超過1萬人響應了新品手機微博的營銷信息,最終通過這些大數據建模的方式找到這個營銷的短名單,然后幫助這個品牌成功實現新品上市的營銷推廣方案。
最后跟大家分享的是,在大數據時代的商業建模需要做到的幾個方面(見圖11):
第一,好數據勝過復雜的模型,不用去太刻意追求模型的復雜度,往往線性回歸和邏輯回歸就能解釋大部分的問題了。記得一位計量經濟學教授說過這樣的話:如果你不知道該用簡單模型還是復雜模型,為什么不從簡單的開始呢?
第二,要做好充分的數據預處理,做好數據的清洗、融合、集成、規約等,去了解業務,理解數據,切忌Garbage In,Garbage Out。所謂磨刀不誤砍柴工,如果數據預處理準備的充分,接下來的數據挖掘也會非常地流暢。反之,如果沒有做充分的數據預處理和描述性分析,就會對建模的結果產生懷疑,進而返工,浪費更多的時間。

圖10 文本挖掘模型
第三,筆者認為需要大數據建模分析去解決業務問題的企業應該組建一個功能比較全面的數據科學團隊。大數據建模往往需要群策群力。之前講過,在大數據時代,建模已經演化成一個體系問題,基本不能由一個人來承擔了。或者說,一個人需要掌握太多種技能才能應付整個建模流程。通常來說,數據科學團隊里會有大數據提取工程師、建模算法工程師、數據可視化工程師、業務數據分析師、優化工程師等,是一個集團軍作業、流水線作業的情況,而不是像小數據時代,通過一個人就能解決從數據的提取、加工、建模,到最后數據的分析結果展示這一系列的問題。
如果一個人能解決大數據建模這一系列的問題——能夠和數據庫進行底層的交互、能去做建模算法的挖掘、能做數據的優化、能做數據可視化等,集這些功能為一身的人才配稱之為數據科學家,真正的數據科學家是非常稀有的。而目前沒有集這些功能于一身的人的情況下,通常可以用群體的力量去解決在大數據時代遇到的數據挖掘問題。因此,筆者認為,企業去招一個全面的數據科學家,不如去組建一個功能比較全面的數據科學團隊,大家各有所長,數據提取工程師去做和數據庫的交互,算法工程師去做數據的挖掘,可視化做可視化的展現,調優的去做運營調優等,以集體的力量去解決企業在大數據時代遇到的商業建模的一些問題。

圖11 大數據時代商業建模需要做到的幾個方面
2016-06-20)