李 國 袁 聞 王懷超
(中國民航大學計算機科學與技術學院 天津 300300)(中國民航大學中國民航信息技術科研基地 天津 300300)
隨著大數據與人工智能的發展,傳統的CRM系統融合了數據存儲、數據可視化分析、數據挖掘、商務智能等多種信息技術,各航空公司形成各種聯盟(例如天合聯盟、星空聯盟),屬于該聯盟的會員旅客搭乘他們聯盟下任何一家航空公司的航班均能獲得相應會員積分登記。他們所維護的CRM系統也存儲著海量的運營業務數據,尤其是針對本航空公司的會員旅客數據,其主要從PNR數據、票務數據、航班數據、旅客信息數據等多種數據源經過ETL加工形成,是航空公司重點進行商務分析、數據挖掘的數據。通過對此類數據分析,有助于航空公司的會員旅客進行用戶畫像,進而施行精準營銷,提供個性化服務,提高旅客對航空公司的忠誠度[1-3]。然而在現實生產環境中,因各業務數據系統互相通信時,由于網絡帶寬、延時等問題往往會造成數據記錄部分屬性缺失,而對每條缺失的記錄向上游數據系統搜尋真實值往往要花費較大的成本,因此挑選出信息量大、缺失較為嚴重的記錄進行真實值填補,同時對含有不影響業務分析的缺失項進行模型填補是十分必要的[4]。
傳統的缺失數據填補方法如MIC填補法、KNN填補法、均值填補法等僅從填補值與真實值差異方面考慮缺失數據填補問題,未考慮缺失數據的填補對后續進行相關旅客分類任務的影響。本文考慮缺失數據填補與后續相關分類挖掘任務具有相關性,將兩者視為整體同時進行處理,提出基于深度主動學習的多任務網絡模型。同時,考慮生產大數據環境結合Spark計算引擎的優勢,提出一種Spark環境下對缺失數據填補的運行機制,使得深度主動多任務網絡模型能在大數據環境下高效運行。
近些年來,學術界提出許多機器學習算法被用于同時學習多個任務,此類方法被稱為多任務學習。多任務學習是一類同時學習多個相關任務的機器學習算法,基本思想是在學習期間利用其他相關任務中包含的信息,更好或更快地學習任務。其優點是能同時并行學習多個任務,并且通過每個任務互相學習其他任務所附加的額外信息,能快速提升自身任務的學習性能[5-6]。主動學習有時也稱為查詢學習,是機器學習與人工智能領域的子分支。其關鍵點在于如何選取較少、高價值的數據進行標記用于訓練模型,使得模型獲得更高的精度。一般的監督學習系統要獲得更好的性能需要收集海量帶有標簽的數據用于訓練[7]。
多任務主動學習將多任務學習與主動學習兩者優勢相結合。每個任務在訓練集中具有少量標記數據和大量未標記數據。每個任務都選擇信息豐富的未標記數據以查詢的方式來主動獲取其標簽。
自編碼器是一種無監督學習神經網絡,由編碼器和解碼器兩部分構成。編碼器通過隱藏層將輸入樣本數據進行降維或升維,從而起到數據編碼的作用。解碼器將編碼器輸出的樣本再次通過隱藏層恢復到原來輸入編碼器時的維度,從而起到數據解碼的作用。降噪自動編碼器[7]是在自動編碼器的基礎上為防止模型過擬合問題從而對數據樣本加入噪聲。其基本結構如圖1所示。

圖1 降噪自編碼器
編碼過程為:
(1)
解碼過程為:

(2)
損失函數為:
(3)
網絡的參數為:
W={a,a′,b,b′}
式中:a表示編碼器網絡權重;b表示編碼器網絡偏置;a′表示解碼器網絡權重;b′表示解碼器網絡偏置。
SMOTE(Synthetic Minority Oversampling Technique)算法由Chawla等[8]于2002年提出,主要用于解決數據類別不平衡問題。不同于隨機過采樣法簡單對少數類進行復制采樣,SMOTE算法采用K近鄰的思想,通過式(4)在少數類樣本鄰域間生成新的少數類樣本,從而真正緩解了數據集類別不平衡,避免模型重復學習相同少數類樣本造成過擬合的問題[9]。
(4)

