背景介紹
在證劵交易所領域,曾經發生使用者證券賬號被盜事件,導致客戶資產損失,例如:駭客獲得了使用者A的證券賬號密碼,利用多次的低買高賣將資產轉移。本文中針對此類對敲欺詐的場景,採用將使用者交易資料轉換為圖片,進而利用 Amazon SageMaker 影像分類演算法 ResNet 進行模型訓練和推理,在此類欺詐行為識別上得到了很好的效果。這種將交易資料轉換為影像分類的方式簡化了通常的特徵提取的複雜度,可以作為防欺詐或者交易行為特徵識別的方式的新的嘗試。
亞馬遜雲科技開發者社群為開發者們提供全球的開發技術資源。這裡有技術文件、開發案例、技術專欄、培訓影片、活動與競賽等。幫助中國開發者對接世界最前沿技術,觀點,和專案,並將中國優秀開發者或技術推薦給全球雲社群。如果你還沒有關注/收藏,看到這裡請一定不要匆匆劃過,點這裡讓它成為你的技術寶庫!
1. 資料準備
整個資料準備過程包括使用者特徵分析,樣本資料構造,樣本資料格式轉換幾個步驟。
專案包下載 Link
本機安裝 python3.9 版本環境。並且提前準備如下幾個依賴包的安裝
python -m pip install requests
python -m pip install matplotlib
python -m pip install numpy
1.1 資料行為分析
對敲欺詐的交易行為特徵比較突出,會出現集中的低買高賣的特點,此類特點也會與老鼠倉行為類似。根據使用者的交易行為與股票當日的5分鐘 k 線圖合併表示如下圖:
紅色點表示買入,綠色點表示賣出。使用者的行為呈現為多次的連續低賣高賣。
1.2 資料集準備
在金融欺詐的場景中,大多數情況下實際發生的欺詐樣本是少量的,因此要得到好的模型訓練效果,我們需要分析使用者行為的特徵,在此基礎上進行資料的模擬。
1.2.1 獲取 K 線
執行K線生成指令碼 generateKline.py ,生成某日的K線資料,本案例從 alphavantage 獲取美股最新的 Coinbase(股票程式碼COIN) 80條5分鐘k線。免費 APIkey 請自行從alphavantage官網申請。
1.2.2 生成駭客使用者交易記錄
執行指令碼 genRandomHackerTrades.py ,生成模擬駭客交易記錄表格。模擬邏輯為:
– 找到 Top 10 的 COIN 的5分鐘 k 線資料中超過5%波幅的k線資料。
– 隨機選擇3-5個5分鐘 k 線,生成低價買入的成交價格。生成高價賣出的成交價格。
– 生成 csv 檔案,分別存放到 ./buy/ 和./sell/目錄。生成檔案樣例
1.2.3 生成使用者交易記錄
執行指令碼 genNormal.py,生成模擬正常使用者交易記錄資料。在實際的證券交易所風控可獲取實際使用者資料生成記錄。本案例中的模擬邏輯是:隨機獲取 COIN 的5分鐘k線,生成1-2個買賣記錄。
執行指令碼 genRandomHackerTrades.py 生成模擬的駭客交易記錄資料。模擬邏輯是:獲取 COIN 日k線中的 top 10 價格振幅最大的k線單元,然後隨機從 top10 中選擇3個單元,模擬生成低買高賣的點位。
1.2.4 將交易記錄轉換為影像
採用 matplotlib 庫,繪製k線影像,把使用者交易為圓點,綠色表示賣,紅色表示買。駭客行為生成影像指令碼為 generateHackerImg.py,獲取駭客交易記錄檔案,繪製 K 線,如圖-1所示,駭客行為的特點是出現短時間內集中的低買高賣行為,經過多輪測試,我們需要對影像進行處理,去掉與使用者行為不想關的資訊。
– 去掉 k 線展示
– 去掉 x,y 軸刻度顯示
– 將影像尺寸縮小到2.5英寸*1.5英寸,dpi 調整為100.
生成效果圖如下:
2. 模型訓練與釋出
經過以上的步驟,在 traindata 目錄下,我們獲得了 hacker 和 normal 兩個類別的影像訓練資料。下面就可以採用 Amazon Sagemaker 的內建演算法 resNet 進行影像分類模型訓練了。
2.1 資料集準備
使用RecordIO tool(im2rec)建立兩個 .lst 檔案。一個檔案是用於訓練的資料集(75%)。另一個檔案是用於驗證的資料集(25%) 將.lst 檔案和 jpg 圖片檔案上傳到一個S3 bucket。
2.2 資料訓練與模型釋出
1.在 sagemaker 中建立一臺 Jupyter Notebook 例項,建立過程參考官方文件:https://docs.aws.amazon.com/sagemaker/latest/dg/howitworks-create-ws.html
2.下載實驗所需訓練步驟指令碼:/jupter/image-classify-jpg.ipynb,上傳至 Notebook 環境。
3.按照步驟執行 notebook,完成模型訓練,模型釋出。關於影像分類訓練的詳細說明可參考link。
指令碼執行完成後,會輸出模型的訓練結果,獲取更多的交易對來生成訓練樣本會得到更好的效果,在 2000 hacker 樣本和 2000 normal樣本的資料規模下,得到的模型效果:
train:accuracy = 0.9850000143051147
validation:accuracy = 0.9962120056152344
train:accuracy:epoch = 0.9850000143051147
validation:accuracy:epoch = 0.9962120056152344
模型部署為實時訪問端點:antiFraud-imageclassification-ep–2022-05-14-08-14-04。 可在後面的反欺詐業務流程中透過 Amazon SDK 實時呼叫,獲得推理結果。
3. 業務流程設計參考:
在證券交易所,可以選擇合適的觸發時機來觸發使用者是否有欺詐行為的推理過程。例如在每天使用者出金時實時推理或者每天晚上批次推理的方式。 我們按照實時推理的方式實現如下的業務流程。
1、從業務測傳送觸發訊息到 Amazon SQS,訊息體介面中具備基本的使用者 id 資訊。
2、Lambda 接收到 SQS 訊息,從交易資料庫獲取使用者的24小時交易資訊,獲取涉及的交易對的5分鐘 k 線資料,生成此使用者的交易行為影像,影像的格式也採用相同的處理:去掉 k 線顯示;去掉 x,y 軸刻度顯示;影像尺寸縮小到5英寸*2.1英寸,dpi=100。
3、生成的使用者交易影像 呼叫實時推理介面,我們就可以獲得推理結果,此使用者行為是否是欺詐行為,如果機率超過90%,我們寫入風控表。
4. Amazon Lambda 如何支援 python 圖形庫
在此業務流程的實現中,lambda 函式引用了 matplotlib,numpy 等庫,具備生成圖片的能力,要實現此能力需要採用如下幾個步驟。
1、理解 Lambda 的執行時環境,選擇不同的 CPU 架構,在安裝 Python 庫是需要下載不同的 WHL 包
2、建立 Lambda Layer,用於存放幾個公共類庫,建立 Layer 的指導參見Link
因為 Python 的類庫是需要區分安裝的平臺。windows,mac,linux 會有不同的安裝包,同時 CPU 的架構不同也有區分。ARM 架構與X86_64架構。從 https://pypi.org 搜尋需要下載的包,跳轉到下載頁面。我們需要下載的是 https://pypi.org/project/matplotlib/#files, 因為我建立的 lambda 是使用了 python3.9 執行環境,在 X86_64 架構下。因此我會選擇下圖中紅線的 WHL 包
mkdir layer
cd layer
mkdir pylibs
cd pylibs
wget https://files.pythonhosted.org/packages/e1/81/0a73fe71098683a1f73243f18f419464ec109acae16811bf29c5d0dc173e/matplotlib-3.5.2-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.whl
wget https://files.pythonhosted.org/packages/8d/d6/cc2330e512936a904a4db1629b71d697fb309115f6d2ede94d183cdfe185/numpy-1.23.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
unzip '*.whl'
pip3 install -t . pyparsing==2.4.7
pip3 install -t . cycler==0.10.0
pip3 install -t . pytz
pip3 install -t . packaging
rm *.whl
rm -rf __pycache__
cd ..
zip -r lambdalayer.zip pylibs
以上完成 layer zip 包的製作,參照建立 Lambda Layer 的步驟,將zip包部署為 Lambda Layer 即可。
此解決方案中的 Lambda 函式請參見
5. 總結
本文介紹了在證券領域,採用將使用者時間序列類行為轉換為影像,進而利用成熟的AI 影像分類演算法來實現使用者異常行為識別的方法。並且在連續對敲獲利的場景中獲得較好的效果。在解決方案中採用了 AMAZON SageMaker ,AMAZON Lambda,AMAZON SQS 快速完成了模型的訓練,部署及業務流程的構建。期望能夠給大家帶來啟發。
6. 參考資料
[1]https://mxnet.apache.org/versions/1.6/api/r/docs/api/im2rec.html
[2]https://matplotlib.org/stable/plot_types/index.html
本篇作者
Richard Lee
Amazon 解決方案架構師,負責基於 Amazon 雲端計算方案的架構諮詢和落地實施;有電信,金融行業經驗。加入 Amazon 前曾在華為軟體任職專案經理,技術架構師,在 cryptocurrency 領域創業公司擔任技術管理者。喜歡鑽研跨領域技術創新。
文章來源:https://dev.amazoncloud.cn/column/article/6309d40de0f88a79bcfae802