📦 传统预测 · 四大经典

🧃 中小学生色系 · 库存预测基础

📈 移动平均法

平滑短期波动,适用于需求相对稳定、无趋势/季节性的场景。取最近 k 期平均值作为下一期预测。

Ft+1 = (At+At-1+…+At-k+1) / k
🏷️ 简单 · 稳定

✨ 指数平滑法

加权移动平均,近期权重更大。适合无明显趋势、季节性的序列。α 平滑系数控制衰减速度。

Ft+1 = α·At + (1-α)·Ft
🏷️ 自适应 · 轻量

📉 趋势外推法

识别长期趋势(线性/指数),通过最小二乘拟合直线或曲线,适合有明确上升/下降趋势的序列。

ŷ = a + b·t (线性)
🏷️ 趋势 · 中长期

🗓️ 季节性分解法

将序列拆解为趋势、季节、残差分量。常用加法/乘法模型,适合周期性明显的库存(如节日品)。

Yt = Tt + St + Rt
🏷️ 季节 · 周期

📋 方法对比一览

方法适用场景数据要求复杂度
移动平均稳定需求,无趋势近期数据⭐
指数平滑随机波动,略有时变连续历史⭐☆
趋势外推明显增长/下降长期趋势⭐⭐
季节性分解固定周期波动多周期数据⭐⭐⭐
  • 移动平均 · 易实现
  • 指数平滑 · 存储少
  • 趋势外推 · 可外延
  • 季节分解 · 可解释
  • 🧩 方法选择流程

    📊 历史数据 🔍 检测趋势/季节 📅 季节分解 📈 指数平滑 📉 趋势外推 ✅ 库存预测输出

    根据数据特征选择方法

    🐍 Python 快速实现 (移动平均 & 指数平滑)

    import pandas as pd
    import numpy as np
    
    # 移动平均法 (窗口3)
    def moving_average(series, window=3):
        return series.rolling(window=window).mean().iloc[-1]
    
    # 指数平滑法 (α=0.3)
    def exp_smoothing(series, alpha=0.3):
        result = [series.iloc[0]]
        for i in range(1, len(series)):
            result.append(alpha * series.iloc[i] + (1-alpha) * result[-1])
        return result[-1]
    
    # 示例库存数据
    demand = pd.Series([120, 135, 128, 142, 138, 150])
    print("移动平均预测:", round(moving_average(demand), 1))
    print("指数平滑预测:", round(exp_smoothing(demand), 1))
    🧪 趋势外推 (线性回归): from scipy.stats import linregress 🗓️ 季节性分解: from statsmodels.tsa.seasonal import seasonal_decompose