林國順 王 野
(大連海事大學航運經濟與管理學院 遼寧 大連 116026)
2018年中國網絡購物交易規模可達8萬億元,網絡購物的用戶規模高達6.39億,網民使用率達74.8%。淘寶天貓移動月活躍用戶就高達1.04億[1]。如此龐大的數據量的高效使用已經成為互聯網公司面臨的一個關鍵性問題。為進一步分析網購消費者行為習慣特征,掌握網購消費者的行為意圖和真實需求,有必要對網購消費者的異常行為進行檢測研究。
目前,在異常檢測領域的相關研究中,主要的檢測方法有時間序列方法、基于統計的方法和基于距離的方法等[2]。其中:時間序列的方法對于高度復雜非線性的數據集的分類效果不佳;基于統計的方法常常需要許多的先驗條件才可以應用,往往實際的數據集難以符合這些前提條件;基于距離的方法在數據量大、數據類別分布極為不均衡的情境下分類效果不佳。
隨著網絡購物的不斷發展、網購人數的不斷增長,網購消費者的行為信息也越來越多,越來越復雜,所得到的數據往往呈現出極高維度的分類id所組成的屬性特征[3],導致常用的檢測方法實驗效果達不到預期,準確率低、精準率低,不能滿足實際應用中需求。
孤立森林作為一種無監督檢測算法,已經被應用到很多異常檢測領域,特別是異常用電方面[4]。國內外學者通過分析異常用戶的歷史行為信息為電力系統[4]、網絡攻擊[5]和網絡安全[6]等多個領域建立了孤立森林異常用戶行為檢測模型,并在實驗中取得了不錯的效果。
自編碼器(autoencoder,AE)是一種無監督的學習算法,主要用于數據的降維或者特征的提取[7],能夠解決多分類算法在處理高緯度數據集時分類效果差的問題,目前已經被國內外許多學者應用在了各個領域,尤其是圖像檢測領域[8],達到了不錯的實驗效果。
網購消費者行為數據是一種數據量龐大、數據維度很高且行為特征需要人為構建的一類數據。本文通過人工特征構造的方式提取了22維特征,使用主成分分析的方式對數據進行降維得到了最佳的降維參數5,并以此為依據搭建了一個含兩個編碼器的棧式堆疊自編碼神經網絡進行特征壓縮,克服了數據維度高的問題。以此輸出數據為訓練數據構建孤立森林模型對網購消費者異常行為進行檢測研究,加入主成分降維數據以及模糊C均值方法進行對比分析,來驗證檢測模型的合理性和有效性。
孤立森林(Isolation Forest)[9]不需要有標簽的數據進行模型訓練,屬于無監督方法。通過孤立異常數據點來實現數據異常檢測,具有線性時間復雜度和計算率高的特點,適用于處理大數據問題,但不適用于處理特別高維的數據問題。孤立森林的實現包括構建包含t個iTree的孤立森林和對數據進行檢測兩個步驟。
1.1.1構建包含t個iTree的孤立森林
孤立森林算法的目標是對數據集進行子采樣并構造iTree, 然后將多個iTree集成(ensemble)為iForest用以檢測異常數據, 其實現步驟如下。
步驟1在訓練數據中隨機地選取Ψ個樣本點作為子樣本集,作為樹的根節點。
步驟2隨機指定一個維度(特征),在當前節點數據中隨機產生一個切分點(p值產生于當前節點數據指定維度的數據大小范圍之間,min
步驟3根據此p值生成一個超平面,切割數據空間,將當前數據空間切分為兩個子空間,將指定維度中大于p值的數據放入左子空間,小于p值的數據放入右子空間。
步驟4在子節點中遞歸步驟2和步驟3,不斷構造形成新的子節點,直到子節點中只有一個數據項(無法進行分割)或者本棵iTree已經達到預先設定的高度(停止分割)。
通過上述方式構建了n棵iTree之后,就完成了iForest的訓練。構建過程如圖1所示。

圖1 i Forest構建過程
1.1.2對數據進行檢測
利用上述構建的iForest對測試數據集進行測試。對于一個訓練數據項x,令其遍歷每一棵iTree,然后計算x最終落在每棵樹的第幾層(樹的高度),記為h(x)。遍歷所有樹后,可以得到數據項x在每棵樹的平均高度值E(h(x))。獲得每個數據項的平均高度值后,根據預先設定的閾值,可以判斷低于此閾值的測試數據即為異常值。因為iTree的結構與二叉搜索樹相似,所以設置標準平均搜索長度c(Ψ),其計算式為:
c(Ψ)=2H(Ψ-1)-(2(Ψ-1)/Ψ)
(1)
H(x)=ln(x)+ζ
(2)
式中:ζ是歐拉常數。根據式(1)定義數據項x是異常值的評分s(x,Ψ),其計算式為:
(3)
式中:h(x)為數據項x在iTree中的高度;E(h(x))為數據項x在iForest中的平均高度。0
(1)E(h(x))越接近于0,s越接近于1,那么數據x越可能是異常值。
(2)E(h(x))越接近于n-1,s越接近于0,那么數據x越可能是正常值。
(3)E(h(x))越接近于c(Ψ),s越接近于0.5,如果所有數據的s都接近于0.5,那么整個數據集中不存在異常值[8]。
1.2.1傳統自編碼器
自編碼器(AE)是Rumelhart于1986年提出的一種特征表示學習方法[7],是一類典型的無監督神經網絡模型,由編碼器與解碼器共同組成,其輸入節點數與輸出節點數相同,在保持輸入與輸出的誤差盡可能小的前提下對隱含層特征進行提取[10],其結構如圖2所示。

圖2 自編碼器結構
圖2是一個單隱藏層的自編碼器,這個自編碼器的輸入是一個n維向量,經過編碼器進行壓縮,得到一個三維向量,再經過解碼器進行解碼得到與輸入向量相近或相等的n維向量。
按照圖2的結構,自編碼器的編碼解碼過程如下。
(1) 在編碼階段,編碼器將輸入數據映射到隱含層以提取輸入數據的特征:
Z=h(h)(W(h)X+b(h))
(4)
(2) 在解碼階段,解碼器將編碼器的輸出結果作為輸入數據將隱含層的特征映射到輸出層,實現輸入數據與輸出數據相等的結果:
Y=h(o)(W(o)Z+b(o))
(5)
式中:X是一個n維的數據項;W(h)、b(h)是編碼階段的權重項與偏置項;W(o)、b(o)是解碼階段的權重項與偏置項;h(h)、h(o)分別是編碼階段和解碼階段的激活函數,通常使用的函數是Sigmoid、tanh和ReLU等。
如果N表示樣本總量,n表示數據項的維度,那么損失函數定義如下:
(6)
為了防止模型過擬合,損失函數加入懲罰項后定義如下:
(7)
式中:λ為懲罰系數。
傳統自編碼器關于隱藏層有三種形式:壓縮結構、稀疏結構和等維結構。這三種結構是根據隱藏層中神經元個數進行劃分的[11]。圖2所示為壓縮結構,即原始數據維數大于隱藏層的維數。若原始數據維數小于隱藏層的維數則為系數結構。壓縮結構可以實現對原始數據進行壓縮,即降維的效果。前提條件是原始數據各個維度之間隱含某些聯系,那么自編碼神經網絡就可以識別出各個維度間的關聯性, 在輸出層重構原始數據,達到降維的效果。
1.2.2棧式堆疊自編碼器
棧式堆疊自編碼器(Stacked AutoEncoder,SAE)是Hinton對自編碼器進一步改進提出的一種網絡[7],堆疊自編碼網絡是一種由多個自編碼器連接而成的網絡,其前一層自編碼器的輸出作為其后一層自編碼器的輸入。編碼過程就是逐層來執行每一個編碼器,實現特征的逐層壓縮。同樣的解碼過程就是逐層執行每一個解碼器,實現數據的重構,其第一層編碼結構如圖2所示。
本文所采用的數據集是阿里巴巴天池大數據平臺提供的公開數據集,是淘寶的商品推薦系統的真實流量日志中收集得到的數據,數據包含從2018年9月15日到2018年9月24日共計10天832 858條記錄。存在一定量的異常數據,該數據集以各種屬性的id值形式給出,原始數據包括以下10個維度:時間戳;用戶ID;是否是異常值標簽;用戶在過去3天內單擊的品牌ID;用戶在過去3天內單擊的產品ID;用戶前一天搜索的類別ID;用戶在過去3天內單擊的項目ID;用戶在過去3天內查看但未單擊的項目ID;用戶在過去3天內單擊的店鋪ID;用戶在過去3天內查看但未單擊的店鋪ID。數據集完整不含有任何缺失值。
建立異常行為檢測模型需要對數據進行一定的處理。為避免反復出現的數據干擾模型構建,刪除統計數據時發現的冗余數據,刪除之后留下6 388位用戶的610 790條記錄。
由于原始數據所提供的特征全部是各種屬性的ID值,不能用于模型的輸入數據,需要將其轉化為數值型特征。具體步驟如下。
步驟1將原始數據的各種ID值轉化為ID的個數特征,記為F1-F7。
步驟2構建隨時間變化的原紀錄中的ID在新記錄中的消失率,記為F1_old-F7_old。
步驟3構建隨時間變化的新紀錄中的ID在原紀錄中的產生率,記為F1_new-F7_new。
步驟4提取用戶10天之內的總操作次數、每天每位用戶記錄的每一項不重復行為的重復次數得到二者之比,記為F_ratio。
步驟5提取記錄發生在哪天的特征,記為date。
結合以上提取的所有特征以及用戶ID共計24維,在此基礎上對新數據集進行去重處理,此時數據集共計179 747條記錄,24維特征。
由于孤立森林算法是一種具有線性時間復雜度、計算率高,適用于處理大數據問題,但不適用于處理特別高維的數據問題的算法,因此在進行模型擬合前,需要對當前數據集進行降維處理。
(1) 對于數據集采用主成分分析(PCA)的方法進行降維,經過Kaiser-Meyer-Olkin(KMO)對數據結構的總體分析,結果顯示為0.677,數據集符合主成分分析的基本要求,可以進行主成分提取。經過PCA提取主成分分析可以將數據集降維至5維,其可解釋總方差累計值達到了73%。
(2) 建立棧式堆疊自編碼器(SAE),構建一個包含兩個編碼器的神經網絡對數據集進行降維處理。因為要對數據集進行降維處理,需要對數據進行進一步的歸一化處理,針對F1-F7的特征做歸一化處理后建立如下網絡,參數如表1所示。

表1 棧式堆疊編碼器網絡參數表
(3) 建立模糊C均值聚類模型,進行分類。模糊C均值是Bezdek[12]提出的一種硬C均值聚類(Hard C-Means, HCM)的增廣算法,屬于無監督學習算法。模型參數設置聚成兩類,迭代停止條件設置為誤差小于0.005,最大的迭代次數設置為1 000。
(4) 建立孤立森林模型,進行分類。初始模型參數設置建立iTree時每次使用樣本數100,建立iTree樹100棵,數據集包含異常比率為0.2。
為了評價分類模型的好壞并且選擇最優的分類模型,需要一些評價指標作為衡量標準。針對相關的問題選擇合理的評價指標對于分類問題有著重要的作用。
在分類問題中最常用的分類指標是Accuracy,用來計算模型分類準確率的指標,它返回被正確分類的樣本比例。其公式如下:
(8)
式中:n為預測正確的樣本數;N為樣本總數。
由于本文的實驗是異常檢測,其類別數據有著極為不均衡的特點,如果僅靠分類準確率這一指標來判斷模型好壞,將會導致模型盡可能多的測試數據預測為正常值,導致模型失去意義。因此采用混淆矩陣對模型進行進一步的評價。
對于二分類問題而言,所有問題都可以被分為0和1兩類,混淆矩陣是一個2×2的矩陣,如表2所示,其中:T和F表示真實值是異常值和不是異常值;P和N表示檢測結果是異常值和不是異常值。

表2 混淆矩陣表
根據混淆矩陣衍生出來的指標有精準率,即在預測值為正例的樣本中預測正確的比例,其公式如下:
(9)
召回率,即真實值為正例的樣本中預測正確的比例,其公式如下:
(10)
實驗選用數據集中的前9天數據作為訓練集,第10天的數據作為測試集進行測試。利用棧式堆疊自編碼孤立森林對數據集進行異常行為檢測,同時加入主成分孤立森林、棧式堆疊自編碼模糊C均值、主成分模糊C均值進行結果對比。
本文采用Python語言TensorFlow環境,對數據集分別應用棧式堆疊自編碼孤立森林、主成分孤立森林、棧式堆疊自編碼模糊C均值和主成分模糊C均值進行分類結果比較。
為獲得合適的孤立森林參數,首先建立棧式堆疊自編碼器,棧式堆疊自編碼器的第二隱藏層作為降維后的特征輸出,其隱藏層神經元的個數確定為主成分分析降維后的維度5,對棧式堆疊自編碼神經網絡的參數選取首先迭代30 000次,得到圖3所示的優化曲線。

圖3 棧式堆疊自編碼神經網絡優化曲線
根據圖3,選擇迭代次數5 000作為最佳的網絡訓練參數。本文采用網格搜索的方法對孤立森林參數進行選取。在數據集上,分別將主成分降維后的數據集以及棧式堆疊自編碼降維后的數據集進行實驗,得到最佳參數如表3所示。

表3 最佳參數表
實驗前,對原始數據的分布進行考察,分別對全部原始數據繪制分布圖,得到圖4原始數據分布圖和圖5原始僅正常數據分布圖。可以看出異常數據對于數據的分布有很大的影響,經過游程檢驗,得到P值為150.667,即正常數據與異常數據明顯構成兩個總體,因此對于此數據集進行異常檢測是有意義的。

圖4 原始數據分布圖

圖5 原始僅正常數據分布圖
利用棧式堆疊自編碼神經網絡對原始數據進行降維處理,對降維后的數據繪制分布圖,得到圖6降維后的數據分布圖和圖7降維后的僅正常數據分布圖。從圖4-圖7可以看出,降維的操作保留了原始數據的大致特征,異常數據影響著數據的分布。

圖6 降維后的數據分布圖

圖7 降維后的僅正常數據分布圖
經過自編碼器-孤立森林模型檢測后,對檢測后的數據繪制分布圖,得到圖8模型檢測后的正常數據分布圖以及圖9模型檢測前后的正常數據分布圖。可以看出,經過模型檢測后的數據分布與檢測前剔除異常數據的分布幾乎完全擬合,可以看出模型的檢測是有效的。

圖8 模型檢測后的正常數據分布圖

圖9 模型檢測前后的正常數據分布圖
為了驗證模型的性能,將棧式堆疊自編碼孤立森林、主成分孤立森林、棧式堆疊自編碼模糊C均值和主成分模糊C均值以上四種分類模型進行比較分析。對于每一種方法均采用網格搜索方法進行參數調節,模型與指標衡量結果如表4所示。

表4 模型對比分析表
根據表4的結果對比,可以看到:棧式堆疊自編碼神經網絡(SAE)的降維效果整體優于主成分(PCA)的降維效果;棧式堆疊自編碼神經網絡與孤立森林結合的方式在指標準確率、精準率的衡量下效果最好。選擇這兩指標作為衡量標準,是因為在網購消費者異常行為檢測這一問題中,本文更加關注異常行為被正確識別出來的比率。
本文提出一種基于自編碼器-孤立森林的網購消費者異常行為檢測方法,采用棧式堆疊自編碼網絡作為降維方法,避免了高維的特征帶來的維度災難,充分地利用了深度學習網絡自動學習復雜特征表示的能力。利用PCA降維后的特征個數作為自編碼網絡的輸出層神經元個數,減少了自編碼網絡的訓練次數,加快了網絡訓練速度。實驗結果表明,該方法對網購消費者異常行為的檢測準確率達到了92%,檢測的精準率達到了82%。效果明顯優于PCA與孤立森林和模糊C均值結合的方法,具有較好的實用性以及實際運用價值。
下一步工作將從以下幾方面展開:分析經過模型識別出來的異常行為、判斷出現的原因、異常行為歸類、針對每一類異常行為的對策以及收集并使用更多網購消費者行為信息輸入模型,進一步提高分類準確率和精準率。