家庭用電預(yù)測:特征工程與避坑指南)
簡介這是一份機(jī)器學(xué)習(xí)回歸算法實戰(zhàn)資源面向數(shù)據(jù)科學(xué)初學(xué)者與需要完成課程項目的學(xué)生旨在解決家庭用電量預(yù)測問題。資源系統(tǒng)覆蓋線性回歸、多項式回歸、決策樹回歸、隨機(jī)森林回歸與支持向量回歸等主流算法并涉及缺失值處理、異常值檢測、標(biāo)準(zhǔn)化、特征工程及時間序列分析同時展示MSE、RMSE、R2等評估指標(biāo)的使用。壓縮包共4個Python腳本0205家庭用電預(yù)測.py按算法難度遞進(jìn)編排適合對照調(diào)試、對比不同模型效果整體大小僅9KB輕量無依賴負(fù)擔(dān)。已有262人下載學(xué)習(xí)適合用于入門實踐、作業(yè)參考或算法原理驗證可幫助讀者快速跑通回歸建模全流程并理解各模型在實際數(shù)據(jù)中的適用場景與調(diào)參思路。1. 家庭用電預(yù)測一個被低估的回歸問題切入點(diǎn)月初看到電費(fèi)單才后悔上月空調(diào)沒節(jié)制這是絕大多數(shù)家庭的常態(tài)。但如果你手里有一套智能電表或者能讀到家庭總閘的功率數(shù)據(jù)完全可以把「后悔」變成「預(yù)判」用機(jī)器學(xué)習(xí)回歸算法基于過去一段時間的用電曲線、時間戳和天氣特征預(yù)測未來一小時甚至未來一天的家庭用電量。這背后就是典型的回歸任務(wù)——輸入是時間、歷史負(fù)荷、溫度等特征輸出是一個連續(xù)數(shù)值未來某個時刻的用電功率。這個 zip 包標(biāo)題里的「回歸算法實現(xiàn)家庭用電預(yù)測」拆開看就是三件事把家庭用電數(shù)據(jù)整理成監(jiān)督學(xué)習(xí)樣本、構(gòu)建能擬合用電曲線的回歸模型、以及把預(yù)測結(jié)果落到能用的場景里。適合誰去做手里有計量數(shù)據(jù)、想給自家或某棟樓做用電分析的開發(fā)者以及剛?cè)腴T機(jī)器學(xué)習(xí)、想找一個不涉及圖像和文本的干凈回歸案例來練手的人。這類問題的好處是數(shù)據(jù)容易理解、特征可以自己構(gòu)造、評估指標(biāo)直觀翻車點(diǎn)卻不少下面按我實際做過的路線來講。2. 為什么家庭用電預(yù)測適合用回歸算法問題定義與特征構(gòu)造2.1 先定性這是回歸任務(wù)不是分類任務(wù)家庭用電預(yù)測的目標(biāo)是給出未來時刻的功率數(shù)值比如「15 分鐘后這棟房子大概用 1.8 kW」。這會讓人猶豫能不能把用電量分成「高/中/低」三檔做成分類能做但代價很大——分類會丟掉用電強(qiáng)度的連續(xù)信息當(dāng)你需要判斷「要不要開熱水器、會不會超容量」時分類結(jié)果沒法給出精確參考?;貧w輸出的是一個連續(xù)值能直接和電表讀數(shù)、電網(wǎng)容量、電費(fèi)單價做算術(shù)運(yùn)算這是它在用電場景里的根本優(yōu)勢。另外一類選擇是時序模型LSTM、GRU它們確實能捕捉長距離依賴但對數(shù)據(jù)量和訓(xùn)練調(diào)參的要求高得多家庭用電數(shù)據(jù)往往只有幾個月到一兩年的粒度樣本量不大樹模型和線性模型在這種規(guī)模下更容易穩(wěn)定出效果。我見過某開發(fā)者用一萬多條小時級記錄去訓(xùn) LSTM結(jié)果比隨機(jī)森林還差問題就出在樣本太少、特征時序沒構(gòu)造好而不是模型不夠先進(jìn)。回歸算法在這個規(guī)模下是性價比最高的起點(diǎn)。2.2 特征設(shè)計用電預(yù)測的勝負(fù)手在特征不在模型用電曲線的規(guī)律性很強(qiáng)晚上高、白天低、工作日和周末不一樣、夏天開空調(diào)和冬天開暖氣也不一樣。這些規(guī)律沒法直接喂給模型必須轉(zhuǎn)成特征。我一般把特征拆成三組。第一組是時間特征。小時數(shù)0~23、星期幾0~6、是否周末、是否節(jié)假日這幾列能幫模型區(qū)分不同時段的用電模式。時間特征要用數(shù)值編碼小時可以同時用周期編碼sin/cos因為 23 點(diǎn)和 0 點(diǎn)其實相鄰直接喂「23」和「0」兩個數(shù)字線性模型會以為它們差得很遠(yuǎn)。第二組是滯后特征過去 1 小時、24 小時、168 小時即一周前同一時刻的用電量。家庭用電有很強(qiáng)的日周期和周周期滯后特征是預(yù)測準(zhǔn)確率的最大貢獻(xiàn)者。第三組是滾動統(tǒng)計特征過去 6 小時均值、過去 24 小時最大值、用電量標(biāo)準(zhǔn)差這些能刻畫最近的用電趨勢和波動水平。外部環(huán)境特征也不能忽略溫度和濕度對空調(diào)/暖氣負(fù)荷影響很大。常見做法是把氣象站發(fā)布的逐小時溫度、濕度按時間戳 join 進(jìn)來同時把體感溫度或「當(dāng)日最高溫」這類衍生變量一起放進(jìn)去。如果拿不到氣象數(shù)據(jù)就退而求其次用「日期序號」從數(shù)據(jù)集起點(diǎn)算起的天數(shù)讓模型自己學(xué)季節(jié)性趨勢——效果會差一點(diǎn)但至少能捕捉大方向。2.3 評估指標(biāo)看 MAE、RMSE更要把誤差換算成「度電」回歸模型的評估不能用準(zhǔn)確率常用的是 MAE、RMSE、MAPE。MAE 是平均絕對誤差單位是 kW直接解釋為「平均每次預(yù)測偏了多少千瓦」RMSE 對大誤差懲罰更重適合你特別在意峰值預(yù)測不準(zhǔn)的場景MAPE 把誤差歸一化成百分比方便和不同用電量級別的家庭對比。我自己會額外算一個「誤差電量」如果預(yù)測值比實際值平均高 0.2 kW持續(xù)一小時就是 0.2 度電乘以電費(fèi)單價就能估算預(yù)測誤差帶來的經(jīng)濟(jì)損失。這對說服別人接受你的模型很有用——用「誤差造成的電費(fèi)偏差」比單純報 RMSE 更直觀。需要留意的是MAPE 在用電量接近 0 的深夜時段會爆炸因為分母太小所以評估時要么把深夜樣本單獨(dú)看要么在 MAPE 計算公式里給分母加一個平滑項。3. 把用電數(shù)據(jù)轉(zhuǎn)成回歸樣本從原始表到可訓(xùn)練數(shù)據(jù)集3.1 數(shù)據(jù)清洗與重采樣先用對粒度再談模型家庭用電原始數(shù)據(jù)通常是一條條功率記錄來自智能插座或電表間隔可能是秒級也可能不均勻。訓(xùn)練回歸模型前要先把數(shù)據(jù)重采樣成統(tǒng)一粒度我一般用小時粒度——預(yù)測未來 1~24 小時的需求小時級足夠分鐘級反而會讓訓(xùn)練集膨脹、收益卻很小。重采樣時注意用電量在 15 分鐘內(nèi)的均值比瞬時值穩(wěn)定得多所以優(yōu)先用均值聚合而不是直接取某一條記錄。import pandas as pd df pd.read_csv(household_power.csv, parse_dates[timestamp]) df.set_index(timestamp, inplaceTrue) # 統(tǒng)一成小時粒度用電功率取均值缺失值用前向填充 hourly df[power].resample(1h).mean() hourly hourly.fillna(methodffill) # 只保留連續(xù)且完整的時間范圍去掉頭部和尾部不完整的片段 hourly hourly.loc[2022-01-01:2023-12-31] print(hourly.describe())這段代碼的用途是把任意間隔的原始記錄轉(zhuǎn)成時間索引對齊的小時序列。前向填充能處理短時間缺失但如果某段連續(xù)缺失超過數(shù)小時前向填充會讓模型學(xué)到「用電量一直不變」的假規(guī)律所以我在代碼里限制了時間范圍把不完整的首尾切掉。resample 的規(guī)則里1h是按小時對齊如果你的數(shù)據(jù)來自不同時區(qū)先統(tǒng)一轉(zhuǎn)成當(dāng)?shù)貢r間再重采樣避免早晨和晚上的用電高峰被整體平移一個小時。3.2 構(gòu)造監(jiān)督學(xué)習(xí)樣本滯后特征必須放在同一條樣本里模型需要的是「特征矩陣 X 目標(biāo)值 y」的監(jiān)督學(xué)習(xí)格式這一步核心是shift()操作。預(yù)測未來 1 小時的樣本長這樣X 是當(dāng)前時刻的時間特征、過去 N 小時的用電量、天氣數(shù)據(jù)y 是未來 1 小時的用電量。構(gòu)造時最容易犯的錯是把滯后特征算到未來去了——比如用 t1 時刻的用電量去預(yù)測 t1這在訓(xùn)練時看起來準(zhǔn)確率極高上線后立刻崩掉。import numpy as np def make_features(hourly: pd.Series, temp: pd.Series None, lags[1, 2, 24, 168]): data pd.DataFrame({power: hourly}) data[hour] hourly.index.hour data[dayofweek] hourly.index.dayofweek data[is_weekend] (data[dayofweek] 5).astype(int) # 周期編碼小時保留“23點(diǎn)和0點(diǎn)相鄰”這個信息 data[hour_sin] np.sin(2 * np.pi * data[hour] / 24) data[hour_cos] np.cos(2 * np.pi * data[hour] / 24) for lag in lags: data[flag_{lag}h] hourly.shift(lag) # 滾動統(tǒng)計特征過去6小時的均值和過去24小時的最大值 data[roll_mean_6h] hourly.rolling(6).mean() data[roll_max_24h] hourly.rolling(24).max() if temp is not None: data[temp] temp return data data make_features(hourly) data[target] data[power].shift(-1) # 預(yù)測未來1小時 data data.dropna()代碼里每一列的含義都在名字里。滯后特征lag_1h是上一小時用電量lag_24h是昨天同一時刻的用電量lag_168h是上周同一時刻的用電量分別對應(yīng)短時慣性、日周期和周周期。滾動窗口特征用rolling().mean()和rolling().max()做出來它們對捕捉「空調(diào)剛開機(jī)還在爬坡」這類狀態(tài)很有幫助。target用shift(-1)表示把未來一小時的用電量拉到當(dāng)前行——這一步是監(jiān)督學(xué)習(xí)樣本構(gòu)造的核心滯后特征和 target 的 shift 方向一定不能搞反。dropna 去掉構(gòu)造滯后特征時產(chǎn)生的前幾行空值。3.3 時序切分隨機(jī)打亂是回歸預(yù)測里最隱蔽的死法分類任務(wù)里隨機(jī)劃分訓(xùn)練集和驗證集是常規(guī)操作但時間序列不行。用電數(shù)據(jù)有強(qiáng)自相關(guān)性上周四的用電模式和這周四接近如果隨機(jī)打亂模型會直接記住「這個時間段的用電量大概是多少」驗證集里全是它見過的鄰近樣本看起來效果極好部署后立刻現(xiàn)原形。正確做法是按時間順序切分前 80% 的時間段做訓(xùn)練后 20% 做驗證。train_size int(len(data) * 0.8) train, val data.iloc[:train_size], data.iloc[train_size:] feature_cols [c for c in data.columns if c ! target] X_train, y_train train[feature_cols], train[target] X_val, y_val val[feature_cols], val[target]3.4 三個基線模型先線性后樹模型一步一個腳印先把線性回歸跑通拿到一個基線分?jǐn)?shù)再上隨機(jī)森林和梯度提升樹。線性回歸的好處是能快速驗證特征構(gòu)造有沒有硬傷如果線性回歸的 RMSE 大得離譜多半是特征里混進(jìn)了非數(shù)值類型或者有大量缺失值沒處理如果線性回歸表現(xiàn)還行但樹模型提升不明顯說明特征和目標(biāo)之間主要是線性關(guān)系不必盲目堆模型復(fù)雜度。這種先基線后增強(qiáng)的順序能幫你定位問題是出在特征還是出在模型。from sklearn.ensemble import RandomForestRegressor from sklearn.linear_model import LinearRegression from sklearn.ensemble import GradientBoostingRegressor from sklearn.metrics import mean_absolute_error, mean_squared_error models { linear: LinearRegression(), random_forest: RandomForestRegressor(n_estimators200, max_depth12, random_state42, n_jobs-1), gbr: GradientBoostingRegressor(n_estimators300, max_depth6, learning_rate0.05, random_state42) } for name, model in models.items(): model.fit(X_train, y_train) pred model.predict(X_val) mae mean_absolute_error(y_val, pred) rmse mean_squared_error(y_val, pred, squaredFalse) print(f{name}: MAE{mae:.3f} kW, RMSE{rmse:.3f} kW)參數(shù)不是拍腦袋定的隨機(jī)森林的max_depth12是讓樹有足夠深度去擬合復(fù)雜的交互關(guān)系但又不至于深到過擬合n_estimators200在這個樣本量下已經(jīng)是穩(wěn)健區(qū)間再加大收益很小、耗時翻倍。梯度提升樹的學(xué)習(xí)率設(shè)成0.05配合 300 棵樹這個組合在小時級用電數(shù)據(jù)上通常是省心的默認(rèn)值。跑完以后對比三個數(shù)字線性回歸如果 MAE 在 0.3 kW 左右說明特征已經(jīng)抓住了主要規(guī)律隨機(jī)森林和 GBR 如果能壓到 0.2 kW 以下就算入門了。4. 必調(diào)參數(shù)與多步預(yù)測策略從預(yù)測 1 小時到預(yù)測 24 小時4.1 滯后窗口的選擇預(yù)測步長不同特征配置完全不同上面 3.2 的例子默認(rèn)預(yù)測未來 1 小時滯后特征是[1, 2, 24, 168]。如果要預(yù)測未來 24 小時即明天的用電曲線特征配置就要變當(dāng)天 0 點(diǎn)去預(yù)測 24 小時后時lag_1h是昨天 23 點(diǎn)的用電量它和明天 0 點(diǎn)的用電量相關(guān)性已經(jīng)弱了很多此時lag_24h昨天 0 點(diǎn)和lag_168h上周 0 點(diǎn)反而更有參考價值。經(jīng)驗法則是預(yù)測步長越長短時滯后特征1~2 小時的權(quán)重越低周期滯后特征24 小時、168 小時的權(quán)重越高。我一般會把滯后特征設(shè)成幾組并排對比[1, 2, 3]、[24, 48]、[168, 336]分別覆蓋超短期慣性、日周期、周周期。如果預(yù)測目標(biāo)改成未來 24 小時的平均用電量還可以把滾動窗口調(diào)大到rolling(24).mean()把「過去一天的總用電量」這個強(qiáng)特征直接暴露給模型。用樹模型的特征重要性去看如果lag_24h始終排第一說明日周期性是你這戶用電數(shù)據(jù)里最強(qiáng)的規(guī)律。參數(shù)調(diào)整節(jié)奏建議這樣走固定預(yù)測目標(biāo)為未來 1 小時 → 只調(diào)滯后特征 → 只看驗證集 MAE → 找到滯后特征組合后 → 再調(diào)樹模型深度和學(xué)習(xí)率。不要同時調(diào)整所有旋鈕不然根本分不清效果變化來自哪個參數(shù)。4.2 樹模型參數(shù)小心 max_depth 和 min_samples_leaf 的配合在家庭用電這種上千到上萬樣本的規(guī)模里隨機(jī)森林和梯度提升樹最容易翻車的參數(shù)不是n_estimators而是讓單棵樹長得過深。max_depth太大比如 30時單棵樹會記住訓(xùn)練集里的個別極端用電日驗證集上一旦出現(xiàn)沒見過的峰值預(yù)測就會跑偏。min_samples_leaf 是另一個常被忽略的參數(shù)它控制葉子節(jié)點(diǎn)的最少樣本數(shù)設(shè)得大一點(diǎn)能防止樹去擬合那些只出現(xiàn)一次的深夜低用電量樣本。一個省心的檢查方式是看訓(xùn)練集和驗證集的 MAE 差距如果訓(xùn)練 MAE 是 0.05 而驗證 MAE 是 0.25說明嚴(yán)重過擬合優(yōu)先調(diào)大min_samples_leaf到 5~10同時把max_depth往下壓如果兩邊都高到 0.3 以上說明欠擬合先回去加滯后特征而不是繼續(xù)加深模型。以下是一組我在小時級用電數(shù)據(jù)上常用的參數(shù)范圍。參數(shù)常見范圍調(diào)整方向說明n_estimators100~400不動優(yōu)先調(diào)其他參數(shù)超過 200 后收益急劇變小只在最終訓(xùn)練時加大max_depth6~15過擬合時減小家庭用電數(shù)據(jù)量不大沒必要超過 15min_samples_leaf3~10過擬合時增大比 max_depth 更平滑地控制過擬合learning_rateGBR0.03~0.1欠擬合時調(diào)大過擬合時調(diào)小配合 n_estimators先定 learning_rate 再定樹數(shù)量max_featuresauto/sqrt樹之間相關(guān)性高時調(diào)小讓每棵樹更“獨(dú)立”提升集成效果參數(shù)說明n_estimators在這個規(guī)模下 200 和 400 的差距基本在 0.01 kW 以內(nèi)沒必要用 GridSearch 去掃max_features用默認(rèn)的 sqrt隨機(jī)森林/ 1.0GBR起步如果發(fā)現(xiàn)樹之間的預(yù)測結(jié)果非常一致、像一個模型在重復(fù)投票就調(diào)小到 0.6 左右讓樹更具多樣性。調(diào)參的終點(diǎn)不是驗證集 MAE 最低而是訓(xùn)練集和驗證集的誤差差距在一個可接受的范圍內(nèi)。4.3 多步預(yù)測單步模型怎么滾動預(yù)測未來 24 小時模型輸出的是「未來 1 小時的用電量」要預(yù)測未來 24 小時有三種常見做法多輸出回歸、遞歸預(yù)測、直接訓(xùn)練 24 個模型。遞歸預(yù)測是先用當(dāng)前特征預(yù)測 t1再把 t1 的預(yù)測值當(dāng)作滯后特征去預(yù)測 t2不斷滾動到 t24。它實現(xiàn)簡單但誤差會累積第 1 小時預(yù)測偏了 0.1第 2 小時把偏了的 0.1 當(dāng)輸入后面越錯越多通常到第 8 小時以后預(yù)測基本失去參考價值。多輸出回歸是讓模型直接輸出 24 個值對應(yīng)未來 24 小時sklearn 里用MultiOutputRegressor包裝任意回歸模型每個預(yù)測頭單獨(dú)訓(xùn)練。它的好處是 24 小時的誤差相互獨(dú)立不會滾動累積壞處是樣本量沒有增加24 個模型共享同一份訓(xùn)練數(shù)據(jù)模型容量不夠時反而擬合不好。我自己實際用的方案是混合策略用多輸出模型預(yù)測未來 1~6 小時的曲線從第 7 小時開始切到遞歸預(yù)測——先用多輸出的第 6 小時預(yù)測結(jié)果刷新滯后特征再遞歸往后推。這樣既避開了短期的誤差累積又減少了需要訓(xùn)練的全天模型數(shù)量。做多步預(yù)測時驗證集必須按「預(yù)測第 N 小時的誤差」分別報告不能只報全時段平均否則你會以為全天預(yù)測都很準(zhǔn)實際是前面幾小時拉低了整體誤差。5. 家庭用電預(yù)測避坑清單五條血淚經(jīng)驗5.1 時序泄漏驗證集結(jié)果好得離譜先查 shuffle 和 feature 方向現(xiàn)象模型在驗證集上 MAE 只有 0.05 kW比訓(xùn)練集還好或者 RMSE 小到不真實。 原因一是用了train_test_split的默認(rèn)隨機(jī)切分驗證集里全是訓(xùn)練集時間段的鄰近樣本二是構(gòu)造滯后特征或 target 時 shift 方向?qū)懛戳藢?dǎo)致未來信息泄漏進(jìn)了特征。 解決切分改成按時間順序參考 3.3 的代碼并逐個檢查shift(1)到底是把過去的值拉到現(xiàn)在還是把未來的值拉到現(xiàn)在。檢查方法很簡單打印一條樣本看lag_1h是不是樣本 timestamp 前一小時的用電量target是不是樣本后一小時的用電量。5.2 節(jié)假日和社會事件模型把節(jié)假日當(dāng)天當(dāng)成普通工作日現(xiàn)象春節(jié)、國慶這些天預(yù)測值比實際值高出 30%~50%因為模型學(xué)到的規(guī)律是「工作日用電低、周末略高」長假里人在家待著用電曲線更像周末但又有做飯和取暖的高峰。 原因只用「星期幾」做特征模型沒見過長假這種長尾場景。 解決構(gòu)造is_holiday布爾特征把本地法定節(jié)假日按日期生成一列 0/1 加進(jìn)特征矩陣。長假前后的幾天也要單獨(dú)處理放假前一天晚上用電量會異常升高這可以做成is_day_before_holiday。沒有官方節(jié)假日表時退而求其次把日期序號做成特征讓樹模型自己學(xué)著分開「正常日」和「異常日」。5.3 溫度滯后今天的氣溫不會立刻影響今天的用電現(xiàn)象加入溫度特征后模型效果反而變差或者特征重要性里溫度排第一但預(yù)測依舊不準(zhǔn)。 原因空調(diào)和暖氣對氣溫變化的響應(yīng)有滯后性人體對溫度的感受也不光是當(dāng)前小時的溫度連續(xù)幾個小時的累積熱效應(yīng)影響更大。 解決不要只加入當(dāng)前小時的溫度改用「過去 24 小時平均溫度」「過去 48 小時平均溫度」以及「當(dāng)日最高溫」這些滑動平均溫度特征。我一般會構(gòu)造temp_avg_24h和temp_max_1d再判斷滯后溫度特征的重要性如果temp_avg_24h遠(yuǎn)高于temp說明這戶用電明顯受到累積熱效應(yīng)影響。5.4 峰值預(yù)測平均誤差好看關(guān)鍵時刻的尖峰全偏現(xiàn)象驗證集 MAE 不錯但你去看每天 18:00~21:00 的晚高峰預(yù)測值普遍偏低 0.5 kW 甚至更多剛好是做飯熱水器同時工作的時段。 原因家庭用電的峰谷差異極大峰值樣本在訓(xùn)練集里占比少回歸模型為了降低整體誤差會把預(yù)測值往中位數(shù)方向收縮峰值被犧牲了。 解決訓(xùn)練時給高峰時段樣本加權(quán)比如對 17:00~22:00 的樣本在損失函數(shù)里乘 1.5 或 2.0 的權(quán)重或者單獨(dú)訓(xùn)練一個「高峰時段模型」只用高峰時段的數(shù)據(jù)訓(xùn)練預(yù)測時先判斷當(dāng)前時間是否在高峰窗口內(nèi)。如果目標(biāo)是電網(wǎng)側(cè)的容量管理峰值預(yù)測的準(zhǔn)確率比全天平均誤差重要得多評估時建議分組報告高峰時段的 MAE。5.5 特征管道不一致訓(xùn)練時好好的部署后預(yù)測全亂現(xiàn)象模型在驗證回歸腳本里表現(xiàn)正常你把特征構(gòu)造代碼復(fù)制到線上服務(wù)后預(yù)測值普遍偏移。 原因最常見的兩個一是線上構(gòu)造滯后特征時歷史數(shù)據(jù)庫的時間沒對齊lag_24h取到的不一定是 24 小時前那條記錄二是訓(xùn)練時做了fillna(0)或歸一化但線上推理時沒有做同樣的處理尤其是新用戶沒有足夠歷史數(shù)據(jù)時滯后特征全是空值。 解決把特征構(gòu)造封裝成一個函數(shù)訓(xùn)練和推理共用同一份代碼不要在兩個地方各寫一份。線上推理時如果滯后特征為空不要填 0用前向填充最近的可用值并在模型側(cè)記錄哪些樣本是「冷啟動」樣本——它們天然預(yù)測不準(zhǔn)單獨(dú)標(biāo)記出來比硬塞一個好結(jié)果更重要。6. 小步快跑的進(jìn)階技巧從預(yù)測到可解釋的用電顧問回歸模型跑通后的下一個層面不是換更大的模型而是把預(yù)測結(jié)果變成能指導(dǎo)行動的信息。我最常用的技巧是特征重要性分析拿訓(xùn)練好的隨機(jī)森林或梯度提升樹輸出feature_importances_你會看到lag_24h和hour幾乎總是排在最前面這能反過來幫你理解這戶人家的用電習(xí)慣——是晚上固定時間高還是空調(diào)連續(xù)運(yùn)行幾天不關(guān)。帶交互作用的 SHAP 值分析能進(jìn)一步看出「高溫 傍晚」這兩個特征組合時預(yù)測會跳升這比單看重要性的信息量大得多。另一個可以做的小工具是把預(yù)測結(jié)果和實時功率做差值監(jiān)控當(dāng)實際用電量連續(xù) 30 分鐘顯著高于預(yù)測值比如超過 1 個標(biāo)準(zhǔn)差就推送一條消息提醒「家里可能有大功率設(shè)備運(yùn)行異?;蛲P(guān)空調(diào)」。這類應(yīng)用不要求預(yù)測絕對精準(zhǔn)更看重趨勢偏離的靈敏度和誤報率控制。做完這一層你手里的東西就不只是「一個預(yù)測模型」而是一個有輸入有輸出、能被家人信任的用電顧問。建議你先從自己家的數(shù)據(jù)跑通第 3 章的最小流程隨機(jī)森林拿到 0.2 kW 以內(nèi)的 MAE 后再考慮往多步預(yù)測和部署走。我自己的習(xí)慣是每周跑一次預(yù)測并復(fù)盤誤差最大的三個時段基本上一兩周下來就能總結(jié)出這戶人家獨(dú)有的用電規(guī)律比盲目調(diào)參有用得多。希望幫到你。本文還有配套的精品資源點(diǎn)擊獲取