You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于sktime的多变量时间序列预测:ARIMA、Prophet、LightGBM示例请求

多门店多商品销售额预测:sktime ARIMA/Prophet/LightGBM 实现示例

数据预处理

首先需要将数据转换为sktime兼容的格式。你的数据包含date(时间索引)、store(门店)、item(商品),每个(store, item)组合对应一条独立时间序列,先整理成面板数据结构:

import pandas as pd
from sktime.forecasting.base import ForecastingHorizon

# 合并特征与标签
train_df = pd.concat([x_train, y_train.rename('sales')], axis=1)
# 转换时间格式并构建面板结构
train_df['date'] = pd.to_datetime(train_df['date'])
train_df = train_df.set_index(['store', 'item', 'date']).unstack(level=-1)['sales']

# 处理测试集,生成预测时间范围
test_df = x_test.copy()
test_df['date'] = pd.to_datetime(test_df['date'])
fh = ForecastingHorizon(test_df['date'].unique(), is_relative=False)

1. ARIMA模型实现

使用sktime的AutoARIMA自动适配最优参数,结合PanelForecaster批量处理多序列:

from sktime.forecasting.arima import AutoARIMA
from sktime.forecasting.panel import PanelForecaster

# 初始化面板预测器,假设数据为月度周期(sp=12),日度可设sp=7
arima_forecaster = PanelForecaster(
    forecaster=AutoARIMA(sp=12, seasonal=True),
    strategy="recursive"
)

# 训练模型
arima_forecaster.fit(train_df)

# 生成预测并转换回原始格式
arima_preds = arima_forecaster.predict(fh=fh)
arima_preds = arima_preds.stack().reset_index(name='pred_sales')
arima_preds = arima_preds.merge(test_df, on=['store', 'item', 'date'], how='right')

2. Prophet模型实现

sktime封装了Facebook Prophet,同样通过PanelForecaster处理多序列:

from sktime.forecasting.fbprophet import Prophet
from sktime.forecasting.panel import PanelForecaster

# 初始化Prophet面板预测器
prophet_forecaster = PanelForecaster(
    forecaster=Prophet(seasonality_mode='additive', yearly_seasonality=True),
    strategy="recursive"
)

# 训练模型
prophet_forecaster.fit(train_df)

# 生成预测并转换格式
prophet_preds = prophet_forecaster.predict(fh=fh)
prophet_preds = prophet_preds.stack().reset_index(name='pred_sales')
prophet_preds = prophet_preds.merge(test_df, on=['store', 'item', 'date'], how='right')

3. LightGBM模型实现

作为机器学习模型,需先提取时间特征,再用make_reduction转换时间序列为表格数据:

from sktime.forecasting.compose import make_reduction
from sktime.transformations.series.date import DateTimeFeatures
from lightgbm import LGBMRegressor
from sktime.forecasting.panel import PanelForecaster

# 提取时间特征:年、月、周几、季度
dt_transformer = DateTimeFeatures(
    features_to_extract=["year", "month", "day_of_week", "quarter"]
)

# 构建LightGBM预测器,用过去30天数据作为特征
lgbm_forecaster = make_reduction(
    estimator=LGBMRegressor(n_estimators=100, random_state=42),
    transformer=dt_transformer,
    strategy="recursive",
    window_length=30
)

# 包装为面板预测器批量处理多序列
lgbm_panel_forecaster = PanelForecaster(
    forecaster=lgbm_forecaster,
    strategy="recursive"
)

# 训练与预测
lgbm_panel_forecaster.fit(train_df)
lgbm_preds = lgbm_panel_forecaster.predict(fh=fh)

# 转换回原始格式
lgbm_preds = lgbm_preds.stack().reset_index(name='pred_sales')
lgbm_preds = lgbm_preds.merge(test_df, on=['store', 'item', 'date'], how='right')

关键注意事项

  • 周期参数调整:ARIMA的sp需匹配数据频率(日度=7,月度=12,季度=4)。
  • 自定义特征:LightGBM可添加门店促销、节假日等额外特征,只需扩展特征提取步骤。
  • 模型评估:用sktime内置指标对比效果:
    from sktime.performance_metrics.forecasting import MeanAbsoluteError
    
    mae = MeanAbsoluteError()
    print("ARIMA MAE:", mae(y_true=actual_sales, y_pred=arima_preds['pred_sales']))
    

内容的提问来源于stack exchange,提问作者user1388142

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 11:15:34