Demand Forecasting for Supply Chain
Skill-Demand-Forecasting-Supply-Chain · 04-供应链
experimentforecastingpricing供应链与补货定价与利润WF-A 智能补货WF-F 动态定价
收录于大促备货决策手册
年化 ROI30万
实现难度⭐⭐⭐☆☆
业务优先级⭐⭐⭐⭐⭐
业务视角
适用角色供应链负责人 · 采购负责人 · CEO / 运营 VP
适用平台Amazon FBA · 海外仓 · 多国仓位(美/欧/日)
什么情况下用库存周转率低,资金压在海外仓出不来;SKU 断货紧急空运,物流成本吃掉毛利;多仓库存分布不均
成功是什么样的库存周转天数从 90 天降到 60 天,断货率 <3%,海外仓综合成本降低 15-25%
业务痛点
1. 解决的问题
供应链的需求预测不同于通用时序预测——它必须考虑促销日历、竞品行动、渠道库存、季节性生命周期等商业因素。
2. 核心算法逻辑
核心问题:供应链的需求预测不同于通用时序预测——它必须考虑促销日历、竞品行动、渠道库存、季节性生命周期等商业因素。预测不准的代价是:过高→库存积压,过低→断货丢单。
3. 业务应用场景
业务问题:Momcozy 代理某品牌奶粉在欧洲销售,涉及5个段位×3个规格×4个仓库=60个SKU-仓库组合。需要预测未来4周的周需求量,用于向供应商下采购单( lead time 6周)。
预测流程: 1. 数据准备: - 历史销量:过去104周(2年)的周销量 - 促销日历:黑五、圣诞、复活节、Prime Day - 价格数据:自身价格 + 竞品价格 - 外部数据:Google Trends("baby formula"搜索指数)
2. 特征工程: - 滞后销量:上周、上月同期、去年同期的销量 - 促销特征:是否促销周、促销深度、促销类型 - 生命周期:SKU上市周数(新品效应) - 季节特征:周数、是否节假日
4. 输入数据要求
请查看原始代码模板获取输入规格。
5. 输出结果
请查看原始代码模板获取输出规格。
6. 业务价值 / ROI
- ROI:缺货率降低50%,库存周转提升50%,年节省库存成本30万+
- 难度:⭐⭐⭐☆☆(3/5)
- 优先级:⭐⭐⭐⭐⭐(5/5)— 供应链决策的起点,没有预测就没有优化
7. 代码模板
代码块数量:1 · 路径:未检测到
"""
Demand Forecasting for Supply Chain — 供应链需求预测
支持:分层预测、促销效应建模、多SKU批量预测
"""
import numpy as np
import pandas as pd
from sklearn.ensemble import GradientBoostingRegressor
from sklearn.metrics import mean_absolute_error
class SupplyChainDemandForecaster:
"""供应链需求预测器"""
def __init__(self, model=None):
self.model = model or GradientBoostingRegressor(n_estimators=100, max_depth=4)
self.is_fitted = False
def build_features(self, df):
"""构建供应链需求预测特征"""
df = df.copy()
df = df.sort_values(['sku', 'date'])
# 滞后特征
for lag in [1, 2, 4, 12]:
df[f'sales_lag_{lag}'] = df.groupby('sku')['sales'].shift(lag)
# 滚动统计
for window in [4, 12]:
df[f'sales_ma_{window}'] = df.groupby('sku')['sales'].transform(
lambda x: x.rolling(window=window, min_periods=1).mean()
)
# 促销特征
if 'is_promo' in df.columns:
df['promo_depth'] = df.get('discount_rate', 0)
df['promo_lag_1'] = df.groupby('sku')['is_promo'].shift(1)
# 季节特征
df['week_of_year'] = pd.to_datetime(df['date']).dt.isocalendar().week
df['month'] = pd.to_datetime(df['date']).dt.month
df['is_holiday'] = df['week_of_year'].isin([47, 48, 49, 50, 51]).astype(int)
# 价格特征
if 'price' in df.columns:
df['price_lag_1'] = df.groupby('sku')['price'].shift(1)
df['price_change'] = (df['price'] - df['price_lag_1']) / df['price_lag_1']
return df.dropna()
def fit(self, df, feature_cols, target_col='sales'):
"""训练模型"""
df_train = df.dropna(subset=feature_cols + [target_col])
X = df_train[feature_cols]
y = df_train[target_col]
self.model.fit(X, y)
self.feature_cols = feature_cols
self.is_fitted = True
return self
8. 论文来源
未自动抽取;请查看原始 Skill 卡片。