使用邏輯回歸識別 信用卡欺詐行為:基于creditcard.csv
的實戰與評估分析
項目背景
在金融行業中,信用卡欺詐檢測是一項關鍵任務。欺詐交易在整個交易中占比極低,導致數據極度不平衡。本案例通過經典數據集 creditcard.csv
,構建邏輯回歸模型,并使用多個評價指標(如準確率、召回率、F1 等)來全面評估模型性能。
數據介紹
信用卡欺詐檢測數據集?creditcard.csv
-
數據來源:Kaggle Credit Card Fraud Detection
https://www.kaggle.com/datasets/mlg-ulb/creditcardfraud
-
樣本總數:284,807 條
-
特征數:30(28個匿名特征 + 金額
Amount
+ 時間Time
) -
目標變量:
Class
(0=正常交易,1=欺詐交易)
?? ?
完整代碼解析
import pandas as pd # 用于數據處理和分析
from sklearn.linear_model import LogisticRegression # 導入邏輯回歸模型
from sklearn.model_selection import train_test_split # 用于拆分訓練集和測試集
from sklearn.preprocessing import StandardScaler # 用于數據標準化處理# 讀取信用卡交易數據
data = pd.read_csv('creditcard.csv')# 初始化標準化器,將數據轉換為均值為0、標準差為1的分布
scaler = StandardScaler()
# 對Amount列進行標準化處理,并覆蓋原始數據
data['Amount'] = scaler.fit_transform(data[['Amount']])# 準備特征數據X(排除時間和目標變量)和目標變量y(欺詐標簽)
X = data.drop(["Time","Class"], axis=1)
y = data.Class# 將數據拆分為訓練集(70%)和測試集(30%),設置隨機種子保證結果可復現
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=100)# 初始化邏輯回歸模型并在訓練集上訓練
model = LogisticRegression()
model.fit(X_train, y_train)# 使用訓練好的模型在測試集上進行預測
y_pred = model.predict(X_test)
# 計算并打印模型在測試集上的準確率
accuracy = model.score(X_test, y_test)
print(f'準確率:{accuracy}')# 導入評估指標庫并生成詳細的分類報告
from sklearn import metrics
print('分類報告:')
print(metrics.classification_report(y_test, y_pred))# 統計目標變量Class中各類別的樣本數量(查看數據分布,尤其是欺詐與正常交易的比例)
labels_count = pd.value_counts(data['Class'])
print(labels_count)
模型評估指標詳解(來自sklearn.metrics.classification_report
)
在欺詐檢測中,“準確率”往往是不可靠的。因為如果模型預測全為 0(正常交易),準確率仍然可能達到 99.9%。
因此,我們重點關注如下指標:
指標名稱 | 說明 |
---|---|
Precision(精確率) | 被預測為正類的條目中? 真正是正類的比例。衡量“預測為欺詐中真正欺詐”的比例 |
Recall(召回率) | 實際為正類的條目中? 被預測是正類的比例。(檢出率) |
F1-score | 精確率和召回率的調和平均,平衡二者 |
Support | 每個類在測試集中出現的樣本數。如85301為測試集(284,807條的30%)中的“0”類 |
示例輸出:
重點分析 1
類(欺詐交易)
-
Precision = 0.77:誤報很多,意味著模型判定為欺詐的交易中,存在不少誤判情況。
-
Recall = 0.65:召回率并不好,說明很多欺詐并沒有被識別。
-
F1-score = 0.70:它綜合考慮了精確率(Precision)和召回率(Recall),用于衡量在不平衡數據集中模型對“少數類”的綜合表現。
-
support: 85301表示測試集中0的條數,142表示測試集中1的條數
之所以預測結果并不好,是因為數據的極度不平衡:
28萬條 的 正常交易
492條 的?欺詐交易
模型優化建議
方法 | 原理 |
---|---|
下采樣(Undersampling) | 減少多數類樣本,使正負樣本比例接近,降低模型對多數類的偏好。適用于數據量較大的場景,但可能丟失信息。 |
過采樣(Oversampling) | 通過復制少數類或生成合成樣本(如SMOTE)來平衡數據,提高模型對少數類的識別能力。適用于數據稀缺時。 |
調整閾值(threshold) | 將默認的分類閾值(通常為0.5)向下調整,使模型更容易預測為“欺詐”類,從而提高 Recall,適用于對漏檢特別敏感的任務 |
調整類別權重(class_weight) | 在訓練過程中對少數類樣本給予更高權重,引導模型更關注少數類。可通過設置 class_weight='balanced' 實現,適用于多數 sklearn 分類器。 |
此文章同一專欄內包含有1.下采樣、2.過采樣、3.調整閾值、4.LogisticRegression()的參數
class_weight='balanced'即為LogisticRegression()的參數
總結
邏輯回歸雖為線性模型,但在欺詐檢測中依然具備一定實用性。通過合理的數據預處理、參數設置(如 class_weight='balanced'
)、指標解讀,可以使模型在真實場景中更可靠。評價指標遠比準確率更重要,特別是在處理不平衡分類問題時。