曲朝陽,張藝競,王永文,趙瑩
(東北電力大學(xué) 信息工程學(xué)院,吉林 吉林 132012)
隨著《中國電力大數(shù)據(jù)發(fā)展白皮書》[1]的發(fā)布,帶動了電力行業(yè)內(nèi)對能源大數(shù)據(jù)研究熱潮,準(zhǔn)確、可靠是保證能源大數(shù)據(jù)分析處理精準(zhǔn)性的基本要求,因此對能源大數(shù)據(jù)質(zhì)量提出了更高的要求,能源大數(shù)據(jù)清洗可有效保證能源大數(shù)據(jù)質(zhì)量的正確性、完整性、一致性、可靠性。
能源大數(shù)據(jù)具有數(shù)量大、維度高,數(shù)據(jù)模式繁多等特征,在能源大數(shù)據(jù)的采集過程中,其不可避免的存在異常數(shù)據(jù),對能源大數(shù)據(jù)清洗有很強的必要性。國內(nèi)外對能源大數(shù)據(jù)清洗研究主要有聚類和關(guān)聯(lián)分析[2]、條件函數(shù)依賴[3]、馬爾科夫模型[4]、DS證據(jù)理論[5]。大部分?jǐn)?shù)據(jù)清洗技術(shù)都需要依賴數(shù)據(jù)模型本身構(gòu)建異常數(shù)據(jù)識別規(guī)則,對檢測到的異常數(shù)據(jù)做刪除或均值填充處理,破壞了數(shù)據(jù)的連續(xù)性、完整性、準(zhǔn)確性。綜合國內(nèi)外研究,能源大數(shù)據(jù)清洗難點表現(xiàn)在以下幾點:(1)能源大數(shù)據(jù)數(shù)據(jù)模型繁多,數(shù)據(jù)種類各異,不宜直接構(gòu)建能源大數(shù)據(jù)異常數(shù)據(jù)識別規(guī)則。文獻(xiàn)[3]提出一種基于hadoop的不一致數(shù)據(jù)檢測和修復(fù)算法,但是在預(yù)處理階段,需要用戶給定在屬性集上的一個關(guān)系模式的條件函數(shù)依賴CFD。這種方法需要人為因素干預(yù),且能源大數(shù)據(jù)關(guān)系模式復(fù)雜、數(shù)據(jù)信息表樣式繁多,很難為每一個關(guān)系模式劃定條件函數(shù)依賴;(2)正常數(shù)據(jù)多,異常數(shù)據(jù)少,不同類型的能源大數(shù)據(jù)很難通過設(shè)定閾值來進(jìn)行簡單異常識別;(3)異常識別將異常數(shù)據(jù)剔除,破壞了數(shù)據(jù)的連續(xù)性;(4)對異常數(shù)據(jù)進(jìn)行重構(gòu)時,需要依賴外源數(shù)據(jù)。文獻(xiàn)[6]提出了基于四分位原理的異常識別和基于風(fēng)電出力模式性的重構(gòu)方法,這種異常識別方法容易剔除未識別的正常數(shù)據(jù),對缺失的風(fēng)電功率數(shù)據(jù)在進(jìn)行構(gòu)建時需要依賴臨近的風(fēng)電場功率數(shù)據(jù),很容易造成誤差。
針對以上能源大數(shù)據(jù)清洗難點,本文提出一種基于Spark框架的能源大數(shù)據(jù)清洗模型。模型的基本思想是:首先,用改進(jìn)的CURE聚類算法對測試樣本進(jìn)行聚類,剔除掉測試樣本中的離群點,獲取樣本點正常的簇,并根據(jù)邊界樣本獲取方法獲取邊界樣本集;然后設(shè)計邊界樣本的異常識別算法檢測歷史或?qū)崟r流能源大數(shù)據(jù)中的異常數(shù)據(jù);最后通過指數(shù)加權(quán)移動平均數(shù)對檢測出的異常數(shù)據(jù)進(jìn)行修正,從而達(dá)到對能源大數(shù)據(jù)中異常數(shù)據(jù)清洗目的。相比一些能源大數(shù)據(jù)清洗模型,本文數(shù)據(jù)清洗模型減少人為干預(yù),不需要根據(jù)數(shù)據(jù)關(guān)系模式設(shè)定識別規(guī)則,異常識別算法依賴于歷史數(shù)據(jù)中的正常樣本數(shù)據(jù),且對異常數(shù)據(jù)修正是建立在其同一時間序列數(shù)據(jù)分析的基礎(chǔ)上,最終能夠?qū)崿F(xiàn)對歷史或?qū)崟r數(shù)據(jù)中的異常數(shù)據(jù)清洗。
能源大數(shù)據(jù)清洗是對檢測到的能源大數(shù)據(jù)中異常數(shù)據(jù)進(jìn)行修正的過程,利用Spark框架構(gòu)建能源大數(shù)據(jù)清洗模型時分為以下幾個階段:數(shù)據(jù)準(zhǔn)備、正常簇樣本獲取、異常數(shù)據(jù)識別、異常數(shù)據(jù)修正、修正數(shù)據(jù)存儲。數(shù)據(jù)準(zhǔn)備即將存儲在傳統(tǒng)關(guān)系型數(shù)據(jù)庫中的數(shù)據(jù)轉(zhuǎn)存在適合于大數(shù)據(jù)處理的非關(guān)系型數(shù)據(jù)庫中,然后加載到Spark的彈性分布式數(shù)據(jù)集(RDD)中;通過抽取一定數(shù)量的能源大數(shù)據(jù)樣本,應(yīng)用層次聚類算法將其中的異常點抽取,獲取可用于實現(xiàn)邊界樣本異常識別算法的正常樣本簇;異常數(shù)據(jù)識別是建立在邊界樣本的基礎(chǔ)上,通過邊界樣本異常識別算法完成對能源大數(shù)據(jù)中的異常數(shù)據(jù)檢測;異常數(shù)據(jù)修正完成對檢測到的能源大數(shù)據(jù)中的異常數(shù)據(jù)的修復(fù)?;赟park框架的能源大數(shù)據(jù)清洗模型框架(見圖1),清洗步驟如下:
(1)數(shù)據(jù)準(zhǔn)備:將數(shù)據(jù)存儲在分布式文件系統(tǒng)HDFS中;
(2)從分布式文件系統(tǒng)上讀取數(shù)據(jù)并執(zhí)行cache操作生成RDDs,將數(shù)據(jù)讀入到內(nèi)存;
(3)利用改進(jìn)的并行CURE聚類算法獲取正常簇;
(4)從正常簇中選取邊界樣本數(shù)據(jù);
(5)設(shè)計基于邊界樣本的異常數(shù)據(jù)識別算法,并對測試樣本識別異常數(shù)據(jù);
(6)標(biāo)記異常數(shù)據(jù)所在檢測樣本中的位置;
(7)對異常數(shù)據(jù)應(yīng)用指數(shù)加權(quán)移動平均數(shù)進(jìn)行修正;
(8)形成修正數(shù)據(jù)集并保存。

