王沖,鄒瀟
(1.國網內蒙古東部電力有限公司信息通信分公司,呼和浩特010020;2.蘭州大學 數學與統計學院,蘭州730000)
電力大數據具有數量大、維度高,數據模式繁多等特征,在電力大數據的采集過程中,其不可避免的存在異常數據,對電力大數據清洗有很強的必要性[1]。國內外對電力大數據清洗研究主要有聚類和關聯分析[2]、條件函數依賴[3]、馬爾科夫模型[4]、DS證據理論[5]。大部分數據清洗技術都需要依賴數據模型本身構建異常數據識別規則,對檢測到的異常數據做刪除或均值填充處理,其缺點就是:破壞了數據的連續性、完整性、準確性。
針對以上電力大數據清洗難點,本文提出一種基于Spark框架的電力大數據清洗模型。相比一些電力大數據清洗模型,本文數據清洗模型減少人為干預,不需要根據數據關系模式設定識別規則,異常識別算法依賴于歷史數據中的正常樣本數據,且對異常數據修正是建立在其同一時間序列數據分析的基礎上,最終能夠實現對歷史或實時數據中的異常數據清洗。
電力大數據清洗是對檢測到的電力大數據中異常數據進行修正的過程,利用Spark框架構建電力大數據清洗模型時分為以下幾個階段:數據準備、正常簇樣本獲取、異常數據識別、異常數據修正、修正數據存儲。數據準備即將存儲在傳統關系型數據庫中的數據轉存在適合于大數據處理的非關系型數據庫中,然后加載到Spark的彈性分布式數據集(RDD)中;通過抽取一定數量的電力大數據樣本,應用層次聚類算法將其中的異常點抽取,獲取可用于實現邊界樣本異常識別算法的正常樣本簇;異常數據識別是建立在邊界樣本的基礎上,通過邊界樣本異常識別算法完成對電力大數據中的異常數據檢測;異常數據修正完成對檢測到的電力大數據中的異常數據的修復。清洗步驟如下:
(1)數據準備:將數據存儲在分布式文件系統HDFS中;
(2)從分布式文件系統上讀取數據并執行cache操作生成RDDs,將數據讀入到內存;
(3)利用改進的并行 CURE聚類算法獲取正常簇;
(4)從正常簇中選取邊界樣本數據;
(5)設計基于邊界樣本的異常數據識別算法,并對測試樣本識別異常數據;
(6)標記異常數據所在檢測樣本中的位置;
(7)對異常數據應用指數加權移動平均數進行修正;
(8)形成修正數據集并保存。
基于spark框架的電力大數據清洗模型框架如圖1所示。

圖1 基于spark框架的電力大數據清洗模型Fig.1 Data cleaning model for power big data based on Spark framework
本文接下來針對電力大數據清洗模型中的幾個核心步驟進行分析。首先詳細描述了改進CURE聚類算法獲取正常簇;其次介紹了邊界樣本的選擇過程,并對邊界樣本的異常數據識別算法進行了詳細分析;最后闡述了指數加權移動平均數對異常數據進行修正。本文在最后給出了實驗驗證及分析,并對本文工作進行總結并指出進一步的研究方向。
在對電力大數據進行異常識別時,由于電力大數據在采集過程中采集設備具有數據校驗功能,因此采集的數據大多為正常數據,異常數據較少,同時電力大數據的種類繁多導致不能直接構建單一規則或設定閾值進行異常識別[9]。直接對采集上來的電力大數據進行異常識別計算量大且識別效率低。因此可以從電力大數據歷史數據樣本中獲取正常樣本簇,在正常簇的邊界樣本集的基礎上對歷史或實時電力大數據進行異常識別,這種異常識別不依賴數據屬性閾值及屬性數學模式規則,同時可提高檢測的效率。
CURE聚類算法在對測試樣本進行聚類時通過消除離群點降低對聚類結果的影響,可通過CURE聚類算法對測試樣本進行聚類獲取正常樣本的聚類簇。CURE聚類算法分別在兩個階段對離群點進行刪除:第一階段是在聚類增長非常緩慢的類作為離群點刪除;第二階段是在聚類結束時將對象數據明顯少的類作為離群點刪除。但是通過CURE聚類算法對離群點進行刪除時存在以下兩個問題:
(1)很難對聚類過程中增長緩慢的類做界定,對這里離群點何時刪除,如何界定增長緩慢[7];
(2)對離群點刪除后因局部數據的分布特征存在掩蓋現象[8]。
針對CURE聚類算法剔除異常點時存在的問題,本文使用離群程度用于判定離群點,可有效解決增長緩慢的離群類難界定及局部離群點被淹沒的現象。相關定義如下:
定義1:對每個劃分的數據塊進行聚類,得到的數據簇表示為pi(mpi,wi),其中pi表示塊中第i個簇,表示為第i個簇的中心點,mpi表示每個中心點的權重值,wi是每個簇中數據的個數。因此每個劃分的數據塊可以使用若干個代表,pi稱為代表點。
定義2:設代表點的集合為P,每個代表點pi的中心點到簇外任意一點的偏差距離表示為離群程:

