
1. 电力交易员的一天为什么传统决策方式越来越吃力我有个朋友在省级电力交易中心做交易员前几年他跟我描述工作状态时用了一个词——“人肉撮合器”。每天早上八点半到岗先花四十分钟把前一天的负荷数据、新能源出力预测、联络线计划、检修计划全部拉一遍然后打开五六个Excel表格开始算第二天的申报曲线。中午之前要完成报价策略下午还要盯着实时市场的滚动撮合遇到新能源大发或者机组非计划停运整个策略就得推倒重来。这个场景在电力交易领域太典型了。电力交易和股票、期货交易有一个本质区别电不能大规模经济存储。你发出来的电必须实时被用掉用不掉就是浪费不够用就是事故。这意味着电力交易的决策窗口极短而且约束条件极其复杂——机组出力上下限、爬坡速率、最小启停时间、联络线断面约束、新能源消纳优先级这些约束互相耦合人工很难在短时间内找到全局最优解。更麻烦的是这几年电力市场的复杂度在指数级上升。新能源装机占比越来越高光伏和风电的出力预测本身就带有不确定性现货市场、辅助服务市场、容量市场多市场并行同一个机组在不同市场的收益要统筹考虑分时电价、峰谷价差、需求响应这些机制又让用户侧的负荷曲线变得不那么“听话”。一个交易员要同时处理几十个维度的信息还要在分钟级做出决策这已经超出了人脑的算力边界。所以当“AI驱动电力交易”这个概念被提出来的时候我一点都不意外。智能决策辅助系统要解决的核心问题不是替代交易员而是把交易员从信息搬运和基础计算中解放出来让他们专注于策略判断和风险把控。这篇文章我想从实际落地的角度把这类系统的技术架构、核心算法、工程实现和踩坑经验完整拆一遍给正在做或者准备做这块的同行一些参考。2. 智能决策辅助系统的技术底座从数据到决策的完整链路2.1 数据层电力交易的数据源比你想的杂得多做电力交易AI第一步不是选模型而是搞清楚数据从哪来、长什么样。我梳理过一套典型的电力交易数据源大概分这么几类数据类型典型来源更新频率主要用途负荷数据SCADA系统、计量自动化15分钟/1分钟负荷预测、申报曲线制定新能源出力场站SCADA、功率预测系统15分钟新能源消纳分析、偏差考核机组状态电厂DCS、调度OMS事件触发可用容量评估、检修计划市场公告交易中心平台日/小时交易规则、边界条件气象数据气象服务商API小时/15分钟新能源预测、负荷预测历史成交交易中心结算系统日策略回测、模型训练这些数据的问题在于格式不统一、时间粒度不一致、质量参差不齐。我见过一个项目负荷数据是15分钟一个点新能源预测是1小时一个点气象数据是3小时一个点要做联合建模就得先做时间对齐和插值。插值方法的选择本身就有讲究——线性插值会平滑掉负荷的尖峰特征样条插值可能产生过冲最后我们用的是分段三次Hermite插值在保持单调性的同时尽量保留曲线形态。还有一个容易被忽略的点数据延迟。调度系统的数据往往有几分钟到十几分钟的延迟而电力交易的决策窗口可能只有几分钟。如果你的AI系统用的是延迟数据算出来的策略可能已经过期了。我们的做法是在数据层加一个“新鲜度标记”每个数据点带一个时间戳模型推理时根据数据新鲜度动态调整置信度权重。2.2 特征工程电力交易里什么特征真正有用特征工程这块很多人一上来就搞几百个特征往里塞结果模型过拟合严重。我的经验是电力交易场景下真正有预测力的特征就那么几类关键是把它们构造好。时序特征是基础。负荷数据要做滞后特征lag、滑动窗口统计均值、方差、极值、差分特征。这里有个细节电力负荷有明显的日周期和周周期所以滞后特征要同时包含“昨天同一时刻”“上周同一时刻”“前几个小时”这几个尺度。我一般会构造lag_24h、lag_168h、lag_1h、lag_2h这几组再配合滚动窗口的均值和标准差。交互特征往往被低估。比如“温度×湿度”对负荷的影响不是线性的高温高湿和高温低湿的负荷曲线完全不同。再比如“新能源出力×负荷水平”当新能源大发且负荷较低时火电机组需要深度调峰这时候的报价策略和常规时段完全不一样。这类交互特征用树模型可以自动捕捉一部分但显式构造出来效果更稳。市场特征是电力交易特有的。比如日前市场和实时市场的价差、上一交易日的出清价格、同类型机组的平均报价水平。这些特征反映了市场参与者的集体行为对策略制定很有参考价值。但要注意市场特征存在“反身性”——当所有人都用同样的特征做决策时特征本身的有效性会衰减。所以我会定期做特征有效性监控发现某个特征的IC值持续下降就及时替换。2.3 模型选型为什么我们没有用端到端深度学习这是被问得最多的问题。很多人觉得AI驱动电力交易就应该搞一个端到端的深度神经网络输入原始数据直接输出报价曲线。我们试过效果不好原因有三个第一可解释性要求。电力交易涉及真金白银交易员需要理解模型为什么给出这个策略。端到端深度网络是个黑箱交易员不敢用。我们最后采用的是“预测模型优化模型”的两段式架构预测模型用LightGBM做负荷和价格预测优化模型用混合整数规划做报价策略生成。这样每个环节的输入输出都是可解释的。第二约束满足。电力交易的报价策略必须满足机组物理约束和市场规则约束端到端网络很难保证输出一定满足约束。而优化模型天然支持约束建模把机组出力上下限、爬坡速率、最小启停时间这些作为硬约束写进去解出来的策略一定是可行的。第三数据量。电力交易的历史数据量其实不大一个省级市场一年的现货交易数据也就几万条有效样本。这个量级下深度网络容易过拟合树模型和传统时序模型反而更稳。当然这不是说深度学习没用。我们在新能源出力预测这个子任务上用了LSTM和Transformer因为气象数据是网格化的时空特征明显深度学习有优势。但在交易策略生成这个环节还是优化模型更靠谱。3. 核心算法拆解预测、优化与风险控制的三角关系3.1 负荷与价格预测从MAPE到分位数预测负荷预测是电力交易的基础。传统方法用时间序列模型ARIMA、SARIMA现在主流用梯度提升树LightGBM、XGBoost或者深度学习LSTM、TCN。我们实测下来LightGBM在负荷预测上性价比最高——训练快、调参简单、特征重要性可解释。但电力交易需要的不仅仅是点预测还需要分位数预测。因为报价策略是风险敏感的交易员需要知道“负荷有90%概率落在哪个区间”而不是一个单点值。所以我们用LightGBM的分位数回归目标函数同时输出P10、P50、P90三个分位数。这样在制定报价策略时可以根据风险偏好选择保守或激进的方案。价格预测比负荷预测更难因为价格受市场博弈影响波动更大。我们的做法是把价格预测拆成两部分中长期趋势用基本面特征负荷、新能源、燃料成本预测短期波动用市场微观特征买卖盘不平衡、最近成交价预测。两部分叠加得到最终价格预测。实测下来日前价格的预测准确率能做到85%左右方向准确率实时价格因为波动太大方向准确率只有70%左右。3.2 报价策略优化混合整数规划怎么建报价策略优化的本质是一个带约束的优化问题。目标函数通常是收益最大化约束包括机组物理约束、市场规则约束、风险约束。我以一个火电机组参与日前现货市场为例把优化模型的核心结构拆一下决策变量每个时段通常15分钟或1小时的申报电量、申报价格。目标函数max Σ(出清价格 × 出清电量 - 发电成本)。出清价格和出清电量是市场出清的结果取决于自己的报价和其他参与者的报价。这里有个博弈问题——你的报价影响出清价格但你不能控制别人的报价。我们的处理方式是假设其他参与者的报价服从某个分布从历史数据估计然后做随机优化。约束条件机组出力上下限P_min ≤ P_t ≤ P_max爬坡约束-R_down ≤ P_t - P_{t-1} ≤ R_up最小启停时间如果机组启动至少运行T_on小时申报单调性申报价格随申报电量单调递增防止套利风险约束CVaR条件风险价值不超过阈值这个模型用Gurobi或者CPLEX求解规模不大的话秒级出解。但如果机组数量多、时段多求解时间会指数上升。我们的优化策略是先用启发式算法比如遗传算法找一个初始解再用MIP做局部精调这样能在可接受的时间内得到近似最优解。3.3 风险控制CVaR在电力交易中的实际用法电力交易的风险控制不是简单的“止损”而是要量化“最坏情况下的损失”。我们用的是CVaRConditional Value at Risk通俗说就是“在最坏的5%情况下平均损失是多少”。具体做法是用蒙特卡洛模拟生成大量价格和负荷场景比如10000个对每个场景计算报价策略的收益然后取收益最低的5%场景的平均值作为CVaR。优化模型的目标函数改成“收益最大化 - λ × CVaR”λ是风险厌恶系数λ越大策略越保守。这个方法的优点是直观、可量化交易员容易理解。缺点是计算量大10000个场景的蒙特卡洛模拟需要不少算力。我们的优化是用GPU加速场景生成用并行计算做策略评估把整体耗时控制在分钟级。4. 工程落地从实验室模型到生产系统的距离4.1 系统架构为什么我们选了微服务而不是单体实验室里跑模型和在生产环境跑模型是两码事。实验室里一个Python脚本从头跑到尾生产环境要考虑高可用、可扩展、可监控。我们的系统架构是微服务化的核心服务包括数据采集服务对接SCADA、交易平台、气象API做数据清洗和标准化预测服务负荷预测、价格预测、新能源预测每个预测任务独立部署优化服务报价策略生成支持多机组、多市场风控服务实时监控策略风险指标触发阈值时告警API网关对外提供统一接口做鉴权和限流微服务的好处是每个服务可以独立扩容、独立部署、独立升级。比如预测服务在每天早上需要大量算力可以临时扩容优化服务在交易时段需要低延迟可以部署在高性能节点上。但微服务也带来了复杂性——服务间通信、数据一致性、分布式事务这些问题都要处理。我们的经验是不要为了微服务而微服务。如果团队规模不大、业务复杂度不高单体架构加模块化设计可能更合适。我们是因为要同时支持多个省级市场的交易业务才不得不走微服务路线。4.2 模型部署从Jupyter Notebook到Kubernetes模型部署这块我们踩过的坑最多。最开始是把模型文件pickle直接放到服务器上用Flask起一个API每次更新模型就手动替换文件、重启服务。这种方式在模型少的时候还能凑合模型一多就乱套了——版本管理混乱、回滚困难、无法做A/B测试。后来我们迁移到了MLflow做模型管理每个模型有版本号、有训练参数、有评估指标部署时通过MLflow的API加载指定版本的模型。再后来上了Kubernetes每个模型服务打包成Docker镜像用K8s做编排和自动扩缩容。这里有个关键决策模型推理是放在CPU还是GPU上。我们的预测模型LightGBM在CPU上跑就够快优化模型Gurobi也是CPU密集型只有深度学习模型LSTM需要GPU。所以我们的做法是混合部署——CPU节点跑树模型和优化GPU节点跑深度学习通过服务网格做流量调度。4.3 实时性保障从秒级到毫秒级的优化电力交易对实时性要求很高。日前市场的报价截止时间是固定的但实时市场的滚动撮合是分钟级甚至秒级的。我们的系统在实时市场的延迟要求是从数据更新到策略输出全程不超过30秒。为了达到这个目标我们做了几件事数据预取提前把可能需要的数据加载到内存减少IO等待模型轻量化预测模型用LightGBM而不是深度学习推理速度快一个数量级缓存策略对重复计算的结果做缓存比如同样的负荷场景直接返回缓存策略异步处理非关键路径的操作如日志记录、监控上报异步化不阻塞主流程实测下来端到端延迟能控制在15秒左右满足实时市场的要求。5. 踩坑实录那些文档里不会写的教训5.1 数据泄漏一个让模型“看起来很美”的陷阱数据泄漏是电力交易AI里最隐蔽的坑。我们有一次做价格预测模型在测试集上的准确率高达95%上线后实际准确率只有60%。排查了很久才发现特征里有一个“日前出清价格”的字段这个字段在预测时点其实是不可知的——它是预测目标本身只是数据表里恰好有这一列。数据泄漏的常见形式包括时间泄漏用了未来才知道的信息做特征目标泄漏特征里包含了预测目标的信息样本泄漏训练集和测试集有重叠样本防范数据泄漏的方法是严格按时间划分训练集和测试集特征工程时仔细检查每个特征的可得时间。我们后来加了一个“特征时间戳”机制每个特征标注它在预测时点是否可得不可得的特征自动排除。5.2 市场规则变化模型刚上线就失效电力市场规则变化频繁今天还是“全电量申报”明天可能改成“部分电量申报”今天还是“统一出清”明天可能改成“分区出清”。规则一变模型的输入输出结构可能就要调整。我们有一次做了一个报价策略模型上线第二周市场规则调整申报方式从“三段式”改成“五段式”模型直接失效。后来我们的做法是把市场规则抽象成配置模型不直接处理规则细节而是通过配置层做适配。规则变化时只需要改配置不需要改模型代码。5.3 交易员的信任问题AI说东交易员偏要往西技术问题好解决人的问题难解决。我们系统刚上线时交易员不信任AI的建议觉得“机器懂什么电力交易”。有一次AI建议低价申报交易员凭经验改成了高价结果当天出清价格偏低高价申报导致没有中标损失了不少收益。建立信任的关键是透明和渐进。我们的做法是初期AI只做“建议”不做“决策”交易员可以采纳也可以修改每次AI建议和交易员决策不一致时系统记录原因定期复盘逐步展示AI在历史回测中的表现用数据说话让交易员参与模型的特征选择和参数调整增强参与感大概用了三个月交易员对AI建议的采纳率从30%提升到了75%。5.4 极端场景当新能源出力预测完全失准新能源出力预测在极端天气下会完全失准。我们遇到过一次天气预报说晴天结果当天来了沙尘暴光伏出力从预测的80%骤降到10%。AI系统基于错误的预测给出了激进的报价策略导致实时市场偏差考核罚款。这件事之后我们加了极端场景检测机制当预测值和实际值的偏差超过阈值时系统自动切换到保守策略并通知交易员人工介入。同时我们在优化模型里增加了“鲁棒性约束”让策略在预测偏差较大的情况下也不会产生灾难性损失。6. 效果评估与持续迭代AI辅助系统到底值不值6.1 怎么衡量一个电力交易AI系统的价值衡量AI辅助系统的价值不能只看“预测准确率”这种技术指标要看业务指标。我们关注的业务指标包括收益提升使用AI辅助后交易收益相比人工决策提升了多少偏差考核减少实时市场的偏差考核罚款减少了多少决策效率交易员制定策略的时间缩短了多少风险控制CVaR等风险指标是否在可控范围内实测数据是收益提升约8%-12%偏差考核减少约30%决策时间从平均2小时缩短到30分钟。这个提升幅度在电力交易领域已经相当可观了因为电力市场的利润率本身就不高几个百分点的提升就能显著改善电厂的经营状况。6.2 模型迭代为什么每周都要重新训练电力市场的分布是漂移的——负荷模式在变、新能源装机在增加、市场参与者在变、规则在变。模型如果长期不更新效果会逐渐衰减。我们的做法是每周重新训练一次预测模型每月重新校准一次优化模型的参数。重新训练不是简单的“用新数据跑一遍”而是要监控模型效果判断是正常波动还是真的衰减了。我们建了一个模型监控看板跟踪每个模型的预测偏差、特征重要性变化、策略收益变化。当某个指标连续一周下降超过阈值时触发告警人工介入分析。6.3 人机协作的最佳实践AI做粗筛人做精调跑了两年多我们总结出的人机协作模式是AI做粗筛人做精调。AI负责处理海量数据、生成初始策略、做风险扫描交易员负责审核策略、根据市场直觉做微调、处理极端场景。这种模式的好处是兼顾了效率和灵活性。AI擅长的是“在大量可能性中快速找到可行解”人擅长的是“在模糊信息下做判断”。两者结合比纯人工或纯AI都好。具体操作上我们给交易员提供了一个“策略编辑器”AI生成的策略以可视化曲线展示交易员可以直接拖拽调整申报曲线系统实时计算调整后的预期收益和风险指标。这样交易员既能利用AI的算力又能发挥自己的经验。7. 下一步多市场协同与AI Agent的探索7.1 从单市场到多市场优化问题的维度爆炸现在的系统主要针对日前和实时两个市场下一步要扩展到辅助服务市场、容量市场、绿证市场。多市场协同的优化问题维度会大幅增加——同一个机组在不同市场的申报量要统筹不同市场的出清时序有先后市场间的耦合约束很复杂。我们初步的方案是用分层优化上层做多市场间的容量分配下层做每个市场的报价策略。上层用随机规划处理市场间的不确定性下层用MIP做精细优化。这个方案还在验证阶段计算复杂度是个挑战。7.2 AI Agent在电力交易中的可能形态AI Agent是最近很热的概念在电力交易场景下我觉得可能的应用形态是“交易助手Agent”——它不只是被动地响应查询而是主动监控市场动态、发现交易机会、提醒交易员关注。比如Agent可以实时监控新能源出力预测的变化当发现预测偏差可能导致实时市场价格波动时主动提醒交易员调整策略。再比如Agent可以分析历史交易记录发现交易员的某些决策模式存在系统性偏差给出改进建议。但Agent的落地要谨慎。电力交易是高风险场景Agent的自主决策权限要严格限制初期只能做“建议”和“提醒”不能直接下单。而且Agent的决策逻辑要可审计、可追溯出了问题要能定位原因。7.3 大模型能做什么从报告生成到策略解释大模型在电力交易里最直接的应用是报告生成和策略解释。交易员每天要写交易日报、周报、月报这些报告有固定格式但数据填充和文字组织很耗时。用大模型可以自动生成报告初稿交易员只需要审核和修改。另一个应用是策略解释。AI生成的报价策略交易员需要理解“为什么这么报”。大模型可以把优化模型的数学语言翻译成自然语言比如“因为预测明天下午光伏出力较高实时价格可能走低所以建议在日前市场多申报电量锁定收益”。这种解释能显著提升交易员对AI的信任度。不过大模型在电力交易里的应用要特别注意数据安全和幻觉问题。交易数据不能随便传给外部大模型我们用的是本地部署的开源模型。幻觉问题在策略解释场景下尤其危险如果大模型编造了一个不存在的市场规则来解释策略交易员可能被误导。我们的做法是让大模型只做“翻译”不做“推理”所有事实性内容都从结构化数据中提取大模型只负责组织语言。8. 给正在做电力交易AI的同行几句实在话第一别一上来就搞大模型。电力交易的核心是预测和优化这两个任务用传统机器学习方法LightGBM、MIP就能做得很好。大模型是锦上添花不是雪中送炭。先把数据管道打通、把基础模型跑通、把业务流程理顺再考虑上大模型。第二可解释性比精度更重要。在电力交易场景下一个准确率85%但可解释的模型比一个准确率90%但黑箱的模型更有价值。交易员需要理解模型为什么给出这个建议才能信任它、采纳它。第三人机协作是长期状态。不要想着用AI完全替代交易员至少在可预见的未来电力交易还是需要人的判断。AI的价值是放大交易员的能力而不是取代他们。设计系统时要把交易员放在中心位置而不是把AI放在中心位置。第四持续迭代比一次性完美更重要。电力市场在变模型必须跟着变。建立一套模型监控和迭代机制比一次性做一个“完美”的模型更有价值。我们的系统跑了两年多模型版本迭代了几十次每次迭代都是一点点改进积累下来效果就很明显了。第五安全合规是底线。电力交易涉及能源安全和市场公平AI系统的所有决策都要可审计、可追溯、可解释。不要为了追求效果而牺牲合规性这条底线不能破。