Spark于2009在UC Berkeley AMP lab誕生,是一種基于內存的大數據并行計算框架。它與Hadoop的MapReduce大數據計算方式不同,Spark充分利用內存優勢將數據集抽象為分布式彈性數據集RDD(Resident Distributed Data-set),整個數據處理過程將中間結果盡量緩存至內存中,不必像Hadoop需要將中間計算結果寫回至HDFS文件系統中,從而節省大量數據處理時間[9-10]。
本文主要利用Spark對缺失數據填補實現并行化處理。通過Spark將數據從HDFS文件系統并行讀取后,再利用廣播算子(Broadcast)將在本地環境用小量數據集已訓練的初始網絡模型廣播到各工作節點上。之后各工作節點利用讀取后的數據對模型進行參數迭代更新,并在每輪訓練結束時保留各工作節點模型在驗證集的性能。當模型的平均性能達到閾值時,訓練模型即結束。
結合多任務學習與降噪自編碼器的優勢,設計出一種基于降噪自編碼器的多任務學習網絡模型,網絡同時訓練缺失數據填補和類別預測兩大任務。通過共享參數層兩個任務之間進行相互學習從而達到整體提高的效果,模型對缺失數據精確填補有利于提高類別預測的性能,而類別預測任務的有效監督使得缺失數據的填補以解決民航常旅客價值分類為向導。對于缺失數據填補任務采用均方差損失函數,對于類別預測任務采用交叉熵損失函數,并通過一定的任務權重系數聯合訓練整體網絡。網絡架構如圖2所示。

圖2 多任務降噪自編碼器網絡架構
圖2中提出的架構由三部分組成:編碼器、解碼器、分類器。編碼器與解碼器構成堆疊降噪自編碼器。參考文獻[11]的架構,輸出1層采用Sigmoid激活函數,輸出經過解碼后的樣本特征,輸出2層采用Softmax激活函數輸出樣本對應各類別的概率值,中間隱藏層采用tanh激活函數。區別于傳統自動編碼器架構,受Kernal SVM啟發本文采用的架構在編碼階段與輸入層相比,連續隱藏層中的單元數更多,試圖將輸入數據映射到更高維子空間,將數據擴充有助于增加數據可分性以及增強數據恢復能力。從初始Xn維輸入開始,然后在每個連續的隱藏層添加a個節點,將維度增加a維。經過一些測試實驗,本文采用a=8能獲得穩定較好的結果。
在模型輸入階段,將輸入數據進行歸一化處理,使得數據數值在0和1之間,以加快模型在中小樣本量時收斂,同時引入噪聲,在輸入層隨機將輸入Xn中的一半分量設置為0,使得網絡能提取到更加抽象的特征,增強網絡魯棒性。因此,在模型啟動訓練階段,隨機將輸入部分分量設置為零,從而模擬完整樣本缺失,迫使模型學會在樣本損壞情況下恢復到樣本原始構造,即學習將缺失值恢復到原值的能力。對于降噪自編碼器部分,因為由多個隱藏層構成,因此采用逐層貪婪方式先對編碼器和解碼器網絡進行預訓練,最后配合分類器對整個模型參數進行微調。由于在初始化時需要完整的數據,因此在不完整樣本輸入前,對于缺失的連續變量使用相應的列平均值進行初始填補,對于缺失的分類變量使用屬性中出現最多的值作為初始填補。
在網絡中的分類器有兩大作用:(1) 用于民航常旅客價值分類任務以監督缺失數據填補任務,使得缺失數據的填補以解決民航旅客分類任務為向導。(2) 作為主動學習的樣本查詢函數,將未標注含缺失項的樣本通過網絡模型輸出各類別的概率,采用不確定度準則通過計算樣本不確定度,選擇不確定度高的樣本用于主動類別標記與缺失數據填補。原因在于,不確定度可反映模型對此樣本的分類能力,不確定度較高則說明當前模型對此樣本分類能力差,而缺失數據的填補與分類任務有較大的相關性,因此基于面向民航旅客分類的缺失數據填補的角度,可將樣本挑選出主動進行類別標注與缺失數據填補用于下一輪模型訓練,以提升網絡模型的整體性能。
將未標注數據集通過分類器輸出每個樣本的不確定度進行主動填補缺失值和類別標注[12-13],訓練過程如下:

