大資料開發如何轉型算法?
算法模組化主要做什麼?調參為什麼玄學?
如何通俗了解算法模組化過程。。
夕陽下的村東頭,有一人來買瓜。
1 引子(買瓜)
忙碌的一天剛剛結束,村裡的小張就匆匆的騎上車,準備買個西瓜解暑。

天氣可真熱,等會一定要挑個
又甜
、
又熟
的大西瓜。
心裡嘀咕着,小張慢慢的來到了村東頭水果攤前(這裡的瓜最好)。
老闆,你這西瓜保熟嗎?給我挑個甜的、熟點的。
放心好了,看看這
瓜紋
和
瓜蒂
,而且我都是
自家種
的,肯定保熟。
小張心裡直打鼓: 瓜蒂
蜷曲
、瓜紋
青綠
,看起來貌似是好瓜。但是之前按這标準買的瓜,吃起來并不甜。
回想起父輩的挑瓜經驗:敲聲
濁響
的才是好瓜。于是就再敲了敲幾個大瓜,嗯,
聲音
倒是沒錯。
保險起見,還是貨比三家靠譜。小張走向其他
店鋪
,又挑了不同
種類
和
大小
的西瓜,并試吃了一些。
經過了幾分鐘斟酌,在衆老闆的欣慰目光中,小張終于選好了一個皮
薄
、顔色
青綠
、根蒂
卷
、敲擊會發出
濁響
的大瓜。
現場切開嘗了下,味道很甜。
開心的小張付完錢,嘴裡哼着小調,騎行而去。。
2 算法模組化到底在幹什麼
小張最後買到了好瓜,好奇的我們先來圍觀一下他的買瓜過程 :
- 自己想買個又甜又熟的大西瓜
- 篩選西瓜的
、顔色
、瓜蒂
、聲音
和種類
大小
- 根據總結的
在不同的選瓜方法
中挑選試吃瓜攤
- 綜合對比,選出了
一個瓜,實作了西瓜自由最好的
大白話概括買瓜流程
先确定一個
預期目标
(買到好瓜)和選瓜
環境
(村東頭);其次總結選瓜
方法
(父輩經驗)和選瓜
特征
(顔色、瓜蒂等);最後根據這套
方法論
+
實戰
,貨比三家,對比得到了最好的
預期結果
(一個好瓜)。
故事中的小張憑借多年挑瓜
經驗
,總結好瓜的
特征
:
皮薄
、
青綠瓜紋
、
曲根蒂
和
濁響聲
。根據這些特征,現場進行
望聞問切
,多次實驗,選出
最好
的瓜。
現在換個角度,假設有台機器可以幫我們這些事情。
我們給機器輸入一些西瓜的資料:包括各種西瓜的
大小
、
種類
、
顔色
、
瓜蒂
和
敲擊聲
等資訊,再提供一些計算好瓜的
算法公式
,希望機器能夠穩定、準确的幫我們篩選出好瓜和壞瓜。
通俗了解,這就是大資料算法模組化所做的工作。
大資料算法模組化核心思想
在了解業務背景、資料含義的基礎上确定
預期目标
;資料
預處理
後,選擇合适的
算法
和
資料特征
并建構
模型
,訓練最好的模型幫助我們最大化逼近(
預測
)預期目标。
3 大白話講解算法模組化流程
前文介紹了算法模組化幫我們解決了什麼問題?接下來瞅瞅如何進行算法模組化。
我會詳細介紹算法模組化的具體流程,并借助于
買西瓜
的例子說明。
為避免内容枯燥,後面畫了大量示意圖,友善了解
先來看看整體的算法模組化流程:
1)流程說明
整體大緻可分為
業務/資料了解
、
預處理
、
特征工程
、
模型訓練
、
模型評估
和
預測
幾個步驟。
- 首先要了解
和資料
,即明确目标和測試的資料。比如說我想挑一個好西瓜,你總不能去個早餐店拿兩個包子回來吧?業務目标
- 其次是資料預處理工作。一般讀取的資料是存在一些空值、異常值等其他
的特性,需要做些特殊處理。非友好
- 在預處理基礎上,進一步擷取為模型所用的資料(
),被稱作特征
。在買瓜過程,小張就很老道的看瓜紋、瓜蒂、聽敲擊聲,這些就是好瓜的特征。特征工程
- 特征工程完成後,可以選擇合适算法進行
。此時通常将資料集分成模型訓練
和測試集
,以此檢驗模型效果,即區分好瓜的正确程度。驗證集
- 經過幾輪模型訓練和特征工程(過程可疊代、可雙向),擷取效果最好的模型,在真實資料集進行
(切瓜)。預測
2)資料、業務了解
常有的一個誤區:
即無需事先确定目标和資料,總以為能夠找到一個完美的算法,能夠幫我們自動擷取資料規律。
但是算法并不是萬能的,需要與之适配的資料和使用場景。再好的劍也需要有溫養的環境和一副好劍鞘。
3)資料預處理
算法模組化中的資料來源為資料同僚開發的名額。比如使用者産品推薦,就需要加工一些使用者行為名額。
當然這些加工後的資料不能直接給模型使用,需要進行處理。
- 飽和度(空值填充、異常值過濾)
- 無量綱化:将資料轉換為同等規格。比如特征的少量數值過大,可以統一縮放到[0,1]範圍,降低樣本計算影響程度)
- 定量資料轉換:比如西瓜的敲擊聲(清脆、濁響)轉換為數字形式(00、01),進行啞編碼(定量編碼的一種)。
- 定性資料轉換: 比如根據西瓜的重量是否大于5斤,将西瓜的重量分為[0,1]兩類,便于數學計算。
4)特征工程
特征工程的主要目的是選擇具有價值的資料資訊,幫助模型快速和準确訓練和預測。
好的資料和特征可以決定訓練模型的
上限
。
舉個例子:選西瓜過程中,經驗豐富的小明對比不同種類西瓜的
紋路
、
瓜蒂
、
敲擊聲
、
尺寸
和
種類
等特征,快速挑選出想要的好瓜。
假如小明是個新手,那麼可能隻會根據瓜的
大小
、
顔色
來區分,認為大而綠的就是好瓜,當然結果可能相差十萬八千裡。
特征工程的主要工作内容主要如下:
- 基于樣本特性篩選特征: 使用資料
知識,比如計算特征的統計學
、方差
、相關系數
、分箱/WOE
和IV值
等,篩選出結果比較好的特征。資訊熵
- 基于模型篩選特征: 将部分特征放入到模型中訓練,篩選效果好的特征,适用于特征資料量比較大的場景,比較精确。
- 特征衍生:需要引入一些衍生特征(組合舊特征、開發新特征),提高特征的豐富性
5)模型訓練
在完成特征工程的基礎上,需要選擇适配的機器學習算法,構模組化型。
這裡建議可再次計算部分特征的IV值、資訊熵等,確定特征完整性。
常見的機器學習算法:
- 監督學習:包含分類和回歸兩大類。常見的算法有LR、樹算法、神經網絡和GBRT等,其中
和LR邏輯回歸
常用于解決風控場景樹算法
- 非監督學習:聚類算法、PCA算法和關聯規則等算法。其中
被廣泛運用于資料挖掘分類場景,Kmeans算法
則應用于推薦中。關聯規則
選擇好算法和特征,開始訓練模型。訓練時間會很長且過程可逆,可适時調整特征和算法疊代。
6)模型評估
模型需要在訓練集和驗證集上進行訓練,如何判斷模型訓練效果呢?
一般需要從兩方面去考慮,即模型準确性和穩定性。
-
準确性評估
模型能否正确預測結果。比如判斷一顆表皮青綠、瓜蒂蜷曲、敲擊濁響的瓜有多大機率是好瓜。
常用方法:混淆矩陣、KS曲線、ROC曲線等
-
穩定性評估
即模型的穩定性,防止随着時間推移,應用模型的樣本特征可能會發生變化,影響模型的預測結果。常通過計算特征的PSI值(變化程度),調整模型。
常用方法:PSI計算
- 小于10%,則無需更新模型;10%-20%, 需檢查變化原因,加強監控頻率;大于20%,則模型需要疊代。
7)預測
将模型帶入到真實預測集中,預測結果。
序号 | 顔色 | 瓜蒂 | 敲擊聲 | 好瓜 |
1 | 青綠 | 蜷縮 | 濁響 | 0.958 |
2 | 烏黑 | 蜷縮 | 濁響 | 0.943 |
3 | 青綠 | 硬挺 | 清脆 | 0.412 |
4 | 烏黑 | 稍蜷 | 沉悶 | 0.533 |
4 算法模組化如何學習
上面簡單介紹了下大資料算法模組化的基本流程。
由于篇幅問題,不詳細之處,可添加我的wx交流。
其實在實際工作中,我們可能大半時間都集中在
特征處理
和
模型訓練
,當然還有玄學的
調參
。
一個模型運作的好壞,可能會和多種因素有關。需要在掌握底層原理和技術手段的基礎上,根據自己的經驗去慢慢調試。
而至于如何去學習入門算法模組化,這裡也提供個人學習方法和路線(僅供參考)。
- 資料知識:統計學、線性代數和離散數學
- 算法知識:機器學習、深度學習算法、某領域場景算法
- Python基礎知識:可以對照菜鳥教程學習
- Python資料分析:Pandas、Numpy、Matploblib
- 架構學習:jupyter、sklearn、tensorflow、pytorch
- 算法模組化實戰:系統項目實戰、領域延深
- 其他:Spark、Hive等大資料技術
5 一些誤區和建議
1)做算法模組化是不是隻會算法就好了?
并不能這麼說,正如文中所說
特征
和
資料
是決定模型的上限。特征處理也要很精通,特别是python和pandas等技術
2)特征工程和資料預處理的關系?
其實這兩者都可以歸為
特征處理
,也即特征工程包含預處理,都是進行資料處理和特征篩選,隻不過有的技術體系将其單獨劃分。
3)模型的準确度不好,如何調參?
我的建議是先去看你的資料,觀察特征的
飽和度
、
IV值
、
PSI值
等,一般不好的特征很大程度影響模型好壞。随後再去調整模型的
超參數
,隻有你的特征比較好,調整超參才能發揮更好的效果。
4)沒基礎怎麼學習算法模組化
建議可以按照我上面推薦的學習路線去看,其實算法模組化對于沒有基礎的朋友來說是有蠻高門檻的,推薦一定要把算法理論和數學理論學紮實點,不要深究,了解并會使用即可。
5)那麼多程式設計架構怎麼選?學習哪個好
架構隻是一個工具,友善編碼和調試;重要的是把基礎知識學好,任意選擇一個即可,推薦pytorch。
6)一點點建議