閱讀字數:4809 |6分鐘閱讀python
嘉賓演講視頻地址:suo.im/4Nm9F3c++
Apache MADlib是Pivotal與UCBerkeley合做的一個開源機器學習庫,提供了精確的數據並行實現、統計和機器學習方法對結構化和非結構化數據進行分析。MADlib提供了豐富的分析模型,包括迴歸分析,決策樹,隨機森林,貝葉斯分類,向量機,風險模型,KMEAN彙集,文本挖掘,數據校驗等。MADlib支持Greenplum,PostgreSQL 以及 Apache HAWQ, In-Database Analytics的特性使其大大擴展了數據庫的分析功能,充分利用MPP架構使其可以快速處理海量數據集。本主題將爲你們介紹MADlib的基本架構,工做原理及特性,分享MADlib在互聯網,金融,零售等行業的用戶案例,展望In-Database Machine Learning的廣闊前景。算法
MADlib是一個基於SQL的數據庫內置的可擴展機的器學習庫。讓咱們來逐一解釋這個定義。提及機器學習庫,同行的朋友應該比較熟悉python上的scikit-learn。咱們的庫實現了相似的功能,可是咱們的語法是基於SQL的,也就是說,你能夠用select + function name的方式來調用這個庫。這就意味着,全部的數據調用和計算都在Database內完成而不須要數據的導入導出。因爲應用在大規模並行處理的數據庫內,它的可擴展性也很是好,可以處理較大量級的數據。sql
咱們的整個項目和代碼是在Apache上開源的,到目前爲止,咱們已經有6個release, 而且於今年從阿帕奇孵化器畢業,成爲apache的頂級項目。數據庫
咱們是一個在大規模並行處理系統上的可擴展應用,目前支持PostgreSQL和Pivotal Greenplum。apache
MADlib具備強大的數據分析能力。咱們支持大量的機器學習,圖形分析和統計分析算法。api
MADlib創始於2011年,當時屬於EMC/Greenplum,後來Greenplum變成了pivotal的Greenplum。主要由UC Berkeley的一位學者,Joe Hellerstein發起,Stanford, University of Wisconsin-MADISON和University of Florida也有參與。安全
MAD這個名字來源於三個詞。session
M表明Magnetic,有吸引力的,意味着這個系統可以吸引不少的用戶和數據。傳統的數據倉庫對新數據不夠友好,導入的數據每每須要很是乾淨和完整。然而MADlib能夠作到即便在數據不夠整齊的狀況下,也能幫助數據科學家進行一些有意義的計算和推斷。架構
A表明Agile,敏捷,意味着這個系統可以幫助數據科學家快速有效地處理數據。這有賴於在MADlib在數據庫內的集成。
D表明Deep,深刻。在大規模並行集成系統上的應用使得數據科學家可以使用完整的大數據,而不是在單核的內存內對數據集的子集進行分析,從而提升了分析的精準性。
三個字母連在一塊兒,mad這個詞在英語中除了咱們所熟知的瘋狂這個意思,還有一個意思是「極好的」。咱們但願MADlib能給數據科學家們提供一個極好的機器學習和數據分析平臺。
MADlib有很是普遍的用戶羣體。
目前,咱們的用戶涉及金融,保險,互聯網,醫療,媒體,娛樂,汽車,製造等等行業。能夠說咱們提供的機器學習方法可以覆蓋大部分行業的需求。
如上圖所示,這個列表是目前MADlib所支持的算法。
監督學習,咱們支持Neural Network, SVM, regression, decision tree;非監督學習,咱們支持clustering,topic modeling等;圖形處理,咱們支持apsp, bfs等等。
另外還有時間序列處理,模型選擇,基本統計和數據類型轉換。到目前爲止咱們支持了超過50種算法,是一個複雜而成熟的數據科學學習庫,可以支持各類複雜的機器學習場景。
更好的並行度。咱們在算法設計階段就充分考慮了與大規模並行處理系統,基於不一樣的算法,設計不一樣的分佈方式來保證更快的並行處理速度。
更好的可擴展性。隨着數據量的增加,咱們的擴展性很是穩定。
更高的預測精度。處理大數據使得更多有效數據被利用,從而實現更加精確的預測效果。
咱們是Apache ASF上的頂級開源項目,咱們的開發是在Pivotal的支持下基於Apache community的,與社區有很是好的互動。
相信不少Greenplum用戶對這幅圖很熟悉,這是Greenplum的架構,當一個query進來的時候,master server會對query進行處理,按必定規則把query分配到多個segment上並行處理,最後的結果再返回master server。
MADlib就是構建在Greenplum這個架構之上的。MADlib經過定義postgres上的UDA和UDF創建in-database function。當咱們用sql, r調用MADlib的時候,MADlib會首先進行輸入的有效性判斷和數據的預處理,將處理後的query傳給Greenplum, 以後全部的計算在Greenplum內執行。
上圖中是整個過程的執行流程。
在客戶端,咱們可使用jupyter, zeppelin, psql等等工具鏈接數據庫並調用MADlib function,MADlib處理後根據算法生成多個query傳入database, 以後Greenplum執行query並返回String, String通常是一個或多個存放結果的表。
這是MADlib的基本架構,咱們的user interface就是sql, 代碼的上層主要是python, 會作一些input validation和pre-processing. 咱們調用plpy來執行查詢。代碼的中間層和底層主要是c++, 咱們用c++來調用eigen libraray. Eigen是C++裏處理代數和幾何的包。C++也調用了c的API來和DB進行交流。
下面是一個MADlib使用示例,以pagerank這個算法爲例。
PageRank是一種由搜索引擎根據網頁直接相互的超連接來進行計算的技術,是網頁排名的一個重要算法,以google創始人Larry Page的名字來命名。
在MADlib中,計算一個圖的pagerank,須要兩個表格做爲輸入數據,第一個表格是vertex(節點),用來保存節點的信息,第二個表是edge(邊),用來保存節點指向節點的狀況。使用MADlib調用pagerank的步驟以下:select MADlib.pagerank(),這裏須要幾個輸入。第一個輸入就是vertex表,第二個輸入是vertex id這一欄在該表中的名稱,在示例中的這個vertex表裏,這就是id這一欄。第三個輸入是edge table這張表的名稱,第四個輸入,指出邊的起點和終點所對應的欄在表裏的名稱,最後一個輸入是用戶定義的輸出表格,計算結果將返回這個表格。上圖是計算結果,查看pagerank_out這張表格,能夠看到每一個節點的pagerank分數。另外,咱們有一個表格,pagerank_out_summary,存放了收斂迭代的次數,在這個例子中,計算迭代了16次以後收斂並返回結果。
MADlib具備良好的可擴展性,可以處理較大量級的數據。以pagerank爲例,這張圖顯了隨着邊數的增長,完成計算所須要的時間。咱們能夠看到,1億個頂點,從6億條邊到50億條邊,運行時間幾乎保持了線性增加。
這是SVM的Performance
咱們能夠看到在一億條記錄範圍內,運行時間也是接近線性的增加。對一億條記錄的處理能夠在10分鐘內完成。
以上就是對MADlib的初步介紹,相信你們已經對MADlib有了一個初步的瞭解。接下來是兩個用戶案例。
首先介紹一個下案例的背景。咱們的客戶是某大型跨國多元化傳媒和娛樂公司,是Greenplum的用戶。
在這個案例中,他們想要提升郵件營銷的精準度。他們面臨的主要問題有:郵件廣告點擊預測模型不夠精準,須要更好的模型和營銷策略。其次,他們現有的數據分析流程比較繁瑣,速度較慢而且有不少手工的步驟,容易出錯。在與Pivotal Data Science Team合做以後,咱們爲他們提供了一套解決方案。首先,咱們充分利用了MADlib的多種功能,簡化了整個data pipeline,用MADlib從新建模和預測,而且實現了流程的全自動化。
此次合做的影響很是顯著,首先,對於郵件點擊率,咱們有了更快,更高效和更精準的建模和預測,其次,該客戶一直是Greenplum的用戶,但對Greenplum內建的各類資源並無充分利用,此次合做讓他們看到了in-database analytics的高效和快捷,使得他們實現了in-Greenplum analytics一體化。
客戶的數據源包含了如下信息:user 在mobile 端的購買,預訂,註冊,郵件營銷歷史,網頁瀏覽歷史,地理信息等等,數據量是TB級別,總共的特徵超過1000項。整個過程都在Greenplum這個平臺上進行。建模工具主要是MADlib,以及一些PL/pgSQL。
如下是該客戶當時的數據分析工做流程。原始的數據都導入並存在Greenplum中。以後,數據被導入SAS中,進行了數據清洗和準備。再以後數據又從SAS中導入了EXCEL,在EXCEL中建模計算Information Value 和Weight of Evidence, 即信息量和證據權重。以後,數據被導回SAS,計算Pairwise Correlation,一種變量相關性。根據計算的結果,在EXCEL中去除高度相關的變量。以上步驟都是爲了減小變量的數量,由於SAS上並不能很好地處理超過1000個的變量。這以後,數據被再次導回SAS,在上面進行邏輯迴歸,最後把分析結果導回Greenplum。因爲SAS可以處理的數據量有限,客戶只能用Sample進行建模,因此在最後,數據又導回Excel進行KS-Score Test, 進行Model Validation。KS-Score Test驗證的是樣本分佈是否能有效表明整體分佈,從而驗證模型的有效性。通過Validation以後結果最終被導回Greenplum,手動用該模型對新數據進行預測。
從這個流程中咱們能看到一些問題:
首先,很明顯的,數據在Greenplum, SAS和Excel之間屢次導入導出,比較繁瑣,這期間也會存在數據格式轉換,數據丟失等等問題。
其次,咱們能夠看到,在SAS和Excel之間來回的好幾個步驟其實都是爲了下降維度,減小SAS上的變量數,因爲許多變量沒有獲得利用,這從必定程度上下降了模型預測的準確度。
最後,因爲SAS和EXCEL能處理的數據有限,客戶只能用樣本數據來進行建模,沒有充分利用Greenplum裏的大數據,這也影響了建模的精確度。
在與Pivotal Data Science合做以後,咱們創建了一個新的工做流程。
能夠看到,全部SAS和EXCEL內的步驟都被移除了,整個流程都在Greenplum內完成。在存放好數據以後,首先,用MADlib的feature generation來提取特徵,以後運調用不一樣的MADlib函數,計算Information Value, pairwise correlation,完成特徵選擇。建模階段,直接調用相關的邏輯迴歸函數和elastic net,(用elastic net進行變量選擇,而後創建邏輯迴歸)。驗證階段,MADlib提供了不少validation的函數,最後,MADlib函數能夠對新的data進行預測。
從數據準備到特徵選擇,再到建模,驗證和預測,MADlib提供了全部的相關函數。對比以前的步驟數量,也從8步變爲了6步。另外一個明顯的優點是,這個模型用到了Greenplum裏的全部數據,而且可使用更多的feature來建模。
這次優化使得數據分析的整個環節效率都大大提升。在生成數據階段。原來的時間是75分鐘,優化後只須要8分鐘,整個過程速度提升了9倍。Attribute compilation階段,速度是以前的3倍,而且運用了更多的495個attribute。在計算Information Value階段,平均每一個變量的計算速度是以前的13.7倍。建模階段,以前一次迭代須要大約30分鐘,而且只能運用小於50個變量,而在優化以後,平均一次迭代只須要1.86分鐘,而且能夠用376個變量進行迴歸分析,平均每次迭代速度是原來的16倍。能夠看到,整個數據分析流程獲得了很是顯著的提速。
這是建模的結果。
原始模型的準確率是99.7%,可是true positive rate是0%。也就是說,原始的模型只能很好地預測不會點擊郵件的用戶,而沒有把握預測會點擊郵件的用戶。改良後的模型,準確率是62.8%,看上去好像下降了,但true positive rate是66%,這意味着,該模型有66%的把握預測出會點擊郵件的用戶,而這些用戶正是給公司帶來核心價值的用戶羣體。
這個案例的用戶是某大型跨國金融服務公司。他們的case主要是手機mobile app API的分析。
他們主要面臨如下問題:1.如何利用API日誌更好地理解不一樣種類的用戶,2.如何更好地理解用戶與APP的交互 3. 如何對實時API請求進行分類和安全檢測 3. 現有API日誌數據量很大,現有數據分析團隊缺少大數據分析技能。
在與Pivotal合做後,咱們爲他們提供瞭如下解決方案:使用MADlib進行聚類分析,創建一個sessionization模型。創建一個scoring pipeline,對新的訪問進行評估,使用visualization tool更好地呈現結果。
此次合做的商業影響也是很是顯著的。首先,咱們針對不一樣的分析師創建了多個用戶類型分類,可以及時把某種特定類型的用戶信息傳到相應的分析師手上。其次創建了實時訪問安全評分系統,對可疑訪問進行及時處理,最後使用Greenplum + MADlib的形式,使得大數據的獲得了更加充分的挖掘。
這個項目的數據源主要包括用戶的api 訪問日誌和customer profile,涉及45天的訪問狀況,50億行數據,百萬級別的用戶信息。平臺依然是Greenplum,建模主要用到了MADlib, PLR, PL/PYTHON和PDLTools。PDLTools是Pivotal data science 的另外一套數據科學包。可視化主要在Tableau上進行。
如圖所示是整個建模的過程。因爲篇幅關係在此不作詳述。
首先,在改良以前,用戶雖然使用了Greenplum,但依然在R上對data sample進行分析,DCA閒置。改良後,用戶使用Greenplum+MADlib對大數據集進行了更充分的分析。
第二,在改良前,用戶沒有創建起良好的用戶分類體系,合做完成後,他們創建了兩套模型對典型用戶進行聚類分析,對用戶羣體和用戶習慣有了更深刻的瞭解,制定相應的營銷策略。
第三,以前的model不能高效檢測可疑的session,改良後,客戶創建起了對可疑session實時評分體系。
最後,在合做以前,客戶在評估是否轉換到Teradata上,可是改良後,他們決定放棄Teradata,增長GREENPLUM cluster的數量,充分證實了Greenplum在數據分析方面的優秀表現。
經過使用MADlib,咱們可以進行graph, clustering, regression, classification等統計和機器學習分析,此外,咱們還有GPText進行文本分析,Geospatial進行地理空間分析。Greenplum也能很好地支持BI reporting tool,實現快速的數據可視化。咱們的理念就是ALLIN ONE DATABASE,讓分析變得更便捷和更高效。
咱們很快將要發佈版本1.13,在這個版本中,將會加入一些新的圖形方面的算法,包括HITS和Graph cut,咱們會支持mini-batching,加快計算的速度,同時,隨着新版postgres 10的發佈,咱們也會加入對新版本的支持。
下一個版本發佈是2.0,咱們會有一些Interface方面的改動,算法方面,在圖形方面會加入特徵向量中心性,中間中心性等。SVM,咱們會加入Multiclass,另外,咱們會加入gradient boosted machines(GBM)作boosting。最後,咱們會加入更多的utility function來預處理數據。
2018年,咱們的開發重心會放在deep learning上,相信咱們能爲你們提供更多深度方面的支持。
上圖是MADlib相關的resource,咱們是全開源的,歡迎你們瀏覽或者和咱們一塊兒contribute,讓MADlib越作越好。