圖1 基于Spark框架的能源大數(shù)據(jù)清洗模型
文中接下來針對能源大數(shù)據(jù)清洗模型中的幾個核心步驟進(jìn)行分析介紹。首先詳細(xì)描述了改進(jìn)CURE聚類算法獲取正常簇;其次介紹了邊界樣本的選擇過程,并對邊界樣本的異常數(shù)據(jù)識別算法進(jìn)行了詳細(xì)分析;最后闡述了指數(shù)加權(quán)移動平均數(shù)對異常數(shù)據(jù)進(jìn)行修正。本文在最后給出了實驗驗證及分析,并對本文工作進(jìn)行總結(jié)并指出進(jìn)一步的研究方向。
在對能源大數(shù)據(jù)進(jìn)行異常識別時,由于能源大數(shù)據(jù)在采集過程中采集設(shè)備具有數(shù)據(jù)校驗功能,因此采集的數(shù)據(jù)大多為正常數(shù)據(jù),異常數(shù)據(jù)較少,同時能源大數(shù)據(jù)的種類繁多導(dǎo)致不能直接構(gòu)建單一規(guī)則或設(shè)定閾值進(jìn)行異常識別。直接對采集上來的能源大數(shù)據(jù)進(jìn)行異常識別計算量大且識別效率低。因此可以從能源大數(shù)據(jù)歷史數(shù)據(jù)樣本中獲取正常樣本簇,在正常簇的邊界樣本集的基礎(chǔ)上對歷史或?qū)崟r能源大數(shù)據(jù)進(jìn)行異常識別,這種異常識別不依賴數(shù)據(jù)屬性閾值及屬性數(shù)學(xué)模式規(guī)則,同時可提高檢測的效率。
如表1所示,CURE聚類算法在對測試樣本進(jìn)行聚類時通過消除離群點降低對聚類結(jié)果的影響,可通過CURE聚類算法對測試樣本進(jìn)行聚類獲取正常樣本的聚類簇。CURE聚類算法分別在兩個階段對離群點進(jìn)行刪除:第一階段是在聚類增長非常緩慢的類作為離群點刪除;第二階段是在聚類結(jié)束時將對象數(shù)據(jù)明顯少的類作為離群點刪除。但是通過CURE聚類算法對離群點進(jìn)行刪除時存在以下的問題:(1)很難界定第一階段的增長速度快慢的類[7];(2)對離群點刪除后因局部數(shù)據(jù)的分布特征存在掩蓋現(xiàn)象[8]。