2) 逐層無監督訓練編碼器網絡與解碼器網絡。
3) 引入分類器網絡,計算聯合損失對整體網絡進行微調,得到初始網絡模型。
4) While(模型在驗證集V上的性能指標未到達閾值α且未標記缺失數據集U不為空)
(2) 挑選大于不確定度閾值γ的未標記樣本進行人工專家標記與填補。
(3) 若所有樣本小于閾值γ,則對未標記樣本的不確定度進行降序排序,挑選排名占前5%的未標記含缺失數據樣本進行人工專家標記與填補。
(4) 將經過人工專家標記與填補的樣本從U中移除,并放入L中。
(5) 采用SMOTE算法對L進行類別平衡化處理得到新樣本集L*。
(6) 利用新樣本集L*對整體網絡模型進行參數更新。
(7) 將驗證集V輸入整體網絡模型,并輸出性能指標。
5) End While
整體模型以不確定度作為主動學習查詢準則,并根據最小錯誤準則,以驗證集的模型性能作為主動學習的停止準則,有效地將高價值且缺失嚴重的未標記樣本選出,并使用溯源法對訓練模型的缺失數據進行真實填補,進而提高模型整體性能。在每輪主動查詢標記后,通過SMOTE算法能有效緩解每次主動學習后新增已標記樣本導致數據集類別不平衡進而影響MLT-AL-DAE網絡模型的分類精度。
考慮生產大數據環境,結合Spark在處理大數據上的優勢,以及主動學習能有效對缺失數據進行篩選,降低進行人工溯源真實填補的成本,提出一種基于Spark的缺失數據主動填補機制。主要由以下步驟構成:
步驟1對輸入的民航旅客數據源進行數據完整度檢測,將輸入的數據分為完整已標注數據集Label Set和不完整或未標注數據unLabel Set。
步驟2對Label Set模擬隨機完全缺失后進行MLT-AL-DAE網絡模型初始預訓練。
步驟3對unLabel Set將其收集后上傳至HDFS文件系統中,用于后續主動學習。
步驟4采用Spark讀取HDFS上的unLabel Set和已預訓練的MLT-AL-DAE網絡模型并進行主動學習。
步驟5引入人工專家對經過主動學習挑選出來的數據記錄從unlabel Set中移除并進行類別標注和缺失數據填補。
步驟6將經過類別標注和缺失數據填補的數據合并至Label Set中,并從unLabel Set中刪除。
步驟7檢測MLT-AL-DAE網絡模型在驗證集中是否達到性能標準,若達到標準則停止主動學習訓練后續unLabel Set中數據記錄的通過MLT-AL-DAE進行缺失數據填補與類別標注,否則轉至步驟4對unLabel Set繼續進行主動學習。
開始對數據源進行數據質量檢測,參照生產大數據環境,采用HDFS系統[14-15]作為數據源,將含有缺失數據且未標記數據分出并上傳至HDFS系統中便于后續使用Spark進行處理。針對缺失數據采用主動學習進行判斷記錄的缺失數據是否適合模型填補,若記錄的缺失數據通過模型填補的質量較低即不確定度較高,則引入人工專家的方式采用溯源法向上游數據系統搜尋缺失數據的真實值進行填補,極大緩解了模型對缺失數據填補與數據真實值的差距。結合使用Spark在大數據環境下訓練MLT-AL-DAE模型具體過程如圖3所示。

