数据准备与预处理
家庭用电数据通常包含时间戳和用电量两列,数据可能来自智能电表或电力公司。使用Pandas读取CSV或Excel格式的数据文件,确保时间戳列被正确解析为datetime类型。处理缺失值、异常值和重复数据是必要的步骤。
import pandas as pd
# 读取数据
df = pd.read_csv('household_power_consumption.csv', parse_dates=['datetime'])
# 处理缺失值
df.fillna(method='ffill', inplace=True)
# 确保数据按时间排序
df.sort_values('datetime', inplace=True)
Prophet要求输入数据包含两列:ds(时间戳)和y(用电量)。需要将原始数据转换为这种格式。
# 转换为Prophet格式
df_prophet = df[['datetime', 'power_consumption']].rename(columns={'datetime': 'ds', 'power_consumption': 'y'})
季节性分析与可视化
家庭用电数据通常具有明显的日周期性和周周期性。使用Matplotlib或Seaborn绘制时间序列图,观察用电量的变化趋势和季节性模式。这有助于理解数据特性并为模型配置提供依据。
import matplotlib.pyplot as plt
# 绘制原始数据
plt.figure(figsize=(12, 6))
plt.plot(df_prophet['ds'], df_prophet['y'])
plt.xlabel('Date')
plt.ylabel('Power Consumption (kWh)')
plt.title('Household Power Consumption Over Time')
plt.show()
模型训练与配置
Prophet模型可以自动检测趋势和季节性,但针对家庭用电数据,可能需要调整季节性参数。添加日周期性和周周期性作为模型的季节性组件,并根据数据特性配置变化点。
from prophet import Prophet
# 初始化模型
model = Prophet(
yearly_seasonality=False,
weekly_seasonality=True,
daily_seasonality=True,
changepoint_prior_scale=0.05
)
# 拟合模型
model.fit(df_prophet)
预测与结果分析
使用训练好的模型生成未来一段时间的用电量预测。指定预测的时间范围,例如未来30天,并生成预测结果。预测结果包括趋势、季节性和不确定性区间。
# 创建未来时间范围
future = model.make_future_dataframe(periods=30, freq='D')
# 生成预测
forecast = model.predict(future)
预测结果可以可视化,展示趋势和季节性分解。Prophet提供内置的绘图函数,可以方便地展示预测结果。
# 绘制预测结果
fig = model.plot(forecast)
plt.title('Power Consumption Forecast')
plt.xlabel('Date')
plt.ylabel('Power Consumption (kWh)')
plt.show()
# 绘制季节性组件
fig = model.plot_components(forecast)
plt.show()
模型评估与优化
使用历史数据评估模型的预测性能。将数据分为训练集和测试集,计算均方根误差(RMSE)或平均绝对误差(MAE)等指标。根据评估结果调整模型参数,如季节性参数或变化点数量。
from sklearn.metrics import mean_squared_error
import numpy as np
# 分割数据
train = df_prophet[:-30]
test = df_prophet[-30:]
# 训练模型
model.fit(train)
# 预测测试集
future = model.make_future_dataframe(periods=30, freq='D')
forecast = model.predict(future)
# 计算RMSE
rmse = np.sqrt(mean_squared_error(test['y'], forecast['yhat'][-30:]))
print(f'RMSE: {rmse}')
实际应用与自动化
将模型部署到生产环境,定期更新数据并重新训练模型。使用自动化脚本或调度工具(如Airflow)实现预测任务的自动化。将预测结果保存到数据库或导出为报表,供家庭能源管理系统使用。
# 自动化脚本示例
def update_and_predict(new_data_path):
# 读取新数据
new_data = pd.read_csv(new_data_path, parse_dates=['datetime'])
new_data = new_data.rename(columns={'datetime': 'ds', 'power_consumption': 'y'})
# 重新训练模型
model.fit(new_data)
# 生成新预测
future = model.make_future_dataframe(periods=30, freq='D')
forecast = model.predict(future)
# 保存预测结果
forecast[['ds', 'yhat']].to_csv('latest_forecast.csv', index=False)
6503

被折叠的 条评论
为什么被折叠?