用歐氏距離表示一個點的偏離程度,當某點離簇中心點越遠,則離群程度值越大。
定義3:設離群程度集為D,定義離群程度判定值為:

定義4:設離群參數為,離群程度最小值為:

定義5:對于離群程度集D中任意,若,則所對應的代表點為離群點,其所在的簇中的數據即為離群數據。
算法基本思想是:首先從數據集中抽取一個隨機樣本,且樣本的選擇應該具有代表性;其次,將樣本劃分為若干個相同大小的數據集;對劃分完成首次聚類,得到m/q各簇,然后計算簇中每個點的離群程度判定值(AD)及離群參數(δ);刪除不滿足的離群點;然后對m/q個簇進行第二次聚類,同時刪除簇中樣本點明顯少的類,最后將所有剩余的數據點指定到最近的簇,完成聚類,得到正常簇樣本。
本文提出了基于邊界樣本的異常數據識別算法,首先通過獲取正常簇的邊界樣本集;然后根據異常數據識別算法檢測異常數據;最后標記異常數據并記錄所在位置。異常數據識別是對電力大數據中歷史或實時流數據中的異常數據檢測的過程,是建立在正常簇的邊界樣本的基礎上。每個正常簇的邊界樣本必須具有以下特點:(1)距離質心最遠;(2)分散在正常樣本的四周;(3)能夠代表正常樣本的形狀。
對于正常簇樣本如何保證其選擇的邊界樣本點能夠分散在正常簇樣本的四周,符合邊界樣本分布特點,下面給出其相關數學證明。
證明1:在一個三角形中,位于底邊中垂線上的頂點使得到其底邊兩點距離之和最短,且周長最短。圖2給出了三角形頂點在中垂線上和不在中垂線上的情況。

圖2 三角形頂點分布Fig.2 Triangle vertex distribution
在三角形TAB中,高為b,底邊|AB|=2a,頂點坐標為T(x,b),現在需要證明位于中垂線上的頂點T使得|TA|+|TB|值最小。根據公式可得:

公式兩邊求導數可得:

通過對公式求極值,當x=0時,可以得到distance(|TA|+|TB|)取得極小值,。
證明2:橢圓上一點M使得到橢圓上其他兩點C和B距離之和最大。
圖3給出了橢圓形數據節點的分布示意。

