51mee - AI智能招聘平台Logo
模拟面试题目大全招聘中心会员专区

设计一个基于历史销售数据、市场活动、竞争对手信息的销量预测模型,用于指导生产计划,请说明数据特征工程、模型选择(如时间序列模型、机器学习模型)及评估指标。

宝马Digitalization管培生难度:中等

答案

1) 【一句话结论】
基于历史销售、市场活动、竞品等多源数据,先通过ADF检验确保时间序列平稳(若不平稳则差分),再通过特征工程(含缺失值插值、异常值处理、标准化),采用SARIMA(处理时间序列趋势/季节性)与XGBoost(处理多源特征非线性关系)的混合模型,用RMSE和MAPE评估,输出预测结果后,结合需求波动系数计算安全库存(公式:安全库存=Zσ√L),并通过ERP系统对接调整生产排程,实现生产计划优化。

2) 【原理/概念讲解】
老师:“首先,数据特征工程是基础。对于时间序列数据,必须先检验平稳性,比如用ADF(Augmented Dickey-Fuller)检验。如果p值大于0.05,说明数据非平稳,需要做差分处理,直到平稳。比如,假设历史销量数据有明显的季节性(如每年12月销量高),SARIMA模型需要平稳数据,否则参数估计会失效。接下来,特征工程:时间特征比如月份、周几、节假日(如圣诞节、促销日),市场活动特征比如活动类型(线上/线下)、投入金额、活动时间窗口,竞品特征比如价格差(自身价格-竞品价格)、促销强度。然后标准化,用Min-Max或Z-score,确保特征尺度一致,避免模型训练时某些特征因尺度大而主导。模型选择:SARIMA是基于时间序列的统计模型,擅长捕捉趋势(Trend)、季节性(Seasonality)、残差(Residual),参数(p,d,q和P,D,Q,s)通过AIC/BIC最小化选择,解释性强,适合历史数据稳定且有规律的场景。XGBoost是集成学习算法,能处理非线性关系,比如市场活动投入与销量的非线性关系,通过特征重要性分析,能识别关键影响因素。评估指标:RMSE(均方根误差,反映绝对误差,对大误差敏感),MAPE(平均绝对百分比误差,反映相对误差,适合业务场景中误差比例重要的情况),MAE(平均绝对误差,整体误差),根据业务目标(如库存成本优先选MAPE)选择。”

3) 【对比与适用场景】

模型类型定义特性使用场景注意点
SARIMA基于历史时间序列数据,假设数据平稳,包含趋势、季节性、残差捕捉时间依赖性(趋势、季节性),参数少、解释性强,对异常值敏感历史数据稳定,有明显季节性/趋势(如节假日、季度)需先做平稳性检验,若数据非平稳需差分处理
XGBoost基于集成学习(梯度提升)算法,结合多源特征(时间、活动、竞品)处理非线性关系,可集成高维数据,精度高,能处理缺失值数据复杂,有外部因素(活动、竞品价格、促销)需大量数据,解释性弱,可能过拟合,需交叉验证调参

4) 【示例】
伪代码:

import pandas as pd
from statsmodels.tsa.stattools import adfuller
from sklearn.preprocessing import StandardScaler
from statsmodels.tsa.statespace.sarimax import SARIMAX
from xgboost import XGBRegressor
from sklearn.model_selection import GridSearchCV

data = pd.read_csv('sales_data.csv')
data['date'] = pd.to_datetime(data['date'])
data.set_index('date', inplace=True)

# 平稳性检验(ADF)
result = adfuller(data['sales'])
print(f'ADF统计量: {result[0]}, p值: {result[1]}')
# 若p>0.05,非平稳,做差分
if result[1] > 0.05:
    data['sales_diff'] = data['sales'].diff().dropna()
else:
    data['sales_diff'] = data['sales']

# 缺失值处理:线性插值
data['sales_diff'] = data['sales_diff'].interpolate(method='linear')

# 特征工程
data['month'] = data.index.month
data['day_of_week'] = data.index.dayofweek
data['is_holiday'] = data.index.isin(holidays).astype(int)
data['marketing_event'] = data['marketing_event'].astype(int)
data['competitor_price'] = data['competitor_price'] - data['price']

