📦 需求预测入门 时间序列 · 移动平均 · 指数平滑

🎯 库存优化的机器学习实战课 · 第三章 🧠 基础但关键

⏳ 时间序列概念

时间序列是按时间顺序排列的观测值序列。在库存需求中,它可以是每日、每周或每月的销量。核心要素包括:

  • 趋势 (Trend) — 长期上升/下降
  • 季节性 (Seasonality) — 固定周期波动
  • 周期性 (Cycle) — 非固定长度的起伏
  • 随机/噪声 (Noise) — 不可预测的变动
  • 水平 (Level) — 序列的平均基准
📌 库存视角:时间序列预测帮助我们提前感知需求变化,避免缺货或积压。
时间 需求
📈 需求时间序列 (含趋势)
季节 + 噪声
🔁 季节性与随机波动

📊 移动平均法 (Moving Average)

通过取最近 k 期观测值的平均值来预测下一期。简单、平滑噪声。

🔹 公式

MAₜ = (Dₜ₋₁ + Dₜ₋₂ + … + Dₜ₋ₖ) / k

🔹 实例 (k=3)

周实际需求3期移动平均
1120—
2150—
3130—
4160(120+150+130)/3 = 133.3
5145(150+130+160)/3 = 146.7
6175(130+160+145)/3 = 145.0
t-2 t-1 t t+1 t+2
滑动窗口 k=3
✅ 优点:简单、稳定; ❌ 缺点:滞后性,对突变反应慢。

✨ 指数平滑法 (Exponential Smoothing)

赋予近期观测值更高的权重,权重随历史呈指数衰减。适合没有明显趋势和季节性的数据。

🔸 简单指数平滑

Fₜ₊₁ = α · Dₜ + (1-α) · Fₜ

其中 α (0 < α ≤ 1) 为平滑系数,越接近1 模型越“相信”近期数据。

t实际 Dₜ预测 Fₜ (α=0.3)
1100100 (初始化)
21200.3×100 + 0.7×100 = 100
31150.3×120 + 0.7×100 = 106
41300.3×115 + 0.7×106 = 108.7
实际 指数平滑
⚖️ 权重衰减
📌 库存小贴士:α 越大,预测越灵敏;α 越小,越平滑。通常用历史数据交叉验证选择 α。

🏭 需求预测在库存中的作用

  • 降低安全库存 — 更准的预测减少缓冲库存
  • 减少缺货 / 积压 — 平衡服务水平与周转
  • 优化补货计划 — 采购、生产更从容
  • 资金效率提升 — 库存持有成本下降
  • 供应链协同 — 信息共享,减少牛鞭效应
📡 历史需求 ⚙️ 预测模型 📦 库存策略 移动平均 / 指数平滑 安全库存 · 补货点
📋 需求预测 → 库存决策流程

🐍 Python 快速实现 (指数平滑)

# 简单指数平滑函数
def exponential_smoothing(series, alpha):
    result = [series[0]]  # 初始值
    for t in range(1, len(series)):
        result.append(alpha * series[t] + (1 - alpha) * result[-1])
    return result

demand = [100, 120, 115, 130, 125]
forecast = exponential_smoothing(demand, alpha=0.3)
print("预测值:", forecast)
# 输出: [100, 100.0, 106.0, 108.7, 112.09]