學(xué)建模競(jìng)賽實(shí)戰(zhàn):基于殘差學(xué)習(xí)的空氣質(zhì)量預(yù)報(bào)二次建模與優(yōu)化)
1. 項(xiàng)目背景與核心挑戰(zhàn)解析“華為杯”全國(guó)研究生數(shù)學(xué)建模競(jìng)賽在圈內(nèi)人看來(lái)從來(lái)就不是一場(chǎng)簡(jiǎn)單的考試。它更像是一次高強(qiáng)度、短周期的科研實(shí)戰(zhàn)演練對(duì)參賽者的知識(shí)廣度、建模深度、編程實(shí)現(xiàn)和論文寫(xiě)作能力提出了全方位的挑戰(zhàn)。2021年的B題我記得很清楚題目聚焦于“空氣質(zhì)量預(yù)報(bào)二次建?!薄_@題目一出來(lái)當(dāng)時(shí)我們團(tuán)隊(duì)就意識(shí)到這絕對(duì)是一塊硬骨頭。它不像一些優(yōu)化類題目有明確的數(shù)學(xué)模型可以套用也不像一些數(shù)據(jù)分析題單純做特征工程和機(jī)器學(xué)習(xí)就能搞定。它要求你在已有預(yù)報(bào)模型的基礎(chǔ)上進(jìn)行“二次建?!边@意味著你既要理解前序模型的機(jī)理與局限又要提出自己的創(chuàng)新性改進(jìn)方案最終用翔實(shí)的數(shù)據(jù)和嚴(yán)謹(jǐn)?shù)恼撟C來(lái)證明你的模型更優(yōu)。這道題的核心挑戰(zhàn)我認(rèn)為可以歸結(jié)為三點(diǎn)。第一是問(wèn)題理解的深度。題目給出的數(shù)據(jù)包括歷史空氣質(zhì)量監(jiān)測(cè)數(shù)據(jù)、氣象預(yù)報(bào)數(shù)據(jù)以及一家商業(yè)公司提供的空氣質(zhì)量預(yù)報(bào)數(shù)據(jù)。你需要深刻理解這些數(shù)據(jù)之間的關(guān)系氣象條件如何影響污染物擴(kuò)散商業(yè)預(yù)報(bào)模型可能基于什么原理它的系統(tǒng)誤差體現(xiàn)在哪里第二是建模策略的獨(dú)創(chuàng)性?!岸谓!辈皇呛?jiǎn)單的修修補(bǔ)補(bǔ)你需要提出一個(gè)清晰的改進(jìn)框架是采用統(tǒng)計(jì)修正、機(jī)器學(xué)習(xí)融合還是引入新的物理/化學(xué)機(jī)制這個(gè)選擇直接決定了作品的上限。第三是結(jié)果的可解釋性與穩(wěn)健性。在數(shù)學(xué)建模競(jìng)賽中一個(gè)在測(cè)試集上表現(xiàn)良好但無(wú)法解釋的“黑箱”模型得分往往不如一個(gè)可解釋性強(qiáng)、邏輯清晰的“白箱”或“灰箱”模型。如何讓你的改進(jìn)既有效又能讓評(píng)委老師信服這是需要精心設(shè)計(jì)的?;仡?021年我們團(tuán)隊(duì)在解決這道題時(shí)走了不少?gòu)澛芬卜e累了一些寶貴的經(jīng)驗(yàn)。今天我就以這道題為載體拋開(kāi)那些籠統(tǒng)的“第一步、第二步”套路深入聊聊面對(duì)這類復(fù)雜開(kāi)放性問(wèn)題時(shí)一個(gè)成熟的團(tuán)隊(duì)?wèi)?yīng)該如何拆解問(wèn)題、構(gòu)建方案并最終落地成文。我會(huì)結(jié)合我們當(dāng)時(shí)的思路并補(bǔ)充一些事后看來(lái)更優(yōu)的解法以及關(guān)鍵的代碼實(shí)現(xiàn)片段基于Python。希望這篇內(nèi)容不僅能幫你回顧這道題更能為你應(yīng)對(duì)未來(lái)的建模挑戰(zhàn)提供一套可遷移的方法論。2. 數(shù)據(jù)深潛從雜亂到洞察的關(guān)鍵預(yù)處理拿到競(jìng)賽數(shù)據(jù)包第一步永遠(yuǎn)不是急著跑模型而是靜下心來(lái)像法醫(yī)解剖一樣審視你的數(shù)據(jù)。2021年B題的數(shù)據(jù)主要包括三部分多個(gè)城市長(zhǎng)時(shí)間序列的空氣質(zhì)量實(shí)測(cè)數(shù)據(jù)如PM2.5、PM10、SO2等濃度、對(duì)應(yīng)時(shí)段的氣象預(yù)報(bào)數(shù)據(jù)如風(fēng)速、風(fēng)向、溫度、濕度、氣壓以及一家商業(yè)機(jī)構(gòu)提供的對(duì)這些空氣質(zhì)量指標(biāo)的預(yù)報(bào)數(shù)據(jù)。你的任務(wù)就是利用實(shí)測(cè)數(shù)據(jù)和氣象數(shù)據(jù)去評(píng)估并改進(jìn)這家商業(yè)機(jī)構(gòu)的預(yù)報(bào)結(jié)果。2.1 數(shù)據(jù)質(zhì)量診斷與清洗首先我們必須對(duì)數(shù)據(jù)進(jìn)行全面的“體檢”。使用Pandas進(jìn)行初步探索是標(biāo)準(zhǔn)操作但這里我想強(qiáng)調(diào)幾個(gè)容易被忽略的關(guān)鍵點(diǎn)時(shí)空一致性校驗(yàn)檢查不同數(shù)據(jù)源實(shí)測(cè)、氣象預(yù)報(bào)、商業(yè)預(yù)報(bào)的時(shí)間戳是否嚴(yán)格對(duì)齊。是否存在時(shí)區(qū)問(wèn)題采樣頻率是否一致都是逐小時(shí)數(shù)據(jù)對(duì)于缺失的時(shí)間點(diǎn)是直接線性插值還是需要結(jié)合氣象數(shù)據(jù)的周期性進(jìn)行更合理的填充我們當(dāng)時(shí)發(fā)現(xiàn)商業(yè)預(yù)報(bào)數(shù)據(jù)在個(gè)別時(shí)刻存在整點(diǎn)漂移如應(yīng)該是08:00的數(shù)據(jù)標(biāo)在了07:59這種細(xì)微的不一致如果不處理在后續(xù)計(jì)算誤差指標(biāo)時(shí)會(huì)引入噪聲。異常值檢測(cè)與業(yè)務(wù)邏輯判斷不能單純用3σ原則三倍標(biāo)準(zhǔn)差處理異常值。對(duì)于空氣質(zhì)量數(shù)據(jù)需要結(jié)合國(guó)家《環(huán)境空氣質(zhì)量標(biāo)準(zhǔn)》中的濃度限值進(jìn)行判斷。例如PM2.5的24小時(shí)平均一級(jí)標(biāo)準(zhǔn)是35μg/m3二級(jí)標(biāo)準(zhǔn)是75μg/m3如果出現(xiàn)超過(guò)500甚至1000的數(shù)值大概率是監(jiān)測(cè)儀器故障或數(shù)據(jù)傳輸錯(cuò)誤。對(duì)于這類異常值我們采用了“前后時(shí)刻均值替換法”但如果連續(xù)異常則標(biāo)記為缺失段采用時(shí)間序列預(yù)測(cè)方法如ARIMA進(jìn)行填補(bǔ)。這里附上一段關(guān)鍵的異常值檢測(cè)與處理代碼框架import pandas as pd import numpy as np from scipy import stats def diagnose_and_clean_air_quality(df, pollutantPM2.5, std_threshold3, business_rulesNone): 診斷并清洗空氣質(zhì)量數(shù)據(jù)。 df: 包含時(shí)間戳和污染物濃度的DataFrame pollutant: 污染物列名 std_threshold: 標(biāo)準(zhǔn)差閾值用于統(tǒng)計(jì)異常值檢測(cè) business_rules: 字典定義業(yè)務(wù)規(guī)則上下限如 {PM2.5: (0, 500)} series df[pollutant].copy() original_missing series.isnull().sum() # 1. 基于業(yè)務(wù)規(guī)則的異常值檢測(cè) if business_rules and pollutant in business_rules: lower, upper business_rules[pollutant] rule_outliers (series lower) | (series upper) print(f基于業(yè)務(wù)規(guī)則{pollutant} 發(fā)現(xiàn) {rule_outliers.sum()} 個(gè)異常值。) series[rule_outliers] np.nan # 2. 基于統(tǒng)計(jì)Z-score的異常值檢測(cè)在去除業(yè)務(wù)異常值后進(jìn)行更合理 # 注意對(duì)于非正態(tài)分布數(shù)據(jù)Z-score效果可能不好可考慮使用IQR四分位距法 z_scores np.abs(stats.zscore(series.dropna())) z_outliers_mask np.abs(stats.zscore(series)) std_threshold # 更穩(wěn)健的方法使用IQR Q1 series.quantile(0.25) Q3 series.quantile(0.75) IQR Q3 - Q1 iqr_outliers_mask (series (Q1 - 1.5 * IQR)) | (series (Q3 1.5 * IQR)) # 我們最終選擇IQR法標(biāo)記異常值 series[iqr_outliers_mask] np.nan print(f基于IQR法則{pollutant} 標(biāo)記了 {iqr_outliers_mask.sum()} 個(gè)統(tǒng)計(jì)異常值。) # 3. 缺失值填補(bǔ)以前后時(shí)刻均值法為例簡(jiǎn)單有效 # 對(duì)于連續(xù)缺失較多的段建議用更復(fù)雜的方法如線性插值、時(shí)間序列預(yù)測(cè) series_filled series.interpolate(methodlinear, limit_directionboth) # 4. 最終檢查 final_missing series_filled.isnull().sum() print(f{pollutant} 初始缺失值: {original_missing}, 處理后缺失值: {final_missing}) df[pollutant _cleaned] series_filled return df # 使用示例 # business_limits {PM2.5: (0, 500), PM10: (0, 600)} # df diagnose_and_clean_air_quality(df, PM2.5, business_rulesbusiness_limits)氣象數(shù)據(jù)的矢量分解與有效性轉(zhuǎn)換風(fēng)向是角度數(shù)據(jù)不能直接用于線性模型。必須將其分解為東-西U和南-北V兩個(gè)方向的分量U wind_speed * sin(wind_direction * π / 180),V wind_speed * cos(wind_direction * π / 180)。這樣處理后的特征在物理意義上更清晰也便于模型學(xué)習(xí)。此外對(duì)于風(fēng)速我們常常會(huì)考慮其平方項(xiàng)因?yàn)槲廴疚飻U(kuò)散速率可能與風(fēng)速的平方相關(guān)。2.2 特征工程構(gòu)建模型“理解”世界的語(yǔ)言原始數(shù)據(jù)是“原材料”特征工程就是“烹飪”決定了模型能吸收到什么營(yíng)養(yǎng)。對(duì)于空氣質(zhì)量預(yù)報(bào)問(wèn)題僅僅使用當(dāng)前時(shí)刻的氣象和污染物濃度是遠(yuǎn)遠(yuǎn)不夠的。滯后特征污染物的濃度具有強(qiáng)烈的自相關(guān)性。今天的PM2.5水平肯定和昨天、前天的水平高度相關(guān)。因此必須構(gòu)建滯后特征Lag Features例如前1小時(shí)、前3小時(shí)、前24小時(shí)代表日變化的污染物濃度和關(guān)鍵氣象要素。這相當(dāng)于讓模型擁有了“記憶”。移動(dòng)統(tǒng)計(jì)特征計(jì)算滑動(dòng)窗口內(nèi)的統(tǒng)計(jì)量如過(guò)去6小時(shí)、12小時(shí)、24小時(shí)的均值、標(biāo)準(zhǔn)差、最大值、最小值。這能幫助模型捕捉污染的累積效應(yīng)和波動(dòng)趨勢(shì)。例如過(guò)去24小時(shí)PM2.5的平均值可能比當(dāng)前瞬時(shí)值更能反映背景污染水平。交互特征與衍生特征這是體現(xiàn)建模者物理化學(xué)直覺(jué)的地方。例如大氣穩(wěn)定度指標(biāo)可以嘗試用溫度垂直梯度高層與低層溫度差和風(fēng)速來(lái)構(gòu)造一個(gè)簡(jiǎn)單的穩(wěn)定度指數(shù)。穩(wěn)定的大氣層結(jié)不利于污染物擴(kuò)散。排放強(qiáng)度估算在缺乏精確排放清單的情況下可以利用工作日/周末、節(jié)假日標(biāo)志以及交通流量如果數(shù)據(jù)中有等構(gòu)建一個(gè)簡(jiǎn)單的排放強(qiáng)度代理特征。氣象綜合指數(shù)例如將高濕度、低風(fēng)速、無(wú)降水的情況組合成一個(gè)“易污染氣象條件”布爾標(biāo)志。時(shí)空關(guān)聯(lián)特征對(duì)于多城市數(shù)據(jù)可以考慮引入上游城市的污染物濃度作為下游城市的特征需考慮風(fēng)向和距離。這模擬了污染物的區(qū)域輸送過(guò)程。一個(gè)重要的心得特征工程不是一蹴而就的它應(yīng)該是一個(gè)與模型訓(xùn)練交織在一起的迭代過(guò)程。我們當(dāng)時(shí)的做法是先構(gòu)建一個(gè)基礎(chǔ)特征集包括滯后項(xiàng)和滑動(dòng)平均訓(xùn)練一個(gè)簡(jiǎn)單的線性模型或樹(shù)模型如LightGBM然后分析模型的特征重要性Feature Importance。對(duì)于那些重要性極低的特征可以考慮剔除同時(shí)觀察模型在哪些樣本上預(yù)測(cè)誤差大反過(guò)來(lái)思考是否缺少了能描述這些特殊情況的特征。例如我們發(fā)現(xiàn)模型在靜風(fēng)風(fēng)速接近0且濕度大的夜間預(yù)測(cè)誤差系統(tǒng)性偏高。于是我們?cè)黾恿恕办o風(fēng)高濕”這個(gè)交互特征后續(xù)模型的性能得到了提升。3. 二次建模的核心誤差分析與模型框架選擇在完成扎實(shí)的數(shù)據(jù)預(yù)處理后我們才真正面對(duì)“二次建?!边@個(gè)核心。商業(yè)預(yù)報(bào)模型對(duì)我們來(lái)說(shuō)是一個(gè)“灰箱”——我們知道它的輸入和輸出但不知道內(nèi)部具體結(jié)構(gòu)。我們的目標(biāo)不是重建它而是修正它。3.1 系統(tǒng)性誤差分解首先我們對(duì)商業(yè)預(yù)報(bào)模型的誤差進(jìn)行了細(xì)致的分解。將誤差定義為誤差 商業(yè)預(yù)報(bào)值 - 實(shí)測(cè)值。然后從多個(gè)維度分析時(shí)間維度誤差是否具有明顯的日變化、周變化或季節(jié)變化規(guī)律例如是否在每日早晚高峰時(shí)段誤差更大是否在冬季采暖季誤差有系統(tǒng)性偏移空間維度不同城市的誤差分布是否有顯著差異這可能與城市的地理位置、產(chǎn)業(yè)結(jié)構(gòu)、商業(yè)模型本地化程度有關(guān)。濃度水平維度將實(shí)測(cè)值按濃度分段如優(yōu)、良、輕度污染、中度污染等分析在不同污染水平下誤差的均值、方差如何變化。很多模型在污染峰值時(shí)容易低估“截峰”效應(yīng)在清潔時(shí)可能高估。氣象條件維度在不同的風(fēng)速、風(fēng)向、濕度、降水條件下誤差的分布特征是什么例如是否在東南風(fēng)時(shí)誤差普遍為負(fù)預(yù)報(bào)偏低這種分析的目的是找到商業(yè)模型誤差的“模式”。如果誤差是純粹隨機(jī)的白噪聲那么改進(jìn)空間很小。但通常這類業(yè)務(wù)化模型會(huì)存在一些系統(tǒng)性偏差這正是我們“二次建模”的突破口。3.2 主流修正框架對(duì)比與選型基于誤差分析的結(jié)果我們可以選擇不同的修正框架。當(dāng)時(shí)我們團(tuán)隊(duì)主要評(píng)估了三種路徑線性/非線性回歸修正法思路將商業(yè)預(yù)報(bào)值作為一個(gè)核心特征連同其他氣象特征、歷史污染物特征一起輸入到一個(gè)新的回歸模型中去預(yù)測(cè)最終的“修正后預(yù)報(bào)值”。這個(gè)新模型的目標(biāo)變量是“實(shí)測(cè)值”。優(yōu)點(diǎn)實(shí)現(xiàn)簡(jiǎn)單可解釋性相對(duì)較好。如果使用線性回歸修正系數(shù)可以直接反映商業(yè)預(yù)報(bào)的偏差程度。缺點(diǎn)假設(shè)商業(yè)預(yù)報(bào)值本身包含大量有效信息只是存在線性或可參數(shù)化的非線性偏差。如果商業(yè)模型在某些復(fù)雜非線性場(chǎng)景下完全失效此方法改進(jìn)有限。適用場(chǎng)景誤差分析顯示誤差與某些特征如預(yù)報(bào)值本身、風(fēng)速、濕度存在明顯的相關(guān)性。殘差學(xué)習(xí)法思路不直接預(yù)測(cè)最終濃度而是預(yù)測(cè)商業(yè)模型的“誤差”即殘差。構(gòu)建一個(gè)模型G(X)其輸入X包括氣象特征、歷史特征等輸出是對(duì)商業(yè)預(yù)報(bào)誤差的預(yù)測(cè)值。最終修正預(yù)報(bào)為商業(yè)預(yù)報(bào)值 G(X)。優(yōu)點(diǎn)任務(wù)更聚焦。模型G只需要學(xué)習(xí)“商業(yè)模型錯(cuò)在哪里”而不需要重新學(xué)習(xí)完整的污染物變化規(guī)律可能更容易訓(xùn)練。物理意義清晰G(X)就是對(duì)系統(tǒng)偏差的估計(jì)。缺點(diǎn)如果商業(yè)模型本身在某些情況下預(yù)測(cè)毫無(wú)道理那么學(xué)習(xí)其殘差可能和重新學(xué)習(xí)一樣困難。適用場(chǎng)景商業(yè)模型整體預(yù)測(cè)趨勢(shì)正確但存在規(guī)律性的高估或低估。模型融合法思路將商業(yè)預(yù)報(bào)模型視為一個(gè)“專家”我們另外訓(xùn)練一個(gè)全新的、基于實(shí)測(cè)數(shù)據(jù)和氣象數(shù)據(jù)的預(yù)報(bào)模型作為另一個(gè)“專家”。然后采用某種策略如加權(quán)平均、Stacking集成將兩個(gè)“專家”的預(yù)測(cè)結(jié)果融合。優(yōu)點(diǎn)不依賴于商業(yè)模型的誤差模式自主性更強(qiáng)。如果我們的自建模型足夠優(yōu)秀甚至可以主導(dǎo)最終結(jié)果。缺點(diǎn)需要構(gòu)建一個(gè)全新的、性能不錯(cuò)的預(yù)報(bào)模型工作量最大。且融合權(quán)重的確定需要技巧容易過(guò)擬合。適用場(chǎng)景商業(yè)模型質(zhì)量一般而我們對(duì)自己的建模能力有信心且有足夠的數(shù)據(jù)和算力訓(xùn)練一個(gè)新模型。我們的選擇與理由經(jīng)過(guò)分析和初步試驗(yàn)我們選擇了殘差學(xué)習(xí)法作為主框架。原因有三第一誤差分析表明商業(yè)模型的誤差在特定氣象條件下如靜穩(wěn)天氣呈現(xiàn)明顯的系統(tǒng)性正偏差預(yù)報(bào)偏高這符合殘差學(xué)習(xí)的假設(shè)。第二殘差學(xué)習(xí)框架物理意義明確在論文中易于闡述和解釋。第三相對(duì)于直接回歸殘差學(xué)習(xí)的預(yù)測(cè)目標(biāo)誤差值量級(jí)更小模型可能更快收斂。我們以商業(yè)預(yù)報(bào)誤差作為目標(biāo)變量構(gòu)建了包含滯后污染物、氣象要素及其交互項(xiàng)的特征集使用LightGBM回歸器進(jìn)行訓(xùn)練。4. 模型實(shí)現(xiàn)、評(píng)估與論文呈現(xiàn)要點(diǎn)確定了“殘差學(xué)習(xí)LightGBM”的框架后接下來(lái)的工作就是具體的實(shí)現(xiàn)、調(diào)優(yōu)和結(jié)果分析。4.1 模型訓(xùn)練的關(guān)鍵細(xì)節(jié)數(shù)據(jù)劃分切忌使用隨機(jī)劃分時(shí)間序列數(shù)據(jù)必須按時(shí)間順序劃分訓(xùn)練集、驗(yàn)證集和測(cè)試集。例如用前70%時(shí)間的數(shù)據(jù)做訓(xùn)練中間15%做驗(yàn)證用于調(diào)參和早停最后15%做測(cè)試用于最終評(píng)估且在整個(gè)訓(xùn)練調(diào)參過(guò)程中完全不可見(jiàn)。這才能模擬真實(shí)的預(yù)報(bào)場(chǎng)景評(píng)估模型的泛化能力。損失函數(shù)選擇回歸問(wèn)題常用的損失函數(shù)是均方誤差MSE或平均絕對(duì)誤差MAE。MSE對(duì)大的誤差懲罰更重傾向于減少極端錯(cuò)誤MAE則更穩(wěn)健對(duì)異常值不敏感。在空氣質(zhì)量預(yù)報(bào)中我們更關(guān)心污染峰值高濃度的預(yù)報(bào)準(zhǔn)確性因?yàn)檫@對(duì)預(yù)警更重要。因此可以考慮使用加權(quán)均方誤差給高濃度樣本賦予更高的權(quán)重?;蛘咧苯硬捎梅治粩?shù)損失例如預(yù)測(cè)90分位數(shù)這樣可以更好地把握污染的上限。LightGBM調(diào)參要點(diǎn)num_leaves這是控制模型復(fù)雜度的關(guān)鍵參數(shù)。不宜過(guò)大否則容易過(guò)擬合??梢詮?1、63開(kāi)始嘗試。min_data_in_leaf葉子節(jié)點(diǎn)最小樣本數(shù)防止過(guò)擬合的有效工具。對(duì)于時(shí)間序列可以設(shè)置得稍大一些如20-50。feature_fraction/bagging_fraction每次迭代隨機(jī)選取部分特征或數(shù)據(jù)進(jìn)行訓(xùn)練這是集成學(xué)習(xí)防止過(guò)擬合的核心。lambda_l1,lambda_l2L1和L2正則化進(jìn)一步控制模型復(fù)雜度。一定要使用早停法設(shè)置一個(gè)驗(yàn)證集當(dāng)驗(yàn)證集誤差連續(xù)N輪如50輪不再下降時(shí)停止訓(xùn)練。這是防止過(guò)擬合最簡(jiǎn)單有效的方法。import lightgbm as lgb from sklearn.model_selection import TimeSeriesSplit import numpy as np # 假設(shè) X, y 已經(jīng)是特征矩陣和目標(biāo)向量商業(yè)預(yù)報(bào)誤差 # 并且數(shù)據(jù)已經(jīng)按時(shí)間排序 # 時(shí)間序列交叉驗(yàn)證劃分 tss TimeSeriesSplit(n_splits5) fold_scores [] for train_idx, val_idx in tss.split(X): X_train, X_val X.iloc[train_idx], X.iloc[val_idx] y_train, y_val y.iloc[train_idx], y.iloc[val_idx] # 創(chuàng)建LightGBM數(shù)據(jù)集 lgb_train lgb.Dataset(X_train, y_train) lgb_eval lgb.Dataset(X_val, y_val, referencelgb_train) # 參數(shù)設(shè)置 params { boosting_type: gbdt, objective: regression, metric: {l2, l1}, num_leaves: 31, learning_rate: 0.05, feature_fraction: 0.9, bagging_fraction: 0.8, bagging_freq: 5, verbose: -1, lambda_l1: 0.1, lambda_l2: 0.1, min_data_in_leaf: 20 } # 訓(xùn)練使用早停 gbm lgb.train(params, lgb_train, num_boost_round2000, valid_sets[lgb_train, lgb_eval], valid_names[train, eval], callbacks[lgb.early_stopping(stopping_rounds50), lgb.log_evaluation(100)]) # 預(yù)測(cè)并評(píng)估 y_pred_val gbm.predict(X_val, num_iterationgbm.best_iteration) # 計(jì)算評(píng)估指標(biāo)如MAE, RMSE mae np.mean(np.abs(y_val - y_pred_val)) fold_scores.append(mae) print(fFold MAE: {mae:.4f}) print(fAverage MAE across folds: {np.mean(fold_scores):.4f}) # 全量數(shù)據(jù)重新訓(xùn)練最終模型使用早停確定的最佳輪數(shù) final_model lgb.train(params, lgb.Dataset(X, y), num_boost_roundgbm.best_iteration) # 使用之前找到的最佳輪數(shù)4.2 評(píng)估指標(biāo)與結(jié)果分析在競(jìng)賽中選擇合適的評(píng)估指標(biāo)并對(duì)其進(jìn)行深入分析是論文獲得高分的關(guān)鍵。必須使用的指標(biāo)MAE (平均絕對(duì)誤差)直觀反映平均誤差大小。RMSE (均方根誤差)對(duì)大的誤差更敏感能衡量預(yù)報(bào)的穩(wěn)定性。R2 (決定系數(shù))反映模型對(duì)數(shù)據(jù)波動(dòng)的解釋能力。對(duì)比商業(yè)模型和二次模型的R2能清晰展示改進(jìn)幅度。IA (一致性指數(shù))在環(huán)境領(lǐng)域常用越接近1越好能綜合衡量預(yù)測(cè)值與觀測(cè)值的接近程度和一致性。深入分析維度分濃度段評(píng)估分別計(jì)算在優(yōu)、良、輕度污染等不同等級(jí)下各模型的MAE、RMSE和預(yù)報(bào)準(zhǔn)確率等級(jí)預(yù)報(bào)正確率。這能證明你的模型不僅在整體上更優(yōu)在關(guān)鍵的高污染時(shí)段也更可靠。典型過(guò)程線對(duì)比在測(cè)試集中選取幾個(gè)典型的污染過(guò)程如一次持續(xù)3天的霧霾過(guò)程繪制實(shí)測(cè)值、商業(yè)預(yù)報(bào)值、你的修正預(yù)報(bào)值的時(shí)間序列對(duì)比圖。一張清晰的、能顯示你模型成功“糾偏”的圖勝過(guò)千言萬(wàn)語(yǔ)。誤差分布對(duì)比繪制商業(yè)模型和你的模型的誤差分布直方圖或箱線圖。理想情況下你的模型誤差分布應(yīng)該更窄方差小且均值更接近0偏差小。4.3 論文寫(xiě)作與圖表呈現(xiàn)心法數(shù)學(xué)建模競(jìng)賽歸根結(jié)底是“建?!薄罢撐摹薄R粋€(gè)優(yōu)秀的模型需要一個(gè)優(yōu)秀的表達(dá)。邏輯主線要清晰摘要和引言部分就要明確拋出“商業(yè)模型存在系統(tǒng)性誤差→我們通過(guò)誤差分析定位了誤差模式→采用殘差學(xué)習(xí)框架構(gòu)建修正模型→實(shí)證表明修正模型全面優(yōu)于原模型”這條主線。圖表是王道一張圖說(shuō)明你的整體建模流程流程圖讓評(píng)委一眼看懂你的技術(shù)路線。用組合圖展示誤差分析結(jié)果如誤差的日變化箱線圖、隨風(fēng)速變化的散點(diǎn)圖。特征重要性圖LightGBM可直接輸出非常重要它能直觀展示哪些因素如前期污染物濃度、特定氣象條件對(duì)修正誤差貢獻(xiàn)最大這本身就是強(qiáng)有力的分析。結(jié)果對(duì)比圖一定要精心設(shè)計(jì)。除了時(shí)間序列對(duì)比圖還可以畫(huà)散點(diǎn)圖預(yù)測(cè)值 vs 觀測(cè)值并添加yx的參考線。完美的預(yù)測(cè)應(yīng)該所有點(diǎn)都落在這條線上??梢詫?duì)比商業(yè)模型和你的模型的散點(diǎn)圖看誰(shuí)的點(diǎn)更緊密地分布在參考線周圍。模型假設(shè)與局限性在論文中主動(dòng)討論模型的假設(shè)如誤差的可預(yù)測(cè)性、局限性如對(duì)于極端罕見(jiàn)氣象條件的預(yù)報(bào)能力可能不足以及未來(lái)改進(jìn)方向如引入更多源數(shù)據(jù)這體現(xiàn)了思維的嚴(yán)謹(jǐn)性和深度是加分項(xiàng)。代碼與可復(fù)現(xiàn)性雖然論文正文不貼大量代碼但在附錄或提交的附件中提供清晰、有注釋的核心代碼片段如特征工程、模型訓(xùn)練的關(guān)鍵部分能極大增加論文的可信度。最后想說(shuō)的是解決“華為杯”這類競(jìng)賽題目沒(méi)有唯一的正確答案。評(píng)委看重的是你分析問(wèn)題的邏輯、建模過(guò)程的嚴(yán)謹(jǐn)、結(jié)果驗(yàn)證的全面以及論文表述的清晰。從數(shù)據(jù)清洗的耐心到特征工程的巧思再到模型選擇的權(quán)衡最后到論文寫(xiě)作的雕琢每一個(gè)環(huán)節(jié)都考驗(yàn)著團(tuán)隊(duì)的綜合實(shí)力。希望這篇基于2021年B題的長(zhǎng)文復(fù)盤(pán)能為你打開(kāi)一扇窗看到數(shù)學(xué)建模競(jìng)賽背后那些更本質(zhì)、更值得打磨的東西。真正的收獲遠(yuǎn)不止于一個(gè)獎(jiǎng)項(xiàng)而是這套從模糊問(wèn)題到清晰解決方案的完整思維與執(zhí)行能力。