Datawhale AI夏令营task2:市场博弈和价格预测的代码理解和模型优化

本次主要针对“电力现货市场”(可以类比证券交易市场),泛指短时间内的电能量交易市场。出清价格由于各种因素导致难以预测,所以建模这些机组在报价上的博弈行为,使最终模拟的市场出清报价接近现实中的市场出清价格

1.导入必要库:numpy用于矩阵运算、pandas用于表格处理、pathlib主要用于文件路径处理、sklearn用于机器学习算法。

原来代码使用的是线性回归,通过查阅资料,我尝试采用决策树回归的方式,加入决策树回归所需要的代码。

2.读取数据:这里我们主要用了如下几个方法

  • pd.DataFrame.isna():检查DataFrame中的缺失值(NaN),返回一个布尔值的DataFrame,其中True表示缺失值。

  • pd.DataFrame.drop() :删除DataFrame中的指定列或行,columns为需要删除的列的名称,这里为 "demand"

3.构建时间序列DataFrame

这行代码的作用是将day和time列合并成日期时间格式,并且将"24:00:00"时间转换为"00:00:00",以确保时间的正确性。然后将合并后的字符串转换为pandas的datetime类型,并赋值给electricity_price DataFrame的timestamp列

  • .head(): 这是一个方法,用于返回 DataFrame 的前 n 行,如果不指定参数,默认情况下 n 为 5。这时候显示机组前五组

4.按边际成本从低到高依次成交

这段Python代码是使用pandas库对一个名为unit的DataFrame按照"coal consumption (g coal/KWh)"列的值进行升序排序,并存储排序后的结果到变量sorted_unit

  • sorted_unit['cumulative_capacity'] = sorted_unit['Capacity(MW)'].cumsum(): 这行代码计算sorted_unit DataFrame中'Capacity(MW)'列的累积和,并将结果赋值给新列'cumulative_capacity'。累积和是当前行之前所有行的总和,这通常用于表示在某个点之前所有机组的总容量。

  • prices = []: 这行代码初始化一个空列表prices,用于存储不同需求水平下的电力价格。

  • for demand in electricity_price["demand"]: 这是一个循环,遍历electricity_price DataFrame中的'demand'列,即不同时间点的电力需求。

  • price = sorted_unit[sorted_unit['cumulative_capacity'] >= demand]["coal consumption (g coal/KWh)"].iloc[0]: 在循环内部,这行代码找到第一个'cumulative_capacity'大于或等于当前需求demand的机组,并获取该机组的'coal consumption (g coal/KWh)'列的值作为价格。这里假设电力市场是按照边际成本定价的,即最后一个满足需求的机组的成本决定了电力价格。

  • prices.append(price): 将计算出的价格添加到prices列表中。

  • print(len(prices)): 打印出prices列表的长度,即不同需求水平下的电力价格的数量。

  • prices[:5]: 显示prices列表的前五个元素,即前五个需求水平下的电力价格。

5.转换报价到现实市场出清价格

对于预测电力市场中的清算价格,使用决策树回归模型,更改掉线性回归,使得最后结果有少许上升

  • model = DecisionTreeRegressor(): 这行代码创建了一个决策树回归模型的实例,用于预测数值型的目标变量。

  • train_length = 55392: 这行代码定义了训练数据的长度,即用于训练模型的数据点数量。

  • prices = np.array(prices).reshape(-1, 1): 将prices列表转换为NumPy数组,并将其重塑为二维数组,其中-1表示自动计算行数,以确保只有一个特征列。

  • X = prices[:train_length]: 选择前train_length个价格数据作为特征集X。

  • y = electricity_price["clearing price (CNY/MWh)"].iloc[:train_length].values.reshape(-1, 1): 从electricity_price DataFrame中选择前train_length个清算价格数据,将其转换为NumPy数组,并重塑为二维数组,作为目标变量y。

  • model.fit(X, y): 使用特征集X和目标变量y训练决策树回归模型。

  • y_pred = model.predict(prices[train_length:]): 使用训练好的模型对剩余的价格数据进行预测,生成预测的清算价格y_pred。

  • y_pred = y_pred.flatten(): 将预测结果从二维数组转换为一维数组,以便于查看和使用。

  • y_pred[:5]: 打印预测结果的前五个值,用于快速检查模型的预测效果

本次运行由于采用决策树回归预测出清价格,使得结果有所优化。第一个是改变拟合方式得出的,第二个是原始的线性回归的拟合分数。

对于本次修改回归模型,有许多的报错,比如说

        这个就属于将训练集长度搞错导致运行不成功,还是粗心吧。通过这次的代码的学习让我学到了更多,下次学习学习如何更高的优化。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值