Datawhale AI 夏令营第三期 从零入门AI for Science(AI+经济)

Datawhale AI 夏令营第三期 从零入门AI for Science(AI+经济)

赛事概要

  1. 赛题背景
    市场博弈具有复杂性和不确定性,市场参与者因信息不对称和有限理性,难以做出完全理性的决策,导致市场交易和出清充满不确定性。不同参与者在不同环境下的反应各异,进一步增加了预测市场行为和制定有效市场政策的难度。
  2. 赛题任务
    给定多个房屋对应电力消耗历史N天的相关序列数据等信息,预测房屋对应电力的消耗.
    赛题详情

baseline

!pip install numpy pandas scikit-learn matplotlib seaborn
import numpy as np
import pandas as pd
from pathlib import Path
from sklearn.linear_model import LinearRegression

# 处理数据
base_path = Path("data")  
electricity_price = pd.read_csv(base_path / "electricity price.csv")
unit = pd.read_csv(base_path / "unit.csv")

# 找到出清价格为缺失值的行,即要预测的目标,去除demand列,符合最后的提交格式 
sample_submit = electricity_price[electricity_price["clearing price (CNY/MWh)"].isna()].drop(columns="demand")
sample_submit.to_csv(base_path / "sample_submit.csv", index=False)

# 将day和time列合并成timestamp列,便于提取时间戳特征
electricity_price["timestamp"] = pd.to_datetime(
    electricity_price["day"] + " " + electricity_price["time"].str.replace("24:00:00", "00:00"))

# 处理24:00:00的情况,即表示第二天的00:00:00
mask = electricity_price['timestamp'].dt.time == pd.Timestamp('00:00:00').time()

# 需要将这些行的日期部分加一天
electricity_price.loc[mask, 'timestamp'] += pd.Timedelta(days=1)

# 设置列的顺序,同时去除day和time列
electricity_price = electricity_price[["timestamp", "demand", "clearing price (CNY/MWh)"]]

electricity_price.head()  # 显示前5行数据
unit.head()

# 使用ABM估计市场清出价格
sorted_unit = unit.sort_values("coal consumption (g coal/KWh)")  # 按照一度电的耗煤量(近似为边际成本)降序排序
sorted_unit.head()

# 预先计算 sorted_unit 的累积和
sorted_unit['cumulative_capacity'] = sorted_unit['Capacity(MW)'].cumsum()

prices = []

# 找到最后一个满足总需求的机组报价
for demand in electricity_price["demand"]:
    price = sorted_unit[sorted_unit['cumulative_capacity'] >= demand]["coal consumption (g coal/KWh)"].iloc[0]
    prices.append(price)

print(len(prices))
prices[:5]

#转化耗煤量为机组报价
model = LinearRegression()
# 55392为训练集的长度
train_length = 55392
prices = np.array(prices).reshape(-1, 1)
X = prices[:train_length]
y = electricity_price["clearing price (CNY/MWh)"].iloc[:train_length].values.reshape(-1, 1)
model.fit(X, y)

model.coef_, model.intercept_
y_pred = model.predict(prices[train_length:])
y_pred = y_pred.flatten()  # 2维矩阵转为1维
y_pred[:5]

sample_submit["clearing price (CNY/MWh)"] = y_pred
sample_submit.head()
sample_submit.to_csv("submit.csv", index=False)

提交结果
提交结果

知识点

ABM(Agent-Based-Modeling)

ABM(Agent-Based Modeling),即基于个体的建模,是一种模拟系统复杂行为的工具。它通过模拟个体(代理)的行为和相互作用,来研究系统整体的动态变化。
应用案例:康威的生命游戏(Game of Life),新冠传染病传播模型、政府企业博弈模型、鸟群模型……
ABM不关注复杂的数学,只关注如何用简单的交互规则模拟复杂系统(从简单的个体交互规则涌现系统的复杂性)。

在ABM中,实现相似的模拟结果,只需要三个规则:

  • 每个智能体有初始的能量,移动会消耗能量,进食会增加能量
  • 当能量过低,智能体死亡;当能量足够高,智能体会繁育
  • 如果移动后遇到食物(对于羊来说是青草,捕食者来说是羊),则吃下它。

总的来说,一个典型的ABM模型由以下几个部分组成:

  • 代理(Agent):系统中的基本个体,每个代理都有自己的属性和行为规则。
  • 环境(Environment):代理活动的空间或网络,可能影响代理的行为。
  • 交互规则(Interaction Rules):代理之间、代理与环境之间的相互作用规则。
  • 时间步(Time Steps):系统按离散的时间步推进,模拟出系统的动态变化过程。
    定义了这些规则后,我们就可以开始模拟,并从模拟中发现ABM的核心“涌现现象”,即个体的行为涌现出了总体的变化。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值