圖3 使用Spark訓練過程
本實驗采用由中航信經過脫敏處理后某航空公司部分常旅客運營主數據。數據集大小約為21 GB,屬性維度為44維。數據集中,其與核心業務相關的主要屬性包括三個方面:(1) 旅客基本信息:包含旅客ID、旅客性別、旅客年齡、旅客工作所在城市、旅客價值等級、首次乘機時間等。(2) 旅客值機信息:包含旅客當前累積飛行次數、觀測窗口結束時間、旅客總飛行公里數、票價收入、平均折扣率、平均乘機時間間隔、末次飛行日期等。(3) 旅客積分信息:包含總基本積分、積分兌換次數、總精英積分、促銷積分等。實驗以旅客價值等級為數據集預測目標類別屬性,其余屬性作為數據集的特征屬性。
在刪除對模型無意義的旅客ID屬性同時,對數據集中的離散特征的標簽類別屬性如旅客性別、旅客工作所在城市等進行數值化處理。對時間點類型的屬性如入會時間、首次乘機時間等,將其與觀測窗口結束時間做減法,得到相應時間間隔,同時根據民航旅客價值度量LRFMC模型[16]對數據進行聚類分析后對旅客記錄進行類別標注,分為高價值重要保持旅客、潛在價值重要發展旅客、重要挽留旅客、一般價值旅客、低價值旅客共5類,最后得到41維屬性。
實驗編程語言為Scala和Python,采用DeepLearning4j作為大數據環境下的神經網絡訓練框架,實驗設備4核CPU、8 GB內存、40 GB硬盤的服務器,一共四臺,其中一臺作為Master節點,另外三臺作為slave節點組成集群。其中,對于MTL-AL-DAE網絡,使用Keras+TensorFlow框架完成搭建并完成本地初始化預訓練,并通過DeepLearnin4j中的Keras model import模塊導入在本地環境由Keras+TensorFlow框架訓練完成的初始網絡模型,之后使用DeepLearning4j和Spark對網絡模型在大數據環境下進行訓練。
經過多次預實驗,網絡采用4層架構,tanh函數作為編碼器與解碼器的激活函數,Softmax函數作為分類器輸出層激活函數,優化器采用Adam優化函數用于更新網絡參數??紤]到實現環境下高價值重要保持旅客樣本要遠低于一般價值旅客,數據集類別不平衡,因此MLT-AL-DAE模型在訓練時,對于分類任務以F值[17]進行度量,對于缺失數據填補任務以均方根誤差RMSE度量。
數據缺失機制分為完全隨機缺失、隨機缺失、非隨機缺失[18],考慮到完全隨機缺失變量的缺失與自身和其他變量無關,隨機度高且具有普適性,因此在模型性能對比實驗中,抽取68 000條未缺失數據記錄分別以0.2、0.3、0.4、0.5、0.6、0.7、0.8的缺失率模擬完全隨機缺失后,數據的缺失與數據的分布不存在規律性。之后,在本地訓練MLT-AL-DAE網絡模型,同時將模型與KNN填補法、MIC填補法[19-20]、DAE填補法[21]、MEAN填補法進行對比,結果如圖4所示。

圖4 缺失數據填補性能對比
從整體上看本文方法在缺失數據填補方面一直保持較穩定的效果。隨著缺失率不斷增大,均方根誤差與其他傳統方法相比較低,且差距明顯。尤其是在數據集缺失率較高的情況下,配合多任務學習能對數據進行有效填補。
缺失數據填補的最終目的是有助于后續的數據挖掘與分析。因此,度量在民航旅客價值分類中的效果也是從側面反映填補效果。在分類實驗中采用F值作為度量分類任務性能指標,并將經過傳統處理填補算法的數據采用SVM模型作為填補后數據集分類預測模型,綜合結果如圖5所示。

圖5 分類補性能對比
可以看出,本文提出的MLT-AL-DAE網絡模型在民航旅客價值分類上取得較好的效果,隨著缺失數據集缺失率不斷加大,與常規基于MIC的簡單填補法的性能差距不斷加大。這極大體現出多任務學習的優越性,通過任務之間的相關性,使得不同任務之間并行互相學習,從而提升模型整體性能。
為驗證本文設計的MLT-AL-DAE模型在多任務學習上的有效性,將MLT-AL-DAE模型的輸出填補值對缺失數據進行填補后,分別采用邏輯回歸(LR)、支持向量機(SVM)、最近鄰分類器(KNN)進行旅客價值分類任務,與MLT-AL-DAE模型在分類任務的輸出進行對比,實驗采用F值進行度量。實驗結果如圖6所示。

