在這篇文章中,我們將學習如何實現用自動編碼器來構建稀有事件分類器。我們將使用來自此處的真實稀有事件數據集。
背景
什么是極端罕見的事件?
在一個罕見的問題中,我們有一個不平衡的數據集。意思是,我們得到的陽性標記樣本少于陰性。在典型的罕見事件問題中,帶正號的標記數據約占總數的5-10%。在一個極端罕見的事件問題中,我們的標記數據不到1%。例如,在這里使用的數據集中,它約為0.6%。
這種極端罕見的事件問題在現實世界中非常普遍,例如,在制造、點擊或在線行業購買時的紙張斷裂和機器故障。
對這些罕見事件進行分類非常具有挑戰性,深度學習已被廣泛用于分類。但是,少量陽性標記樣本禁止深度學習應用。無論數據有多大,深度學習的使用都受到正面標記樣本數量的限制。
我們為什么還要費心使用深度學習呢?
這是一個合理的問題。為什么我們不應該考慮使用另一種機器學習方法?
答案是主觀的。我們總是可以采用機器學習方法。為了使其工作,我們可以從負面標記的數據中取樣,以獲得接近平衡的數據集。由于我們有大約0.6%的正標記數據,因此欠采樣將導致數據集的大小大約是原始數據大小的1%。機器學習方法,例如SVM或隨機森林仍然可以適用于處理此大小的數據集。但是,它的準確性會受到限制。我們不會利用剩下的99%的數據中的信息。
如果數據足夠,則深度學習方法可能更有效。它還允許通過使用不同的體系結構靈活地進行模型改進。因此,我們將嘗試使用深度學習方法。
在這篇文章中,我們將學習如何使用簡單的密集層自動編碼器來構建罕見的事件分類器。這篇文章的目的是演示一個用于極端罕見事件分類的自動編碼器的實現。我們將在用戶身上探索自動編碼器的不同架構和配置。如果您發現任何有趣的內容,請分享評論。
自動編碼器用于分類
用于分類的自動編碼器方法類似于異常檢測。在異常檢測中,我們學習了正常過程的模式。任何不遵循這種模式的東西都被歸類為異常。對于罕見事件的二進制分類,我們可以使用類似的方法使用自動編碼器(從此處[2]導出)。
快速修訂:什么是自動編碼器?
- 自動編碼器由兩個模塊組成:編碼器和解碼器。
- 編碼器學習過程的基本特征。這些特征通常在一個簡化的維度中。
- 解碼器可以從這些底層特征中重建原始數據。
圖1.自動編碼器的圖示
如何使用自動編碼器為稀有事件分類?
- 我們將數據分為兩部分:正標記和負標記。
- 帶負標記的數據被視為流程的正常狀態。正常狀態是指該過程無事件。
- 我們將忽略帶正號的數據,并僅在負標記數據上訓練自動編碼器。
- 這個自動編碼器現在已經學習了正常過程的特性。
- 一個訓練有素的自動編碼器將預測任何來自正常狀態的新數據(因為它將具有相同的模式或分布)。
- 因此,重建誤差會很小。
- 但是,如果我們嘗試從稀有事件重建數據,則自動編碼器會很困難。
- 這將使罕見事件期間的重構誤差變高。
- 我們可以捕獲如此高的重建誤差,并將其標記為罕見事件預測。
- 該過程類似于異常檢測方法。
履行
數據和問題
這是來自紙漿和造紙廠的二進制標記數據,用于斷紙。紙張斷裂是紙張制造中的一個嚴重的問題。單張紙張破損會造成數千美元的損失,而且工廠每天至少會看到一次或多次斷片。這導致每年數百萬美元的損失和工作危險。
由于過程的性質,檢測中斷事件是具有挑戰性的。正如[1]中所述,即使斷裂減少5%也會給工廠帶來顯著的好處。
我們的數據包含了15天內收集的大約18k行數據。列y包含二進制標簽,其中1表示分頁符。其余列是預測變量。大約有124個陽性標記樣本(~0.6%)。
代碼
導入所需的庫。
請注意,我們正在設置隨機種子的重現性的結果。
數據預處理
現在,我們讀取并準備數據。
df = pd.read_csv("data/processminer-rare-event-mts - data.csv")
這種罕見事件的目的是在碎片發生之前就預測它。我們將嘗試提前4分鐘預測休息時間。要構建此模型,我們將標簽向上移動2行(相當于4分鐘)。
df.y = df.y.shift(-2)
現在,我們將數據分為訓練集、有效集和測試集。然后我們將僅使用0的數據子集來訓練自動編碼器。
標準化
對于自動編碼器,通常最好使用自動編碼器的標準化數據(轉換為高斯、平均值為0和方差1)。
自動編碼器分類器
初始化
首先,我們將初始化自動編碼器架構。我們正在構建一個簡單的自動編碼器,應該探索更復雜的架構和其他配置。
訓練
我們將訓練模型并將其保存在一個文件中。保存經過訓練有素的模型是為將來的分析節省時間的好實踐。
圖2.自動編碼器訓練的損失
分類
在下文中,我們將展示如何將自動編碼器重建錯誤用于罕見事件分類。
如前所述,如果重構錯誤很高,我們會將其歸類為分頁符。我們需要確定這個門檻。
我們將使用驗證集來確定閾值。
圖3.閾值0.8應該在精確度和召回率之間提供合理的權衡
現在,我們將對測試數據進行分類。
我們不應該從測試數據估計分類閾值。這會導致過度擬合。
在圖4中,閾值線上方的橙色和藍色點分別代表真陽性和假陽性。 我們可以看到,我們有很多誤報。 為了看得更清楚,我們可以看到一個混淆矩陣。
圖5.測試預測的混淆矩陣
我們可以預測21次休息中的4次。大約25%的召回率,這對造紙業來說是一個很好的召回率。假陽性率約為7%。這對于工廠來說并不理想,但也不可怕。
盡管如此,這個模型還可以進一步改進,在假陽性率較小的情況下提高召回率。
Github存儲庫(GitHub – cran2367/autoencoder_classifier: Autoencoder model for rare event classification)
這里顯示了有帶注釋的整個代碼。
這里有什么可以做得更好的?
這是一個(多元)時間序列數據。我們沒有考慮數據中的時間信息/模式。在下一篇文章中,我們將探討使用RNN是否可行。我們將嘗試一個LSTM自動編碼器。
結論
我們研究了來自造紙廠的極端罕見事件二進制標記數據,以構建自動編碼器分類器。我們達到了合理的精度。這里的目的是演示如何使用基本的自動編碼器進行罕見的事件分類。我們將進一步開發其他方法,包括可以提取時間特征以獲得更高精度的LSTM自動編碼器。