角色:數據分析html
目標:預測算法
內容: BI 平常工做中的數據分析方法以及在統計模型 搭建過程當中的注意事項。shell
1 非時序預測服務器
在機器學習和深度學習大行其道的當下,一個好的預測模型不在於應用了多麼高深的算法, 而在於如何從簡單的模型開始進行嘗試,兼顧業務邏輯,基於某個 baseline 來控制時間和應 用成本。機器學習
對於非時序數據或是無明顯趨勢、季節特徵的時序數據,迴歸和樹模型是目前主流的預測方法。 分佈式
廣義線性迴歸,如線性最小二乘和 logistic 迴歸,因其模型的可解釋性,從誕生之日至現在 依舊發揮着其不可替代的做用,如金融風控中評分卡的開發,醫學中對患者生存期限的研究 等。函數
爲了處理非線性問題,依託着分佈式計算,又孕育出樹模型和基於樹的 boosting 模型,如 Decision Tree 和 Xgboost,以及後續的 LightGBM 和 CatBoost 等。學習
考慮到線性迴歸和 logistic 迴歸在處理非線性問題上的短板,以及爲了適配模型需對數據作 大量的預處理,如填補缺失,防止共線性等,咱們天然偏向於樹模型來作分類和迴歸預測, Xgboost 即是一個很好的選擇。 R 和 Python 都提供了 xgboost 的接口,Python 不只擁有 xgb 的原生接口,更有適配 sklearn 的接口,便利了參數的網格搜索。編碼
對於預測任務,咱們的應用場景主要分紅兩類:
離線(T+1)預測,主要針對小批量數據,經過 shell 腳本調用 R 或 Python 的服務器, 返回結果。 設計
實時預測,因爲線上預測須要實時響應,如在毫秒級內返回模型預測值,跨平臺跑模型 並不能知足要求。這就須要將模型文件打包成 PMML (預測模型標記語言-Predictive Model Markup Language,簡稱PMML,https://www.cnblogs.com/pinard/p/9220199.html)文件供 Java 調用,響應速度極快。
應用 Xgboost 時:是否對分類變量作了正確的編碼。
1)xgb 分類器只接受數值型變 量,任何的字符型變量都需轉換成數值型。
2)分類器默認數據是連續且是有序的,2 必定比 1 大。 但無序分類變量的特徵值之間 是沒有可比性地,好比變量「城市分類」,其特徵值分爲:一線城市,新一線城市,二線城 市,其餘城市。若是將其編碼成(1,2,3,4),分類器便會誤解爲二線城市大於新一線城 市,事實上特徵值表明的僅是一個類別,不可相互比較。
解決:
對此類變量採起獨熱(one-hot)編碼,每一個特徵值都做爲一個新的衍生 變量,每一個衍生變量都是一個二元(0/1)互斥特徵,這種編碼方式充分考慮了分類變量每 個特徵值的獨特性。固然,若是特徵值過多,特徵矩陣也會過於稀疏,此時可基於業務邏輯 和數據分佈對特徵值進行分組處理。
模型調參:爲調參的目的不只在於得到模型提高, 更在於經過屢次實驗,基於機率確保模型參數的穩健性。
在實時預測模型中,打包的 PMML 文件不只要包含模型文件,還要包含數據的預處理過程, 這就須要藉助管道(Pipe)將原始數據的處理過程(如編碼,標準化,正則化等)和分類器 的訓練過程串聯,再將管道自己打包成 PMML 文件。
惱人的是,管道一體化的過程限制了特徵工程中的個性化發揮,接口提供了一些簡單的數據 轉換函數和自定義函數功能,但這遠遠不夠。此外,網格搜索過程當中參數的賦值方式也略有 改變。最後,特徵重要性的可視化也並不友好,緣由在於管道中的數據預處理掩蓋了原有的 特徵名稱。
管道中的網格搜索還需注意:假設經過 sklearn 接口預先定義了分類器,後利用管道包裝了 數據預處理過程和分類器,那麼在網格搜索時,參數賦值相比傳統方式將有所改變
(上面2段還不能理解)
2 時序監控與預測
時序監控,主要仍是針對各業務指標的異常值檢測以及模型上線後的穩定性檢測。
業務指標的異常檢測可能是單變量的檢測,而說起單變量異常檢測,首先想到的即是 3 sigma 原則。和線性迴歸中的極大似然估計相似,3 sigma 準則的應用前提需假設原始數據知足或 近似知足正態分佈,而實際數據每每具體必定的偏態性。做爲數據科學家,切莫不假思索的 去應用慣用的準則,而應從數據的分佈出發找到合適的途徑來分析數據,好比對偏態的數據 採用 Box-Cox 轉換。
其次,業務指標的監控是個雙重任務,一是要及時發現數據中的異常,二是要對將來一天或 是一段時間進行預測。若是能找到一個統計模型同時處理這二重任務,問題會顯得簡單多, 可一個特定的模型每每很難適應多個場景。
。。。
若是專一於預測的高精度,Prophet 模型是一個不錯的選擇。模型經過 Fourier 轉換可分解 多週期序列,且在趨勢處理上也有了新的創新,好比考慮環境和系統的承載力,提出阻滯增 長和分段線性增加的想法。
結束:
數據分析與挖掘離不開統計知識和算法設計,不一樣場景下的問題解決方案各有不一樣。數據分 析師不只要有良好的知識素養,也要深諳業務背景,更缺不了工程師團隊的付出。