# CSG_predict_project **Repository Path**: pikailo/csg_predict_project ## Basic Information - **Project Name**: CSG_predict_project - **Description**: 电力负荷预测项目 - **Primary Language**: Python - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 2 - **Forks**: 0 - **Created**: 2026-01-14 - **Last Updated**: 2026-03-25 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 电力负荷预测项目 ## 项目概述 本项目基于XGBoost回归算法实现电力负荷的预测,通过对历史电力负荷数据的特征工程、模型训练与评估,最终实现对指定时间段电力负荷的预测,并可视化展示预测结果与真实值的对比。项目整体流程包含数据预处理、数据分析、特征工程、模型训练、模型预测及结果可视化等核心环节。 ## 项目结构 ``` dss/ ├── src/ # 核心代码目录 │ ├── __init__.py # 包初始化文件 │ ├── predict.py # 预测模块:特征提取、模型预测、结果可视化 │ └── train.py # 训练模块:数据加载、分析、特征工程、模型训练与保存 ├── utils/ # 工具类目录 │ ├── __init__.py # 包初始化文件 │ ├── common.py # 数据预处理工具:时间格式化、排序、去重 │ └── log.py # 日志工具:日志对象创建与日志写入 ├── data/ # 数据目录(需自行创建,存放训练/测试数据、可视化图表) │ ├── train.csv # 训练数据集(用户自行准备) │ ├── test.csv # 测试数据集(用户自行准备) │ └── fig/ # 图表保存目录(自动生成) ├── model/ # 模型保存目录(自动生成) └── log/ # 日志保存目录(自动生成) ``` ## 环境依赖 确保安装以下Python库,版本建议如下: ```bash # 基础数据处理 pandas>=1.5.0 numpy>=1.23.0 # 可视化 matplotlib>=3.6.0 # 机器学习 scikit-learn>=1.1.0 xgboost>=1.7.0 # 模型保存 joblib>=1.2.0 ``` 安装命令: ```bash pip install pandas numpy matplotlib scikit-learn xgboost joblib ``` ## 数据要求 ### 数据格式 训练集(`train.csv`)和测试集(`test.csv`)需包含以下两列: | 列名 | 说明 | 格式示例 | |-------------|---------------------|------------------------| | time | 时间戳 | 2015-07-31 00:00:00 | | power_load | 对应时间的电力负荷值 | 801.59 | ### 数据预处理规则 项目会自动对数据执行以下预处理(`utils/common.py`): 1. 时间格式统一转换为 `%Y-%m-%d %H:%M:%S`; 2. 按时间升序排序; 3. 去除重复行。 ## 核心功能说明 ### 1. 数据预处理(utils/common.py) - 函数:`data_preprocessing(file_name)` - 功能:加载CSV数据,格式化时间、排序、去重,返回处理后的DataFrame。 ### 2. 日志工具(utils/log.py) - 类:`Logger(root_path, log_name, level='info')` - 功能:创建日志对象,将日志写入指定目录的日志文件,支持不同日志级别(debug/info/warning/error/crit),日志文件命名格式为`{log_name}.log`。 ### 3. 模型训练(src/train.py) #### 核心函数/类 - `PowerLoadModel(file_name)`:初始化训练类,加载数据、创建日志对象; - `ana_data(data)`:数据分析函数,生成电力负荷分布、小时/月份负荷趋势、工作日/周末负荷对比图; - `feature_engineering(data, window_size, logger)`:特征工程,提取以下特征: - 时间特征:小时、月份的独热编码; - 时间窗口特征:指定窗口大小的历史负荷(如前1/2/3小时负荷); - 昨日同时间负荷特征; - `model_train(data, features, logger)`:模型训练函数,使用XGBoost回归器训练模型,评估指标包括MSE、RMSE、MAE、MAPE,并保存模型到`model/`目录。 #### 训练流程 1. 加载训练数据(`train.csv`); 2. (可选)执行数据分析,生成可视化图表; 3. 特征工程提取训练特征; 4. 划分训练集/测试集(8:2); 5. 训练XGBoost模型,评估并保存模型。 ### 4. 模型预测(src/predict.py) #### 核心函数/类 - `PowerLoadPredict(file_path)`:初始化预测类,加载测试数据、创建日志对象、生成负荷字典; - `predict_feature_extract(time, window_size, hour_load, yesterday_load, logger)`:提取单条预测样本的特征(与训练特征一致); - `model_predict(estimator, window_size, data_source, load_dict, logger)`:批量预测,遍历测试集时间,提取特征并预测,返回包含时间、真实值、预测值的DataFrame; - `prediction_plot(data, logger)`:可视化预测结果,生成真实值与预测值的折线图,保存到`data/fig/`。 #### 预测流程 1. 加载测试数据(`test.csv`); 2. 加载已训练的XGBoost模型; 3. 对测试集时间逐一提取特征、执行预测; 4. 计算预测评估指标(MSE、RMSE、MAE、MAPE); 5. 可视化预测结果并保存图表。 ## 快速开始 ### 1. 准备数据 在`data/`目录下放入`train.csv`和`test.csv`,确保数据格式符合要求。 ### 2. 模型训练 运行`src/train.py`: ```bash cd dss/src python train.py ``` - 训练完成后,模型会保存到`model/`目录,命名格式为`xgboost_YYYYMMDD_HH_MM_SS.pkl`; - 日志文件会保存到`log/`目录,命名格式为`train_YYYY_MM_DD__HH_MM_SS.log`; - (可选)取消`ana_data(model.data_source)`注释,生成数据分析图表到`data/fig/`。 ### 3. 模型预测 1. 修改`predict.py`中加载模型的路径(匹配训练生成的模型文件名): ```python estimator = joblib.load("../model/xgboost_20260115_09_28_00.pkl") ``` 2. 运行`src/predict.py`: ```bash cd dss/src python predict.py ``` - 预测结果会输出日志(包含真实值、预测值、评估指标); - 预测对比折线图保存到`data/fig/预测负荷以及真实负荷的折线图.png`。 ## 关键参数说明 | 参数名 | 说明 | 默认值/示例 | |--------------|-------------------------------|-------------| | window_size | 时间窗口大小(历史负荷特征数) | 3 | | test_size | 训练集/测试集划分比例 | 0.2 | | XGBoost参数 | 迭代次数/深度/学习率 | n_estimators=200, max_depth=6, learning_rate=0.05 | | 评估指标 | 模型评估维度 | MSE、RMSE、MAE、MAPE | ## 结果说明 ### 训练阶段 - 日志文件:包含特征工程、模型训练、评估指标等信息; - 数据分析图:`data/fig/电力负荷数据分析图.png`,展示负荷分布、时间趋势等; - 模型文件:`model/`下的pkl文件,可直接用于预测。 ### 预测阶段 - 日志文件:包含每条预测的真实值、预测值,以及整体评估指标; - 预测可视化图:`data/fig/预测负荷以及真实负荷的折线图.png`,直观对比真实值与预测值趋势。 ## 注意事项 1. 确保`data/`、`model/`、`log/`目录有读写权限; 2. 预测时窗口大小(`window_size`)需与训练时保持一致; 3. 若中文乱码,matplotlib已配置`SimHei`字体,确保系统安装该字体; 4. 模型训练耗时与数据量、网格搜索参数(若启用)相关,可调整XGBoost参数优化速度/效果。 ## 扩展方向 1. 优化特征工程:增加节假日、天气、温度等外部特征; 2. 模型优化:尝试LightGBM、随机森林等其他回归模型,或使用网格搜索调优XGBoost参数; 3. 实时预测:结合Redis缓存历史数据,实现实时负荷预测; 4. 异常值处理:在数据预处理阶段增加异常值检测与修正逻辑。