假設有乙份信用卡交易記錄,遺憾的是資料經過了脫敏處理,只知道其特徵,卻不知道每乙個字段代表什麼含義,沒關係,就當作是乙個個資料特徵。在資料中有兩種類別,分別是正常交易資料和異常交易資料,欄位中有明確的識別符號。要做的任務就是建立邏輯回歸模型,以對這兩類資料進行分類,看起來似乎很容易,但實際應用時會出現各種問題等待解決。
熟悉任務目標後,第乙個想法可能是直接把資料傳到演算法模型中,得到輸出結果就好了。
其實並不是這樣,在機器學習建模任務中,要做的事情還是很多的,包括資料預處理、特徵提取、模型調參等,每一步都會對最終的結果產生影響。
既然如此,就要處理好每一步,其中會涉及機器學習中很多細節,這些都是非常重要的,基本上所有實戰任務都會涉及這些問題,所以大家也可以把這份解決方案當作乙個套路。
先把任務所需的工具包匯入進來,有了這些**,處理資料就輕鬆多了
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
%matplotlib inline
信用卡交易記錄資料是乙個.csv 檔案,裡面包含近 30 萬條資料,規模很大,首先使用pandas 工具包讀取資料∶
如圖所示,原始資料為個人交易記錄,該資料集總共有 31列,其中資料特徵有30 列,time 列暫時不考慮,amount 列表示貸款的金額,class列表示分類結果,若class為0代表該條交易記錄正常,若 class 為1代表交易異常。
拿到這樣乙份原始資料之後,直觀感覺就是資料已經是處理好的特徵,只需要對其進行建模任務即可。但是,上述輸出結果只展示了前5條交易記錄並且發現全部是正常交易資料,在實際生活中似乎正常交易也佔絕大多數,異常交易僅佔一少部分,那麼,在整個資料集中,樣本分佈是否均衡呢?也就是說,在class列中,正常資料和異常資料的比例是多少?繪製乙份圖表更能清晰說明∶
上述**首先計算出class列中各個指標的個數,也就是0和1分別有多少個。為了更直觀地顯示,資料繪製成條形圖,從上圖中可以發現,似乎只有0沒有1(仔細觀察,其實是1的比例太少),說明資料中絕大多數是正常資料,異常資料極少。
這個問題看起來有點嚴峻,資料極度不平衡會對結果造成什麼影響呢?模型會不會一邊倒呢?認為所有資料都是正常的,完全不管那些異常的,因為異常資料微乎其微,這種情況出現的可能性很大。我們的任務目標就是找到異常資料,如果模型不重視異常資料,結果就沒有意義了,所以,首先要做的就是改進不平衡資料。
那麼,如何解決資料標籤不平衡問題呢?首先,造成資料標籤不平衡的最根本的原因就是它們的個數相差懸殊,如果能讓它們的個數相差不大,或者比例接近,這個問題就解決了。基於此,提出以下兩種解決方案。
這兩種方案各有優缺點,到底哪種方案效果更好呢?需要進行實驗比較。
既然已經有了解決方案,是不是應當按照制訂的計畫準備開始建模任務呢?
千萬別心急,還差好多步呢,首先要對資料進行預處理,可能大家覺得機器學習的核心就是對資料建模,其實建模只是其中一部分,通常更多的時間和精力都用於資料處理中,例如資料清洗、特徵提取等,這些並不是小的細節,而是十分重要的核心內容。
資料特徵決定結果的上限,而模型的調優只決定如何接近這個上限。
首先我們觀察到amount列的數值變化幅度很大,而v1~v28列的特徵資料的數值都比較小,此時 amount 列的數值相對來說比較大。這會產生什麼影響呢?模型對數值是十分敏感的,它不像人類能夠理解每乙個指標的物理含義,可能會認為數值大的資料相對更重要(此處僅是假設)。但是在資料中,並沒有強調 amount 列更重要,而是應當同等對待它們,因此需要改善一下。
特徵標準化就是希望資料經過處理後得到的每乙個特徵的數值都在較小範圍內浮動,公式如下∶
z =x
−xme
anst
d(x)
z = \frac
z=std(
x)x−
xme
an
其中,z為標準化後的資料;x為原始資料;xme為原始資料的均值;std(x) 為原始資料的標準差。這只是標準化的乙個方法,其他標準化公式還有很多。
如果把上式的過程進行分解,就會更加清晰明了。首先將資料的各個維度減去其各自的均值,這樣資料就是以原點為中心對稱。其中數值浮動較大的資料,其標準差也必然更大;數值浮動較小的資料,其標準差也會比較小。再將結果除以各自的標準差,就相當於讓大的資料壓縮到較小的空間中,讓小的資料能夠伸張一些,對於圖示的二維資料,就得到其標準化之後的結果,以原點為中心,各個維度的取值範圍基本一致。
sklearn 工具包提供了幾乎所有常用的機器學習演算法,僅需一兩行**,即可完成建模工作,計算也比較高效。不僅如此,還提供了非常豐富的資料預處理與特徵提取模組,方便大家快速上手處理資料特徵。它是python中非常實用的機器學習建模工具包,在後續的實戰任務中,都會出現它的身影。
sklearn 工具包提供了在機器學習中最核心的三大模組(classification、regression、clustering)的實現方法供大家呼叫,還包括資料降維(dimensionality reduction)、模型選擇(model selection)、資料預處理(preprocessing)等模組,功能十分豐富,如圖所示。
# 特徵歸一化
from sklearn.preprocessing import standardscaler
# data['normamout'] = standardscaler().fit_transform(data['amount'].values.reshape(-1, 1))
data[
'normamount'
]= standardscaler(
).fit_transform(data[
'amount'
].values.reshape(-1
,1))
# 刪除不需要的列
上述**使用 standardscaler方法對資料進行標準化處理,呼叫時需先導入該模組,然後進行fit_ transform操作,相當於執行公式(6.1)。reshape(-1,1)的含義是將傳入資料轉換成一列的形式(需按照函式輸入要求做)。最後用 drop操作去掉無用特徵。上述輸出結果中的normamount列就是標準化處理後的結果,可見數值都在較小範圍內浮動。
機器學習專案實戰之信用卡欺詐檢測
反欺詐應用的機器模型演算法,多為二分類演算法。1 gbdt梯度提公升決策樹 gradient boosting decision tree,gbdt 演算法,該演算法的效能高,且在各類資料探勘中應用廣泛,表現優秀,被應用的場景較多。2 logistic回歸又稱logistic回歸分析,是一種廣義的線...
筆記整理 信用卡欺詐 乾淨資料簡單操作
沒學會的東西都是沉沒成本 不及時複習的後果就是浪費更多的時間 12月看的 2月又來反思了!1.檢視資料特徵,一般我們認為欺詐數目是少數 import pandas as pd import numpy as np import matplotlib.pyplot as plt data pd.val...
大資料分析挖掘方法實戰
慧智匯 17xuee直播課程之大資料分析挖掘方法實戰案例 主題 大資料分析挖掘方法實戰案例 主講公司 慧智匯科技 收費標準 200 人 中文演講人 鄧亞明,香港上市it公司資深研究員 講師簡介 鄧老師在資訊科技方面有超過18年的經驗。主要研究方向包括企業架構和資料分析。專長有企業架構 資料模型分析和...