AI+能源应用教程:从数据采集到用电预测的完整落地流程
做 AI+能源应用,最容易卡住的地方不是模型多复杂,而是数据从哪来、怎么清洗、怎么验证结果可信。
这篇教程面向零基础读者,用一套可复现的流程,带你从零搭出一个小型用电负荷预测原型,适合想了解 AI 在能源场景如何落地的运维人员和能源行业初学者。
先搞清楚这套流程能解决什么问题
典型的 AI+能源应用包括用电预测、异常用电检测、设备能耗优化等。
本篇选择短期用电负荷预测作为切入,因为它的数据容易获取(电表或传感器读数),验证方式也直观:用历史数据训练模型,再用未来一段时间的真实值对比误差。
适用条件是:你有一份按时间排列的用电量数据,采样间隔固定(例如每 15 分钟或每小时一条),数据量至少覆盖数周。
如果只有零散的手工记录,建议先补数据采集,再进入建模。
环境准备与数据采集
先准备一台 Linux 或 Windows 机器,安装 Python 3.9 以上版本。
以下命令在 Ubuntu 上验证过,其他系统按包管理器调整。
python3 -m venv energy-ai
source energy-ai/bin/activate
pip install pandas numpy scikit-learn matplotlib
数据采集有两种常见方式:
- 电表或传感器导出 CSV:多数智能电表支持按时间段导出,注意确认时间戳时区和单位(kWh 还是 W)。
- Modbus/HTTP 接口轮询:如果设备支持网络接口,可以用脚本定时拉取,但本篇先以离线 CSV 为例,降低门槛。
数据文件建议放在项目目录下,命名为 power.csv,至少包含两列:timestamp 和 load。
数据清洗与特征构建
原始数据通常有缺失值、重复时间戳或单位不统一。
先做一次检查:
import pandas as pd
df = pd.read_csv('power.csv', parse_dates=['timestamp'])
df = df.sort_values('timestamp').drop_duplicates('timestamp')
df['load'] = pd.to_numeric(df['load'], errors='coerce')
print(df.isna().sum())
缺失值不要直接填 0,因为 0 可能代表停机,会误导模型。
建议用前向填充再配合插值:
df['load'] = df['load'].ffill().interpolate()
接着构造时间特征,让模型能学到“几点、星期几”的规律:
df['hour'] = df['timestamp'].dt.hour
df['weekday'] = df['timestamp'].dt.weekday
df['is_weekend'] = (df['weekday'] >= 5).astype(int)
如果数据是 15 分钟粒度,还可以加入滞后特征,例如前一小时同一时刻的负荷,帮助模型捕捉短期趋势。
训练模型并验证误差
把数据按时间顺序切分,前 80% 做训练,后 20% 做测试,不要随机打乱,否则会泄漏未来信息。
from sklearn.ensemble import RandomForestRegressor
from sklearn.metrics import mean_absolute_error
features = ['hour', 'weekday', 'is_weekend']
X = df[features]
y = df['load']
split = int(len(df) * 0.8)
X_train, X_test = X[:split], X[split:]
y_train, y_test = y[:split], y[split:]
model = RandomForestRegressor(n_estimators=100, random_state=42)
model.fit(X_train, y_train)
pred = model.predict(X_test)
print('MAE:', mean_absolute_error(y_test, pred))
MAE 表示平均绝对误差,单位与负荷相同。
如果误差明显偏大,先检查数据是否有大段缺失或异常跳变,再考虑增加特征或换模型。
常见报错与避坑清单
- 时间戳解析失败:CSV 里时间格式不统一时,
parse_dates会报错,先用文本编辑器统一格式,或指定format参数。 - 负荷单位混淆:W 和 kW 混用会让误差看起来离谱,建模前统一换算并记录在注释里。
- 用未来数据训练:随机切分时间序列是典型错误,必须按时间顺序切分。
- 缺失值填 0:会把停机时段误判为低负荷,影响模型判断,尽量用插值或前后填充。
- 忽略时区:跨时区数据要先统一到同一时区,否则小时特征会错位。
结果验证与下一步
验证不只看 MAE,还要画一张预测值与真实值的对比图,观察高峰时段是否偏差集中:
import matplotlib.pyplot as plt
plt.plot(y_test.values[:100], label='real')
plt.plot(pred[:100], label='pred')
plt.legend()
plt.show()
如果图形趋势基本吻合,说明原型可用。
下面可以接入实时数据、定时训练,或把预测结果推送到监控面板。
需要提醒的是,这套流程是原型级方案,生产环境还要考虑数据质量监控、模型版本管理和告警阈值设置。
常见疑问
需要 GPU 吗? 本篇用的随机森林在普通 CPU 上就能跑,数据量不大时不需要 GPU。
数据量多少才够? 至少覆盖数周且包含工作日和周末,否则模型学不到完整周期规律。
预测误差多大算合理? 没有统一标准,建议先建立基线(例如用前一天同一时刻的值做预测),再对比模型是否明显优于基线。
按以上步骤执行后,你应该能得到一个可运行的用电预测原型。
遇到异常时,优先回看数据清洗和切分方式,这两处是最常见的错误来源。