ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

SAP预测模型详解:12种模型选型与参数配置实践

SAP预测模型详解:12种模型选型与参数配置实践 简介这是一份中文版SAP Forecast Model技术文档面向实施顾问、生产计划员与需求预测分析人员系统说明预测模型的原理、分类、选择、初始化与参数优化等完整操作流程。资源仅含一个PDF文件压缩包大小124KB内容精炼、便于离线查阅目前已有102人学习下载。文档覆盖系统内建的十二种预测模型如常数模型、趋势模型、季节模型、季节趋势模型、移动平均、加权移动平均与二阶趋势模型等并对比了各模型适用的时间序列特征同时详解模型选择的手动与自动方式、过程一与过程二的差异、预测视图字段初始化、平滑因子、加权组、历史期间、预测期间、以及系统默认的初始化公式和平均绝对偏差口径。无论是初学SAP预测功能还是为具体物料挑选合适模型这份资料都能提供清晰、可查的参考依据。1. SAP 预测模型不是黑盒12 个模型与两类选型入口计划员在 MD61 里建独立需求时最常见的选择是勾上「J 自动模型选择」然后交给系统。但很多项目里自动选出来的结果在旺季前一个月就开始失真——因为 SAP 的自相关测试对数据长度敏感历史只有 12 期时季节信号往往被移动平均抹平。SAP Forecast Model 这套模型体系常以一份 PDF 文档在网间流传内容对应 ERP 2005 EHP06 帮助文档的 Forecast Model 章节把 12 个预测模型的分类、预测视图字段、初始化公式和两种自动选择过程集中讲清楚了。这份 PDF 拆开揉碎后能直接对应到 MRP 参数配置SAP PP/MM 顾问、物料计划员和做需求预测算法的人都能从里面找到「选哪个模型」「参数怎么设」「结果为什么是这样」的完整答案。2. 模型分类与指数平滑的对应关系从 D 到 X 的数学语义2.1 12 个模型代码与模式归属SAP 的 12 个预测模型用字母和数字表示先看完整清单代码名称模式归属典型应用D常数模型常数消耗稳定围绕均值小幅波动K带平滑因子调整的常量常数/平滑均值缓慢漂移需要用 Alpha 跟踪T趋势模型趋势一阶指数平滑霍尔特双参数线性爬坡或下降的产品S季节模型季节周期性波动幅度稳定X季节趋势模型季节趋势温特线性与季节指数平滑周期与线性变化同时存在N无预报/外部模型不规则由外部系统输入预测结果G移动平均不规则/常数特征不明显的通用兜底W加权移动平均不规则/常数近期数据权重更高的场景0无预报/无外部模型不规则不预测直接取计划值O带平滑因子调整的二阶趋势趋势二阶参数最优化趋势本身在变化的场景B二阶趋势趋势二阶无参数最优化趋势有曲率的场景J自动模型选择路由不确定特征时交给系统注意 N 和 0 的差异N 表示有外部模型接入预测值来自外部系统0 表示完全不用预测结果。两者都不做内部计算实际项目里多用于 EDI 或下游系统回传需求。2.2 五类模式的数学特征与选型判断模式只有五类但判断逻辑对应直接。常数模式的时间序列沿着一个平均值随机扰动典型如办公耗材、标准紧固件选 D 或 K。趋势模式是线性变化选 T如果趋势本身还在加速或减速就要考虑二阶趋势 B 或 O。季节模式呈现周期性变化选 S周期和线性趋势同时存在选 X。不规则模式没有明显特征SAP 文档明确写着「通常选用移动平均模型」也就是 G 或 W。这里有一个新手容易踩的坑觉得季节模型一定比移动平均准。实际上 S 和 X 的初始化最少需要一个完整季节长度的历史数据例如 12 个月历史不足时季节指数初值全是噪声算出来的预测比 G 还差。判断特征之前先确认手里有多少期历史值再决定要不要上季节模型。提示季节模型和季节趋势模型的初始化最少需要一个完整季节长度的历史数据历史不足时先落到移动平均。2.3 从模型代码看指数平滑梯度K、O、B 三个模型的区别最容易混淆。B 是二阶趋势但不带参数最优化O 是二阶趋势且带平滑因子调整也就是系统会搜索最优平滑因子。K 在常数模型基础上加了平滑因子调整适合均值有小幅漂移而不想引入趋势项的序列。T 对应霍尔特双参数线性指数平滑用 Alpha 平滑基础值、Beta 平滑趋势值X 对应温特线性与季节指数平滑额外用 Gamma 平滑季节因子。模型代码背后本质上是平滑因子的引入梯度没有字母修饰的是朴素版本带 K/O 后缀的是可调参数版本。2.4 为什么趋势模型至少要 3 期历史值文档里给了每种模型最少历史值数量的表格常数模型 1 期趋势 3 期季节 1 个季节长度季节趋势乘法/加法2 个季节长度。可以用一个小示例说明为什么趋势模型要求 3 期import numpy as np h np.array([100, 110, 121]) # 常见初始化做法前两个历史值之差作为趋势初值 trend h[1] - h[0] # 取第二期历史值作为基础值初值 base h[1] print(f趋势初值: {trend}, 基础值初值: {base})输出中趋势初值为 10基础值初值为 110下一期预测值为 120。这里的关键不是数值本身而是为什么要求 3 期2 期数据只能确定一条直线没有残差趋势初值完全取决于两个点的位置噪声会被直接放大。3 期以上才能让基础值和趋势值的初值对历史波动不那么敏感。实际操作中历史不足 3 期时建议勾选 J 自动选择系统会退回移动平均。3. 预测视图字段与初始化公式配置前先读懂的 15 个参数3.1 与预测模型相关的字段预测视图里的字段分为两类。与预测模型相关的字段直接控制算法行为。预测模型字段勾选 12 种模型之一用于手动模式。模型选择字段控制自动/手动勾选后系统自动测试趋势、季节性、趋势季节性再选出合适模型不勾选则必须手动指定预测模型。初始化字段通常选 X由系统根据所选模型自动生成基础值、趋势值和季节因子。选择过程字段决定自动选择的具体算法过程 1 用显著性测试过程 2 全模型搜索加参数优化。参数优化勾选后系统自动调整平滑因子使 MAD 最低优化级别越高步长越小。加权组和每一季节期间在配置时最容易被忽略。加权组只在选择 W 时必须配置用于设定加权因子位置和大小每一季节期间指定一个季节包含的历史值数目比如季度数据写 3月度数据写 12它决定季节长度的基准。3.2 与预测模型无关的字段与预测模型无关的字段影响数据读取范围不改变算法。期间标识决定消耗值存储的时间间隔设为 M 则按月显示。历史期间是参与预测的历史消耗数预测期间是系统输出的期数固定期间的概念容易理解错——历史期间 1-6 月预测期间 4固定期间 2系统只显示 9-10 月的预测值7-8 月的预测被跳过。初始化期间指初始化所需历史值的数目不勾选时系统按模型默认值取。追踪限制默认 4修正因子用于对历史值和预测值做加权处理。参考物料字段组用于预测物料没有历史数据的场景参考物料指定一种物料参考工厂指定其工厂日期到给出截止时间点乘数控制参考值进入预测的比例。日期到设为 12 月 1 日参考物料 12 月 1 日之前的历史值全部迁移过来乘数 0.2 时参考物料 1 月历史值 100 会被换算成 20。注意固定期间不是「不预测」而是「预测了但不显示」。MRP 计算时这些期间的预测值仍然存在只是视图里不展示。3.3 初始化公式四类模型初值怎么定的SAP 默认的初始化公式按模型类别区分核心差异在下表模型类别基础值初值趋势值初值季节指数初值MAD 初值常数模型D/K/G/WHist(1)010趋势模型T/B/O由前两期历史值推算由前两期历史值推算10季节模型S第一个历史季节的均值0各期历史值/基础值0季节趋势模型X由前两个历史季节推算由前两个历史季节推算各期历史值/基础值0常数模型把第一期历史值直接作为基础值趋势和季节因子都置中性值所以它对最新历史最敏感。季节模型的基础值取第一个完整季节的均值每个季节指数等于对应历史值除以基础值初值包含首个季节的全部信息。趋势模型和季节趋势模型的基础值与趋势值来自前两期或前两个季节的线性推算常见做法是取差作为趋势初值、取较近一期作为基础值初值。MAD 初值统一为 0因为没有任何误差积累。3.4 用 ABAP 读预测参数配置前先确认主数据在事务代码 MD61 创建预测之前建议先确认物料主数据里的预测字段。一个最小可用的 ABAP 报告REPORT z_forecast_param. DATA: ls_marc TYPE marc. PARAMETERS: p_matnr TYPE marc-matnr OBLIGATORY, p_werks TYPE marc-werks OBLIGATORY. SELECT SINGLE matnr werks periv exprz vrgng FROM marc INTO CORRESPONDING FIELDS OF ls_marc WHERE matnr p_matnr AND werks p_werks. WRITE: / 物料:, ls_marc-matnr, / 工厂:, ls_marc-werks, / 会计年度变式:, ls_marc-periv, / 预测期间数:, ls_marc-exprz.PERIV 是会计年度变式决定期间如何划分EXPRZ 是预测期间数对应预测视图中「预测期间」字段的默认值。输出这两个字段能快速判断 MRP 会按周还是按月展开预测。预测计算后用事务代码 MD07 查看当前物料的预测结果用 MDVP 核对需求概况如果发现预测期间数与业务计划不一致问题往往就出在这两个主数据字段上。4. 自动选择算法过程 1 的自相关检验与过程 2 的 MAD 寻优4.1 手动选择的前提条件手动选择只适合一种情况你清楚时间序列的发展特征。SAP 文档写得很克制「当你清楚时间序列的发展特征时系统会按照你所选的模型进行预测计算。」不清楚特征时勾选模型选择字段系统会依次做趋势检查、季节检查、趋势与季节组合检查再选模型。勾选模型选择字段但一般数据里也勾了具体模型时系统以模型选择字段的测试结果为准。特征不明显的序列走不规则路线SAP 的默认建议是移动平均。这个「默认」很有迷惑性——G 模型在时序平稳时表现很好但一旦出现阶段性的淡旺季移动平均的滞后效应明显预测值会整体落后于实际拐点。所以自动选择并不等于最优选择它在「特征不明显」这个前提下才成立。4.2 过程 1自相关测试与线性回归过程 1 用自相关测试检验季节性用线性回归测试趋势。自相关测试的核心是计算滞后一个季节长度的自相关系数月度数据滞后 12 期周数据滞后 52 期。系数显著说明当前周期的值与上一周期同位置的值存在相关性季节模式成立。线性回归则把历史期数作为自变量、消耗值作为因变量回归斜率显著不为零说明存在趋势。这个过程速度快因为只做一轮显著性判断不做参数搜索。但它对样本量敏感历史只有 12 期时自相关的置信区间很宽季节信号容易被误判为噪声趋势回归也会被头尾两个异常值拉偏。所以过程 1 的结果只能作为初步路由项目里我一般只用它处理周期短、物料量大、需要快速跑 MRP 的场景。4.3 过程 2全模型搜索加 MAD 最小化过程 2 的做法是使用所有可行的模型对时间序列分别做预测计算同时优化每一种模型的参数最后选择 MAD 最小的模型。因为每一步都要做参数优化计算量远大于过程 1但结果更接近真实的变化模式。过程 2 的隐含前提是历史数据足够支撑全模型的初始化。季节模型最少要一个季节长度季节趋势要两个。如果历史只有 5 期过程 2 会尝试 D、G、W 和小阶数的移动平均S 和 X 会被自动排除。过程 2 的另一个特征是它对 MAD 的定义很敏感Delta factor 会影响 MAD 的计算方式如果 Delta 设置异常过程 2 选出来的模型会在最小 MAD 的名义下失真。对比项过程 1过程 2检验方式自相关线性回归显著性测试全模型预测参数优化耗时快慢结果通过显著性组合选择模型取最小 MAD 的模型适用场景物料多、历史短、快速 MRP历史充足、精度优先4.4 用 Python 复现过程 1 的检验思路理解过程 1 的最快方式是手动算一遍。以下代码模拟一个带趋势的季节性序列并分别做滞后 12 期自相关和线性回归检验import numpy as np t np.arange(1, 25) # 24 期月度数据线性趋势 周期 12 的季节分量 噪声 y 5 * t 20 * np.sin(2 * np.pi * t / 12) np.random.normal(0, 5, 24) y_center y - y.mean() # 滞后 12 期自相关考察同期相关性 lag12 np.corrcoef(y_center[:12], y_center[12:])[0, 1] print(lag-12 自相关:, round(lag12, 3)) # 线性回归斜率考察趋势 slope np.polyfit(t, y, 1)[0] print(回归斜率:, round(slope, 3))lag-12 自相关接近 1 说明季节模式显著回归斜率显著不为 0 说明趋势存在两者都显著时选择 X 而不是 S 或 T。过程 1 的判定逻辑就是这两个指标的组合判断季节显著而趋势不显著选 S趋势显著而季节不显著选 T都显著选 X都不显著退回 D 或 G。实际项目中可以用这段代码在 Python 里快速验证一组 SAP 历史消耗值提前判断自动选择结果是否合理再决定要不要手动覆盖。5. 平滑因子、加权组与参考物料让预测贴合业务的三个杠杆5.1 四个平滑因子各管一段Alpha、Beta、Gamma、Delta 是预测视图里最容易抄错的小数它们的作用范围完全不同因子作用对象含义调大后的影响Alpha factor基础值基准值平滑指数预测更依赖近期实际值响应快噪声放大Beta factor趋势值趋势值平滑指数趋势变化响应更快易过拟合Gamma factor季节因子季节指数平滑指数季节形态更新更快小样本下不稳定Delta factorMAD 与 Error Total误差评价平滑指数对近期误差更敏感模型失效更早暴露取值范围都是 0 到 1。Alpha 接近 1 时基础值几乎完全由上一期实际值决定接近 0 时接近长期均值。Beta 和 Gamma 同理。Delta 特殊在它不直接参与预测而是影响 MAD 和 Error Total 的计算权重进而影响追踪信号和过程 2 的模型选择。生产环境里我习惯把 Delta 保持在默认值附近除非明确要放大近期误差的影响。5.2 参数优化的本质是对平滑因子的网格搜索勾选参数优化后系统会在可行范围内扫描 Alpha、Beta、Gamma 的组合选择使 MAD 最小的一组。优化级别控制步长级别越高步长越小。用常数模型的单指数平滑演示这个逻辑import numpy as np hist np.array([100, 110, 115, 120, 118, 125]) alphas np.arange(0.1, 1.0, 0.1) for alpha in alphas: forecast hist[0] errors [] for actual in hist[1:]: forecast alpha * actual (1 - alpha) * forecast errors.append(abs(actual - forecast)) mad np.mean(errors) print(falpha{alpha:.1f} MAD{mad:.2f})运行后可以看到不同 alpha 下的 MAD 存在一个最低点这个最低点并不一定在两端。SAP 的参数优化对这个逻辑做两层扩展一是同时扫描三个因子形成三维网格二是优化级别决定步长级别 5 的步长可能是 0.01级别 1 是 0.1。步长减半时 MAD 的收益通常是边际递减的但计算量接近翻倍物料量大时预测运行时间成倍上升。实际配置我一般选级别 2-3不追最高级别。提示优化级别调高后MRP 每次预测运行的时间会明显变长物料量大时先小范围实测再全量跑。5.3 移动平均与加权组的设置G 移动平均的阶数等于「每一季节期间」或历史期间的一段窗口比如取最近 3 个月的平均作为下期预测。W 加权移动平均需要显式配置加权组加权组字段按顺序定义每个位置的权重从近期到远期排列。一个 3 期加权组可以写成 0.5、0.3、0.2表示最近一期占 50% 权重最远一期占 20%。权重选择有几个原则权重之和必须为 1越近权重越大能加快响应但极端权重会把偶然波动当成趋势序列越平稳权重越接近等权。加权组的位置顺序在 SAP 预测视图里是按字段位置排列的调整时先确认哪一位对应最近期避免把权重倒挂。5.4 参考物料没有历史数据时的可行路径新物料上线通常没有消耗历史这时可以用参考物料字段组借历史。参考物料字段指定用于借历史的物料参考工厂指定物料所在工厂日期到决定取到哪个时间点之前的历史乘数控制比例。乘数 0.2、参考物料 1 月历史 100 时预测物料 1 月的等效历史值是 20。参考物料适合品类相近、消耗规模成比例的场景比如同系列不同规格的产品。乘数的确定可以按过去 3 个月实际销量的比值算也可以按物料主数据的计划比例定。要注意的是参考物料本身不能参与预测计算它只提供历史值输入日期到之后的新历史不会被迁移避免把参考物料未来的噪声带进来。6. 追踪信号超限与再初始化一个生产环境排错步骤6.1 追踪信号的计算与默认阈值追踪信号是 ERROR TOTAL 与 MAD 的比值。ERROR TOTAL 带方向MAD 只取绝对误差均值比值持续为正说明预测长期低估持续为负说明长期高估。SAP 默认追踪限制为 4比值超过 4 时系统给出结构性中断提示表示时间序列的变化模式已经和当前模型不匹配。6.2 超限后的排错顺序先看历史消耗序列是否断档再查主数据预测参数最后才动模型。查历史断档可以直接读消耗表SELECT MATNR, WERKS, PERKZ, BDATJ, BDPRJ, BDECH FROM MVER WHERE MATNR 物料号 AND WERKS 工厂 ORDER BY BDATJ, BDPRJ;MVER 按期间存历史消耗BDATJ 是年份、BDPRJ 是期间序号、BDECH 是期间消耗值。如果查询结果里连续几期 BDECH 为 0说明序列出现过断档需要先和业务确认是停线、停产还是数据未过账。断档期间会被当成正常历史参与移动平均直接把模型拉偏。排除数据问题后在预测视图重新勾选初始化字段为 X执行再次初始化系统会按当前模型重新计算基础值、趋势值和季节因子旧参数被覆盖。然后换模型优先考虑手动指定保守选 D 或 G有明显季节选 S趋势明确选 T。如果不想时刻盯着勾选自动重置系统在追踪信号超限时会自动更换模型。最后注意一个边界季节模型再初始化需要至少一个完整季节长度的历史季节趋势需要两个季节长度历史不足时先落到移动平均等数据积累够再切回季节模型。本文还有配套的精品资源点击获取
返回列表