劉 耘, 陸 軍
(新疆大學 建筑工程學院, 烏魯木齊 830046)
工程造價指數是常見的投資估算指標,是一種反映特定時期下,人工費、材料費、機械材料租賃費用等要素對工程造價影響的一種指數。造價指數具有時限性,且只能反映特定時間內工程造價的變動趨勢,由于建設周期較長,在建設項目投機估算階段需要將未來幾年工期內造價指數作為參考指標,因此需要對工程指數進行預測。造價指數預測主要方法包括定性專家預測法、主觀概率法、交叉影響法、定量時間序列預測法、回歸預測法、灰色預測法[1]?;跈C器學習的回歸預測作為一種回歸預測方法,已經被廣泛地應用到生產生活之中。相比于傳統(tǒng)預測方法,機器學習預測學習能力強,預測誤差小,能夠更好地處理復雜的數據預測問題。
基于機器學習的造價指數預測模型構建,國內學者主要研究方向在選定算法后的參數優(yōu)化,來提升模型的預測精度。選擇較多的有神經網絡和集成模型。
神經網絡是根據模擬人腦神經信息傳遞、處理等機制的算法,基礎神經網絡模型有BP(back propagation)神經網絡模型、卷積神經網絡網絡模型等,其中BP神經網絡模型是通過誤差反向傳播加快收斂速度的模型。羅澤民和布優(yōu)月[2]選用GM(1,1)和BP神經網絡,通過參數優(yōu)化對神經網絡組合模型進行了研究。劉偉軍和李念[3]結合了GM(1,1)模型、思維進化算法和神經網絡算法,利用思維進化算法提升模型的預測精度。朱曦等[4]在公路運價指數預測中選用極限學習機神經網絡快速高效地完成了模型構建并提升預測能力。劉傳和陳彥暉[5]在股指波動率的長短期記憶(long short-term memory,LSTM)神經網絡模型構建前用經驗模態(tài)分解和樣本熵對數據進行了預處理,從而提高了模型的預測效果。
集成學習是指將多個弱學習模型或多個模型進行結合構成一個具有更強學習能力的模型,基于弱學習器的有隨機森林算法、極端梯度提升(extreme gradient boosting,XGBoost)和神經網絡梯度提升(neural network gradient boosting,NGBoost)等。張旺等[6]在變電站基礎設施項目投資算預測模型中選用XGBoost構建預測模型,結果表明XGBoost的預測精度高于線性回歸模型和神經網絡。羅鳳娥等[7]在基于數據挖掘技術的航班預測綜述中提出隨機森林算法的優(yōu)點在于高維數據處理上的優(yōu)異性,但由于數據噪音易導致模型過擬合。黃穎和楊會杰[8]在金融時間預測模型中選用XGBoost對數據中的特征進行提取。多模型集成中Meseret等[9]集成了線性回歸、支持向量機(support vector machine,SVM)和梯度增強算法來進行公路項目的成本預測。Sharma等[10]在數據優(yōu)化的基礎上,利用機器學習的工具,構建一個關于工程造價的環(huán)境、資源和時間構成的函數,結果表明梯度增強樹在與隨機森林、神經網絡、高斯回歸對比中,在各個方面都具有最佳的性能。
指數預測的模型構建以模型為主,通過模型優(yōu)化對模型效果進行提升,并根據不同的數據特征進行模型合理選擇,數據處理是模型構建和優(yōu)化的重要思路,數據特征的處理反映了研究人員數據的理解程度和數據的重要特征,基于特征工程構建模型能深度挖掘數據中信息的同時也能對后續(xù)的相關研究數據的處理提供重要的參考價值。
為構建一個能夠應用于實際工程的造價指數預測模型,本文重點研究基于特征工程和參數優(yōu)化的模型構建,在優(yōu)化基礎算法基礎上,通過特征篩選和特征填充,為造價指數預測模型選擇合適的特征工程處理方式和模型優(yōu)化參數,從而構建一個預測能力較好的預測模型。
本文研究對象是U市造價指數預測,數據來源主要是U市工程信息信息網發(fā)布的U市2012年1月至2021年10月建設工程綜合價格信息和建設工程造價信息網發(fā)布的2021—2012年省會城市住宅建安工程造價指標,單位為元/m2。
主要數據特征包括時間、材料費、人工費和機器租賃費10年間變化趨勢。
模型構建前的數據挖掘包括數據收集與過濾、數據預處理、數據變換等[12]。其中的數據特征工程是專門對數據挖掘中特征處理方法,特征工程的特征處理包括特征清洗、特征預處理和特征衍生,其中特征預處理包括單特征的數據歸一化、離散連續(xù)化和缺失值處理、多特征的降維和特征篩選等。
2.2.1 數據基本描述
數據樣本量為118個,578個數據特征,數據結構為小樣本、高緯度數據集。
2.2.2 數據填充
針對數據缺失問題,處理方法是對數據進行填充或對大量缺失特征信息進行刪除,為保證信息完整性,進行缺失數據填充。通過單變量插補和多變量插補,生成了最初兩組數據,分別是均值填充數據集和隨機森林填充數據集。
2.2.3 特征選擇
由于高緯度數據特征易導致模型學習成本增加,導致模型擬合能力差,通過特征工程需要對數據特征進行篩選,減少特征數量。
采用過濾法的F檢驗是指通過計算特征相關性和閾值,選取閾值之內的特征,采用嵌入法中的樹模型將特征選擇嵌入模型的構建,通過模型選擇重要性較高的特征,采用包裹法的遞歸特征消除法(recursive feature elimination, RFE),通過每次選擇不同的特征子集組合并評價,最終選擇最優(yōu)的特征子集。
2.2.4 特征降維
選用主成分分析法(principal components analysis,PCA)通過數學變換將原本高緯度的數據映射在低緯度空間之上,從而便于計算和提高部分模型的整體性能。
2.2.5 特征子集構建
通過特征工程數據填充,特征選擇和特征降維數據特征子集如表1所示。由表1特征數量可知,不同特征處理方式下,數據特征數量不同,為模型構建提供不同特征子集。
表1 特征工程處理后的特征子集
2.3.1 模型評價指標
將造價數據分為訓練集和測試集。取2012—2020年的數據作為模型的訓練集,同時對模型進行交叉驗證(cross validation,CV),作為模型穩(wěn)定性的評價指標,5折交叉驗證是指將數據分成5份,依次使用其中的一份數據作為測試集數據,其余4份為訓練集,平均測試集上預測結果作為模型的交叉驗證值。測試集為2021年10個月的數據,作為模型泛化能力參考。
預測模型誤差一般選用均方根誤差(root mean square error,RMSE)表示,用以衡量機器學習中觀測值和真實值之間誤差的標準,表達式為
(1)
平均絕對百分比誤差(mean absolute percentage error,MAPE)是一種描述預測精準度的指標,表達式為
(2)
式中:f(xi)為第i個樣本的預測值;yi為第i個樣本的真實值;m為樣本量。
2.3.2 XGBoost模型構建
XGBoost是一種極端梯度提升樹模型。不同于一般梯度提升樹模型,XGBoost參數量多,性能提升空間大,需要對模型參數空間進行參數搜索,尋找參數之間的較優(yōu)組合,對模型性能進行優(yōu)化,采用貝葉斯優(yōu)化搜索的參數有最大深度(max_depth)、樹模型生成數量(num_boost_round)、學習率(eta)、重采樣(subsample)、節(jié)點樣本二階導和的最小值(min_child_weight)、L1正則化系數(alpha)、L2正則化系數(lambda),模型默認參數為XGBoost庫下默認設置,設置num_boost_round為100,搜索空間為XGBoost庫文檔給出的參考空間。經過參數優(yōu)化后(表2),各個特征子集最優(yōu)參數模型和模型預測誤差如表3所示。默認參數構建的訓練集、測試集和交叉驗證集誤差分別記為default_xgb_train、default_xgb_test、default_xgb_cv;參數優(yōu)化后的訓練集、測試集和交叉驗證集誤差分別記為opt_xgb_train、opt_xgb_test、opt_xgb_cv。
表2 XGBoost各特征子集優(yōu)化后參數
表3 XGBoost和神經網絡誤差對照
2.3.3 神經網絡模型搭建
通過PyTorch構建一個4層神經網絡,層級結構為全連接反向傳播神經網絡,分為輸入層、隱藏層和輸出層。輸入層輸入數據特征,隱藏層為4層,每層神經元數量通過超參數優(yōu)化得出,輸出層為1個神經元。默認神經網絡模型的神經元個數為100個/層,不設置梯度提升算法和學習率,迭代次數為500次。
采用貝葉斯優(yōu)化對每個特征子集構建的模型進行參數搜索,參數空間為[1,100],梯度提升算法的搜索空間為Adam算法、AdaDelta算法和AdaGrad算法,學習率搜索空間為[0.000 01,0.1]。
模型參數搜索完成后,參數如表4所示,對模型的預測誤差進行對比,如圖1所示默認參數構建的訓練集、測試集和交叉驗證集誤差分別是default_ANN_train、default_ANN_test、default_ANN_cv;參數優(yōu)化后的訓練集、測試集和交叉驗證集誤差分別是opt_ANN_train、opt_ANN_test、opt_ANN_cv,神經網絡默認參數和優(yōu)化后的模型誤差如圖2神經網絡誤差所示。
圖1 隨機森林填充后的各個模型誤差
圖2 均值填充后的各個模型誤差
表4 神經網絡各特征子集優(yōu)化后參數
2.3.4 模型選擇和評估
首先,根據數據缺失值處理和特征選擇,完成模型構建前的數據準備工作;其次是模型參數優(yōu)化;最后,對模型擬合能力、泛化能力和穩(wěn)定性進行評價,遴選合適的特征工程方式并構建模型。
神經網絡默認參數下,隨機森林填充訓練誤差小于均值填充誤差。
2)特征篩選。如圖1和圖2所示,特征篩選后的大部分模型預測誤差有降低但整體降低不明顯,在特定模型上的提升效果明顯,如均值填充后,優(yōu)化后的XGBoost模型在訓練集上得到了較大的提升。但也有模型在特征篩選后預測誤差增加,如默認參數下神經網絡訓練誤差。因此,特征篩選需要根據具體模型效果進行使用。
3)參數優(yōu)化。由表3、圖3和圖4可知,參數優(yōu)化后的XGBoost模型訓練誤差和交叉驗證誤差顯著下降,測試集誤差大部分有所下降。如表3、圖5和圖6所示,相比于默認參數模型,除了數據降維后的模型,參數優(yōu)化后的神經網絡模型在訓練誤差、測試誤差和交叉驗證誤差都有了顯著地降低。
圖3 默認參數下各個XGBoost的誤差
圖4 優(yōu)化參數后各個XGBoost模型的誤差
圖5 默認參數下各個神經網絡模型的誤差
圖6 優(yōu)化參數后各個神經網絡模型的誤差
4)模型構建和評價。模型評價主要參考表3的3個誤差值,其中訓練和測試集誤差反映模型對數據學習程度和預測能力,驗證誤差反映不同數據上的預測誤差,也叫泛化能力或者魯棒性。
由圖1和圖2可知,XGBoost的各項誤差整體比神經網絡低。從模型訓練、測試誤差和交叉驗證值看,XGBoost模型能夠準確地擬合數據,預測精度高,模型泛化能力好。
對比了整體算法之間的差異,還需對比最優(yōu)特征子集的模型效果構建模型。選取3個誤差值相對較小的模型(圖7),兩個模型基于最優(yōu)特征子集構建的模型分別是基于樹模型特征選擇和隨機森林填充的XGBoost模型XGB_tree_rf和基于樹模型特征選擇和均值填充的神經網絡模型ANN_tree_mean。
圖7 最優(yōu)特征子集模型預測結果
XGBoost和神經網絡的預測結果如表5所示,在小數據、高緯度和數據缺失數據集上,XGBoost模型在訓練集和測試集上的誤差均小于10%,構建的XGBoost模型交叉驗證誤差小,說明模型的預測能力和泛化能力都達到實際工程中造價指數預測模型的標準。
表5 算法的最優(yōu)模型的模型性能對比
通過數據填充和特征篩選得到多個數據集,以此為基礎構建基于不同算法的預測模型,對比不同模型之間誤差和模型穩(wěn)定性,選擇最優(yōu)特征子集?;趨祪?yōu)化后的樹模型特征篩選和均值填充的XGBoost模型,測試集上的相對誤差為7.30%,訓練集相對誤差為0.80%,交叉驗證誤差為46.73。因此,XGBoost作為預測造價指數的模型,數據擬合效果好,誤差小,模型穩(wěn)定,適合作為實際工程中造價指數預測模型。