表1 基于改進(jìn)CURE算法正常簇樣本獲取算法
針對CURE聚類算法剔除異常點時存在的問題,本文使用離群程度用于判定離群點,可有效解決增長緩慢的離群類難界定及局部離群點被淹沒的現(xiàn)象。相關(guān)定義如下:
定義1:對每個劃分的數(shù)據(jù)塊進(jìn)行聚類,得到的數(shù)據(jù)簇表示為,其中表示塊中第i個簇,表示為第i個簇的中心點,表示每個中心點的權(quán)重值,是每個簇中數(shù)據(jù)的個數(shù)。因此每個劃分的數(shù)據(jù)塊可以使用若干個代表,稱為代表點。
定義2:設(shè)代表點的集合為P,每個代表點的中心點到簇外任意一點的偏差距離表示為離群程度:
(1)
用歐氏距離表示一個點的偏離程度,當(dāng)某點離簇中心點越遠(yuǎn),則離群程度值越大。
定義3:設(shè)離群程度集為D,定義離群程度判定值為:
(2)
定義4:設(shè)離群參數(shù)為,離群程度最小值為,
(3)
定義5:對于離群程度集D中任意di,若di所對應(yīng)的代表點pi為離群點,其所在的簇中的數(shù)據(jù)即為離群數(shù)據(jù)。
本文提出了基于邊界樣本的異常數(shù)據(jù)識別算法,首先通過獲取正常簇的邊界樣本集;然后根據(jù)異常數(shù)據(jù)識別算法檢測異常數(shù)據(jù);最后標(biāo)記異常數(shù)據(jù)并記錄所在位置。異常數(shù)據(jù)識別是對能源大數(shù)據(jù)中歷史或?qū)崟r流數(shù)據(jù)中的異常數(shù)據(jù)檢測的過程,是建立在正常簇的邊界樣本的基礎(chǔ)上。每個正常簇的邊界樣本必須具有以下特點:(1)距離質(zhì)心最遠(yuǎn);(2)分散在正常樣本的四周;(3)能夠代表正常樣本的形狀。
下面給出一個正常簇的邊界樣本定義:距離簇質(zhì)心最遠(yuǎn)的樣本點,且能夠代表整個簇的形狀,一個聚類簇的邊界樣本節(jié)點是由自己樣本節(jié)點決定的,與其他樣本節(jié)點無關(guān),稱這類樣本節(jié)點為邊界樣本。
在對邊界樣本點進(jìn)行選擇時,應(yīng)保持邊界樣本點的特點,下面給出邊界樣本的選擇過程:
步驟1:計算簇的中心點(n1+n2+...+nm)/m,ni為簇的點,m為簇的點個數(shù);
步驟2:第一個邊界樣本點為離中心點最遠(yuǎn)的點,第二個邊界樣本點為離第一樣本點最遠(yuǎn)的點。
步驟3:接下來選擇的邊界樣本為離前兩個樣本點距離之和最大的點,直到選取的樣本點能夠代表聚類簇,則選擇停止。正常簇的邊界樣本選擇過程,為每步選出的邊界樣本點(見圖2)。

