
1. 先搞清楚电价变化率矩阵到底是什么东西1.1 为什么我会去折腾这个矩阵干过电力市场、能源管理或者园区用能优化的人应该都有同感光看绝对值电价是不够的。怎么说呢你今天看到峰时电价1.2元一度觉得好贵但明天可能涨到1.8元后天可能跌回0.9元。单纯看“今天贵不贵”没有意义真正影响你决策的是“今天比昨天贵了多少”“这个月的价格波动有多剧烈”“什么时候变化最频繁”。我最初做这个矩阵就是因为在帮一个工业园区做用能策略优化时发现客户最关心的根本不是某一天的电价是多少而是“电价什么时候变动最大、怎么变动、能不能提前预判”。后来我干脆把所有历史电价数据拉出来按“时间段 × 日期”的二维结构逐一计算变化率做成了一张矩阵表。做完之后发现这个东西比单纯画折线图有用太多了——因为你一眼就能看出哪些时段是价格跳变的“高危区”哪些时段是“稳定区”这对储能充放电策略、生产排班、甚至需求响应申报都有直接指导意义。这个矩阵本质上不是什么高深算法就是一套结构化的数据处理思路。但正因为结构清晰反而在实际项目中特别好用。这篇文章我就把整个思路、计算逻辑、实操步骤和踩过的坑都分享出来希望对正在做电价分析、能源管理或者储能策略的朋友有点帮助。1.2 矩阵的基本形态一张表看清变化规律先说说矩阵长什么样。假设你有一年的分时电价数据每15分钟一个采样点一天就是96个点。那么“电价变化率矩阵”就是把“时刻”作为行、把“日期”作为列矩阵里的每个单元格填入该日该时刻相比前一个采样点的变化率或者相比前一天同一时刻的变化率。两种口径我都做过各自有用相邻时刻变化率描述的是“一天之内价格跳变的剧烈程度”适合做日内储能充放电策略。比如说上午10:15比10:00突然涨了15%那就说明10:00前是充电窗口10:15之后放电划算。日同比变化率描述的是“跨日同一时刻的价格波动”适合做生产排班和采购计划。如果你发现某个时段连续三天都在涨那就说明市场供需在收紧该提前锁量了。我一般两个都算但主推“相邻时刻变化率”作为核心矩阵因为它是日内策略的直接依据。日同比矩阵则作为辅助参考用来判断趋势。拿一张简化表格举例时刻周一变化率周二变化率周三变化率周四变化率周五变化率08:002.1%1.8%2.5%1.9%2.2%08:154.3%3.9%5.1%4.0%3.8%08:306.2%5.8%7.0%5.9%6.4%08:45-1.2%-0.8%-1.5%-0.9%-1.1%看到没有如果只看原始电价你可能觉得周一早上8点多的电就是贵的看了变化率矩阵才发现真正的价格跳变集中在8:15到8:30之间这正是储能系统响应最紧张的时刻段也是生产设备躲峰最该注意的窗口。这个矩阵还有一个好处它天然消除了一部分季节性偏差。冬天用电高、夏天空调多绝对值电价差异巨大但变化率某种程度上反映的是“价格弹性”和“市场反应”跨季节对比时更有可比性。2. 搭矩阵之前先把数据和处理逻辑理顺2.1 数据源怎么选别在第一步就埋雷电价变化率矩阵的质量90%取决于原始数据。我踩过最大的坑就是数据源混用导致整个矩阵算出来逻辑对不上。目前国内常见的数据来源主要有三个口径电网公司发布的代理购电价格每月更新颗粒度到峰平谷三个时段部分地区有尖峰适合做中长期趋势分析但颗粒度太粗做不了日内策略。电力交易中心的日前出清价格每15分钟一个点颗粒度细实时性能好但需要市场主体资格才能拿全历史数据也需要自己归档。现货市场试运行数据很多省份已经陆续开展现货市场结算试运行公开数据里有每个小时的节点电价或者统一出清价。这个口径最适合做变化率矩阵因为颗粒度够、连续性够、还有公开历史。我的建议是如果做中长期容量规划用代理购电价格就行如果做储能充放电策略或者需求响应一定要用现货市场数据最好能拿到15分钟颗粒度的。还有一个关键点确保整个数据集的时间口径一致。我遇到过一种情况某个月的数据里有几个时段用的是“尖峰电价”而其他月份没有尖峰这个类别直接把两种口径混在一起算变化率得到的结果完全失真。正确的做法是先统一时间口径把尖峰时段拆分或者合并到峰段再算变化率。另外数据缺失是个常态。节假日、系统检修、极端天气导致的价格异常都需要做标记而不是直接删除。因为有些异常恰恰是重要的策略信号——比如极端高温天的价格尖峰虽然“异常”但对储能套利来说反而是黄金机会。2.2 变化率算法怎么定三种口径各有各的用途计算变化率看起来很简单就是(当前值 - 基准值) / 基准值但基准怎么取直接决定矩阵表达的含义不同。我在实践中主要用三种口径口径一相邻时刻环比变化率变化率_t (P_t - P_{t-1}) / P_{t-1}这个口径反映的是“短时间内价格的跳变幅度”。我用它来判断储能系统的充放电切换点。如果一个时刻的变化率超过设定的阈值比如5%我就会认为这是一个“策略切换信号”。这个口径对数据噪声比较敏感但现货市场环境下尤其是光伏大发时段和晚高峰负荷爬坡时段跳变幅度往往远超噪声水平实际用起来效果很好。口径二日同比变化率变化率_d (P_d - P_{d-1}) / P_{d-1}这个口径针对同一时刻、相邻两天的变化。它主要用于识别“趋势性上涨或下跌”。如果你连续三天看到同一时段的变化率都是正向的大概率说明该时段的供需关系正在发生变化。这种信号对签订中长期合约、调整生产班次很有参考价值。口径三相对于参考基准的变化率变化率_r (P_t - P_base) / P_base这里的P_base可以是月均价、季度均价或者某个典型日的价格。这种口径适合做“偏离度评估”。比如我帮一个水泥厂做错峰生产方案时就用“相对于月均价的变化率”来筛选哪些时段比均价低得多、适合加大生产负荷哪些时段比均价高得多、必须停产避让。建议你把口径一作为主矩阵、口径二作为趋势矩阵、口径三作为策略矩阵三者结合使用。很多朋友只算一种变化率然后拿去做策略总觉得差点意思——其实就是因为信息维度不够三种口径合起来看判断依据才完整。一个小技巧计算的时候别用百分比的小数形式0.05直接用百分数5.0这样在矩阵里展示、筛选、设置阈值时都更直观。2.3 矩阵维度怎么选不是越大越好贴合决策场景才有用做矩阵的时候很多人容易陷入一个误区把所有能用上的维度全塞进去——时间、日期、季节、天气、节假日、省份、电价类型……结果矩阵臃肿到没法看反而失去了“一眼看出问题”的作用。我做了这么多项目总结下来矩阵维度选择的第一原则是按决策场景倒推。决策场景推荐矩阵维度原因储能充放电策略时刻 × 日期相邻时刻变化率需要精准定位日内切换点生产排班优化时段 × 星期日同比变化率需要看每周固定节奏中长期购电计划日期 × 月份相对基准变化率需要看宏观趋势和季节性规律需求响应申报时刻 × 天气类型相邻时刻变化率需要预判极端天气下的价格跳变举个例子我之前做一个储能项目的经济性测算客户一开始要求把全省所有现货节点都拉出来做矩阵觉得“覆盖越全越保险”。但我看了数据之后建议只做本节点或者临近两三个节点的矩阵。原因很简单储能套利看的是本地节点价差其他节点的价格波动跟你的收益没有直接关系做了反而干扰判断。后来我们只保留本节点和相邻一个节点矩阵瘦身之后策略准确率反而提升了。另外时间维度上的选择也讲究。如果做日内策略按15分钟颗粒度太细的话矩阵会大到没法看我通常的做法是先按15分钟计算再按小时聚合。聚合方式不是简单平均而是取每小时内的“极值变化率”——因为策略关心的往往是最极端的那个跳变点而不是平均变化。3. 矩阵建好之后我是怎么拿它来“赚钱”的3.1 储能充放电策略从一个矩阵找到一天的最佳操作时点做储能项目的朋友应该都知道储能收益的大头来自峰谷价差套利。但很多人只盯着“峰”和“谷”两个字觉得只要在谷时充电、峰时放电就行了。实际做过现货市场的人清楚价格曲线根本不是简单的“峰-平-谷”三段式而是有很多小的波动和拐点。如果能在这些小拐点上做文章收益能明显提升。这时候变化率矩阵的价值就体现出来了。我拿一个实际项目举例。某个工商业储能项目当地现货市场价格日内波动频繁原始分时电价表看起来只有两个峰两个谷但15分钟颗粒度的现货数据里每天至少有5-6个明显的价格拐点。我们用相邻时刻变化率矩阵来做策略第一步跑出全年的变化率矩阵统计每个时刻指向“上涨”的频次和平均幅度。第二步设定两个阈值充电切入阈值当变化率低于 -3% 时视为价格进入“洼地”可以启动充电放电切入阈值当变化率高于 5% 时视为价格进入“高地”可以启动放电。第三步用矩阵找出每个典型日的“策略时间轴”。比如某一天矩阵显示凌晨2:00变化率-4.2%充电、早上6:30变化率-3.1%继续充、上午9:45变化率5.8%放电、下午14:00变化率-3.5%再充、晚上19:20变化率6.3%再放。跟原来的“谷充峰放”两段式策略相比这种基于变化率矩阵的多段式策略在同一个项目里把单日套利次数从2次提升到了3-4次。虽然单次套利的价差没有原来大但累计收益反而提高了15%-20%。这就是变化率矩阵最直接的价值它告诉你价格在“变化”而不仅仅是“贵还是便宜”。3.2 生产排班和需求响应把矩阵融入日常运营除了储能变化率矩阵在工业生产端的应用也很有意思。我接触过一家做食品加工的企业用电负荷里制冷设备占了很大比例而且生产工艺上有一定的弹性——冷冻库可以提前降温也能接受短时间温度回升这就给了负荷转移的空间。最初他们做错峰生产方式是参照政府发布的峰谷时段把高耗能工序全部挪到夜间。听起来挺合理但运行了半年发现电费并没有降多少。我拿到他们的用电数据后做了一张“日同比变化率矩阵”然后发现了一个反直觉的现象虽然夜间整体电价低但夜间的价格波动反而更大尤其是22:00-23:00之间日同比变化率经常超过10%某些日子甚至出现夜间价格高于白天平时段的情况。这背后的原因不复杂当地夜间风电出力不稳定加上部分用户都扎堆在夜间生产导致夜间供需关系紧张现货价格上涨。如果只看政府发布的峰谷时段表根本发现不了这个规律。基于变化率矩阵我建议他们把生产计划从“一刀切夜间生产”改成“动态错峰”用日同比变化率矩阵识别出“近期连续上涨”的夜间时段及时把部分负荷挪到凌晨用相邻时刻变化率矩阵识别出“价格突变窗口”在窗口前10分钟提前启动制冷设备预冷窗口期间降低制冷功率。调整之后那个月的电费直接降了8%左右。这还是在没有新增任何设备、没有改任何工艺的情况下纯靠调度优化达成的效果。需求响应申报场景也类似。现在很多地方鼓励用户参与需求响应说白了就是让用户主动削减负荷帮助电网削峰然后拿补贴。但什么时段参与响应收益最大如果你只盯着通知里的“响应时段”往往拿到的补贴不是最优的。反过来如果你用变化率矩阵找到“价格跳变最为剧烈”的时段在这些时段主动响应既顺应了系统调节需求又能在补贴谈判中更有依据。我做项目的时候通常会把矩阵里变化率超过阈值的时段标注出来直接作为需求响应申报的候选时段实用性很强。4. 实操中容易踩的坑和排查方法4.1 常见问题速查表这些坑我基本都踩过做变化率矩阵的时候有几个问题属于高发问题基本每个项目都会碰到。我把它们整理成一个速查表方便大家对照排查问题现象根本原因解决思路矩阵里出现大量极端值如500%基准值接近0比如夜间深谷时段低价接近0对基准值设置下限阈值低于阈值的样本不参与变化率计算某个时段变化率连续为0数据源颗粒度太粗或者当天该时段被冻结价格检查数据口径确认是否用了两个不同颗粒度的数据源矩阵规律性太强每周完全一样用了代理购电价格月度固定值而非现货价格确认数据源现货市场数据不会出现完全重复的规律算出来的变化率波动剧烈到无法使用没有做数据清洗把异常数据如系统故障、极端天气当成正常数据先标记异常再用分位数截断或者规则过滤处理矩阵在“夏季高负荷日”完全失效没有区分工作日/周末/节假日在矩阵中增加日期类型维度分场景建模先说第一个坑基准值接近0。这在夜间时段特别容易碰到。光伏大发的中午时段电价有时会跌到几分钱甚至0元附近如果前一个采样点电价是0.02元当前是0.05元算出来的变化率是150%这个数字虽然没错但实际指导意义有限——因为大家关心的不是这么小的绝对值变化。我通常的做法是当基准值低于0.05元/千瓦时时直接把变化率标为“不适用”或者改用“绝对价差”替代“变化率”。这一点在建立矩阵计算规则的时候就要想清楚不然后面分析的时候还得返工。第二个坑是数据口径混用。这个前面提过但值得再说一次。如果你把15分钟颗粒度的现货价格和小时颗粒度的代理购电价格混在一个数据集里算出来的变化率矩阵会非常奇怪——一部分时段变化率平滑一部分时段突变看起来像是有规律其实只是口径错配。我的经验是建矩阵前先做一次“颗粒度一致性检查”用一个简单的脚本来统计每个时间点的数据点数量有缺失就直接标记出来。4.2 我的几个土办法不一定优雅但很管用讲几个我自己的实操习惯虽然技术上不那么“高大上”但在实际项目里相当管用。一个是对“跳变时刻”做了颜色标记。矩阵数字太多人眼根本看不过来。我自己写了个简单的渲染规则把变化率大于5%的单元格标成红色小于-5%的标成绿色中间的不标色。这样整个矩阵一瞟过去就能看到哪些时段集中出现红色价格跳涨哪些时段集中出现绿色价格跳水。这个方法帮我在跟客户汇报的时候省了太多口舌——不用解释数据直接指颜色就能说明问题。另一个是对矩阵做了“滚动窗口统计”。不是只看当天的变化率而是看过去N天的滚动平均值。比如做储能策略的时候我用的是“7日滚动平均变化率”来判断某个时刻的价格跳变是否具有持续性。如果某天某个时刻跳涨了5%但过去7天同个时刻平均变化率只有1%那这个跳涨可能只是偶然事件策略不应该对它做过度反应如果过去7天都在5%以上那这就是一个稳定的策略信号。还有一点是做“变化率矩阵的方差图”。矩阵看的是变化率本身但我会额外算一个“各时刻变化率的方差”然后画在一张柱状图上。方差大的时刻意味着价格行为不稳定、难以预测方差小的时刻意味着价格行为规律性强、适合做策略锚点。这部分往往能成为项目报告里最亮眼的分析维度之一。再补充一个细节矩阵里的单元格不一定都是“价格变化率”也可以是“负荷变化率”和“价格变化率”的联动分析。我做过一个有意思的项目把“园区总负荷变化率”和“节点电价变化率”放在同一张矩阵里对照可以发现某些时候负荷涨了但电价没跟涨说明市场供应充裕某些时候负荷基本没动但电价猛涨说明可能是输电阻塞或者机组检修导致的价格信号失真。这两种情况对用户来说意义完全不同——前者适合加大用电、后者需要警惕。4.3 工具选择从Excel到脚本按需取舍关于做矩阵的工具我按使用频率给个排序Excel透视表数据量不大的时候完全够用尤其是做单个月份的矩阵分析透视表加条件格式色阶就能很快看到分布特征。Python Pandas数据量大比如全年15分钟颗粒度超3万个点的时候Excel会卡到怀疑人生这时候用Pandas做数据透视表就顺滑多了。SQL窗口函数如果数据在数据库里直接用LAG()函数算相邻时刻变化率最方便连导出再导入的功夫都省了。我自己最常用的组合是SQL取数 Pandas清洗计算 Excel可视化或者Python里的matplotlib/seaborn画热力图。整个过程熟练的话从原始数据到一张变化率矩阵热力图半天时间足够了。如果你用的是Pandas核心计算代码非常简单import pandas as pd # 假设df有两列time时间和price电价 df[pct_change] df[price].pct_change() * 100 # 生成矩阵行时刻列日期 df[date] df[time].dt.date df[time_slot] df[time].dt.time matrix df.pivot_table( indextime_slot, columnsdate, valuespct_change, aggfuncmean )这里有几个细节值得注意pct_change()默认按行顺序算所以你一定要先把数据按时间排序跨天的边界比如晚上23:45到次日00:00pct_change()默认会把它当成连续的时间点算变化率这在绝大多数场景下是合理的因为价格本来就是连续的但如果你不想让跨天计算污染数据可以只在同一天的范围内计算。另外pivot_table的aggfunc我用了mean这是为了处理个别时间的重复数据。如果数据没有重复用first也可以但建议保留mean万一有数据源合并时产生的重复行它就是一道安全防线。5. 矩阵分析的上限还能往哪儿延展变化率矩阵做熟之后你会发现它其实是一个很基础的分析底座上面还能叠加很多东西。比如跟气象数据结合。把温度、湿度、风力等信息作为附加维度按“晴天/多云/雨天”等分类来拆分矩阵你可以更细致地预测电价变化。我做过一个新能源功率预测的项目就是把辐照度数据和电价变化率矩阵做了关联分析结果发现晴天和阴天两种场景下同一时刻的价格变化率差异非常大——晴天时中午时段变化率基本为负光伏大发压低电价阴天时这个负值就会明显减弱。这个结论直接指导了客户的储能充放电策略晴天多充、阴天适度少充。再比如跟市场供需数据结合。电价变化率本质上反映的是供需关系的变化如果你能拿到同期的机组检修计划、联络线输送计划、新能源出力预测就能构建一个更完整的“变化率预测模型”。我之前做过一个简化版本用前一周的变化率均值加上当天的负荷预测偏差来估算下一个交易时段的价格变化方向准确率虽然谈不上多高但作为策略参考已经比完全“盲猜”强太多了。还有一个值得一提的方向是异常检测。变化率矩阵天然适合做“离群点检测”的数据基础。如果一个时刻的变化率突增到历史同期均值的数倍那大概率意味着市场上发生了什么特殊情况——比如极端天气、机组非计划停运等。这种信号对市场风控来说很有价值。我自己就用这个思路帮一个售电公司做过一套简单的预警规则效果不错代价也不高。最后说一下我对这个工具的心态电价变化率矩阵不复杂也不新潮但它是一个很“趁手”的分析工具。在我做的这些能源项目里它虽然没有直接产生炫酷的图表或者高深的模型但真正落地的策略调整反而大部分是基于这个朴素的矩阵推导出来的。如果你也在跟电价数据打交道我建议你花一两个小时把自己的历史数据整理成这么一张矩阵然后盯着它看一会儿——大概率你会看到一些之前完全没注意到的规律。