2、需求预测基础:定性预测法、定量预测法、预测误差分析与修正
各位工程师同仁,大家好。今天我们来聊聊需求预测。说实话,我刚入行那会儿,觉得预测就是拍脑袋。后来吃过几次亏,才明白这里面门道很深。预测不准,排产就是瞎忙活。库存积压、产线空转,都是真金白银的教训。
需求预测,说白了就是回答一个问题:未来客户会买多少? 答案不可能100%准确,但我们可以让误差可控。我习惯把预测方法分成两大类:定性法和定量法。下面我们逐一拆解。
2.1 定性预测法:当数据不够时,靠经验
定性预测,就是没有历史数据,或者数据不可靠时,靠人的判断。你想想看,新产品上市、市场突然变化,这时候历史数据就是废纸。我遇到过最典型的案例:某款智能手表刚发布,历史数据为零,只能靠专家打分来定首批产量。
常用的定性方法有几种:
- 德尔菲法:匿名征求多位专家意见,反复几轮,直到意见收敛。好处是避免权威影响,坏处是慢。
- 市场调研:直接问客户。但要注意,客户说的和实际做的往往不一样。我曾经做过一个调研,客户说“肯定会买”,结果上市后销量只有预期的30%。
- 历史类比法:拿类似产品的历史数据做参考。比如推新款手机,可以参考上一代的销售曲线。
2.2 定量预测法:用数据说话
定量预测,就是拿历史数据建模。说白了,就是假设“过去会重演”。这里我重点讲两种最实用的:移动平均法和指数平滑法。
2.2.1 移动平均法
简单粗暴。取最近N期的平均值作为下一期预测。N越大,曲线越平滑,但对变化反应越慢。
# 简单移动平均示例(Python)
def moving_average(data, window):
return sum(data[-window:]) / window
# 假设过去4周销量:[120, 130, 110, 140]
sales = [120, 130, 110, 140]
pred_next_week = moving_average(sales, 3) # 用最近3周
print(f"下周预测: {pred_next_week}") # 输出: 126.67
嗯,这里要注意:窗口选多大?我个人的习惯是,如果产品生命周期短、波动大,窗口选小一点(比如3期)。如果产品稳定,窗口可以大一些(比如6期)。
2.2.2 指数平滑法
比移动平均聪明一点。它给近期数据更高的权重,远期数据权重递减。核心参数是α(平滑系数),α越大,模型越敏感。
# 简单指数平滑示例
def exp_smoothing(prev_forecast, actual, alpha=0.3):
return alpha * actual + (1 - alpha) * prev_forecast
# 假设上期预测100,实际销量120
new_forecast = exp_smoothing(100, 120, alpha=0.3)
print(f"新预测: {new_forecast}") # 输出: 106
关键点:α值一般取0.1~0.5。我见过很多新手把α设到0.8,结果预测跟着实际值剧烈抖动,根本没法用。记住:平滑的目的是过滤噪音,不是复制历史。
2.3 预测误差分析:别光看预测值,要看误差
预测完了,必须算误差。否则你根本不知道模型靠不靠谱。我常用的指标有三个:
| 指标 | 公式 | 说明 |
|---|---|---|
| MAD(平均绝对偏差) | Σ|实际-预测| / n | 衡量平均误差大小,单位与原始数据一致 |
| MPE(平均百分比误差) | Σ((实际-预测)/实际) / n * 100% | 衡量误差百分比,适合对比不同产品 |
| 跟踪信号(TS) | Σ(实际-预测) / MAD | 判断预测是否持续偏高或偏低,超过±4需修正 |
2.4 预测修正:发现偏差,及时调整
预测不是一锤子买卖。我每周都会做一次“预测复盘”。具体做法:
- 计算跟踪信号:如果TS绝对值超过4,说明模型有系统性偏差。
- 检查异常值:是不是有促销、缺货、竞品动作?这些事件会导致历史数据失真。
- 调整模型参数:比如增大α值,或者更换窗口期。
- 人工干预:如果市场有明确信号(比如大客户突然下单),直接手动修正预测值。
举个例子:某款产品连续3周预测偏高,TS达到5.2。我检查后发现,是因为竞争对手降价了,导致我们销量下滑。这时候,我直接把α从0.2调到0.4,让模型更快响应市场变化。两周后,TS回到了正常范围。
好了,需求预测的基础就讲到这里。记住:没有完美的预测,只有不断逼近真实的预测。关键是建立“预测-执行-复盘-修正”的闭环。下次我们聊具体怎么把预测结果转化成排产计划。