本文轉自:DeepHub IMBA
無監(jiān)督異常檢測作為機器學習領域的重要分支,專門用于在缺乏標記數(shù)據(jù)的環(huán)境中識別異常事件。本文深入探討異常檢測技術的理論基礎與實踐應用,通過Isolation Forest算法進行異常檢測,并結合LightGBM作為主分類器,構建完整的欺詐檢測系統(tǒng)。文章詳細闡述了從無監(jiān)督異常檢測到人工反饋循環(huán)的完整工作流程,為實際業(yè)務場景中的風險控制提供參考。
異常檢測是一種識別與正常數(shù)據(jù)模式顯著偏離的數(shù)據(jù)點的技術方法。這些異常點,也稱為離群值,通常表示系統(tǒng)中的異常狀態(tài)、潛在威脅或需要特別關注的事件。

異常檢測技術在多個關鍵領域發(fā)揮著重要作用。在金融領域,通過識別異常交易模式和支出行為來實現(xiàn)欺詐檢測;在制造業(yè)中,通過監(jiān)控質量指標的異常波動來保障產(chǎn)品質量;在醫(yī)療健康領域,通過檢測生理指標的異常變化來進行健康監(jiān)測。這些應用的核心目標是將異常事件標記出來,供相關專業(yè)人員進行進一步審查和處理,從而有效降低潛在風險。
根據(jù)數(shù)據(jù)標記情況和應用場景的不同,異常檢測方法可以分為監(jiān)督學習、半監(jiān)督學習和無監(jiān)督學習三大類別。
監(jiān)督異常檢測方法基于已標記的正常和異常樣本進行模型訓練。這種方法在擁有可靠標記數(shù)據(jù)且異常模式相對明確的場景中表現(xiàn)優(yōu)異。常用的算法包括貝葉斯網(wǎng)絡、k近鄰算法和決策樹等傳統(tǒng)機器學習方法。
半監(jiān)督異常檢測,也稱為潔凈異常檢測,主要用于識別高質量數(shù)據(jù)中正常模式的顯著偏差。這種方法適用于數(shù)據(jù)結構良好且模式相對可預測的應用場景,如欺詐檢測和制造質量控制等領域。
無監(jiān)督異常檢測方法通過尋找顯著偏離大部分數(shù)據(jù)分布的數(shù)據(jù)點來識別異常。當異常事件相對罕見或缺乏充分了解,且訓練數(shù)據(jù)中不包含標記異常樣本時,這種方法特別有效。典型算法包括K-means聚類和一類支持向量機等。
無監(jiān)督異常檢測的主要技術方法
無監(jiān)督異常檢測方法根據(jù)其技術原理可以分為統(tǒng)計方法、聚類方法、基于鄰近度的方法、時間序列分析方法和機器學習算法等幾個主要類別。
統(tǒng)計方法
統(tǒng)計方法通過分析數(shù)據(jù)的統(tǒng)計特性來識別異常觀測值。Z分數(shù)方法通過計算數(shù)據(jù)點距離均值的標準差倍數(shù)來量化異常程度,將遠離均值的數(shù)據(jù)點標記為異常。百分位數(shù)方法則通過設置基于分位數(shù)的閾值來識別落在正常范圍之外的數(shù)據(jù)點。這類方法最適用于具有明確統(tǒng)計分布特征的數(shù)據(jù),其中異常表現(xiàn)為對統(tǒng)計正態(tài)性的明顯偏離。
聚類方法
聚類方法通過將相似數(shù)據(jù)點分組來識別異常,其中異常通常表現(xiàn)為不屬于任何明確定義簇的孤立點。DBSCAN算法基于密度進行聚類,將位于低密度區(qū)域且不屬于任何簇的點視為異常。K-Means聚類則通過計算數(shù)據(jù)點到簇中心的距離來識別遠離所有簇中心的異常點。這類方法在正常數(shù)據(jù)形成明顯聚類結構的場景中效果最佳。
基于鄰近度的方法
基于鄰近度的方法通過測量數(shù)據(jù)點之間的距離或相似性來識別那些異常遠離其鄰居或偏離數(shù)據(jù)中心趨勢的點。馬哈拉諾比斯距離考慮特征間的相關性來計算數(shù)據(jù)點到分布中心的距離。局部離群因子(LOF)通過計算數(shù)據(jù)點相對于其鄰居的局部密度偏差來識別在密度變化區(qū)域中的離群值。這類方法特別適用于異常由其孤立性或與其他數(shù)據(jù)點的距離來定義的場景,以及處理復雜多維數(shù)據(jù)集時密度變化具有重要意義的情況。
時間序列分析方法
時間序列分析方法專門針對序列數(shù)據(jù)設計,基于時間模式來識別異常。移動平均方法通過檢測數(shù)據(jù)點對特定時期內(nèi)計算的移動平均的顯著偏離來識別異常。季節(jié)性分解方法將時間序列分解為趨勢、季節(jié)性和殘差成分,異常通常在無法通過趨勢或季節(jié)性解釋的殘差成分中被發(fā)現(xiàn)。這類方法最適用于觀察順序重要的序列數(shù)據(jù),以及異常表現(xiàn)為對預期趨勢、季節(jié)性或時間模式偏離的場景。
機器學習算法
機器學習算法通過從數(shù)據(jù)中學習復雜模式來進行異常檢測。Isolation Forest作為一種集成方法,通過構建樹狀結構來有效隔離異常。一類支持向量機通過在正常數(shù)據(jù)周圍定義邊界來將數(shù)據(jù)點分類為正常或異常。K近鄰算法基于到K個最近鄰居的距離來分配異常分數(shù)。自編碼器作為神經(jīng)網(wǎng)絡模型,通過學習數(shù)據(jù)的壓縮表示來檢測具有高重構誤差的異常。這類方法在復雜非線性模式定義正常行為且異常相對微妙的場景中表現(xiàn)最佳。
異常檢測與無監(jiān)督聚類的區(qū)別
雖然異常檢測和無監(jiān)督聚類都用于分析未標記數(shù)據(jù)中的模式,但兩者在目標和應用方式上存在根本差異。
以欺詐檢測為例,聚類方法有助于識別潛在欺詐交易的群組或不同的行為細分,其中某些群組可能比其他群組具有更高的風險水平。小規(guī)模的聚類簇并不一定表示欺詐行為,它們可能只是代表不同的用戶行為群組。
相比之下,異常檢測直接針對標記異常到足以需要調(diào)查的單個交易作為潛在欺詐,無論這些交易是否形成群組。這兩種方法在基本目標上存在差異,因此產(chǎn)生不同類型的輸出結果。
在目標定位上,聚類旨在發(fā)現(xiàn)未標記數(shù)據(jù)中的自然分組或細分,而異常檢測專注于識別顯著偏離正常模式的單個數(shù)據(jù)點。在輸出結果上,聚類為每個數(shù)據(jù)點分配聚類標識符,而異常檢測提供異常分數(shù)或二進制標志。
無監(jiān)督聚類的典型應用場景包括:識別協(xié)同作案的欺詐團伙,他們的個別交易可能不顯示強異常特征,但集體模式可疑;發(fā)現(xiàn)多個客戶共享同一聯(lián)系信息的貸款申請模式;幫助安全管理員識別本質上風險較高的商戶類型。
無監(jiān)督異常檢測的典型應用場景包括:檢測新型信用卡詐騙模式;識別員工對內(nèi)部系統(tǒng)的未授權訪問;發(fā)現(xiàn)合法客戶賬戶被入侵后的異常交易;檢測用戶在短時間內(nèi)從不同地理位置的登錄行為;識別使用一次性郵箱從相同IP范圍創(chuàng)建多個新賬戶的行為。
這些應用場景通常涉及尋找非常微妙的個別不規(guī)律性,在缺乏標記數(shù)據(jù)或先前示例的情況下,主要模型可能忽略這些不規(guī)律模式。
Isolation Forest算法原理
Isolation Forest是一種基于二叉樹結構的異常檢測算法,通過利用異常的固有特征來隔離異常點,而不是對正常數(shù)據(jù)進行建模。這種直觀且高效的方法使其成為異常檢測任務的熱門選擇。
算法的核心特征包括:采用集成方法構建多個隔離樹;通過異常點被隔離的難易程度來識別異常(需要更少的分割步驟來被分離的點更可能是異常);對高維數(shù)據(jù)具有相對快速和可擴展的處理能力;作為無監(jiān)督方法不需要標記數(shù)據(jù)進行訓練;直接針對離群值檢測而不分析正常點的分布;在處理具有眾多特征的高維數(shù)據(jù)集時表現(xiàn)優(yōu)異。
算法工作機制
Isolation Forest的工作原理可以通過以下流程來理解:首先,數(shù)據(jù)點需要遍歷森林中的每棵樹(樹1、樹2、...、樹T)。
圖:Isolation Forest架構以及數(shù)據(jù)點處理流程
在算法執(zhí)行過程中,h_i(x)表示數(shù)據(jù)點在第i棵樹中的路徑長度,即數(shù)據(jù)點從根節(jié)點到葉節(jié)點所經(jīng)過的邊數(shù)。路徑長度越短,表明數(shù)據(jù)點越可能是異常。
接下來,算法計算數(shù)據(jù)點在所有T個隔離樹中的平均路徑長度E[h(x)]:
其中T表示森林中隔離樹的總數(shù),h_i(x)表示數(shù)據(jù)點x在第i棵隔離樹中的路徑長度。
異常分數(shù)計算
Isolation Forest模型將平均路徑長度轉換為標準化的異常分數(shù)s(x):
公式中各參數(shù)的含義為:E[h(x)]表示x的平均路徑長度;N表示用于構建單棵樹的訓練子集中的數(shù)據(jù)點數(shù)量(子采樣大?。籧(N)表示標準化因子,代表在N個點的二叉搜索樹中不成功搜索的平均路徑長度:
其中m表示樣本大小。
異常分數(shù)的取值范圍為0到1,分數(shù)越高表示成為異常的可能性越大。最終,模型將計算得到的分數(shù)與預設閾值(γ)進行比較,如果分數(shù)低于閾值,則將該數(shù)據(jù)點標記為異常。
無標記數(shù)據(jù)環(huán)境下的評估方法
在實際應用中,由于缺乏標記數(shù)據(jù)或歷史記錄,無法直接確認檢測到的異常是否確實需要被標記。因此需要通過多種方式來評估來自Isolation Forest的異常標記結果。
人工參與循環(huán)評估
人工審查是評估異常標記的關鍵步驟,包括向欺詐調(diào)查專家展示標記的異常事件。調(diào)查專家對真實欺詐和誤報數(shù)量的反饋為異常檢測系統(tǒng)提供了寶貴的改進信息。關鍵評估問題包括:模型輸出是否導致實際調(diào)查發(fā)現(xiàn)真實欺詐,還是主要產(chǎn)生噪音;模型是否能夠持續(xù)一致地將相似類型的事件標記為異常。
半監(jiān)督評估方法
當擁有少量保留的標記數(shù)據(jù)集時(即使由于數(shù)量太少而不用于訓練),可以使用這些數(shù)據(jù)計算相關指標。Precision@k指標評估模型標記的前k個異常中真正欺詐的百分比。Recall@k指標類似于Precision@k,但專注于前k個標記中包含的實際欺詐案例數(shù)量。ROC AUC和PR AUC指標將異常分數(shù)視為連續(xù)變量并繪制相應的性能曲線。
合成異常注入測試
通過向干凈數(shù)據(jù)集中注入已知數(shù)量的合成異常,觀察模型成功識別的比例。這種方法有助于對不同無監(jiān)督算法進行基準測試比較。
這些評估方法的價值在于:生成新的標記數(shù)據(jù)用于重新訓練主要模型;創(chuàng)建新特征或規(guī)則來應對新興威脅;調(diào)整Isolation Forest超參數(shù)(如contamination參數(shù))以優(yōu)化檢測準確性。
實驗設計與實現(xiàn)
本節(jié)通過信用卡交易數(shù)據(jù)集演示異常檢測的完整周期,包括Isolation Forest調(diào)優(yōu)、人工反饋循環(huán)評估,以及使用新標記數(shù)據(jù)訓練LightGBM模型。
數(shù)據(jù)預處理
Isolation Forest與其他基于決策樹的模型類似,需要進行適當?shù)臄?shù)據(jù)預處理。從Financial Transactions Dataset: Analytics數(shù)據(jù)集加載數(shù)據(jù)后,對數(shù)值特征執(zhí)行列轉換以進行標準化和歸一化處理。
原始數(shù)據(jù)集結構:
經(jīng)過列轉換后的數(shù)據(jù):
[[-1.39080197 -0.03606896 0.04983562 -1.30648276 0.37940361 -1.67063883]
[-0.192827 -0.52484299 -0.42640285 -0.52439344 1.85293745 -0.46941254]
[ 0.66316843 -0.62795398 -0.5266197 -0.03136157 -0.46709455 -0.40267775]
...
[ 0.66316843 -0.96249769 -0.85253289 -1.06913227 1.39833658 -1.53716925]
[-1.56087595 -0.67663075 -0.57406012 0.17866552 -1.97198017 0.26467019]
[-0.3129254 -0.53653239 -0.43765848 -0.20775319 -1.59575877 0.06446581]]
數(shù)據(jù)形狀:(1000, 6)
Isolation Forest參數(shù)調(diào)優(yōu)
在沒有任何欺詐線索的初始階段,采用相對寬松的超參數(shù)設置,使模型具有較高的靈活性:
from sklearn.ensemble import IsolationForest
from sklearn.svm import OneClassSVM
isolation_forest = IsolationForest(
n_estimators=500, # 森林中樹的最大數(shù)量
contamination="auto", # 初始設置為auto(后續(xù)調(diào)整)
max_samples='auto',
max_features=1, # 每次分割僅考慮一個特征
bootstrap=True, # 使用bootstrap樣本確保魯棒性
random_state=42,
n_jobs=-1
)
y_pred_iso = isolation_forest.fit_predict(X_processed)
inliers_iso = X[y_pred_iso == 1]
outliers_iso = X[y_pred_iso == -1]
print(f"Isolation Forest detected {len(outliers_iso)} outliers.")
One-Class SVM對比實驗
為了進行性能比較,同時調(diào)優(yōu)一類支持向量機,設置相對寬松的nu值:
one_class_svm = OneClassSVM(
kernel='rbf',
gamma='scale',
tol=1e-7,
nu=0.1, # 寬松的nu值設置
shrinking=True,
max_iter=5000,
)
y_pred_ocsvm = one_class_svm.fit_predict(X_processed)
inliers_ocsvm = X[y_pred_ocsvm == 1]
outliers_ocsvm = X[y_pred_ocsvm == -1]
print(f"One-Class SVM detected {len(outliers_ocsvm)} outliers.")
實驗結果分析
實驗結果顯示:
Isolation Forest檢測到166個異常點
One-Class SVM檢測到101個異常點
圖:Isolation Forest(左)和One-Class SVM(右)的無監(jiān)督異常檢測結果對比
Isolation Forest在尋找容易被"隔離"的點方面表現(xiàn)更為積極,擅長發(fā)現(xiàn)新穎的、真正異常的點,即使這些點與主要數(shù)據(jù)簇的距離并不是非常遠。如果對"異常"的定義相對寬泛,這種特性可能導致檢測到更多的異常點。
One-Class SVM在正常數(shù)據(jù)周圍定義了更加結構化的邊界,將邊界之外的點標記為異常。這種方法相對保守,需要從"正常"流形更顯著的偏差才會被標記為異常。
人工反饋循環(huán)評估
為了實際演示評估過程,將標記的記錄按照以下四個類別進行逐一審查:
類別1(真正例,TP):模型標記的交易確實是欺詐性的。類別2(假正例,F(xiàn)P):模型標記的交易實際上是合法的,表示"虛假警報"。過多的假正例可能使分析師工作負擔過重并導致效率低下。類別3(新欺詐模式):識別出被捕獲的新類型欺詐,或以前錯過的欺詐類型,為不斷演變的威脅態(tài)勢提供新的洞察。類別4(合法但異常行為):交易看似合法但對該客戶或客戶群體確實異常,了解模型標記原因具有重要價值。
需要注意的是,假陰性(FN)記錄通常來自其他來源,如客戶投訴或退單,因為這些交易未被模型標記但后來發(fā)現(xiàn)是欺詐性的。在這個實驗中,由于重點關注模型標記的準確性,暫時排除了假陰性分析。在實際應用中,欺詐專家對記錄進行準確分類至關重要。
以下是一些標記記錄的示例和相應的人工審查結果:
圖:標記的交易記錄列表(合成數(shù)據(jù))和人工審查示例
以記錄#0為例,77美元的退款雖然不一定可疑或欺詐,但確實代表了該特定客戶的異常行為模式。記錄#67(底部)同樣顯示了大量退款行為。如果將此識別為新的欺詐方案,可以將其標記為類別3。
對于記錄#23、#25等,客戶年齡超過90歲。來自該年齡群體個人的如此高交易量通常是異常的,需要特別關注。
在166個潛在異常中,按類別分布情況為:類別1占94個,類別2占30個,類別3占10個,類別4占23個。
污染度參數(shù)調(diào)整
基于審查結果的分析顯示:總標記數(shù)為166個;真正例(TP)為94個;假正例(FP)為72個(166-94);標記集的精確度為TP/(TP+FP) = 94/166 ≈ 56.63%。
這表明雖然模型預測了16.6%的污染率,但該數(shù)據(jù)集的實際可觀察污染率為9.4%(1000個總樣本中的94個異常)。同時必須考慮模型在此實驗中未標記的假陰性(遺漏的異常),因此真實污染率可能大于等于9.4%。
基于這一發(fā)現(xiàn),在下一次迭代中將contamination參數(shù)設置為0.1(10%):
refined_isolation_forest = IsolationForest(
n_estimators=500,
contamination=0.1, # 更新為0.1
max_samples='auto',
max_features=1,
bootstrap=True,
random_state=42,
n_jobs=-1
)
訓練樣本標簽更新
另一個重要步驟是基于更新的數(shù)據(jù)集重新訓練主要模型。向原始DataFrame添加三個新列,將human_review類別1標記為is_fraud = true(1):
human_review:存儲審查類別(0,1,2,3,4),非異常情況為零
is_fraud_iforest:存儲來自Isolation Forest的初始異常檢測結果(二進制:1,-1)
is_fraud:存儲最終欺詐判定結果(二進制:0,1),其中1表示欺詐
is_fraud列作為目標變量用于訓練主要模型:
import pandas as pd
df_human_review = pd.read_csv(csv_file_path, index_col=1)
df_merged = df_new.merge(
df_human_review[['human_review']],
left_index=True,
right_index=True,
how='left'
)
df_merged['human_review'] = df_merged['human_review'].fillna(0).astype(int)
df_merged['is_fraud'] = (df_merged['human_review'] == 1).astype(int)
圖:更新后的數(shù)據(jù)框,右側三列為新添加的列
主要模型重新訓練
由于數(shù)據(jù)集存在類別不平衡問題,首先使用SMOTE技術對少數(shù)類進行過采樣:
from sklearn.model_selection import train_test_split
from imblearn.over_sampling import SMOTE
from collections import Counter
X = df_merged.copy().drop(columns='is_fraud', axis='columns')
y = df_merged.copy()['is_fraud']
X_tv, X_test, y_tv, y_test = train_test_split(X, y, test_size=300, shuffle=True, stratify=y, random_state=12)
X_train, X_val, y_train, y_val = train_test_split(X_tv, y_tv, test_size=300, shuffle=True, stratify=y_tv, random_state=12)
print(Counter(y_train))
smote = SMOTE(sampling_strategy={1: 75}, random_state=42)
X_train, y_train = smote.fit_resample(X_train, y_train)
print(Counter(y_train))
輸出結果:Counter({0: 370, 1: 30}) → Counter({0: 370, 1: 75})
然后使用更新的訓練樣本重新訓練主要模型(LightGBM)和基線模型:
from sklearn.ensemble import HistGradientBoostingClassifier
from sklearn.linear_model import LogisticRegression
# 主要模型
lgbm = HistGradientBoostingClassifier(
learning_rate=0.05,
max_iter=500,
max_leaf_nodes=20,
max_depth=5,
min_samples_leaf=32,
l2_regularization=1.0,
max_features=0.7,
max_bins=255,
early_stopping=True,
n_iter_no_change=5,
scoring="f1",
validation_fraction=0.2,
tol=1e-5,
random_state=42,
class_weight='balanced'
)
# 基線模型
lr = LogisticRegression(
penalty='l2',
dual=False,
tol=1e-5,
C=1.0,
class_weight='balanced',
random_state=42,
solver="lbfgs",
max_iter=500,
n_jobs=-1,
)
性能評估結果
使用訓練集、驗證集和測試集對主要模型與邏輯回歸基線進行評估。為了減少假陰性,將F1分數(shù)作為主要評估指標:
邏輯回歸(L2正則化):訓練性能0.9886-0.9790 → 泛化性能0.9719
LightGBM:訓練性能0.9133-0.8873 → 泛化性能0.9040
兩個模型都表現(xiàn)出良好的泛化能力,其泛化分數(shù)接近訓練分數(shù)。在這個比較中,帶有L2正則化的邏輯回歸是性能更優(yōu)的模型,在訓練數(shù)據(jù)和更重要的未見泛化數(shù)據(jù)上都達到了更高的準確性。其泛化性能(0.9719)優(yōu)于LightGBM(0.9040)。
合成異常注入測試
最后,創(chuàng)建50個合成數(shù)據(jù)點來測試模型的適應性:
from sklearn.metrics import f1_score
num_synthetic_fraud = 50
synthetic_fraud_X = generate_synthetic_fraud(num_synthetic_fraud, X_test, df_merged)
y_pred_test_with_synthetic = pipeline.predict(X_test_with_synthetic)
f1_test_with_synthetic = f1_score(y_test_with_synthetic, y_pred_test_with_synthetic, average='weighted')
測試結果表明,LightGBM在檢測合成欺詐方面達到了完美的F1分數(shù)1.0000,顯著優(yōu)于邏輯回歸(F1分數(shù):0.8764,精確度0.90,召回率0.84)。
雖然LightGBM完美識別了注入的欺詐案例,但在當前階段,帶有L2正則化的邏輯回歸可能為欺詐分類提供更好的整體平衡性能。
總結
本研究通過實驗演示了異常標記如何逐步完善異常檢測方案和主要分類模型在欺詐檢測中的應用。實驗結果表明,Isolation Forest作為一個強大的異常檢測模型,無需顯式建模正常模式即可有效工作,在處理未見風險事件方面具有顯著優(yōu)勢。
研究發(fā)現(xiàn),通過人工反饋循環(huán)可以有效提升模型性能,將無監(jiān)督異常檢測的結果轉化為有價值的訓練數(shù)據(jù)。這種方法特別適用于缺乏歷史標記數(shù)據(jù)但需要快速響應新興威脅的場景。
對于實際應用而言,自動化人工審查系統(tǒng)和開發(fā)創(chuàng)建欺詐交易規(guī)則的結構化方法將是對所提出方法的關鍵增強。未來的研究方向可以包括:建立更加智能化的人工反饋收集機制;開發(fā)自適應的閾值調(diào)整算法;集成多種異常檢測算法以提高檢測精度;構建實時異常檢測系統(tǒng)以應對動態(tài)變化的威脅環(huán)境。
作者:Kuriko IWAI
-
檢測系統(tǒng)
+關注
關注
3文章
974瀏覽量
43934 -
檢測
+關注
關注
5文章
4643瀏覽量
92852 -
機器學習
+關注
關注
66文章
8503瀏覽量
134635
發(fā)布評論請先 登錄
全面剖析用于人工智能isolation_forest算法技術

基于深度學習的異常檢測的研究方法
云計算平臺的異常探測

機器學習算法概覽:異常檢測算法/常見算法/深度學習

評論