--- title: Project11 tags: teach:MF --- # IEEE-CIS Credit fraud detection #### keywords: credit card fraud detection,binary classification --- ## 1.動機 Motivations --- ![](https://i.imgur.com/jNaGOrb.png) [小心網購!今年信用卡小額網路盜刷大增26.5%](https://udn.com/news/story/7239/5444760) [今年前 5 月信用卡盜刷高達 6.2 億,多數來自蘋果、Google、亞馬遜](https://technews.tw/2021/08/18/ec-pay/) 針對時事新聞,我有興趣建立一個**信用卡檢測系統**來識別欺詐性信用卡交易。這樣客戶就不會因為他們沒有購買的商品而被收取費用。 這個專案的好處: * 有效且不費力地打擊欺詐 * 防止狡猾的欺詐交易(手動定義的規則通常無法預料) * 為全球數百萬人提高欺詐交易警報的效力,幫助數十萬企業減少欺詐損失並增加收入 --- ## 2.資料視覺化 Exploratory data analysis (EDA) --- Data Source link: [IEEE-CIS Fraud Detection](https://www.kaggle.com/c/ieee-fraud-detection) :::warning IEEE-CIS與世界領先支付服務公司 Vesta Corporation合作,尋求**欺詐預測**的最佳解決方案。Data來自Vesta的真實電商交易,包含從設備類型到產品特徵等等資料。 ::: :::info * train_identity.csv * train_transaction.csv * test_identity.csv * test_transaction.csv ::: :bulb: Data Description 本次有兩個資料集: 身分資訊資料集(identity)、交易資料集(transaction) | Transaction | | | -------- | -------- | | Variable | Description | | TransactionID | 交易ID | | TransactionDT | 來自給定參考日期時間的時間增量(不是實際時間戳) | | TransactionAMT | 以美元為單位的交易支付金額 | | ProductCD | 產品代碼(每筆交易的產品) | | card1–6 | 支付卡相關信息,如卡類型、國家等 | | addr1 | 帳單區域 | | addr2 | 帳單國家 | | dist1 & dist2 | 一些距離信息,(不限於)帳單地址、郵寄地址、郵政編碼、IP 地址、電話區等之間的距離| | P_emaildomain | 購買者的電子郵件domain | | R_emaildomain | 收件人的電子郵件domain | | C1-C14 | 計數,如發現有多少地址與支付卡關聯等,實際含義被屏蔽 | | D1-D15 | 時間增量,例如之前交易之間的天數等 | | M1-M9 | 匹配,如卡片上的名字和地址等 | | Vxxx |設計了豐富的功能,包括排名、計數和其他實體關係 | | Identity | | | -------- | -------- | | Variable | Description | | Transaction id | 交易Id | | DeviceType | 用於交易的設備類型 | | DeviceInfo | 有關所用設備的更多信息 | | id 1-38 | 網絡連接信息、瀏覽器信息等(id 12-38為分類信息) | :bulb: EDA ### [2.1]資料集觀察 1. 合併交易與身分資料集,並印出測試與訓練資料集shape ![](https://i.imgur.com/V7F8HM4.png) :::info 訓練資料有590540列資料,434個欄位(有isFraud) 測試資料有506691列資料,433個欄位 ::: --- 2. 看訓練資料集describe ![](https://i.imgur.com/32NhjA3.png) :::info 觀察出 isFraud(=1) 約只有3.5%,可以看出這是一個**嚴重不平衡**的資料集。第二件事情,可以**看到有很多欄位具有缺失值**。 ::: 3. 觀看缺失值 * df_train ![](https://i.imgur.com/VULHyOf.png) * df_test ![](https://i.imgur.com/NHJ4U5g.png) :::info 我們可以看到像 id_21,id_22,id_23,id_24,id_25,id_26,id_27,id_07,id_08 這樣的列**有超過 99% 的缺失值**,後續可以考慮不要納入這些屬性。 ::: --- ### [2.2]isFraud(Target) 1. 觀察比例 ![](https://i.imgur.com/uVBrwJf.png) :::info 正如前面describe描述,我們可以看到Target**嚴重不平衡**, 這裡 96.5% 的交易不是欺詐,其餘 3.5% 的交易是欺詐。 因此我知道未來將選擇 ROC 曲線下的面積 (AUC) 作為我們 ML 問題的度量。 ::: :::warning 考慮問題: 為什麼不能使用準確性作為衡量標準? 考慮這樣一個場景,我們有一個不平衡的數據集。例如,考慮信用卡欺詐檢測的情況,其中 98% 的分數為非欺詐,其餘 2% 的分數為欺詐。在這種情況下,即使我們將所有點預測為非欺詐,我們也將**獲得 98% 的準確率**。但實際上,情況並非如此。所以我們不能使用準確性作為衡量標準。 ::: --- ### [2.3]TransactionDT 1. 描述->來自給定參考日期時間的時間增量(不是實際時間戳)。 (從description可以得知最小值是86400,因此我們可以估計是以秒為單位。) 2. 沒有缺失值 3. 是否隨時間連續 在這裡,我們想檢查在訓練和測試中獲得的資料**是否隨時間連續**。這對於訓練-測試分割很重要。這意味著訓練資料應該來自更早的時期,而測試資料應該來自更晚的時期。 ![](https://i.imgur.com/T3DPv5e.png) :::info * 兩者之間略有差距且訓練集來自較早的時間段,而測試數據來自較晚的時間段。這可能會**影響待會使用的訓練驗證拆分或交叉驗證**。 * 某些時間的交易量超過10000。 ::: --- 4. 看看一周中不同日子以及不同時間的欺詐交易 ![](https://i.imgur.com/coNRaWv.png) ![](https://i.imgur.com/32WXrHx.png) :::info * 第 3 天的欺詐交易非常少 * 第 7 個小時欺詐交易的百分比與其他時間相比較高 ::: --- ### [2.4]TransactionAmt 1. 描述->以**美元**為單位的交易支付金額 2. 沒有缺失值 3. 觀察每個小時平均值以及畫出詐欺曲線. ![](https://i.imgur.com/Us9yapV.png) 4. 觀察看看有沒有outlier ![](https://i.imgur.com/zY28TL6.png) :::info 可以觀察到訓練數據中有一個點的數量 > 30000。選擇刪除異常值,因為它會影響我們的模型(尤其是基於距離的算法,如邏輯回歸、knn 等)的預測。 此外,像這樣的**異常值會導致過度擬合問題**。因此,後續決定刪除訓練集中大於 30,000 的值。 ::: 4.1 更新df_train ![](https://i.imgur.com/5ClrjU2.png) 5.看分佈 ![](https://i.imgur.com/eCrIrdn.png) :::info In train data Minimum transaction amount is 0.251 and maximum amount is 31937.391 In test data Minimum transaction amount is 0.018000000000000002 and maximum amount is 10270.0 ::: 5.1 取log ![](https://i.imgur.com/KRlLS1n.png) ![](https://i.imgur.com/AQWj0Ci.png) :::info Mean transaction amt for fraud is 4.3506 ie, 77.5264 dollars Mean transaction amt for non-fraud is 4.3643 ie, 78.5978 dollars Median transaction amt for fraud is 4.3175 ie, 75.0000 dollars Median transaction amt for non-fraud is 4.2268 ie, 68.5000 dollars ::: :::warning 1.欺詐交易的中位數略高。 2.同樣在欺詐交易中,我們有一個更好的正態分佈,它在鐘形曲線上很寬。它表明在特定時間段存在更多欺詐交易。 3. 'LogTransactionAmt' 大於 5.5(244 美元)且小於 3.3(27 美元)的交易似乎具有更高的欺詐機率。 ::: --- ### [2.5]ProductCD 1. 描述->產品代碼(每筆交易的產品) 2. 沒有缺失值 3. 類別型資料,觀察其分布 ![](https://i.imgur.com/VnFzfk2.png) :::info 可以看到 W 的產品為最多,接下來進一步觀察,是不是在欺詐交易中,W產品比例最多?? ::: 3.1 ![](https://i.imgur.com/shSxo7R.png) :::info 結果發現只有大約 2% 的 Product W 交易是欺詐。 大約**11.5%的ProductC是欺詐性交易**,此外,**大約6%的ProductS**交易是欺詐。 ::: --- ### [2.6] card1–6 1. 描述->支付卡相關信息,如卡類型、國家等 ![](https://i.imgur.com/5roa5Jn.png) 2. 觀察缺失值 ![](https://i.imgur.com/pBYmfag.png) :::info 待會要針對缺失值做處理 ::: 3. 觀察 card1 - card6 unique value,哪些可能屬於類別型 ![](https://i.imgur.com/LyxqdTN.png) :::info Card 4、Card 6可能是類別型資料。 ::: 4. 觀察連續型資料 ![](https://i.imgur.com/Y5bQ84r.png) :::info 可以觀察到欄位的數值範圍差很多,因此待會針對連續型資料要做正規化。 ::: 5. 觀察相關性 ![](https://i.imgur.com/KjH5uk7.png) :::info 各自關係不大,card 3 和 isFraud相較下有低關聯。 ::: 6.觀察 card4 & catd 6 * card4 ![](https://i.imgur.com/BmxAMm7.png) * card6 ![](https://i.imgur.com/XQEngQ8.png) :::info * 根據 card4 觀察到**discover card** 有最高詐欺案件,約7.5% * 根據 card6 觀察到**credit card** 存在更多欺詐交易的機會。它約佔所有交易的 6.5%。 ::: --- ### [2.7] P_emaildomain & R_emaildomain 1. 描述->購買者的電子郵件domain和收件者的電子郵件domain 2. 觀察缺失值 ![](https://i.imgur.com/1tG6oIU.png) :::info 各有一些缺失值,不過不是每筆交易都會要求提供mail,好像也還可以理解,那進一步觀察哪類的電子郵件欺詐交易案件最多? ::: 3. 觀察P_emaildomain與isFraud的關係 ![](https://i.imgur.com/AxKEz6b.png) :::info * 在買方email domain,大多數郵件來自 gmail.com,其中更多的欺詐交易來自**protonmail.com**,超過 40%。 ::: 4. 觀察R_emaildomain與isFraud的關係 ![](https://i.imgur.com/33Jqg2a.png) :::info * 在收件者電子郵件域中,大多數郵件來自 gmail.com * 其中更多的欺詐交易來自**protonmail.com**,超過 90%,這是一個嚴重的問題。 根據上述3.的情況,可以得知更多的詐欺交易來自**protonmail.com** ::: --- ### [2.8] DeviceType 1. 描述->用於交易的設備類型 2. 有無缺失值 ![](https://i.imgur.com/wRxKtUu.png) :::info 有些缺失值,後續可能須做處理 ::: 3. 觀察資料與isFraud的關係 ![](https://i.imgur.com/74mBNVl.png) :::info 觀察到欺詐交易大多是在mobile上進行的,大約有 10% 左右,而桌面交易中只有 6.2% 的欺詐交易。 ::: --- ### [2.9] Device Info 1. 描述->有關所用設備的更多信息 2. 有無缺失值 ![](https://i.imgur.com/aTO7IKj.png) :::info 有些缺失值,後續可能須做處理 ::: 3. 觀察資料與isFraud的關係 ![](https://i.imgur.com/0EyZJ6u.png) ![](https://i.imgur.com/F4koEKn.png) :::info * 不同設備訊息有1786個 * 可以觀察到約 49 個設備信息有機會被欺詐交易 > 90% ::: --- ## 3.重述問題 Problem formulation --- ### Problem formulation This is a supervised learning problem: we would like to use $x$ to predict the binary variable $y$. We sould like to build a model to predict $y$ from $x=(x_1,\ldots,x_p)$ with $p=433$.$$Y =\left\{\begin{array}{ll}1,&\mbox{is fraudulent},\\0,&\mbox{is not fraudulent}\end{array}\right.$$ ### Measures for comparisons 首先考慮 75%-25% 的分割來獲得訓練和測試數據。 對於訓練和測試數據,輸出準確率、準確率、召回率、f1 分數和 AUC 以進行模型比較,另外**因為此次資料集是不平衡的資料,因此看AUC較為準確**! ## 4.資料分析 Data analysis ### 資料前處理 1. 準備資料 - X_train -> 去掉 "isFraud" 問題,y_train -> "isFraud"欄位 - 針對類別型資料,全部做label-encoding - 針對數值型資料,做正規化 2. 將df_train 切割成訓練集與驗證集 ![](https://i.imgur.com/qllCqmL.png) :::info 訓練集前75%,驗證集25% ::: --- ### Benchmark Logistic Regression * In-sample results confusion matrix ![](https://i.imgur.com/2k4TxQz.png) * out-of-sample results confusion matrix 75% 訓練集, 25%驗證集 ![](https://i.imgur.com/sUN5fCf.png) ### 特徵工程四步驟 1. 調整參數 logistic Regression > solver = 'liblinear', class_weight='balanced', penalty='l1', n_jobs=-1 2. 去除缺失值 ![](https://i.imgur.com/QrLskCe.png) :::info 根據EDA,有12個欄位缺失職>90%,直接去除掉這些欄位。 包括(id_21,id_22,id_23,id_24,id_25,id_26,id_27,id_07,id_08,id_18,dist2,D7) ::: 3. 欄位取log值[TransactionAmt] ![](https://i.imgur.com/NEV4bwO.png) :::info 根據EDA,TransactionAmt取log值來當作新的欄位 ::: 4. PCA[V1-V339] ![](https://i.imgur.com/D4S9cNb.png) :::info 將V1-V339做PCA,thresh = 0.7,最後剩下4個欄位。 ::: ### Logistic Regression * In-sample results confusion matrix ![](https://i.imgur.com/uJaRoVb.png) * out-of-sample results confusion matrix 75%訓練集,25%驗證集 ![](https://i.imgur.com/wsmpaPi.png) ### Random Forest * In-sample results confusion matrix ![](https://i.imgur.com/SjcR7UY.png) * out-of-sample results confusion matrix 75%訓練集,25%驗證集 ![](https://i.imgur.com/RRSA4VD.png) ### Results #### In-sample results |Measures |BenchMark |Logistic Regression |RandomForest | |---|---|---|---| |AUC| 0.5357|0.8661|1.| |Accurracy|0.9649|0.8247 | 1.| |Precision| 0.0|o.1363|1.| | |Recall| 0.0|0.748| 0.9997| |F1-score| 0.0|0.2307| 0.9999| #### Out-of-sample comparisons We consider a simple 75%-25% split on the data. In the test data, we have |Measures |BenchMark|Logistic Regression | RandomForest | |---|---|---|---| |AUC| 0.5322|0.8202| 0.9837| |Accurracy| 0.9655|0.708| 0.9912| |Precision| 0.0|0.086| 0.9743| |Recall| 0.0|0.7745| 0.7875| |F1-score| 0.0|0.1548| 0.871| ## 5. 結論 Conclusion 1. 這次資料特色是資料量大(約60萬筆)、資料嚴重不平衡,因此在測量指標上要特別注意,以使用AUC較為客觀 2. 整體來說,模型取用RandomFores,特徵工程將資料集去除缺失值>90%欄位以及針對TransactionAmt取log值表現最佳。 ### 未來發展 Future Works 在這次專案上,因為資料量大,因此跑模型起來較吃力,未來發展可以基於本篇方法,使用其他的機器學習模型以及做其他的特徵工程。 ## 6. 參考資料 Reference [淺談機器學習的效能衡量指標](https://ithelp.ithome.com.tw/articles/10229049) [IEEE-CIS Fraud Detection - Top 5% Solution](https://towardsdatascience.com/ieee-cis-fraud-detection-top-5-solution-5488fc66e95f) [機器學習053-數據降維絕招-PCA和核PCA](https://codertw.com/%E7%A8%8B%E5%BC%8F%E8%AA%9E%E8%A8%80/671529/) ## 7. 資料與程式存放 Data and code [IEEE-CIS Fraud Detection Data](https://www.kaggle.com/c/ieee-fraud-detection) [Code](https://colab.research.google.com/drive/1uDQqq-dOR0fox_3WwIFhEXj_lXeg7Xek#scrollTo=SWhHuMvnhpWn)