
1) 【一句话结论】针对南光集团农产品贸易需求预测,设计“时间序列模型(Prophet,支持外生变量)与机器学习回归模型(XGBoost)融合的混合预测框架”,通过特征工程整合历史销量、价格波动、季节因子、天气、政策及突发外生变量(如疫情指数),实现精准库存优化,平衡安全库存与库存周转率,降低缺货风险与库存成本。
2) 【原理/概念讲解】时间序列模型(Prophet)基于加法模型,自动分解趋势、季节性(支持自定义周期,如农产品季节周期6个月/4个月),并允许加入外生变量(如价格、天气、政策),核心是“历史规律+外生因素驱动”——比如苹果在夏季(季节周期6个月)销量高,同时如果昨天价格下降10%,销量会上升,模型会学习这种组合效应;机器学习回归模型(XGBoost)通过梯度提升树学习特征与销量的非线性关系,能融合多维度特征(如价格滞后、节假日、政策补贴、疫情指数),核心是“多因素交互学习”——比如用机器学习分析“昨天温度30℃、降雨量0、价格降5%、昨天销量2000、疫情指数0.2,今天可能销量2100”,预测今天销量。同时,突发因素(如疫情)通过外生变量(疫情指数)纳入模型,捕捉非周期性冲击。
3) 【对比与适用场景】
| 模型类型 | 核心原理 | 处理变量能力 | 适用场景 | 注意点 |
|---|---|---|---|---|
| 时间序列模型(Prophet) | 基于加法模型,自动分解趋势、季节性(支持自定义周期),可加入外生变量 | 适合处理强季节性时间序列,外生变量支持灵活(如天气、政策) | 农产品需求具有明显季节性(如水果旺季、蔬菜淡季),历史数据完整 | 需要足够历史数据(至少1年),对突发异常(如极端天气)响应较慢 |
| 机器学习回归模型(XGBoost) | 通过梯度提升树学习特征与目标变量的非线性关系,支持多维度特征融合 | 适合多维度外生变量(价格、促销、库存政策、疫情指数),能捕捉复杂交互 | 需求受价格、促销、政策、突发因素等多因素影响,数据维度丰富 | 需要充足数据,对数据质量敏感,需特征工程 |
4) 【示例】
# 假设数据包含:date(日期)、sales(销量)、price(价格)、temp(温度)、rain(降雨量)、policy(政策补贴)、season(季节虚拟变量,周期6个月/4个月)、epidemic_index(疫情指数)
# 1. 数据预处理:处理缺失值(插值)、异常值(3σ原则)
data['sales'] = data['sales'].clip(lower=0)
data['price'] = data['price'].clip(lower=0)
data['epidemic_index'] = data['epidemic_index'].fillna(method='ffill') # 疫情指数插值
# 2. 特征工程:
data['year'] = data['date'].dt.year
data['month'] = data['date'].dt.month
data['week'] = data['date'].dt.isocalendar().week
data['day'] = data['date'].dt.day
from statsmodels.tsa.seasonal import seasonal_decompose
decompose_fruit = seasonal_decompose(data[data['product_type']=='fruit']['sales'], model='additive', period=6)
data['seasonal_fruit'] = decompose_fruit.seasonal
decompose_veg = seasonal_decompose(data[data['product_type']=='vegetable']['sales'], model='additive', period=4)
data['seasonal_veg'] = decompose_veg.seasonal
data['price_lag1'] = data['price'].shift(1)
data['price_lag2'] = data['price'].shift(2)
data['temp_lag1'] = data['temp'].shift(1)
data['rain_lag1'] = data['rain'].shift(1)
data['policy_subsidy'] = (data['policy'] > 0).astype(int)
data = pd.get_dummies(data, columns=['holiday_type'])
data['epidemic_index'] = data['epidemic_index'].clip(lower=0, upper=1)
# 3. 模型训练:
from prophet import Prophet
model_prophet = Prophet(yearly_seasonality=True, weekly_seasonality=False, daily_seasonality=False)
model_prophet.add_regressor('price_lag1')
model_prophet.add_regressor('temp_lag1')
model_prophet.add_regressor('policy_subsidy')
model_prophet.add_regressor('epidemic_index')
model_prophet.fit(data[['date', 'sales', 'price_lag1', 'temp_lag1', 'policy_subsidy', 'epidemic_index', 'holiday_type_春节']])
from xgboost import XGBRegressor
model_xgb = XGBRegressor(n_estimators=200, learning_rate=0.05, max_depth=6)
features = ['price_lag1', 'seasonal_fruit', 'temp_lag1', 'rain_lag1', 'policy_subsidy', 'epidemic_index', 'holiday_type_春节', 'year', 'month', 'week', 'day']
model_xgb.fit(data[features], data['sales'])
# 4. 预测与模型融合:
future = model_prophet.make_future_dataframe(periods=90)
future['price_lag1'] = data['price'].iloc[-len(future):].values
future['temp_lag1'] = data['temp'].iloc[-len(future):].values
future['policy_subsidy'] = data['policy_subsidy'].iloc[-len(future):].values
future['epidemic_index'] = data['epidemic_index'].iloc[-len(future):].values
future['holiday_type_春节'] = data['holiday_type_春节'].iloc[-len(future):].values
forecast_prophet = model_prophet.predict(future)
prophet_pred = forecast_prophet['yhat'].tail(90)
new_data = pd.DataFrame({
'price_lag1': [price_lag1_next],
'seasonal_fruit': [seasonal_fruit_next],
'temp_lag1': [temp_lag1_next],
'rain_lag1': [rain_lag1_next],
'policy_subsidy': [policy_subsidy_next],
'epidemic_index': [epidemic_index_next],
'holiday_type_春节': [holiday_next],
'year': [next_year],
'month': [next_month],
'week': [next_week],
'day': [next_day]
})
xgb_pred = model_xgb.predict(new_data)
final_pred = 0.6 * prophet_pred + 0.4 * xgb_pred # 示例权重
# 5. 业务指标计算:
safe_stock = data['sales'].quantile(0.95)
turnover_rate = total_cost / avg_inventory
stockout_rate = (data['sales'] > final_pred).sum() / len(data)
5) 【面试口播版答案】各位面试官好,针对南光集团农产品贸易的需求预测问题,我的核心思路是构建一个“时间序列模型(Prophet,支持外生变量)与机器学习模型(XGBoost)融合的预测框架”,重点解决农产品需求中的季节性、价格波动,并加入天气、政策及突发外生变量(如疫情指数),实现精准库存优化。首先,时间序列模型(Prophet)能自动识别农产品特有的季节周期——比如水果旺季在夏季,季节周期设为6个月,蔬菜为4个月,同时允许加入价格、天气、政策等外生变量,捕捉历史规律与外部因素的结合效应;然后,机器学习模型(XGBoost)融合多维度特征(如价格滞后1-3期、季节因子、节假日、政策补贴、疫情指数),学习复杂交互关系。特征工程方面,我会对时间序列进行季节分解(按产品类别调整周期),处理价格和天气的滞后值,加入政策与节假日虚拟变量,以及突发因素(疫情指数)的外生变量,提升模型对多因素响应的准确性。模型选型上,Prophet擅长处理强季节性时间序列,XGBoost适合多维度特征融合,两者结合能提升预测精度。通过评估指标(RMSE、MAPE)和业务指标(库存周转率、缺货率、安全库存),模型能帮助南光集团平衡安全库存与库存周转率,降低缺货风险与库存成本,优化库存管理效率。
6) 【追问清单】
7) 【常见坑/雷区】