datawhale AI夏令营 AI经济

#强烈推荐一个项目,可以获得实践证书,结业证书等

Datawhale (linklearner.com)我报的AI+经济Datawhale (linklearner.com)

第二届世界科学智能大赛社会科学赛道:市场博弈和价格预测

大赛背景

为推动科学智能领域创新发展,在上海市政府的指导下,上海科学智能研究院、复旦大学联合阿里云在上智院·天池平台发布“第二届世界科学智能大赛”。大赛设置生命科学、物质科学、地球科学、社会科学、逻辑推理五大赛道,配有高额奖金池,面向全球人才开放,旨在推进科学智能技术创新,挖掘顶尖创新团队,构建科学智能生态,激发科学智能发展新动能。 大赛共设五大赛道:

赛题背景

对于电力市场中主体博弈产生的结算价格的预测具有重要的理论和现实意义。电力部门推动能源转型促进可持续发展的主体。因此,对电力市场主体行为的分析以及最终的市场结算价格的预测能够促进多学科融合,推动电力部门以及电力市场的产业转型。此外,可靠的电力系统保障社会稳定与安全,提升应急响应能力,并增强国家的全球竞争力和未来应对挑战的能力。

 数据集说明

评价指标

以下是部分学习心得和经历

刚开始学习这个不太理解该题目和问题想做什么

研究发现是想利用两个数据集来预测市场出清电价,首先研究了一下主办方给出的例子,该方法使用的一元线性回归,实现得分能得到达到12939.3371

# 使用ABM估计市场出清价格
**Agent-Based Modeling (ABM)** 是一种模拟系统的复杂行为和动态的计算方法。它通过定义系统中的个体(称为“代理(Agent)”)及其相互作用规则来进行建模。每个代理具有独特的属性和行为。ABM 模型通过模拟代理之间的互动,观察宏观层面的模式和现象,帮助理解复杂系统的行为和演化。

在这里,市场的主体是各个发电机组,他们在电力现货市场中根据市场信息/其他机组信息进行报价,并**以获得最大利润为目标**。

这里我们用**边际成本定价法**作为baseline,即每个机组都以其自身每生产一度电的成本进行报价,而不考虑市场信息和其他机组信息。

> 类比来说就是只会以成本价卖出商品(事实上这就是完全竞争市场的长期均衡状态)

随后,按报价从低到高排序,依次接受报价,直到累计的功率超过了总需求,市场达到出清状态,并以最后一个满足的报价作为市场出清价格的估计。

Prophet

后面我想简单只使用electricity price.csv这个数据集,通过传统的时间序列预测和机器学习的方法来初步看一下模型效果,训练结果和过程如下

df1=electricity_price.set_index('timestamp')
df1.drop(['demand'],axis=1,inplace=True)

df_train=df1.iloc[:55392]
df_pre=df1.iloc[55392:] 

from prophet import Prophet
from sklearn.metrics import mean_squared_error,mean_absolute_error
df_train = df_train.reset_index()
df_train.columns = ['ds', 'y']
model = Prophet()
model.fit(df_train)

future = model.make_future_dataframe(periods=len(df_pre))
forecast = model.predict(future)

forecast_values = forecast['yhat'].values[-len(df_pre):]
部分结果如下,但是简单的时间序列因为时间颗粒的问题导致预测值永远是增加的,效果极差82825697.9951

 

XGBOOST和随机森林模型

机器学习的时间序列预测问题主要是通过将提取时间有效信息的方法,转变为普通的回归预测

import holidays
def create_features(df):
    df = df.copy()
    df['hour'] = df.index.hour     # 小时
    df['minute'] = df.index.minute  # 分钟
    df['day']= df.index.day   #每月的第几天
    df['month']= df.index.month#月份
#     df['week']= df.index.week #每年的第几周
    df['quarter'] = df.index.quarter#季度
    df['dayofweek']= df.index.dayofweek#每周的第几天  周末数据为0
    df['dayofyear']= df.index.dayofyear#每年的第几天
    df['days_in_month']= df.index.days_in_month#当前月的天数
    china_holidays = holidays.China()
    df['days_is_holidays']=df.index.map(lambda x: x in china_holidays).astype(int)

    df['is_month_end'] = df.index.is_month_end.astype(int)  # 是否是月末
    df['is_month_start'] = df.index.is_month_start.astype(int)  # 是否是月初
    df['is_quarter_start'] = df.index.is_quarter_start.astype(int)  # 是否是季度初
    df['is_quarter_end'] = df.index.is_quarter_end.astype(int)  # 是否是季度末
    return df
df1 = create_features(df1)

最终结果为21705.0337,比给出的效果差很多,因此可以发现只用第一个csv预测效果有限,因此后续还是需要研究两个数据集的关联,以及对ABM(Agent-Based Modeling)模型深入研究

  • 28
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值