5月6日,螞蟻金服宣佈開源機器學習工具 SQLFlow:“未來三年,AI能力會成爲每一位技術人員的基本能力。我們希望通過開源 SQLFlow,降低人工智能應用的技術門檻,讓技術人員調用 AI像SQL一樣簡單。”
SQLFLOW不是莫名其妙產生的,實際是業務驅動的產物。
數據分析師一般用SQL來進行數據挖掘,只是這類數據挖掘大多基於業務規則,而機器學習本質上也是數據挖掘的一種,但需要用更高級晦澀的語言來實現,這對於很多數據分析師來講門檻高了點。
既然大家的最終目的相同,考慮到龐大的數據分析師羣體,顯然會有人會想到能不能統一下實現工具,比如對SQL進行拓展,直接支持對機器學習引擎的調用。
這種思路的開山鼻祖可不是阿里,TD最新推出的產品Teradata Vantage已經提供了強力的支持,唯一的不同就是開源和商業的區別,以下是Vantage的一段調用說明:
以下是SQLFLOW的,是不是很像?
但SQLFLOW的野心似乎更大一點,爲什麼?
因爲其要實現兩個目的:
(1)通過SQLFLOW對所有現存的各種SQL引擎進行抽象,屏蔽語法差異,以後訪問HIVE,GBASE,ORACLE等等,用統一的SQLFOW就可以了
(2)對現存的機器學習、深度學習引擎進行封裝,用SQLFLOW來統一調用。同時解決機器學習數據輸入輸出的無縫銜接問題
SQLFLOW的使命就是:讓所有的數據挖掘(含機器學習、AI等)像操作SQL那樣流暢,爲數據分析師(甚至業務人員)賦能,要成爲數據挖掘生態的掌控者。
那麼問題來了,這個真有前途嗎?對於企業來講,除了SQLFLOW,是否還有更適合自己的辦法來提升數據挖掘的效率?
我們還是要遵循第一性原理,回到數據挖掘本身的流程中去尋找答案,當然SQLFLOW肯定是一種,但顯然不是唯一的。
數據挖掘從訓練到發佈,一般可以分爲以下步驟:業務分析-樣本數據準備-變量選擇-樣本數據輸入-模型訓練(含模型選擇和評估)-模型發佈-生產數據輸入-結果數據應用。
你會驚奇的發現,最具技術含量的模型訓練,竟然只是其中的一個節點,八分之一而已。爲了讓數據挖掘的模型具備生產價值,其實需要做大量的配套工作,而且其中每一個步驟都相對獨立,甚至依託不同的人員、系統或平臺完成。
1、業務分析:對於業務的理解能力越強,選擇的數據和變量就越有價值,這是機器學習的要點,當然極個別的場景除外,比如下棋。
大多數企業機器學習的應用場景涉及的要素基本是無法窮盡的,因此,越複雜的環境,就越需要強大的業務理解能力,現在只有人有這個能力。
2、樣本數據準備:大多時候,我們需要從數據倉庫(當然數據庫,文件都可以)獲取所需的樣本數據,數據倉庫的效率起到至關重要的作用,比如數據預處理,這個階段往往耗費了大量的時間。
3、變量選擇:業務分析雖然能大致圈定一些變量,但有時還是需要依賴一些更爲客觀的評價方法,比如IV,WOE等等,甚至需要單獨建個模型來取捨變量,這個過程往往是獨立的。
4、樣本數據輸入:需要根據變量選擇的結果決定樣本的最終數據,作爲模型訓練的數據輸入。
5、模型訓練:需要選擇合適的數據挖掘引擎和算法(深度學習或者機器學習等等),無論是基於圖形界面或是腳本;需要將樣本數據輸入到挖掘引擎中,無論是基於JDBC,ODBC還是文件。
一般我們以爲的機器學習就特指這個過程,因爲技術含量最高嘛,但實際上這個階段花的時間並不多。
6、模型發佈:需要將訓練好的模型文件發佈到生產環境,這又是一個完全獨立的過程。
7、生產數據輸入:需要基於數據倉庫或大數據平臺定期生成待預測的數據作爲模型輸入,然後獲得模型預測的結果。
8、結果數據應用:將預測結果(一般是表)推送到各種應用平臺,真正產生價值。
你看這些步驟既不能在一個平臺完成,也不能簡單的進行流程串接,其實蠻奇怪的。我們經常說一個數據挖掘70%以上在做準備工作,現實的確也是這麼回事。
SQLFOW希望將4,5,6,7割裂的四個步驟用一個簡單的SQL完成,從這個流程上很容易看出它的價值點,但顯然SQLFOW不是唯一的優化方式。
筆者就試着用更爲體系化的方式談談這個問題:如何全面提升數據挖掘的效率。
1、業務分析
企業要提升數據挖掘的效率,最重要的是選對人,用好人,筆者在多篇文章中(比如《數據挖掘師,要從一個人活成一支隊伍》)闡述了數據挖掘對於人的要求,你不僅僅要懂點挖掘技術,更要懂業務,會分析,善溝通,在數據+AI底層基礎設施做的越來越好的當下,這個趨勢越來越明顯了。
阿里招的大量的數據挖掘師可不是去研究什麼高大上的算法和平臺,大多都是要需要能基於現有平臺、數據和工具的能力進行分析,從而解決一個具體的業務問題,但很多企業在數據平臺上投入不少,人才引入和培養上卻乏善可陳。
BAT爲啥不外包建模師?顯然這是由數據的特點決定的,交易成本太高了嘛。但很多企業卻沒有基本的數據挖掘團隊,或者是完全外包給合作伙伴。
如果你希望提升數據挖掘的效率,其實最有效的方法就是找到合適的人,無他。
2、樣本數據準備
假如你每次數據挖掘的變量準備、數據預處理的時間很長,就要想想是不是企業的倉庫模型設計(比如寬表)出現了問題?是不是需要針對數據挖掘再建一套寬表?
《阿里巴巴大數據實踐-大數據之路》這本書就提到了數據挖掘中臺的價值,如下圖示意,其中FDM層用於存儲在模型訓練常用的特徵指標,IDM層面向個體存儲通用性強的結果數據。
以前筆者還心存疑慮,現在覺得還是有一定的必要性,因爲當前數據挖掘的工作越來越多,建模師各自爲戰、瘋狂取數的局面越加明顯,而現有的數據倉庫模型設計並不能很好的支撐。
以下是阿里的關於電商購買預測中數據準備的一個案例,我們可以從中獲得一些啓示。
影響某個用戶對某個品牌是否購買的特徵有哪些呢?
首先是用戶對品牌的關注,譬如:點擊、發生過購買行爲,收藏和假如過購物車,而在這些因素中,關注的行爲離現在越近,即將購買的可能性就越大,所以我們會關注最近3天、最近一週、最近1個月、最近2個月、最近3個月和有記錄的所有時間的情況,於是有了如下一些特徵。
- 最近3天點擊數、購買數、收藏數和加入購物車次數
- 最近1周點擊數、購買數、收藏數和加入購物車次數
- 最近1個月點擊數、購買數、收藏數和加入購物車次數
- 最近2個月點擊數、購買數、收藏數和加入購物車次數
- 最近3個月點擊數、購買數、收藏數和加入購物車次數
- 全部點擊數、購買數、收藏數和加入購物車次數
有了關注時間段細分的關注次數還不夠,還希望知道該數值的變化率,來刻畫該關注的持續程度,我們還可以構造如下特徵:
- 最近3天點擊數變化率(最近3天點擊數/最近4–6天點擊數)、購買數變化率、收藏數變化率、加入購物車次數變化率
- 最近1周點擊數變化率(最近1周點擊數/上週點擊數)、購買數變化率、收藏數變化率、加入購物車次數變化率
- 最近1月點擊數變化率(最近1月點擊數/上月點擊數)、購買數變化率、收藏數變化率、加入購物車次數變化率
諸如此類還有很多,這麼複雜的特徵變量設計不應該是每次做數據挖掘的時候去臨時生成,而應該沉澱下來,這就是數據挖掘中臺的價值吧,當然開始的時候做幾張爲數據挖掘服務的寬表也許就有不錯的性價比。
3、樣本(生產)數據輸入輸出
很多企業中的商業挖掘引擎作爲一個獨立的平臺存在,而數據存儲往往是另一種平臺,比如GBASE,HIVE,ORACLE等等,要進行交互涉及到大量的數據導入導出操作,同時帶來適配性的問題。
模型訓練的時候你感覺自己是個建模師,而要進行數據的導入導出時又感覺自己是個工程師,以前基於單機的版本還能應付,現在訓練和預測的數據都是基於海量數據的,一旦出現工程類問題完全不知所措,原因就是兩者要求的技能其實不同。
比如有位建模同事曾經搭了個Python的訓練環境,發現從HIVE導數據到這個訓練環境特別慢,最終覈實是JDBC的原因,其實直接同步HDFS的文件就可以了,但這個數據建模師並不清楚。
SQLFLOW通過封裝屏蔽了這些技術問題,做的比較徹底,但有利也有弊,就好比一體機一樣,在提供便利的同時也降低了靈活性,比如很多機器學習的算法並不是簡單的預測,其結果的表達用SQL並不合適。
筆者曾經在《如何打造敏捷的數據挖掘能力?》上提供過一種折中簡單的方法,比如將企業的數據管理平臺與R,Python直接打通,挖掘引擎在訓練的時候可以直接調用數據管理平臺對應的表,訓練的結果則直接發佈到數據管理平臺進行生產。
對於數據建模師來講,這種集成省略了導入導出的面上操作,可以用較小的代價帶來較大的效益。
畢竟一般企業哪有能力去打造什麼SQLFOW這種武器,即使免費使用,周邊平臺和人員的適應成本也是很高的,比如HIVE推廣了很多年還有不少人不適應,開源的東西投入的隱形成本有時比商業還高。
無論如何,解決數據挖掘引擎的快速輸入輸出問題的確是提升效率的一個關鍵。
4、模型訓練
要提升模型的訓練效率,業界給出了很多方向,一種是儘量可視化,通過先進的圖形用戶界面來傻瓜式的完成模型的訓練,阿里推出的機器學習平臺 PAI 就是一種,比如託拽基礎 AI 組件來構造複雜的模型和數據流,下圖給出了示例。
但这种模式显然不如SQLFLOW灵活,比如SQLFLOW更容易存档、Code Review、分享知识、集思广益、高效率迭代等等。
另一种就是探索自动建模的方法,比如自动调参,以下是笔者了解的一些方法,大家有兴趣可以自行搜尋:
- 算法和算法超参数保持不变,改变Input,即在生产中根据最新的预测结果和实际结果重新训练模型,同时让这个过程自动化,当然这只是一种设想。
- 算法保持不变,改变Input和算法超参数,又称为超参优化,auto-sklearn是一种方法,在给定一个数据集和期盼最小化的指标(如auc,logloss等)的情况下,autosklearn完全可以出给适当的模型和对应的输入超参,使得对应的指标在指定数据集下最小,比如决策树中树的数量和深度等等。
- 全部改变,在最新的数据上搜索最优的算法及算法超参数,auto-keras是一种方法,其提供了一系列函数来自动搜索深度学习模型的网络和超参数。
除了上面提到的,相信你还能发现更多提升的方法,但无论如何,这些仅仅是提升数据挖掘效率的“术”。但你的“术”再好,如果没有天时地利人和的配合,也很难有所作为,毕竟大多数公司没有阿里这种环境。
即使在大数据、人工智能如火如荼的现在,能否拥有良好的数据文化、能否找到一个正确的方向、能否获得上级的持续支持、能否发现足够多的应用场景、能否具备快速迭代的环境,很大程度上决定了数据分析师的成败。
文章來源:與數據同行
原文鏈接:https://mp.weixin.qq.com/s/hV2wPpJ1bukClIypT-D_xQ
※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※
文章推薦
◆跟資料打交道的人都得會的這8種資料模型,滿足工作中95%的需求
關注數據君的臉書:
我是「數據分析那些事」。常年分享數據分析乾貨,不定期分享好用的職場技能工具。按贊我的臉書,會有豐富資料包贈送唷!