数据挖掘|2022第十届泰迪杯数据挖掘大赛B题电力负荷预测代码


电力系统负荷预测包含不同类型变电站电站和母线出线端负荷等数据,对每15分钟为一个时间间隔的负荷数据进行数据处理与建模,预测未来多天的负荷数据。电网线路连接情况复杂,需预测结果数量非常多。
针对问题一本次赛题为长序列时间序列预测任务,该Baseline对数据进行了处理与特征提取,基于5折LightGBM全流程运行时间一般在2分钟内。本次代码首先对数据进行可视化,其次对数据进行特征工程,最后通过机器学习catboost、xgboost、lightgbm进行预测,文中包括数据清洗、特征工程、模型预测以及后期优化策略,神经网络代码LSTM以及时序prophet模型、ARIMA。

tianqi['白天风力风向'].unique() tianqi['夜晚风力风向'].unique() dic = {'无持续风向<3级':0, '北风3~4级':1, '北风4~5级':2} tianqi['白天风力风向'] = tianqi['白天风力风向'].map(dic) tianqi['夜晚风力风向'] = tianqi['夜晚风力风向'].map(dic)# # 天气进行有序编码 tianqi['天气1'].unique()tianqi['天气2'].unique() dic1 = {'晴':1, '多云':2, '阴':3,'小雨':4, '小雨-中雨':5, '中雨':6, '中雨-大雨':7, '大雨':8} tianqi['天气1'] = tianqi['天气1'].map(dic1) tianqi['天气2'] = tianqi['天气2'].map(dic1) del tianqi['天气状况']# # 连接两张表 y = y.rename(columns={'数据时间':'日期1'}) y['日期'] = y['日期1'].apply(lambda x: x.split(' ')[0]) tianqi.loc[:, '日期'] = pd.to_datetime(tianqi.loc[:, '日期'], format='%Y年%m月%d日', errors='coerce') y.loc[:, '日期'] = pd.to_datetime(y.loc[:, '日期'], format='%Y/%m/%d', errors='coerce') train = y.merge(tianqi,on='日期',how='left')del train['日期'] # # 时序特征提取(后期直接加入测试集数据) train['日期1'] = pd.to_datetime(train['日期1'])train['月'] = train['日期1'].dt.month train['天'] = train['日期1'].dt.day train['小时'] = train['日期1'].dt.hourtrain['一年第几天'] = train['日期1'].dt.dayofyeartrain['一年第几周'] = train['日期1'].dt.week

部分可视化
数据挖掘|2022第十届泰迪杯数据挖掘大赛B题电力负荷预测代码
文章图片

【数据挖掘|2022第十届泰迪杯数据挖掘大赛B题电力负荷预测代码】数据挖掘|2022第十届泰迪杯数据挖掘大赛B题电力负荷预测代码
文章图片

数据挖掘|2022第十届泰迪杯数据挖掘大赛B题电力负荷预测代码
文章图片


针对问题二,时间突变检测,包括MK突变检验,统计学检验,t检验,多种检验方式。
def plot_anomaly(ts,anomaly_pred = None,anomaly_true=None,file_name = 'file'):fig = go.Figure()yhat = go.Scatter(x = ts.index,y = ts,mode = 'lines',name = ts.name)fig.add_trace(yhat)ifanomaly_pred is not None:status = go.Scatter(x = anomaly_pred.index,y = ts.loc[anomaly_pred.index],mode = 'markers',name = anomaly_pred.name,marker= {'color':'red','size':10,'symbol':'star','line_width':0})fig.add_trace(status)ifanomaly_true is not None:status = go.Scatter(x = anomaly_true.index,y = ts.loc[anomaly_true.index],mode = 'markers',name = anomaly_true.name,marker= {'color':'yellow','size':10,'symbol':'star-open','line_width':2})fig.add_trace(status)fig.show()def plot_anomaly_window(ts,anomaly_pred = None,file_name = 'file',window='1h'):fig = go.Figure()yhat = go.Scatter(x = ts.index,y = ts,mode = 'lines',name = ts.name)fig.add_trace(yhat)ifanomaly_pred is not None:for i in anomaly_pred.index:fig.add_vrect(x0=i - pd.Timedelta(window),x1= i,line_width=0, fillcolor="red", opacity=0.2)fig.show()

数据挖掘|2022第十届泰迪杯数据挖掘大赛B题电力负荷预测代码
文章图片

数据挖掘|2022第十届泰迪杯数据挖掘大赛B题电力负荷预测代码
文章图片




    推荐阅读