圖2 正常樣本簇的邊界樣本選擇過程
邊界樣本點分散在聚類簇的四周,能夠表示聚類簇的形狀。利用正常簇的邊界樣本來識別待檢測樣本,可以減少異常識別算法的計算量。基于邊界樣本的異常數(shù)據(jù)識別算法步驟:
步驟1:計算待測樣本T到邊界樣本bi的距離,T={t1,t2,…,tm},D={d1,d2,…,dn};
步驟2:找到最小距離dmin,邊界樣本點為l1=dmin=min(di);
步驟3:找到離邊界樣本最遠(yuǎn)的點dj,計算到的距離l2=distance(ti,dj);
步驟4:如果l1≥l2,則ti為異常樣本點;若l1
步驟5:標(biāo)記異常數(shù)據(jù)的所在檢測樣本中的位置。
通過邊界樣本異常識別算法,在進(jìn)行異常識別時,不必設(shè)置異常識別的閾值,同時可以避免因使用數(shù)據(jù)模式帶來的復(fù)雜性,可以提高異常識別的效率。
能源大數(shù)據(jù)是在一定時間周期內(nèi)采集的數(shù)據(jù)的積累,能源大數(shù)據(jù)因其種類多,隨時間變化一般呈現(xiàn)三種規(guī)律:周期變化型數(shù)據(jù)、幅值變化較小型數(shù)據(jù)、緩慢增加型數(shù)據(jù)[9]。異常數(shù)據(jù)在對能源大數(shù)據(jù)時間序列的影響表現(xiàn)為兩種形式:第一種是加性異常點,這類異常點只影響異常點發(fā)生的那一時刻上的序列,而不影響該時刻后的序列值。第二種是更新異常點,造成這種異常點的產(chǎn)生不僅作用于在該時刻,而且還會影響該時刻后的一段時間內(nèi)的所有測量值。
對異常數(shù)據(jù)進(jìn)行修正時要根據(jù)異常數(shù)據(jù)所在數(shù)據(jù)區(qū)間數(shù)據(jù)特點及異常數(shù)據(jù)表現(xiàn)形式,對不同類型的異常數(shù)據(jù)進(jìn)行分析修正[10]。對緩慢增加或衰減型能源大數(shù)據(jù)中的異常數(shù)據(jù)進(jìn)行修正時,選取的參考數(shù)據(jù)序列為異常數(shù)據(jù)所在序列的[n,m]區(qū)間;對周期性變化型能源大數(shù)據(jù)中的異常數(shù)據(jù)進(jìn)行修正時,選取的數(shù)據(jù)序列為包含異常數(shù)據(jù)在內(nèi)的n個周期內(nèi)的異常數(shù)據(jù)所在的時刻t的數(shù)據(jù)序列。
在對異常數(shù)據(jù)進(jìn)行修正時,一般采用的方法是使用該異常數(shù)據(jù)所在序列的平均數(shù)進(jìn)行代替。這時修正的值為,式中是對給定的一個權(quán)值。但是,某一序列值對后面序列值的影響作用是衰減的,而不是一直是。因此對異常數(shù)據(jù)進(jìn)行修正采用指數(shù)加權(quán)移動平均數(shù):
(5)
本文采用“Spark On Yarn”集群模式構(gòu)建能源大數(shù)據(jù)清洗模型實驗環(huán)境,實驗采用6臺服務(wù)器組成數(shù)據(jù)清洗集群節(jié)點,其中一個節(jié)點為Master,其余五個節(jié)點分別為Slave1-Slave5,每個節(jié)點的配置如表2所示。每個服務(wù)器節(jié)點采用Ubuntu-12.04.1操作系統(tǒng),使用Hadoop-2.6.0,Spark-1.3.1,Scala-2.10.5,JDK-1.7.0_79搭建節(jié)點的軟件環(huán)境。實驗平臺在Scala的Intellij Idea開發(fā)環(huán)境上進(jìn)行開發(fā)實現(xiàn),以hadoop的hdfs實現(xiàn)數(shù)據(jù)結(jié)果的存儲。

