一文看懂機器學習流程
關鍵時刻,第一時間送達!
定義問題
客戶流失率問題是電信運營商面臨得一項重要課題,也是一個較為流行的案例。根據測算,招攬新的客戶比保留住既有客戶的花費大得多(通常5-20倍的差距)。因此,如何保留住現在的客戶對運營商而言是一項非常有意義的事情。 本文希望通過一個公開數據的客戶流失率問題分析,能夠帶著大家理解如何應用機器學習預測演算法到實際應用中。
當然, 實際的場景比本文例子複雜的多,如果想具體應用到項目, 還需要針對不同的場景和數據進行具體的分析。
從機器學習的分類來講, 這是一個監督問題中的分類問題。 具體來說, 是一個二分類問題。 所有的數據中包括一些特徵, 最後就是它的分類:流失或者在網。接下來我們就開始具體的處理。
分析數據
首先我們來導入數據, 然後查看數據的基本情況。
數據導入
通過pandas來導入csv, 然後我們來查看一下數據的基本情況
輸出:
可以看到, 整個數據集有3333條數據, 20個維度, 最後一項是分類。
基本信息以及類型
我們可以列印一些數據, 對數據和取值有一個基本的理解。
輸出:
我們可以看到, 數據集有20項特徵,分別是州名, 賬戶長度, 區號, 電話號碼, 國際計劃,語音郵箱, 白天通話分鐘數, 白天電話個數, 白天收費, 晚間通話分鐘數,晚間電話個數, 晚間收費, 夜間通話分鐘數,夜間電話個數, 夜間收費, 國際分鐘數, 國際電話個數, 國際收費, 客服電話數,流失與否.
可以看到這裡面有個人信息,應該可以看到有些信息與流失與否關係不大。 州名, 區號可以指明客戶的位置, 和流失有關係么, 不知道, 具體位置如果不分類, 應該完全沒有關係。 而州名, 也許某個州有了某個強勁的競爭對手? 這也是瞎猜, 暫時意義不大, 刪除。
賬號長度, 電話號碼, 不需要
國際計劃, 語音郵箱。 可能有關係, 先留著吧。
分別統計了白天, 晚間, 夜間的通話分鐘, 電話個數, 收費情況。 這是重要信息保留
客服電話, 客戶打電話投訴多那流失率可能會大。 這個是重要信息保留。
流失與否。 這是分類結果。
然後我們可以看一下數據的類型, 如下:
輸出:
看見, 有int, float, object。 對於不是數據型的數據, 後面除非決策樹等演算法, 否則應該會轉化成數據行。 所以我們把churn? 結果轉化, 以及"Int"l Plan","VMail Plan", 這兩個參數只有yes, no 兩種, 所以也進行轉化成01值。
描述性統計
describe() 可以返回具體的結果, 對於每一列。
數量 平均值 標準差 25% 分位 50% 分位數 75% 分位數 最大值 很多時候你可以得到NA的數量和比例。
TODO 對於非數據性的是沒有返回的的
圖形化理解你的數據
之前的一些信息, 只是一些很初步的理解, 但是對於機器學習演算法來講是不夠的。 下面我們從幾個維度去進一步理解你的數據。工具可以用數字表格, 也可以用圖形(matplotlib) 這裡畫圖較多。
特徵自己的信息
特徵和分類之間的關係
特徵和特徵之間的關係 -- 這裡鑒於時間的關係, 有些關係並沒有直接應用於演算法本身, 但是在進一步的演算法提升中是很有意義的, 這裡更多的是一種展示。
特徵本身的信息
我們先來看一下流失比例, 以及關於打客戶電話的個數分布
很容易理解。
然後呢, 我們的數據的特點是對白天, 晚上, 夜間,國際都有分鐘數, 電話數, 收費三種維度。 那麼我們拿白天的來舉例。
可以看到分布基本上都是高斯分布, 這也符合我們的預期, 而高斯分布對於我們後續的一些演算法處理是個好消息。
特徵和分類的關聯
我們來看一下一些特徵和分類之間的關聯。 比如下面int plan
我們可以看到, 有國際電話的流失率較高。 猜測也許他們有更多的選擇, 或者對服務有更多的要求。 需要特別對待。 也許你需要電話多收集一下意見了。
再來看一下
基本上可以看出, 打客戶電話的多少和最終的分類是強相關的, 打電話3次以上的流失率比例急速升高。 這是一個非常關鍵的指標。
準備數據
好的, 我們已經看了很多,對數據有了一定的理解。 下面我們開始具體對數據進行操作。
去除無關列
首先, 根據對問題的分析, 我們做第一件事情, 去除三列無關列。 州名, 電話, 區號。
我們和下一步一起做
轉化成數值類型
對於有些特徵, 本身不是數值類型的, 這些數據是不能被演算法直接使用的, 所以我們來處理一下
輸出:
我們可以看到結果, 所有的數據都是數值型的, 而且除去了對我們沒有意義的列。
scale 數據範圍
我們需要做一些scale的工作。 就是有些屬性的scale 太大了。
對於邏輯回歸和梯度下降來說, 個屬性的scale 差距太大, 會對收斂速度有很大的影響。
我們這裡對所有的都做, 其實可以對一些突出的特徵做這種處理。
輸出:
其他的呢, 還可以考慮降維等各種方式。 但是再實際使用中, 我們往往首先做出一個模型, 得到一個參考結果, 然後逐步優化。 所以我們準備數據就到這裡。
評估演算法
我們會使用多個演算法來計算結果, 然後選擇較好的。 如下
可以看到什麼呢, 看到SVM 和 CART 效果相對較好。
提升結果
提升的部分, 如何使用提升演算法。 比如隨機森林。 xgboost
可以看到, 這兩種演算法對單個演算法的提升還是很明顯的。 進一步的, 也可以繼續調整tree的數目, 但是效果應該差不多了。
展示結果
這裡展示了如何保存這個演算法, 以及如何取出然後應用。
後記
本文展示了通過用戶流失率問題, 如何把機器學習的預測過程應用到實際項目中。
從業務的角度, 這個只是一個demo性質的應用, 實際場景可能複雜的多。
從流程的角度, 通過對數據的分析可以進一步提升演算法的性能, 對於某些的特徵, 可以採取不同的處理方式。 比如缺失值的處理, 這裡很完整, 就省去了這個步驟。
來自:開源中國
https://my.oschina.net/sizhe/blog/1594791
Python開發整理髮布,轉載請聯繫作者獲得授權
GIF
TAG:機器學習 |