圖6 多任務學習有效性驗證實驗對比
如圖4-圖6所示,MLT-AL-DAE模型性能最優,采用SVM分類器比LR、KNN分類器性能更好,原因在于經過SMOTE類別平衡化處理的樣本會產生一定的噪聲樣本,而SVM分類器將樣本映射到相應空間找到最優分類面的方式進行分類,對噪聲樣本不敏感,而LR、KNN分類器則對噪聲樣本較為敏感。相對于先進行缺失數據填補,再進行分類任務的傳統方法,MLT-AL-DAE模型通過共享降噪自編碼器特征提取層進行缺失數據填補與分類任務的方式,模型能學習到數據集各自任務中更高維、更抽象的特征,通過互相學習各自任務中的額外信息,最終各自任務互相提升,極大體現出多任務學習的有效性,從而達到缺失數據的填補以民航旅客流失分類任務為導向的效果。
為了進一步驗證主動學習的有效性,將MLT-AL-DAE模型分別進行主動學習訓練和全數據量訓練。以缺失率0.2、0.4、0.6為例,在主動填補中,訓練集10 000條設為已標注訓練集,剩余設為未標注訓練集。同時在實驗過程中,對MLT-AL-DAE模型在主動學習停止時記錄模型訓練時通過主動學習進行標注和缺失數據填補的樣本數量。兩種訓練方式在缺失數據填補和旅客價值分類性能對比結果如表1-表3所示。

表1 MLT-AL-DAE與MLT-DAE缺失數據填補性能對比

表2 MLT-AL-DAE與MLT-DAE旅客價值分類性能對比

表3 主動學習停止時主動學習樣本數量
由表1和表2可以得出,全量訓練與主動學習相比,主動學習在缺失數據填補任務中保持穩定,在旅客價值分類任務中有一定的提升。由表3可知,隨著數據集的缺失率不斷提升,主動學習為達到相應停止準則需要的標記樣本數也不斷提升。在通過分類器網絡模塊輸出的不確定度,模型能有效挑選出具有高價值、信息量大的樣本進行人工專家標記與填補,進一步提升了訓練集的數據質量,從而進一步減少模型進行缺失數據填補與分類任務所帶來的誤差,使得模型能提前到達模型最優值同時所需訓練樣本數量減少,在實際生產環境中有助于識別缺失數據較為嚴重的數據記錄降低數據標注與填補成本。
為驗證基于Spark主動填補機制在大數據環境下的優勢,將初始訓練好的網絡模型上傳至HDFS文件系統中,同時以缺失率0.4分別對1 GB、5 GB、10 GB、15 GB大小的數據模擬完全隨機缺失,最后分別采用在Spark集群和單機進行缺失數據主動填補并統計模型訓練耗時,統計結果如圖7所示。

圖7 耗時對比統計
可以看出,當數據集大小為1 GB或小于1 GB時,由于Spark集群啟動初始化和對數據集和模型進行廣播以及緩存數據需要進行耗費一定的時間,同時讀寫HDFS也需要花費一定的時間,而數據量太小,集群優勢不明顯,因此通過Spark集群訓練模型耗時要高于單機訓練。然而,當數據量達到5 GB及以上時,Spark發揮集群的優勢,快速對主動挑選出高價值、未標記樣本進行真實值標注,使模型精度能提前達到閾值,進而節省大量時間,隨著數據集數據量不斷升高,Spark集群訓練優勢呈現不斷加大趨勢。
本文針對民航常旅客服務主數據記錄存在缺失值較多且數據類別不平衡的情形,首先設計出一種基于降噪自編碼器的多任務主動學習網絡模型MLT-AL-DAE,同時并行解決民航常旅客服務缺失數據填補和旅客價值分類問題,并能有效識別出缺失項對旅客價值分類影響較大的記錄進行主動學習填補。其次,考慮生產大數據環境下,數據量大單機訓練耗時較長的問題,引入Spark計算引擎,提出一種基于Spark環境下的缺失數據主動填補機制,使得MLT-AL-DAE模型能在大數據環境下發揮應有的優勢。通過對比實驗表明,相比傳統處理方法,本文方法模型考慮到現實生產環境,在缺失值填補和分類預測任務中有著較好的性能,在提升分類精度和數據質量的前提下,同時能降低數據標注和缺失數據人工溯源填補的成本,因此具有較大的工程應用價值。