2016年10月19日 星期三

2016/10/19 decision tree model

剛進來的第一份作業是處理愛情公寓的會員資料,資料筆數約30萬筆,分析會員升級成VIP的可能原因以及VIP退租的可能原因。雖然先前有在網路上學過python的資料處理,但是在實際使用的時候還是常常會卡關,有時可能連簡單刪除列的程式碼都忘記,其中找尋VIP前後購買的函式大概花了我整整一天來撰寫。雖然在這裡不能成為一個即戰力來幫忙,但是希望在中研院的這段時間,能夠將自己訓練成一個即戰力,為往後資料分析職涯鋪路!

已完成工作:
使用python
建立 會員個性矩陣(from binary code)
建立 成為VIP前後購買產品矩陣
繪製 會員註冊至第一次付款所需時間圖表


目前工作為:

運用個性矩陣推估會員成為VIP之可能性,先以decision tree 進行分析。


Decision tree:
決策樹是常見的監督式機器學習演算法,類別與連續變數皆適用,選取最有利的區分變數來將資料進行二元分類。

基本元素:
Root Node:代表原始資料的點(根節點)
Splitting:將節點開始分為子節點
Decision Node:根節點開始分枝後的節點
Leaf/Termial Node:當節點不需再分枝,即為葉或是終結點














決策樹有兩種形式,回歸樹用在應變數為連續變數,分類樹用在應變數為類別變數。
決策樹很容易有overfitting的情形發生,因此控制fit的變數就變得很重要。

  1. Minimum sample split:用來控制overfit,決定一個node至少要存在幾個sample,若沒有設定,容易產生overfit的問題,但是設定過高則會有underfit的問題。
  2. Minimum sample for leaf:最終葉子裡至少要存在幾個sample。通常如果是較不平均的分類問題,其值設定建議較低。
  3. Maximum depth tree:樹的最深為多少
  4. Maximum number of leaf:樹深若為n,則葉子為2^n個
這次的實作,第一次遇到了inbalance的問題。簡單來說,當應變數為類別變數時(0或1)
很容易遇到0特別多或是1特別多的情形,像是疾病的分析,健康的為0,患病的為1,在選取樣本的時候,就很容易遇到非常多健康的樣本,患病的樣本則很少。

遇到這樣的問題時,運用undersampling就可以解決,也可以順利的跑出合理的決策樹結果。



沒有留言:

張貼留言