3. 居民用户分时电价响应弹性系数测算

数据准备与弹性系数定义

弹性系数衡量用电量对电价的敏感程度。在分时电价场景下,我们关注峰段电价上调后,居民是否将用电转移至谷段。采用弧弹性公式,避免点弹性对基准点选择的敏感性:

E = [(Q2 - Q1) / ((Q1 + Q2)/2)] / [(P2 - P1) / ((P1 + P2)/2)]

其中:
  Q1 = 分时电价实施前月均峰段用电量 (kWh)
  Q2 = 分时电价实施后月均峰段用电量 (kWh)
  P1 = 原统一电价 (元/kWh)
  P2 = 分时电价峰段电价 (元/kWh)
  E 为负值表示峰段用电随电价上升而减少

假设某小区 120 户居民,智能电表采集 15 分钟粒度数据。分时电价方案:峰段(08:00–22:00)0.62 元/kWh,谷段(22:00–08:00)0.32 元/kWh;原统一电价为 0.52 元/kWh。按收入分为三组:低收入(月收入 < 5000 元)、中等收入(5000–12000 元)、高收入(> 12000 元)。

居民分时电价响应弹性系数测算流程 智能电表历史数据 15min 粒度 · 120户 实施前3月 + 实施后3月 数据清洗与分段 剔除缺失/异常日 按峰/谷时段聚合 收入群体分组 低 / 中 / 高收入 各40户 弧弹性计算 E = ΔQ% / ΔP% 分组分别计算 参数关系与计算逻辑 价格变化 ΔP P1 = 0.52 元/kWh P2 = 0.62 元/kWh ΔP% = +19.2% 峰段电价上调 用电量变化 ΔQ Q1 = 实施前峰段月均 Q2 = 实施后峰段月均 ΔQ% = (Q2-Q1)/均值 峰段用电量变化 弹性系数 E E = ΔQ% / ΔP% E < 0:峰段用电减少 |E| 越大,响应越敏感 分组对比分析 分组弹性系数对比(示例数据) 低收入组 Q1=180 kWh → Q2=135 kWh E ≈ -1.42 中等收入组 Q1=260 kWh → Q2=225 kWh E ≈ -0.78 高收入组 Q1=350 kWh → Q2=330 kWh E ≈ -0.33 |E| 低收入 > 中等收入 > 高收入,表明低收入群体对峰段电价更敏感

分组弹性计算与结果判读

以低收入组为例,展示完整计算过程:

低收入组(40户):
  实施前峰段月均用电 Q1 = 180 kWh
  实施后峰段月均用电 Q2 = 135 kWh
  价格 P1 = 0.52 元/kWh,P2 = 0.62 元/kWh

  ΔQ% = (135 - 180) / ((180 + 135)/2) = -45 / 157.5 = -28.57%
  ΔP% = (0.62 - 0.52) / ((0.52 + 0.62)/2) = 0.10 / 0.57 = +17.54%

  E = -28.57% / 17.54% ≈ -1.63

中等收入组 E ≈ -0.78,高收入组 E ≈ -0.33。三组弹性系数均为负值,符合需求响应基本规律。低收入组 |E| 最大,说明其用电行为对价格变化最敏感,峰段用电削减幅度最大。

判读要点:|E| > 1 为富有弹性,峰段用电削减比例超过电价上涨比例;|E| < 1 为缺乏弹性,用电量变化相对温和。低收入组 |E| > 1,表明分时电价对该群体具有显著引导效果。

可复现的测算脚本

以下 Python 脚本读取 CSV 格式的智能电表数据,自动完成分组弹性计算:

import pandas as pd
import numpy as np

# 读取数据:列包含 user_id, income_group, period, month, kwh
df = pd.read_csv("smart_meter_data.csv")

# 筛选峰段数据(period == 'peak')
peak = df[df["period"] == "peak"].copy()

# 标记实施前后:假设实施月份为 2024-07
peak["phase"] = np.where(peak["month"] < "2024-07", "before", "after")

# 按用户和阶段聚合月均用电量
pivot = peak.pivot_table(
    index=["user_id", "income_group"],
    columns="phase",
    values="kwh",
    aggfunc="mean"
).reset_index()

# 弧弹性计算函数
def arc_elasticity(q1, q2, p1, p2):
    dq_pct = (q2 - q1) / ((q1 + q2) / 2)
    dp_pct = (p2 - p1) / ((p1 + p2) / 2)
    return dq_pct / dp_pct

P1, P2 = 0.52, 0.62
pivot["E"] = arc_elasticity(pivot["before"], pivot["after"], P1, P2)

# 按收入组汇总平均弹性
result = pivot.groupby("income_group")["E"].agg(["mean", "std", "count"])
result.columns = ["平均弹性E", "标准差", "户数"]
print(result.round(3))

运行后输出各收入组的平均弹性系数、标准差和样本户数。标准差反映组内个体响应差异,若标准差过大,需检查是否存在异常用电模式(如长期空置、电采暖等)。

注意事项:弹性系数测算需控制气温、节假日等混杂因素。建议选取实施前后各 3 个月且气温相近的时段,或引入温度作为协变量进行回归校正,避免将季节性用电变化误判为价格响应。