MAD = Σ|实际 − 预测| / n
消除正负抵消,直观反映平均误差幅度
MSE = Σ(实际−预测)² / n
放大较大误差,对异常值敏感
MAPE = (100%/n) Σ|(实际−预测)/实际|
无量纲,适合比较不同规模序列
| 周期 | 实际需求 | 预测值 | 误差 | 误差平方 | 百分比误差 |
|---|---|---|---|---|---|
| 1 | 120 | 110 | 10 | 100 | 8.33% |
| 2 | 150 | 140 | 10 | 100 | 6.67% |
| 3 | 90 | 100 | 10 | 100 | 11.11% |
| 4 | 200 | 180 | 20 | 400 | 10.00% |
| 合计 | 50 | 700 | 36.11% | ||
| 指标值 | MAD = 12.5 | MSE = 175 | MAPE = 9.03% | ||
# 预测误差监控与自适应修正 (Python 风格)
class ForecastMonitor:
def __init__(self, alpha=0.3, ts_limit=3.5):
self.alpha = alpha
self.ts_limit = ts_limit
self.errors = []
def calculate_mad(self):
return sum(abs(e) for e in self.errors) / len(self.errors)
def tracking_signal(self):
cumulative = sum(self.errors)
mad = self.calculate_mad()
return cumulative / mad if mad != 0 else 0
def adapt_smoothing(self, ts):
# 若跟踪信号超限,增加alpha以快速响应
if abs(ts) > self.ts_limit:
self.alpha = min(0.8, self.alpha * 1.2)
else:
self.alpha = max(0.1, self.alpha * 0.98)
return self.alpha
# 使用示例
monitor = ForecastMonitor()
for actual, forecast in sample_data:
error = actual - forecast
monitor.errors.append(error)
ts = monitor.tracking_signal()
new_alpha = monitor.adapt_smoothing(ts)
print(f"TS: {ts:.2f}, 自适应α: {new_alpha:.3f}")