# 标准化
scaler = StandardScaler()
features = ['month', 'day_of_week', 'is_holiday', 'marketing_event', 'competitor_price']
data[features] = scaler.fit_transform(data[features])

# 模型训练
# SARIMA
sarima_model = SARIMAX(data['sales_diff'], order=(1,1,1), seasonal_order=(1,1,1,12))
sarima_result = sarima_model.fit()
pred_ts = sarima_result.get_forecast(steps=3).predicted_mean

# XGBoost
xgb_model = XGBRegressor()
param_grid = {'n_estimators':[100,200], 'max_depth':[3,5], 'learning_rate':[0.01,0.1]}
grid_search = GridSearchCV(xgb_model, param_grid, cv=5, scoring='neg_mean_squared_error')
grid_search.fit(data[features], data['sales_diff'])
best_xgb = grid_search.best_estimator_
pred_xgb = best_xgb.predict(data[features].iloc[-3:])

# 混合预测
final_pred = 0.6*pred_ts + 0.4*pred_xgb

# 评估
from sklearn.metrics import mean_absolute_error, mean_squared_error
mae = mean_absolute_error(data['sales_diff'].iloc[-3:], final_pred)
rmse = np.sqrt(mean_squared_error(data['sales_diff'].iloc[-3:], final_pred))
mape = np.mean(np.abs((data['sales_diff'].iloc[-3:] - final_pred)/data['sales_diff'].iloc[-3:]))*100
print(f"MAE: {mae}, RMSE: {rmse}, MAPE: {mape}%")

(注:实际应用中需还原差分,即最终预测值=diff预测+原序列最后一个值)

5) 【面试口播版答案】
各位面试官好,关于销量预测模型设计,我的核心思路是:首先处理数据,先做时间序列平稳性检验(ADF检验),如果数据不平稳就做一阶差分处理,确保SARIMA模型适用。然后进行特征工程,提取时间周期性(如月份、节假日)、市场活动(活动类型、投入金额)、竞品价格差等特征,并进行标准化。模型选择上用SARIMA(通过AIC准则优化参数,捕捉历史趋势和季节性)与XGBoost(用网格搜索调超参数,处理多源特征的复杂关系),最后混合预测。评估用RMSE(衡量绝对误差)和MAPE(反映相对误差)。预测结果用于生产计划,比如计算安全库存(公式:安全库存=Zσ√L,其中Z是安全系数,σ是需求标准差,L是提前期),并通过ERP系统对接,动态调整生产排程,实现生产计划优化。

6) 【追问清单】

  • 问:如何处理时间序列的平稳性问题?
    答:用ADF检验判断平稳性,若p值大于0.05则非平稳,做一阶差分处理,直到p值小于0.05。
  • 问:模型融合的权重是如何确定的?
    答:通过交叉验证比较SARIMA和XGBoost的预测效果,根据验证集的RMSE/MAPE选择最优权重(如0.6:0.4)。
  • 问:安全库存计算的具体公式和参数来源?
    答:安全库存=Zσ√L,其中Z取1.65(95%置信水平),σ是历史需求的标准差,L是生产到交付的提前期,这些参数从历史数据中统计得到。
  • 问:如何确保模型与生产系统的对接?
    答:将预测结果通过API接口写入ERP系统,系统根据预测数据自动调整生产计划,比如更新生产订单数量,同时设置预警阈值(如预测销量下降超过10%时触发补货)。

7) 【常见坑/雷区】

  • 忽略时间序列平稳性检验,直接用SARIMA导致模型参数估计错误。
  • 未处理多源特征的非线性关系,只用线性模型导致预测偏差。
  • 安全库存计算未考虑提前期,导致库存积压或缺货。
  • 评估指标与业务目标脱节,比如只关注RMSE,而业务更关心库存成本,应优先选MAPE。
51mee.com致力于为招聘者提供最新、最全的招聘信息。AI智能解析岗位要求,聚合全网优质机会。
产品招聘中心面经会员专区简历解析Resume API
联系我们南京浅度求索科技有限公司admin@51mee.com
联系客服
51mee客服微信二维码 - 扫码添加客服获取帮助
© 2025 南京浅度求索科技有限公司. All rights reserved.
公安备案图标苏公网安备32010602012192号苏ICP备2025178433号-1