文章目錄[隱藏]
Kaggle賽題總結:預測客戶太陽能電量
賽題名稱:Enefit - Predict Energy Behavior of Prosumers
賽題類型:時間序列、數據挖掘
賽題任務:預測產(chan) 消者能源模式並最大限度地減少不平衡成本。
https://www.kaggle.com/competitions/predict-energy-behavior-of-prosumers
unsetunset比賽介紹unsetunset
競賽旨在解決(jue) 能源不平衡的問題,即預計使用的能源與(yu) 實際使用或產(chan) 生的能源不符。自發自用者是既消耗又產(chan) 生能源的個(ge) 體(ti) ,他們(men) 在造成能源不平衡方麵起到了重要作用。盡管他們(men) 隻占所有能源消費者的一小部分,但他們(men) 不可預測的能源使用行為(wei) 給能源公司帶來了物流和財務問題。
如果不加以解決(jue) ,可能會(hui) 導致運營成本增加、電網不穩定以及能源資源的低效利用。如果這個(ge) 問題得到有效解決(jue) ,將顯著降低不平衡成本,提高電網的可靠性,並使自發自用者更高效和可持續地融入能源係統中。
unsetunset賽題任務unsetunset
在這個(ge) 競賽中,您的任務是開發一個(ge) 預測模型,以估計在愛沙尼亞(ya) 安裝了太陽能電池板的能源客戶所產(chan) 生和消耗的電量。為(wei) 了完成這個(ge) 任務,您將獲得多種數據來源,包括天氣數據、能源價(jia) 格數據以及已安裝的光伏容量信息。
unsetunset評估指標unsetunset
根據預測回報與(yu) 觀測目標之間的平均絕對誤差 (MAE) 評估提交內(nei) 容。公式由下式給出:
𝑛 is the total number of data points.
is the predicted value for data point i.
s the observed value for data point i.
必須使用提供的 python 時間序列 API 提交本次競賽,這可確保模型不會(hui) 及時向前窺視。
unsetunset數據集描述unsetunset
數據文件包括了有關(guan) 能源消費者、天氣、能源價(jia) 格以及曆史天氣的信息,供您用於(yu) 構建預測模型。通過分析這些數據,您可以努力提高對愛沙尼亞(ya) 能源客戶太陽能電力產(chan) 生和消耗的準確性。
train.csv:
county- 縣的ID代碼。
is_business- 表示能源客戶是否是商業(ye) 客戶的布爾值。
product_type- 契約類型的ID代碼,包括{0: "Combined", 1: "Fixed", 2: "General service", 3: "Spot"}的映射。
target- 相關(guan) 時段的電力消耗或產(chan) 生量。時段由county、is_business和product_type定義(yi) 。
is_consumption- 表示該行數據的目標是電力消耗還是產(chan) 生的布爾值。
datetime- 愛沙尼亞(ya) 時間(EET / EEST)。
data_block_id- 具有相同data_block_id的所有行將在同一時間進行預測。這取決(jue) 於(yu) 實際製定預測時可用的信息。
row_id- 行的唯一標識符。
prediction_unit_id-county、is_business和product_type組合的唯一標識符。測試集中可能會(hui) 出現或消失新的預測單位。
gas_prices.csv:
origin_date- 前一天的天然氣價(jia) 格數據的日期。
forecast_date- 預測價(jia) 格應該生效的日期。
[lowest/highest]_price_per_mwh- 天然氣在前一天的日前市場的最低/最高價(jia) 格,以歐元每兆瓦時計。
data_block_id
client.csv:
product_type- 契約類型。
county- 縣的ID代碼。
eic_count- 能源消耗點(EICs - European Identifier Code)的匯總數量。
installed_capacity- 安裝的光伏太陽能電池板容量,以千瓦為(wei) 單位。
is_business- 表示能源客戶是否是商業(ye) 客戶的布爾值。
date
data_block_id
electricity_prices.csv:
origin_date- 電力價(jia) 格數據的日期。
forecast_date- 預測價(jia) 格應該生效的日期。
euros_per_mwh- 前一天日前市場上電力的價(jia) 格,以歐元每兆瓦時計。
data_block_id
forecast_weather.csv:
[latitude/longitude]- 天氣預報的坐標。
origin_datetime- 天氣預報生成的時間戳。
hours_ahead- 天氣預報生成時間與(yu) 預測天氣之間的小時數。每個(ge) 預測涵蓋總共48小時。
temperature- 地麵上2米高處的空氣溫度(攝氏度)。
dewpoint- 地麵上2米高處的露點溫度(攝氏度)。
cloudcover_[low/mid/high/total]- 不同高度區域(0-2公裏、2-6公裏、6+公裏以及總體(ti) )的雲(yun) 層覆蓋百分比。
10_metre_[u/v]_wind_component- 測量地表上方10米的風速的東(dong) 向/北向分量,以米每秒計。
data_block_id
forecast_datetime- 預測天氣的時間戳,由origin_datetime和hours_ahead生成。
direct_solar_radiation- 每小時沿著與(yu) 太陽方向垂直的平麵上達到地表的直接太陽輻射,以瓦特時每平方米計。
surface_solar_radiation_downwards- 達到地球表麵的水平麵上的太陽輻射,包括直接輻射和散射輻射,以瓦特時每平方米計。
snowfall- 過去一小時內(nei) 的降雪量,以水當量米計。
total_precipitation- 過去一小時內(nei) 在地球表麵降落的液態降水(包括雨和雪)的累積量,以米為(wei) 單位。
historical_weather.csv:
datetime- 日期時間。
temperature- 溫度。
dewpoint- 露點溫度。
rain- 與(yu) 預測約定不同。前一小時的大尺度天氣係統降雨量(毫米)。
snowfall- 與(yu) 預測約定不同。前一小時的降雪量(厘米)。
surface_pressure- 地表處的大氣壓力(百帕)。
cloudcover_[low/mid/high/total]- 與(yu) 預測約定不同。雲(yun) 層覆蓋在不同高度區域(0-3公裏、3-8公裏、8+公裏以及總體(ti) )的百分比。
windspeed_10m- 與(yu) 預測約定不同。地麵上方10米處的風速(米每秒)。
winddirection_10m- 與(yu) 預測約定不同。地麵上方10米處的風向(度)。
shortwave_radiation- 與(yu) 預測約定不同。全球水平輻射(瓦特時每
平方米)。
direct_solar_radiation- 直接太陽輻射。
diffuse_radiation- 與(yu) 預測約定不同。漫射太陽輻射(瓦特時每平方米)。
[latitude/longitude]- 天氣站的坐標。
data_block_id
public_timeseries_testing_util.py - 用於(yu) 運行自定義(yi) 離線API測試的可選文件。查看腳本的文檔字符串以獲取詳細信息。在使用之前,您需要編輯此文件。
example_test_files/ - 用於(yu) 說明API功能的數據,包括API提供的相同文件和列。前三個(ge) data_block_ids是訓練集中最後三個(ge) data_block_ids的重複。
example_test_files/sample_submission.csv - 一個(ge) 有效的樣本提交文件,由API提供。可以參考這個(ge) 筆記本獲取如何使用樣本提交的簡單示例。
example_test_files/revealed_targets.csv - 實際的目標數值,提供了一天的延遲。
enefit/ - 包含API所需文件的文件夾。預期API能夠在不到15分鍾內(nei) 提供所有行,並且將保留不到0.5 GB的內(nei) 存。您需要對這些日期進行預測以推進API,但這些預測不會(hui) 得分。最初會(hui) 提供大約三個(ge) 月的數據,預測期結束時可能提供多達十個(ge) 月的數據。
unsetunset賽題賽程unsetunset
2023 年 11 月 1 日 - 開始日期。
2024 年 1 月 24 日 - 報名截止日期。
2024 年 1 月 24 日 - 合並截止日期。
2024 年 1 月 31 日 - 提交截止日期。
unsetunset優勝方案unsetunset
第1名
https://www.kaggle.com/competitions/predict-energy-behavior-of-prosumers/discussion/472793
使用了4個(ge) XGBoost 模型(分別用於(yu) 兩(liang) 個(ge) 目標和兩(liang) 個(ge) is_consumption)和 2 個(ge) GRU 模型(用於(yu) 兩(liang) 個(ge) 目標)。
所有模型共享相同的 600 個(ge) 特征。
通過平均最佳模型結果進行集成;
使用了簡單的驗證策略,將前 500 天作為(wei) 訓練集,其餘(yu) 天數作為(wei) 驗證集。
僅(jin) 關(guan) 注最終整體(ti) 分數,而不打印單個(ge) 模型的分數。
特征工程主要基於(yu) 合並了除了 gas_df 之外的所有表格,並創建了許多滯後特征。
使用了兩(liang) 種目標計算公式:(target-target_shift2)/installed_capacity和target/installed_capacity。沒有使用目標的其他變體(ti) ,因為(wei) 它們(men) 對最終整體(ti) 分數沒有益處。最終模型如下:
XGBoost 模型並沒有進行太多的調參,隻是簡單地訓練和預測。
GRU 模型的輸入是一個(ge) 張量,形狀為(wei) (batch_size, 24 小時, 600 dense_feature_dim + 6*16 cat_feature_dim)。
通過 NN 模型使最終分數提升了 0.9。
第6名
https://www.kaggle.com/competitions/predict-energy-behavior-of-prosumers/discussion/499397
解決(jue) 方案的核心思想是使用LightGBM模型來預測能源消耗和產(chan) 生,並采用了一係列特征工程和模型融合技術。
特征工程
主要特征來自於(yu) 公共筆記本,但為(wei) 了適應目標,進行了一些微小的轉換。與(yu) 其他參賽者的主要區別在於(yu) ,作者還創建了簡單的基線模型,用於(yu) 每天重新訓練消耗和產(chan) 生模型。
模型
作者訓練了兩(liang) 組LightGBM模型,分別針對產(chan) 生和消耗,每組模型針對4個(ge) 不同的目標進行訓練,總共有8個(ge) 模型。目標包括:
target - target_lag48
target/(target_lag48_avg + 1) - baseline_pred
target/(target_lag48_avg + 1) - target_lag48
target/(target_lag48_avg + 1)
其中,target_lag48_avg是目標的兩(liang) 天滯後值的每日平均值。雖然作者沒有考慮到按安裝容量進行縮放,但其他前幾名的解決(jue) 方案中有提及,這似乎是一個(ge) 不錯的目標。
重新訓練
作者實際上沒有對LightGBM模型進行重新訓練,隻是在基線模型中進行了重新訓練。
混合多個(ge) 模型
最終模型是對具有不同目標、10個(ge) 種子和兩(liang) 個(ge) 超參數設置的模型進行加權組合。總共有160個(ge) 模型。作者提到,他可能應該花時間重新訓練LightGBM模型,而不是創建這麽(me) 大的混合模型,或者經常重新訓練簡單的基線模型。
第7名
https://www.kaggle.com/competitions/predict-energy-behavior-of-prosumers/discussion/499649
成功的部分:
特征工程: 使用了廣泛的特征集合,包括基本特征(如時間相關(guan) 特征、天氣數據)、衍生特征(如曆史與(yu) 預測天氣的差異)以及目標相關(guan) 特征(如生產(chan) 除以安裝容量、消耗除以 EIC 計數)等。
模型選擇和調參: 使用了一係列梯度提升樹模型(如 LGBM、XGBoost、CatBoost、HistGradientBoostingRegressor),並通過 Optuna 進行參數優(you) 化,提高了模型的泛化能力。
集成學習(xi) : 通過平均多個(ge) 模型的預測結果來提高性能,同時通過不同的隨機種子重複訓練模型,以增加模型的多樣性。
未成功的嚐試:
天氣特征差異: 嚐試使用曆史和預測天氣之間的差異作為(wei) 特征,但沒有提高性能。
更多的滯後特征和聚合特征: 嚐試使用更多的滯後特征和其他特征的各種統計聚合,但未見明顯改善。
基於(yu) 物理公式的特征: 嚐試使用基於(yu) 天氣數據的物理公式,但未取得成功。
第10名
https://www.kaggle.com/competitions/predict-energy-behavior-of-prosumers/discussion/472537
作者訓練了兩(liang) 個(ge) 單獨的模型:
隻使用天氣預報特征的模型,以 target/installed_capacity 作為(wei) 目標
隻使用天氣曆史特征的模型,以 target/installed_capacity 作為(wei) 目標
作者還生成了基於(yu) 每單位容量的預估產(chan) 量特征及其交互項,用於(yu) 最終的模型。
將數據分成4部分,並針對每個(ge) (is_business, is_consumption)對訓練模型
創建基線預測,即 max(target_lag2, target_lag4, target_lag7)
新的目標變為(wei) (target + 1)/(baseline_pred + 1)
對於(yu) 每個(ge) 數據分區,使用不同的種子和不同的樣本權重(相等、log1p(baseline_pred)和sqrt(baseline_pred))訓練3個(ge) 模型
共76個(ge) 特征。沒有特別的特征工程。對於(yu) 每個(ge) prediction_unit_id,計算了滯後2、3、4天的誤差,並取它們(men) 的平均值。將 0.2*avg_error 添加到預測中作為(wei) 修正項。這樣,可以提高對於(yu) 持續低估或高估的情況的性能。每8天,在GPU上重新訓練XGBoost模型。這在有新的 prediction_unit_ids 或 eics 增加時特別有用。
將最後9個(ge) 月分為(wei) 3個(ge) 驗證折。同時將公共 LB 作為(wei) 第4個(ge) 折。盡管3折交叉驗證為(wei) 35.73,但公共 LB 為(wei) 61.32。盡管得分相對較差,但與(yu) 公開最佳內(nei) 核進行80/20集成後,作者的得分為(wei) 59.97。我認為(wei) 這是因為(wei) 我的模型具有多樣性,而這個(ge) 問題從(cong) 多樣性集成中獲益良多。順便說一句,通過與(yu) 公開最佳內(nei) 核進行集成,我在交叉驗證得分上也有所提高,但提高幅度明顯較低。
第13名
https://www.kaggle.com/competitions/predict-energy-behavior-of-prosumers/discussion/499364
作者使用了LightGBM開發了獨立的產(chan) 生和消耗模型。對於(yu) 產(chan) 生,他們(men) 使用了兩(liang) 天前的值的差異除以安裝容量。對於(yu) 消耗,他們(men) 使用了兩(liang) 天前的值的差異除以能源消耗點數。在推斷期間,他們(men) 對模型進行了三次重新訓練。
驗證:作者采用了從(cong) 2023年1月到2023年5月的單折驗證。在提交時,他們(men) 使用兩(liang) 個(ge) 種子重新訓練了所有數據,分別針對產(chan) 生和消耗模型。
目標
產(chan) 生:(target - target_lag2) / installed_capacity消耗:(target - target_lag2) / eic_count
產(chan) 生模型的特征:
與(yu) 日期相關(guan) 的特征(例如假日、月份、工作日)
eic_count、installed_capacity
目標(產(chan) 生)/ 安裝容量的滯後和差異,包括統計量
目標(產(chan) 生)/ eic_count的滯後和差異,包括統計量
目標(消耗)/ 安裝容量的滯後和差異,包括統計量
目標(消耗)/ eic_count的滯後和差異,包括統計量
天氣預報
天氣預報與(yu) 曆史天氣的差異
天氣預報前2小時、前1小時、後1小時的差異以及前後1小時的平均值
工作日和周末的目標(產(chan) 生)/ 安裝容量的滯後平均值
消耗模型的特征:
與(yu) 日期相關(guan) 的特征(例如假日、月份、工作日)
目標(產(chan) 生)/ 安裝容量的滯後和差異,包括統計量
目標(消耗)/ 安裝容量的滯後和差異,包括統計量
目標(消耗)/ eic_count的滯後和差異,包括統計量
天氣預報
曆史天氣的滯後
工作日和周末的目標(消耗)/ eic_count的滯後平均值
為(wei) 了提高計算效率,作者僅(jin) 使用了在LightGBM中確定的前300個(ge) 最重要的特征用於(yu) 產(chan) 生模型,以及前400個(ge) 最重要的特征用於(yu) 消耗模型。作者進行了三次重新訓練:在2024年1月底、2024年2月和2024年3月。在每個(ge) 時間點,都使用了兩(liang) 個(ge) 種子重新訓練了產(chan) 生和消耗模型。
評論已經被關(guan) 閉。