1.概述
信用卡盜刷一般發生在持卡人信息被不法分子竊取后,復制卡片進行消費或信用卡被他人冒領后激活并消費等情況下。一旦發生信用卡盜刷,持卡人和銀行都會遭受一定的經濟損失。本節要運用支持向量機分類算法搭建一個金融反欺詐模型。
2.數據集
使用的數據集共有1000條客戶信用卡的交易數據。其中,有400個欺詐樣本,600個非欺詐樣本。數據集中變量的詳細描述如下表所示,表格中的“欺詐標簽”列為目標變量,若是盜刷信用卡產生的交易則標記為1,代表欺詐,正常交易則標記為0。剩下的字段為特征變量,只選取了5個特征變量,在實際中使用的特征變量遠很多,根據這些數據搭建支持向量機模型。
3、分析過程?
(1)數據讀取
首先通過pandas庫讀取數據,代碼如下:
import pandas as pd
df = pd.read_excel('信用卡交易數據.xlsx')
df.head()
通過打印df.head()查看表格的前5行,結果如下所示:
其中第1列“欺詐標簽”為目標變量y,其余5列為特征變量X,接下來我們將利用這些數據搭建金融反詐識別模型。?
(2)提取特征變量和目標變量
首先將特征變量和目標變量分別提取出來,代碼如下:
X = df.drop(columns='欺詐標簽')
y = df['欺詐標簽']
(3)劃分訓練集和測試集
提取完特征變量和目標變量后,將數據劃分為訓練集和測試集,代碼如下:
# 從 sklearn 的 model_selection 模塊中導入 train_test_split 函數,用于將數據集劃分為訓練集和測試集
from sklearn.model_selection import train_test_split# 將數據集劃分為訓練集和測試集
# X_train 存儲訓練集的特征變量,X_test 存儲測試集的特征變量
# y_train 存儲訓練集的目標變量,y_test 存儲測試集的目標變量
# X 和 y 是之前代碼中提取的特征變量和目標變量
# test_size=0.2 表示將 20% 的數據劃分為測試集,80% 的數據劃分為訓練集
# stratify=y 確保劃分后的訓練集和測試集在目標變量 y 的不同類別上的比例與原始數據中的比例相同
# random_state=123 確保劃分結果的可重復性
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, stratify=y,random_state=123)
①test_size=0.2表示我們希望將數據集的20%作為測試集,相應地,80% 的數據將作為訓練集。
②stratify=y是一個重要的參數,當y是分類變量時,使用該參數可以確保劃分后的訓練集和測試集在不同類別上的比例與原始數據集的比例保持一致,這對于分類任務非常重要,避免某些類別在測試集中的比例失衡。
③random_state=123是一個隨機數種子,它確保每次運行代碼時,劃分的結果是一致的。如果不設置這個參數,每次運行代碼得到的訓練集和測試集可能會有所不同,因為劃分過程中涉及隨機采樣。設置該參數可以使結果可重復,方便代碼的調試和結果的比較。
(4)模型構建
劃分好訓練集和測試集之后,導入sklearn中的SVM工具包,核函數采用線性核函數進行模型訓練,代碼如下:
# 從 sklearn 的 svm 模塊中導入 SVC 類,SVC 是支持向量機分類器
from sklearn.svm import SVC # 創建一個 SVC 模型的實例,使用線性核函數
# kernel='linear' 表示使用線性核函數,適用于線性可分的數據集
svm_model = SVC(kernel='linear') # 使用訓練集的特征變量 X_train 和目標變量 y_train 對 SVC 模型進行訓練
svm_model.fit(X_train, y_train)
①from sklearn.svm import SVC:從scikit-learn的svm(支持向量機)模塊中導入 SVC 類。SVC 是 Support Vector Classifier 的縮寫,是支持向量機分類器,它可以用于分類任務。
②fit方法是scikit-learn中模型的核心訓練方法,它將學習如何根據輸入的訓練數據來預測目標變量。對于SVC模型,它會找到最優的超平面(在使用線性核函數的情況下)或在高維空間中找到最優的決策邊界,以將不同類別的數據分開。
(5)模型評估與預測
想要查看測試集的預測準確度,可以使用accuracy_score()函數,如下代碼:
# 使用訓練好的 svm_model 對測試集的特征變量 X_test 進行預測,得到預測結果 y_pred
y_pred = svm_model.predict(X_test)# 從 sklearn 的 metrics 模塊中導入 accuracy_score 函數,用于計算預測的準確率
from sklearn.metrics import accuracy_score# 使用 accuracy_score 函數計算預測結果 y_pred 和真實結果 y_test 的準確率
score = accuracy_score(y_pred, y_test)# 打印出準確率的得分
print(score)
將score打印輸出,結果為0.785,也就是說,模型對整個測試集的預測準確度為78.5%。 對于分類模型,需要關注查準率和查全率,Python可以通過如下代碼計算每一個類別的查準率和查全率:
# 使用 svm_model 的 score 方法計算在測試集上的準確率
svm_model.score(X_test, y_test)# 從 sklearn 的 metrics 模塊中導入 classification_report 函數,用于生成分類報告
from sklearn.metrics import classification_report# 使用 classification_report 函數對測試集的真實結果 y_test 和預測結果 y_pred 生成分類報告并打印
print(classification_report(y_test, y_pred))
?可見對于判斷是否欺詐,模型的 precision(查準率)為0.82,查準率比較高,但是recall(查全率)為0.59,命中率不夠高,表示有一些實際是欺詐的客戶模型沒能識別出來,遺漏了。因此,可以再調節模型的參數,以獲得更優的預測效果。