圖3 橢圓型數據點分布Fig.3 Elliptic data point distribution
長軸長為2m,短軸長為2n,|BC|=2a,設MN為距離BC最遠點所在的直線,|MN|=b,假設M`為距離邊BC兩個短點距離之和最大的點,根據證明可以得出。


通過式(7)可以看出M`不會出現在B、C半徑為周圍。因此如果選擇B、C作為代表點,M`也可以作為代表點,使得M`、B、C作為代表點足夠分散。
在對邊界樣本點進行選擇時,應保持邊界樣本點的特點,下面給出邊界樣本的選擇過程:
步驟1:計算簇的中心點,m為簇的點個數;
步驟2:第一個邊界樣本點為離中心點最遠的點,第二個邊界樣本點為離第一樣本點最遠的點,i為最大點距離下標,j第二個樣本點下標;
步驟3:接下來選擇的邊界樣本為離前兩個樣本點距離之和最大的點,直到選取的樣本點能夠代表聚類簇,則選擇停止。
正常簇的邊界樣本選擇過程如圖4所示。
式(4)~式(6)經過加減處理后可得:

圖4 正常樣本簇的邊界樣本選擇過程Fig.4 Selection process of border cluster sample of normal sample
設正常簇樣本的邊界樣本集為B={b1,b2,…,bn},正常簇樣本的邊界樣本集的獲取已在上文提及,正常簇樣本的識別半徑為rs。待測試樣本為T={t1,t2,…,tm},該測試樣本可為信息機房監測數據歷史樣本或信息機房實時監測數據。S為識別出的非異常監測信息,N為識別出的異常監測信息。
以邊界樣本集作為平面檢測器,異常信息識別規則表示為:

式中l1為待識別樣本點到邊界樣本的距離序列最小值;l2為待識別樣本到邊界樣本距離最遠點距離值;dm為待識別樣本到質心距離;r為正常簇樣本的識別半徑。
邊界樣本點分散在聚類簇的四周,能夠表示聚類簇的形狀。利用正常簇的邊界樣本來識別待檢測樣本,可以減少異常識別算法的計算量。針對異常信息識別規則,基于邊界樣本的異常識別算法的具體實現步驟如下:
算法輸入:待識別樣本T={ti,i∈[1,m],m為待識別樣本總數},邊界樣本集B={bj,j∈[1,n],n為邊界樣本總數},正常簇樣本ki的質心m;
算法輸出:異常數據信息Q;
步驟1:計算待識別樣本點ti到邊界樣本點bj的距離,構成距離序列dist,dist={d1,d2,…,dn};
步驟2:計算正常簇樣本的識別半徑rs;
步驟3:查找距離序列dist中最小值l1=min(di);
步驟4:在邊界樣本里查找與待識別樣本點ti距離最遠點bk,計算ti到bk距離l2=distance(ti,bk);
步驟5:如果l1>=l2,則待識別樣本點ti為異常數據;若l1<l2,則執行步驟6;
步驟6:計算ti到正常簇樣本ki的質心m的距離,dim=distance(ti,m);
步驟7:如果dim>rs,則待識別樣本點ti為異常數據;若dim<=rs,則待識別樣本點ti為正常數據;
步驟8:標記異常數據所在樣本中的位置,并將信息進行反饋;
步驟9:重復執行步驟1~步驟8,直到所有待識別樣本都識別完畢;
步驟10:輸出所有異常信息,并做下一步處理。
通過邊界樣本異常識別算法,在進行異常識別時,不必設置異常識別的閾值,同時可以避免因使用數據模式帶來的復雜性,可以提高異常識別的效率。
電力大數據是在一定時間周期內采集的數據的積累,電力大數據因其種類多,隨時間變化一般呈現三種規律:周期變化型數據、幅值變化較小型數據、緩慢增加型數據[10]。
對異常數據進行修正時要根據異常數據所在數據區間數據特點及異常數據表現形式,對不同類型的異常數據進行分析修正。對緩慢增加或衰減型電力大數據中的異常數據進行修正時,選取的參考數據序列為異常數據所在序列的[n,m]區間;對周期性變化型電力大數據中的異常數據進行修正時,選取的數據序列為包含異常數據在內的n個周期內的異常數據所在的時刻t的數據序列。
在對異常數據進行修正時,一般采用的方法是使用該異常數據所在序列的平均數進行代替。這時修正的值為,式中xi是對給定的一個權值。但是,某一序列值對后面序列值的影響作用是衰減的,而不是一直是。因此對異常數據進行修正采用指數加權移動平均數:

