天天看點

電商交易欺詐層出不窮,如何用深度學習系統布下天羅地網?

交易欺詐對電子商務帶來了巨大的威脅,來自清華大學交叉資訊研究院博士後、實體學博士王書浩近日在AI研習社的青年分享會上介紹了基于循環神經網絡的交易欺詐檢測系統——時間偵探(CLUE),他重點講解了電商欺詐檢測這一場景下的三個主要技術難點:非平衡樣本學習、實時檢測系統、增量模型更新。

以下為他的分享内容,雷鋒網 AI 科技評論編輯整理如下:

很高興在這裡與大家分享我們跟京東金融合作的一篇論文,這篇論文已經被ECML-PKDD2017接收。我們的工作一句話就可以概括,即通過深度學習的方法來進行電商欺詐的檢測。我想講的更多的是從工業落地的角度,去建立一套完整的系統來解決問題。

研究背景

首先介紹一下背景。在電商網站裡面,我們經常會遇到兩種欺詐。

第一種欺詐是指使用者的賬戶被竊取了,竊取者可能還會得到使用者的支付密碼,之後他很有可能登入這個使用者的賬戶進行一些欺詐活動,比如說會購買一些商品進行變現,間接的把使用者賬戶裡的餘額取走。

第二種是現在黑市上可以買到一些假的卡片,比如說假的信用卡,如果這個人能夠注冊一個新的賬戶,然後把卡綁定到他的賬戶名下,他就可以使用這個卡來買商品,然後把商品進行變現。

這兩種欺詐有一個共同點,即欺詐使用者都會進行商品的購買和變現。這些欺詐使用者的行為是不是有一些共同的特點,是否可以通過一種手段去觀察整個浏覽路徑?我們通過交易之前發生的一系列的動作,可以判斷出這個使用者到底是正常使用者還是被懷疑為欺詐的使用者。

上面這個表左邊展示的是正常使用者的浏覽路徑,可以看到這個使用者最後買了一個128G的wifi版玫瑰金iPad Pro,整個浏覽路徑非常有規律。對于欺詐使用者而言,看右邊這兩個使用者,從統計上來說有兩個比較鮮明的特點。

第一個是使用者非常簡單粗暴,購買的都是一些虛拟物品,因為虛拟物品可以随時變現。

第二個是使用者的浏覽行為沒有邏輯性,他首先通路京東,然後搜尋蘋果,浏覽了一堆蘋果的商品,但可以看到浏覽的這些商品沒有太大的關聯性,我們系統中會記錄這是一次欺詐行為。

整個系統的中文名叫做時間偵探,時間是指觀察使用者在整個浏覽序列裡面的時序資料,然後用深入學習的辦法來對它進行模組化。我們所能拿到的資料就是京東上産生的使用者的浏覽曆史,再加上我們的系統去觀察,之後系統會給出對整個浏覽行為的風險判定,我們得到的其實是風險評分。處于使用者隐私角度的考慮,我們的浏覽曆史裡面沒有關于這個使用者ID的任何資訊。

技術挑戰

一個非常直接的挑戰首先是我們拿到的樣本是一個非常不平衡的樣本,這就是所謂的非平衡樣本的學習問題。從上面這幅圖中可以明顯看到欺詐使用者和正常使用者的占比大概是千分之一, 非常小。在研究過程裡面,我們固定了千分之一的欺詐占比,又稱異常占比。異常占比小的問題會對系統的學習造成很大的幹擾。

第二個非常嚴峻的問題就是通路量太大了。京東現在有超過2.2億的活躍使用者,單就PC端來說,每天session的數目大概都是在千萬的量級,真正發生交易的session數目大概也有百萬量級。這個系統其實隻看發生交易的session,一天大概要處理掉百萬的通路,這對系統壓力是非常大的。

在欺詐領域還有一個非常有意思的現象。欺詐其實是人産生的,既然有人在,整個欺詐行為就會随時間發生變化。上面這幅圖裡展示的就是欺詐使用者喜歡購買的商品。比如在1月份可以看到欺詐使用者特别喜歡2号商品,但随着時間發展,到10月份時,這些使用者對2号商品就沒那麼感興趣了。我們的系統需要去适應使用者行為的改變,我們需要周期性的對模型進行不斷的更新。

模組化方法

接下來講對這個問題的模組化方法。我們文章裡面隻是做了一個欺詐檢測,但出現的模組化方法同樣可以用在商品推薦或是商品模組化等其他領域,包括使用者畫像。

細化我們面臨的問題。上圖展示的是使用者在京東的整個浏覽行為序列,首先通路首頁,他可能會看一些促銷頁,然後可能會看一些清單頁,然後浏覽各種商品,最後進行結算。可以注意到在整個URL裡面,商品清單頁和商品的詳情頁是最難編碼的。

我們的伺服器在使用者每次點選的時候都會記錄下這些資訊,比如使用者IP,通路了哪個URL,包括使用者浏覽器、作業系統的資訊。對這些資訊進行編碼之後就可以讓機器去學習。

怎麼進行編碼?其實模型輸入的并不是原始資訊,在實際操作過程中需要用一些方法來把這些資訊變成機器能夠認識的資訊。我們采用的方法比較簡單。可以先忽略URL,進行One-Hot編碼。One-Hot編碼指的是在一個向量裡面隻有一位是1,其他的位都是0。

