朱俊杰,葉文靜,曹萃文,顧幸生
(1. 上海南匯自來水有限公司,上海 201399;2. 華東理工大學(xué) 能源化工過程智能制造教育部重點(diǎn)實驗室,上海 200237)
中國淡水資源總量豐富但人均水資源不足,水質(zhì)污染以及龐大人口基數(shù)等因素使得國內(nèi)的水資源供需關(guān)系日益緊張,因此,做好水資源的規(guī)劃和管理勢在必行。短期供水量預(yù)測模型是指在地區(qū)歷史供水?dāng)?shù)據(jù)和發(fā)展趨勢的基礎(chǔ)上,根據(jù)歷史數(shù)據(jù)預(yù)測未來的供水量,短期供水量預(yù)測模型可以為供水系統(tǒng)制定合理的供水調(diào)度方案提供必須的理論數(shù)據(jù)基礎(chǔ)。傳統(tǒng)的供水量預(yù)測模型主要依靠經(jīng)驗公式和統(tǒng)計方法,如回歸分析模型[1]和時間序列模型[2]等,該類方法在數(shù)據(jù)充足、變化較為平穩(wěn)的情況下能夠得到較為準(zhǔn)確的預(yù)測結(jié)果,但在供水系統(tǒng)變化復(fù)雜的情況下預(yù)測能力受到限制,無法進(jìn)行精確預(yù)測[3-4]。近年來,研究學(xué)者開始利用人工智能和機(jī)器學(xué)習(xí)技術(shù)改進(jìn)供水量預(yù)測模型,如人工神經(jīng)網(wǎng)絡(luò)模型[5]、支持向量機(jī)模型[6]、支持向量回歸模型[7]等。目前,在供水量預(yù)測問題中基于神經(jīng)網(wǎng)絡(luò)模型和機(jī)器學(xué)習(xí)模型的研究最多并取得了一定的成果[8-9]。
針對目前的供水量預(yù)測模型在數(shù)據(jù)波動劇烈時預(yù)測效果較差的問題,本文在已有研究基礎(chǔ)上,提出了基于CatBoost的城市供水量組合預(yù)測模型。該模型采用K近鄰算法(K Nearest Neighbor, KNN)[10]對供水量異常數(shù)據(jù)識別和校正后,采用先進(jìn)的支持向量回歸(SVR)[11],極端梯度提升算法(XGBoost)[12],輕量級梯度提升機(jī)(LightGBM)[13]和CatBoost[14]模型預(yù)測供水量數(shù)據(jù);為了融合各模型的優(yōu)點(diǎn)并提高模型的預(yù)測精度,將各單一模型的預(yù)測結(jié)果作為輸入特征,采用CatBoost模型對供水量數(shù)據(jù)進(jìn)行進(jìn)一步預(yù)測并得到最終的供水量預(yù)測結(jié)果。與其他模型的對比仿真實驗表明,該模型可以獲得更高的預(yù)測精度和更好的預(yù)測效果。
KNN算法是一種簡單的機(jī)器學(xué)習(xí)算法,常用于分類和回歸問題中,該算法檢測異常數(shù)據(jù)的原理: 首先計算一個樣本與其他所有樣本之間的距離并找到離它最近的k個樣本,隨后計算該樣本點(diǎn)與k個樣本的平均距離,根據(jù)平均距離與閾值的比較結(jié)果判斷該數(shù)據(jù)是否是異常數(shù)據(jù),如果平均距離大于閾值,則認(rèn)為該樣本是異常樣本,否則為正常樣本。KNN算法不需要假設(shè)數(shù)據(jù)的分布,在低維數(shù)據(jù)的異常數(shù)據(jù)識別中效果顯著,廣泛應(yīng)用在故障診斷等領(lǐng)域中。
2017年Yandex首次提出CatBoost模型[14]。CatBoost模型是一種基于梯度增強(qiáng)決策樹(GBDT)的新型改進(jìn)機(jī)器學(xué)習(xí)類模型,與GBDT模型相比,CatBoost模型使用了Ordered Boosting方法并采用對稱樹作為基樹模型;與基于二叉樹作為基模型的模型相比,CatBoost可以更好地改善模型的預(yù)測性能并且在一定程度上弱化GBDT模型容易過擬合的問題。相比于傳統(tǒng)的GBDT模型,CatBoost模型具有更高的預(yù)測精度和更好的泛化能力,并已在諸多領(lǐng)域中得到了應(yīng)用,但該模型還未在供水量預(yù)測問題中得到應(yīng)用。
在供水系統(tǒng)中,供水量數(shù)據(jù)的監(jiān)測和記錄過程會受到多種人為和環(huán)境因素的影響,如人為誤操作、設(shè)備故障、水源質(zhì)量變化等,從而導(dǎo)致數(shù)據(jù)出現(xiàn)異常。異常數(shù)據(jù)會擾亂正常數(shù)據(jù)的分布規(guī)律,降低模型的預(yù)測精度,甚至產(chǎn)生不合理的預(yù)測結(jié)果。因此,在進(jìn)行供水量預(yù)測前對歷史供水量數(shù)據(jù)進(jìn)行異常數(shù)據(jù)識別檢測是必要的。本文基于時供水量數(shù)據(jù)的周期變化特點(diǎn),將供水量數(shù)據(jù)分為24個子集,在每個子集中分別使用KNN算法檢測識別異常數(shù)據(jù),并校正異常數(shù)據(jù)采用該時刻以往1周內(nèi)的平均值。
分析和選擇模型的輸入特征并使用強(qiáng)相關(guān)輸入特征有利于提高模型的預(yù)測準(zhǔn)確性并減少建模時間。以往研究表明,使用歷史供水量數(shù)據(jù)作為輸入特征可以建立準(zhǔn)確的供水量預(yù)測模型[15],因此本文也采用歷史供水量數(shù)據(jù)作為組合模型的輸入。在{qVt-24×7-10,qVt-24×7-9, …,qVt-24×7+9,qVt-24×7+10}、 {qVt-24×1-10,qVt-24×1-9, …,qVt-24×1+9,qVt-24×1+10}、 {qVt-10,qVt-9, …,qVt-1}以及時刻t中使用隨機(jī)森林算法篩選出相關(guān)性最強(qiáng)的10個輸入特征,其中qVt表示時刻t的供水量。根據(jù)重要性得分最終選擇{qVt-24×7,qVt-24×7+1,qVt-24×1+10,qVt-24×1,qVt-24×1+9,qVt-24×7+10,qVt-1,qVt-24×7+2,qVt-24×7-1,qVt-6}為模型的輸入特征。
組合模型的建立主要包括異常值處理、單一模型預(yù)測和組合預(yù)測三個部分,組合模型的結(jié)構(gòu)如圖1所示,主要的建模步驟如下:
圖1 組合模型結(jié)構(gòu)示意
1)根據(jù)時刻特征,將供水量數(shù)據(jù)分為24個子集并分別采用KNN算法識別和校正異常數(shù)據(jù)。
2)采用隨機(jī)森林算法篩選出相關(guān)性最強(qiáng)的10個輸入特征,并將供水量數(shù)據(jù)劃分為訓(xùn)練集和測試集。
3)利用訓(xùn)練集數(shù)據(jù)分別訓(xùn)練SVR,XGBoost,LightGBM和CatBoost模型并預(yù)測供水量數(shù)據(jù)。
4)為避免組合模型中各比例參數(shù)選擇的不合理,將上述4個模型的預(yù)測值和時刻t作為輸入特征,真實供水量數(shù)據(jù)作為輸出值,采用CatBoost模型進(jìn)行訓(xùn)練并得到最終的供水量預(yù)測結(jié)果。
超參數(shù)的選擇對模型的性能至關(guān)重要,歷史供水量數(shù)據(jù)中的異常數(shù)據(jù)量數(shù)目未知,因此KNN算法中異常數(shù)據(jù)比例需要人為設(shè)定,異常數(shù)據(jù)比例分別嘗試設(shè)置為0.01,0.02,…,0.20。SVR模型采用隨機(jī)搜索方法對超參數(shù)進(jìn)行尋優(yōu)調(diào)整;XGBoost,LightGBM,CatBoost模型使用Optuna優(yōu)化框架對每個模型的重要超參數(shù)進(jìn)行參數(shù)調(diào)整和確定。
本文使用平均絕對百分比誤差(eMAPE)、均方根誤差(eRMSE)、絕對平均誤差(eMAE)以及R2作為模型預(yù)測評價指標(biāo),4種指標(biāo)的計算如式(1)~式(4)所示:
(1)
(2)
(3)
(4)
本文收集了某獨(dú)立供水區(qū)域2022-05-01—2022-09-30的歷史供水量數(shù)據(jù),采樣間隔為1 h。以2022-05-01—2022-09-23的供水量數(shù)據(jù)作為模型的訓(xùn)練集數(shù)據(jù)用于模型的訓(xùn)練,2022-09-24—2022-09-30的供水量數(shù)據(jù)作為測試集數(shù)據(jù)驗證模型的性能。該時段供水量數(shù)據(jù)變化曲線如圖2所示,每個時刻的供水量數(shù)據(jù)箱型圖如圖3所示。觀察圖2和圖3可以發(fā)現(xiàn),由于人為記錄錯誤、水管爆管等因素的影響,收集到的時供水量數(shù)據(jù)存在較大波動且具有較多離群值。異常數(shù)據(jù)的存在對模型的訓(xùn)練會造成干擾,因此在預(yù)測供水量前進(jìn)行異常數(shù)據(jù)識別和校正是必要的。
圖2 某時段供水?dāng)?shù)據(jù)變化曲線示意
采用KNN算法分別識別每個時刻的異常數(shù)據(jù),異常數(shù)據(jù)識別結(jié)果如圖4所示。觀察圖4可以發(fā)現(xiàn),KNN算法能夠較為準(zhǔn)確地識別出供水量數(shù)據(jù)中的異常數(shù)據(jù)。在識別出異常數(shù)據(jù)后,采用該時刻以往1周內(nèi)的數(shù)據(jù)平均值進(jìn)行校正,從而為供水量模型提供更優(yōu)的數(shù)據(jù)。
圖4 異常數(shù)據(jù)識別結(jié)果示意
為了測試分析KNN算法異常數(shù)據(jù)識別和組合預(yù)測對供水量預(yù)測的作用和效果,本文分別采用CatBoost,KNN+CatBoost,KNN+SVR,KNN+XGBoost,KNN+LightGBM以及組合模型進(jìn)行仿真實驗。各模型供水量預(yù)測結(jié)果如圖5所示,根據(jù)預(yù)測結(jié)果計算得到的評價指標(biāo)見表1所列。
圖5 各模型供水量預(yù)測結(jié)果示意
由表1可以發(fā)現(xiàn),與CatBoost模型相比,KNN+CatBoost模型的預(yù)測結(jié)果在4個指標(biāo)中結(jié)果最好,eRMSE指標(biāo)從538.577 3下降到429.667 7,R2從0.601 1提高到0.722 1。實驗結(jié)果表明,經(jīng)過KNN算法異常數(shù)據(jù)識別和校正后的預(yù)測結(jié)果指標(biāo)比基于原始數(shù)據(jù)的預(yù)測結(jié)果指標(biāo)更好,eMAPE,eMAE,eRMSE和R2都有明顯改善,驗證了采用KNN算法識別異常數(shù)據(jù)從而提高模型預(yù)測精度的有效性。在KNN+CatBoost,KNN+SVR,KNN+XGBoost和KNN+LightGBM模型中,綜合4種評價指標(biāo),KNN+CatBoost模型表現(xiàn)最優(yōu),其次是KNN+LightGBM和KNN+XGBoost模型,KNN+SVR預(yù)測指標(biāo)結(jié)果表現(xiàn)最差,預(yù)測評價指標(biāo)結(jié)果表明CatBoost模型在供水量預(yù)測中的突出表現(xiàn)。與上述5種模型相比,組合模型預(yù)測效果最好,eMAPE,eMAE,eRMSE和R2都有較為明顯的改善和提升。分析發(fā)現(xiàn),在組合模型中采用了CatBoost算法將SVR,CatBoost,XGBoost和LightGBM模型的預(yù)測結(jié)果進(jìn)行組合以便在不同的樣本中最大程度地發(fā)揮各模型的優(yōu)點(diǎn),從而進(jìn)一步提高預(yù)測效果。表1的實驗結(jié)果驗證了組合模型在供水量預(yù)測中的有效性。
觀察分析表1中各模型的運(yùn)行時間可以發(fā)現(xiàn),未進(jìn)行KNN異常值識別的CatBoost模型運(yùn)行時間最短,在1 s內(nèi);加入了KNN異常數(shù)據(jù)檢測的模型運(yùn)行時間為1.175 9 s,這是因為需要將數(shù)據(jù)劃分為24個子集分別訓(xùn)練并采用KNN算法識別異常數(shù)據(jù),所以加入KNN算法異常數(shù)據(jù)識別的模型,增加了算法的運(yùn)行時間。而組合模型由于融合了KNN,SVR,CatBoost,XGBoost和LightGBN模型,在所有比較模型中運(yùn)行時間最長,達(dá)到了2.688 9 s。所有的模型運(yùn)行時間都小于3 s,在可接受范圍內(nèi)。
針對目前的供水量預(yù)測模型在數(shù)據(jù)波動劇烈時預(yù)測效果較差的問題,本文在已有的研究基礎(chǔ)上,提出了基于CatBoost的城市供水量組合預(yù)測模型。該模型采用KNN算法對供水量數(shù)據(jù)中的異常數(shù)據(jù)進(jìn)行識別和校正后,采用CatBoost模型對SVR,XGBoost,LightGBM和CatBoost模型得到的預(yù)測結(jié)果進(jìn)行進(jìn)一步組合并得到最終的供水量預(yù)測值,本文結(jié)論如下:
1)在對波動劇烈的數(shù)據(jù)進(jìn)行分析和預(yù)測時,采用KNN算法對異常數(shù)據(jù)進(jìn)行識別和校正后能夠顯著提高模型的預(yù)測精度。
2)SVR,CatBoost,LightGBM和XGBoost模型在供水量預(yù)測中,CatBoost模型的表現(xiàn)最好,預(yù)測精度最高。
3)提出的基于CatBoost的城市供水量組合預(yù)測模型能夠在單一預(yù)測模型的基礎(chǔ)上進(jìn)一步提高預(yù)測精度,得到更好的供水量預(yù)測結(jié)果。