本文采用“Spark On Yarn”集群模式構建電力大數據清洗模型實驗環境,實驗采用6臺服務器組成數據清洗集群節點,其中一個節點為Master,其余五個節點分別為 Slave1-Slave5,每個節點的配置見表2。每個服務器節點采用Ubuntu-12.04.1操作系統,使用 Hadoop-2.6.0,Spark-1.3.1,Scala-2.10.5,JDK-1.7.0_79搭建節點的軟件環境。實驗平臺在Scala的Intellij Idea開發環境上進行開發實現,以hadoop的hdfs實現數據結果的存儲。
以某風電場風力發電監測數據作為數據清洗研究對象。該風力發電監測數據大小為5 GB,分別從5臺風力發電機采集,采集間隔為1 s,記錄了從2012年2月1日到2012年2月29日風力發電監測數據。
集群配置具體如下:
服務器類型:刀片型。服務器數量:6。
內存:6×128 GB。CPU核數:6×16。
網卡速率:1 Gbit/s。硬盤容量:6×1 T。
處理器類型:Intel Xeon 2.00 GHz。
本文將從異常識別的準確性、異常修正的效率對電力大數據清洗模型進行驗證分析。
實驗1:針對正常樣本獲取過程中離群點刪除算法,本文測試了幾種離群點檢測算法的檢測率和誤檢率,測試結果見表1。與Apriori算法相比,本文算法在檢測率相似的情況下,誤檢率較低。

表1 離群點檢測算法比較Tab.1 Comparison of outlier detection algorithms
實驗2:為了驗證電力大數據異常識別算法的檢測異常數據正確性,實驗保持集群節點數固定,不斷調整測試數據樣本大小,檢測算法的準確率,結果如表2所示。模型檢測到了大部分的異常數據。

表2 電力大數據異常識別算法的準確率測試Tab.2 Accuracy test of power big data anomaly identification algorithm
實驗3:為了驗證電力大數據清洗模型的高效性,測試了傳統單機數據清洗與基于Spark框架的電力大數據清洗模型不同數量的清洗所需要的時間。集群節點數固定,不斷調整待清洗數據樣本大小,測試數據清洗時間,測試結果見表3。

表3 單機及并行數據清洗清洗時間比較Tab.3 Cleaning time comparison of single with parallel data cleaning
實驗4:固定測試數據樣本大小,從中隨機抽取15 000條數據作為實驗測試樣本,正常簇樣本個數為5,每個正常樣本簇的邊界樣本個數分別為25,35,45,55,65,在待識別樣本數目固定的情況下,對上述測試樣本采用基于邊界樣本的異常信息識別方法進行異常信息識別,檢測正常樣本簇的邊界樣本個數對檢測結果的影響,結果如表4所示。

表4 基于邊界樣本的異常信息識別方法實驗結果Tab.4 Experimental results of information identifying based on abnormal samples boundaries
本文分析了電力大數據清洗過程中的若干難點,并針對電力大數據的特點及清洗難點提出了基于Spark框架的電力大數據清洗模型。該清洗模型具有以下特點:
(1)異常數據識別無須外源數據;
(2)異常數據識別及修正準確性高;
(3)利用并行Spark大數據處理框架,具有高效性。但是,本文在選取正常簇的邊界樣本時仍然存在問題,即何時達到最優邊界樣本數;其次,對異常數據的修正是建立在同一時間序列的樣本上,若該時間序列出現異常對異常數據修正的準確性仍會有影響。針對以上解決問題需要在以后的工作中進一步探討優化并完善電力大數據清洗模型。