初探詐欺偵測——使用 Autoencoder 的意外發現

by 王翰元

最近實作了一個用 Autoencoder 結合 Isolation Forest 進行詐欺偵測的模型,用的是 Kaggle 的 Credit Card Fraud Detection。這是個極度不平衡的資料集(詐欺樣本只佔 0.17%),參照 AI 的意見,我決定實做 autoencoder 這個方法。雖然不是最新的方法,但我想,也許方法不酷,但只要有效就值得一試。在大概看過 AI 給的 code 之後還算好理解,決定自己跑跑看。

方法是:只用正常樣本訓練 autoencoder,然後用重建誤差當作 anomaly score,再接 logistic regression 和 isolation forest。

第一次跑的時候,只用了 bottleneck size = 14(比輸入維度 29 小),訓練 300 個 epoch,結果非常差。PR AUC 僅略高於隨機猜測,有建模跟直接用 anomaly score 的 AUC 幾乎相同。

我開始思考整個方法,還有是哪裡做錯。於是我又問了 AI,請他像面試官一樣問我問題,確保我有理解每一步的用意。

他問了我十二題,有一個讓我深思:「你訓練過不同 bottleneck 大小的 autoencoder 嗎?重建效果的變化反映了什麼?」這問題給了我靈感。在試圖做些優化的時候,我增加了 dropout、嘗試了幾種不同 epoch,不過都沒有想過要改變 bottleneck 大小。

一般來說,autoencoder 會把 bottleneck 縮小才是,讓他學 latent vector。不過我突然某根神經不對,把 bottleneck size 改成了 50,也就是比輸入維度還大。結果卻讓人驚訝——

PR AUC 從 0.002 上升到了 0.19。整整高出 baseline 近 100 倍。

後來才知道,照理說,這種 latent vector 比輸入維度大的 autoencoder 被稱為 Overcomplete AE,通常這等於讓 autoencoder 記住所有資料,變成「死背」而導致重建結果下降。不過以我看到的結果來說,顯然不是如此。

我不太確定我做對什麼,說「有時候 Overcomplete AE 反而更能捕捉到資料的結構」總感覺太倉促。不過,發現跟主流理論不同的反例,往往很有意思(當然,這可能只是意外)。

以下是一些參考:

bottleneck sizeLogisticIsolation forestRandom Gues
100.00290.00220.0017
500.19730.19550.0017

指標:AUC PR

左邊是 bottleneck = 10,右邊是 50

Leave a Comment