如何自动化处理多份DataFrame的NeuralProphet预测并合并结果
批量用NeuralProphet训练多份时序数据并合并预测结果的实现方案
问题背景
现有n份包含date(日期)和y(目标值)两列的DataFrame,需使用指定配置的NeuralProphet模型对每份数据单独训练,生成未来1年的预测结果,最终将所有预测合并为统一的DataFrame,用于导出或可视化。
实现步骤与代码
1. 前置依赖安装
确保已安装必要库:
pip install neuralprophet pandas
2. 完整自动化代码
import pandas as pd from neuralprophet import NeuralProphet def build_np_model(): """按给定配置生成NeuralProphet模型实例""" return NeuralProphet( growth="linear", # 趋势类型:'linear', 'discontinuous', 'off' changepoints=None, # 自定义变点日期列表(None为自动检测) n_changepoints=5, changepoints_range=0.8, trend_reg=0, trend_reg_threshold=False, yearly_seasonality="auto", weekly_seasonality="auto", daily_seasonality="auto", seasonality_mode="additive", seasonality_reg=0, n_forecasts=1, n_lags=0, num_hidden_layers=10, d_hidden=5, # AR-Net隐藏层维度 learning_rate=None, epochs=40, loss_func="Huber", normalize="auto", # 归一化类型:'minmax', 'standardize', 'soft', 'off' impute_missing=True, ) def process_single_dataset(df, source_tag): """处理单份数据集,返回带来源标识的预测结果""" # 适配NeuralProphet的列名要求(日期列必须为ds,目标列必须为y) formatted_df = df.rename(columns={"date": "ds", "y": "y"}) # 初始化并训练模型 model = build_np_model() model.fit(formatted_df, freq="D") # 生成未来1年预测,同时保留历史拟合值 future_data = model.make_future_dataframe(formatted_df, periods=365, n_historic_predictions=len(formatted_df)) forecast_result = model.predict(future_data) # 添加来源标识,方便后续区分不同序列 forecast_result["source_tag"] = source_tag return forecast_result # ---------------------- 主执行流程 ---------------------- # 替换为实际的n份DataFrame列表 dataset_list = [df_sales, df_traffic, df_inventory] # 示例:3份业务数据 all_forecasts = [] # 遍历处理每份数据 for idx, df in enumerate(dataset_list): # 用自定义标签或序号作为来源标识,比如"区域A销售数据" result_df = process_single_dataset(df, source_tag=f"dataset_{idx+1}") all_forecasts.append(result_df) # 合并所有预测结果 final_merged_df = pd.concat(all_forecasts, ignore_index=True) # 导出为CSV(可选,用于后续可视化或分析) final_merged_df.to_csv("combined_time_forecasts.csv", index=False) # 直接使用final_merged_df进行可视化,比如用matplotlib/plotly绘制多序列对比图
3. 核心细节说明
- 列名适配:NeuralProphet强制要求日期列名为
ds、目标值列名为y,因此需要先做列名映射。 - 模型隔离:每次处理新数据时重新实例化模型,避免不同数据集的训练参数互相污染。
- 来源标识:添加
source_tag列是为了在合并后的DataFrame中快速区分不同原始数据的预测结果,便于筛选和多序列对比。 - 预测范围控制:
periods=365指定生成未来365天的预测,n_historic_predictions参数保留对原始历史数据的拟合值,方便和预测值做趋势对比。
内容的提问来源于stack exchange,提问作者Ryan Ruhany
相关产品推荐
相关产品推荐