表2 集群配置
以某風(fēng)電場風(fēng)力發(fā)電監(jiān)測數(shù)據(jù)作為數(shù)據(jù)清洗研究對象[11]。該風(fēng)力發(fā)電監(jiān)測數(shù)據(jù)大小為5 GB,分別從5臺風(fēng)力發(fā)電機采集,采集間隔為1 s,記錄了從2012年2月1日到2012年2月29日風(fēng)力發(fā)電監(jiān)測數(shù)據(jù)。文章將從異常識別的準(zhǔn)確性、異常修正的效率對能源大數(shù)據(jù)清洗模型進(jìn)行驗證分析。
實驗1:針對正常樣本獲取過程中離群點刪除算法,本文測試了幾種離群點檢測算法的檢測率和誤檢率,測試結(jié)果見表3。與Apriori算法相比,本文算法在檢測率相似的情況下,誤檢率較低。較低誤報率有利于保證獲取的正常樣本質(zhì)量,保證構(gòu)建基于正常樣本的邊界樣本異常識別算法的準(zhǔn)確性。同原始CURE聚類算法比較,文本所改進(jìn)CURE聚類算法在檢測率和誤檢率都有所提高。

表3 離群點檢測算法比較
實驗2:為了驗證能源大數(shù)據(jù)異常識別算法的檢測異常數(shù)據(jù)正確性,實驗保持集群節(jié)點數(shù)固定,不斷調(diào)整測試數(shù)據(jù)樣本大小,檢測算法的準(zhǔn)確率,結(jié)果如表4。可以看出模型檢測到了大部分的異常數(shù)據(jù)。

表4 能源大數(shù)據(jù)異常識別算法的準(zhǔn)確率測試
實驗3:為了驗證能源大數(shù)據(jù)清洗模型的高效性,測試了傳統(tǒng)單機數(shù)據(jù)清洗與基于Spark框架的能源大數(shù)據(jù)清洗模型不同數(shù)量的清洗所需要的時間[12]-[13]。集群節(jié)點數(shù)固定,不斷調(diào)整待清洗數(shù)據(jù)樣本大小,測試數(shù)據(jù)清洗時間,測試結(jié)果見表5。排除節(jié)點間的網(wǎng)絡(luò)通信以及任務(wù)調(diào)度的開銷等因素,基于Spark的能源大數(shù)據(jù)清洗在效率上高于傳統(tǒng)單機數(shù)據(jù)清洗,但執(zhí)行效率與實驗中算法、集群的節(jié)點及數(shù)據(jù)量有關(guān)。

表5 單機及并行數(shù)據(jù)清洗清洗時間比較

表6 基于邊界樣本的異常信息識別方法實驗結(jié)果
實驗4:固定測試數(shù)據(jù)樣本大小,從中隨機抽取15 000條數(shù)據(jù)作為實驗測試樣本,正常簇樣本個數(shù)為5,每個正常樣本簇的邊界樣本個數(shù)分別為25,35,45,55,65,在待識別樣本數(shù)目固定的情況下,對上述測試樣本采用基于邊界樣本的異常信息識別方法進(jìn)行異常信息識別,檢測正常樣本簇的邊界樣本個數(shù)對檢測結(jié)果的影響,結(jié)果如表6所示。
本文分析了能源大數(shù)據(jù)清洗過程中的若干難點,并針對能源大數(shù)據(jù)的特點及清洗難點提出了基于Spark框架的能源大數(shù)據(jù)清洗模型。該清洗模型具有以下特點:(1)異常數(shù)據(jù)識別無須外源數(shù)據(jù);(2)異常數(shù)據(jù)識別及修正準(zhǔn)確性高;(3)利用并行Spark大數(shù)據(jù)處理框架,具有高效性。但是,本文在選取正常簇的邊界樣本時仍然存在問題,即何時達(dá)到最優(yōu)邊界樣本數(shù);其次,對異常數(shù)據(jù)的修正是建立在同一時間序列的樣本上,若該時間序列出現(xiàn)異常對異常數(shù)據(jù)修正的準(zhǔn)確性仍會有影響。針對以上解決問題需要在以后的工作中進(jìn)一步探討優(yōu)化并完善能源大數(shù)據(jù)清洗模型。