电力系统负荷预测包含不同类型变电站电站和母线出线端负荷等数据,对每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题电力负荷预测代码】
文章图片
文章图片
针对问题二,时间突变检测,包括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()
文章图片
文章图片
推荐阅读
- 数据挖掘|第十届“泰迪杯”数据挖掘挑战赛【B题(电力系统负荷预测分析】完整解题代码Python,共三套)
- 数学建模|【第十届“泰迪杯”数据挖掘挑战赛】B题(电力系统负荷预测分析 ARIMA、AutoARIMA、LSTM、Prophet、多元Prophet 实现)
- python|Python高效实现滑块验证码自动操纵
- Object|NMS和几种IOU的复现
- 深度学习基础|深度学习基础-线性回归
- 机器学习|机器学习_pytorch_高级神经网络结构_AutoEncoder自编码
- 数据科学从0到1|python使用numpy生成指定步长的浮点数序列
- python|总结|图像分割5大经典方法
- 目标检测|yolov5——断点训练/继续训练【解决方法、使用教程】