在使用者浏覽行為裡有一個非常重要的資訊叫停留時間,停留時間比較難擷取,我們采用了統計上比較符合常理的做法——把下一個頁面點選的時間和上一個頁面點選的時間減一下,然後認為是使用者在這個頁面上整體停留時間。

對URL的編碼我寫了兩種編碼方式,在URL裡面很多頁面都可以歸為Category或Item這兩個門類。商品的清單頁和詳情頁實在太龐大了,如果用one-hot編碼将是一個非常大的數目。

京東上商品的浏覽特别符合非常陡峭的幂律分布,我們可以對采集到session裡面的大部分浏覽行為進行item編碼,如果浏覽的商品沒出現在編碼過的item裡面,我們就單獨進行編碼。

我們編碼采用的方式是Item2Vec,這種方法的思路和Word2Vec一樣,Word2Vec相當于把出現在相同語境下的詞之間的距離進行最小化。Item2Vec是先給這個商品賦一個随機向量,然後根據商品在不同語義中出現的情況,對我們賦的向量進行優化。我們在研究中采用了一個25位的向量,能覆寫大概90%我們所研究的商品。上表展示的就是Item2Vec的一個結果。

我們來看一個更為廣泛的例子,随機在三個品類裡面找出若幹個商品,然後進行Item2Vec編碼再進行降維。我們采用了汽車用品、手機和附件、個人護理這三個類别。可以看到這三種類型的商品在這個二維的空間裡面比較明顯的被分割到三個不同的區域,這說明Item2Vec的有效性還是很強的。我們做的Item2Vec編碼參考的完全是使用者的浏覽行為,沒有跟商品的标題做語意上的比對。

我們可以把URL的編碼劃分成三部分,第一部分是URL的類型,第二部分是category,第三部分是item Vector。我們把所有使用者的點選行為做完了編碼之後,每一次點選都可以得到一個編碼後的向量,使用者的整個浏覽行為就可以看成一個向量的組合,最後我們再從資料表裡面去找這個session是正常的還是被舉報過的。

還有一個問題需要解決。在訓練神經網絡的時候,每一個session的長度都可能是不固定的,可能第一個session的點選數是六個,第二個session的點選數隻有三個,那麼怎麼來處理這種不相等的問題?首先我們确定一個最大點選數目,在文章中我們設定這個數目為50,也就是說從checkout的頁面往前數50個點選,進行一個截取之後,然後把長度沒有達到50的後面全都補0。在取最後結果的時候,一定要在checkout位置去取,如果在最後一個位置取的話,會出現錯誤。 

最後把這些送到RNN裡面學習。我們在研究裡面采用的架構是TensorFlow,所用到的東西都是TensorFlow定義好的。我們采用的是如上圖LSTM的結構,可以采用多層的LSTM結構。

如何解決技術難題

接下來講一下怎麼去解決剛才說的那些技術難題。

第一是解決非平衡樣本問題。在這個工作裡面采用兩個比較簡單的方法,第一個方法是從資料的層面,我們直接把正常使用者的數目随機減去4/5。對于欺詐使用者,我們沒有做任何操作。在訓練資料裡原來的占比是1‰,經過采樣之後把數目調整到5‰。在驗證集和測試集上還是保持原來1‰的占比。

在模型層面,我們采用Thresholding法,它的思路非常簡單。我們的模型是一個二分類問題,要麼欺詐,要麼正常,模型輸出的是一個連續變量,如果更偏重于1,我們認為它是欺詐使用者的可能性更大。

第二個問題就是如何解決龐大的通路量,我們整個系統的架構如上圖所示。架構分成兩部分,下面是訓練,上面是進行預測,訓練采用的是Tensorflow,預測用了Tensorflow Serving的開源子產品。下面是模型進行滾動更新的部分,更新後的模型會送到上面,然後會有QA子產品進行決定是否切換掉現有的模型。 

我們有兩種模型更新的辦法——全量資料更新和增量資料更新。全量資料的好處在于每次模型優化能夠達到一個比較好的結果,增量資料的好處是不需要把曆史資料全都拿過來。從時間上來看,增量更新會比較節省時間和計算資源,我們在這個研究裡面采用的是增量更新的辦法。

研究成果展示

最後給大家展示一下我們研究的一些結果。

對于非平衡樣本問題,用PR曲線能有效的看出模型性能。圖中是初期的一個結果,現在的準确率比圖中高很多。采用4-64的性能最好。

我們還有一個更詳細的表,固定recall是30%,異常占比為1‰。可以看到随着層數的增加,性能還是有一些增加的,但是随着unit數目的增加,在有些地方可能就會産生一些過拟合。

如上圖,通過跟傳統的一些方法的對比也展示了RNN的優越性。

我們也做了一些實驗來對比增量模型更新與全量模型更新。我們把資料分成若幹時間段,然後用下一個時間段來測試目前時間段模型的性能,橙色線是初始的模型,我們隻用第一個時間段的資料訓練好模型,後面不進行優化,可以看到橙色線跟另外兩條線的差距越來越大,也即随着使用者行為的變化,第一個時間段訓練的模型越來越不能在實際中使用了。

結果展示

最後展示的是我們做的比較有意思的一個結果。這幅圖裡使用者的行為可以比較明顯的區分出來。例如右上角,這部分樣本表示在session裡面沒有發現使用者在浏覽商品,而直接進行了付款,這是為什麼?因為我們并沒有把使用者從第一個商品浏覽到最後全部采集下來。後續我們把使用者的浏覽行為拼接起來,找到之前的session,這樣的話性能會更好。

本文作者:Non

繼續閱讀