方法
Demo 看板方法
以下说明从同一套指标定义和方法面板生成,不另写第二套口径。页面可公开访问;仓库文档不是网站路由。
本项目使用完全合成的模拟数据,不源自任何真实企业、客户或个人,不代表真实经营结果。 数据集 v1.2.0 · 数据截止 2025-12-31 · checksum 0a0f2ef38a584669a3a8296e5c4462fa3ea9e665d7fe3c81f7a9d7b4bdcc632e
促销增量
- 问题
- 会员唤醒活动有没有带来可投放的增量利润?
- 粒度
- 活动 × 随机分组客户;分群按会员标签汇总。转化按人、按 ITT。
- 窗口
- 活动期 2025-09-01 至 2025-09-28。对照组不享受折扣,但仍计入曝光。
- 为什么选择这些图表
- 置信区间图同时给出 lift 与不确定性,避免只看 raw lift。经济性桥接只从增量毛利扣除触达成本,因为折扣已经进入净收入和毛利。行动矩阵把转化、利润和 CI 状态放在同一平面。
- 可以支持
- 判断哪些分群值得小范围测试或优先投放,哪些只是转化上升但利润为负。
- 不能据此结论
- 不能把整体负 ROI 包装成成功案例,也不能在 CI 跨 0 或样本不足时扩大投放。结果来自合成实验,不代表真实客户。
KPI 公式
活动组转化率 treatment_conversion
活动期内下单的 treatment 客户数 / treatment 曝光客户数
按人转化,不按券核销;同一客户多笔订单仍计 1 次转化。
对照组转化率 control_conversion
活动期内下单的 control 客户数 / control 曝光客户数
对照组不享受活动折扣,但仍计入曝光,用于意图治疗估计。
绝对提升 absolute_lift
treatment_conversion - control_conversion
绝对提升是百分点,不是相对百分比。
相对提升 relative_lift
absolute_lift / control_conversion
对照组转化接近 0 时相对提升不稳定。
绝对提升 95% 置信区间 lift_ci
Wald:(p_t - p_c) ± 1.96 × sqrt(p_t(1-p_t)/n_t + p_c(1-p_c)/n_c)
区间覆盖 0 或任一组 n<400 时仅作方向性结果,不能作为投放决策。
增量订单 incremental_orders
absolute_lift × treatment 曝光客户数
按转化客户近似增量订单,不把同一人的多笔订单重复计为增量。
增量收入 incremental_revenue
treatment 净收入 - treatment人数 × (control 净收入 / control人数)
收入已扣折扣;不要再用标价计算增量。
增量毛利 incremental_gross_profit
treatment 毛利 - treatment人数 × (control 毛利 / control人数)
折扣已体现在净收入中,不再从毛利重复扣减。
活动成本 campaign_cost
触达成本合计 + treatment 订单折扣合计
对照组无折扣;触达成本对 treatment 与 control 均计提。
增量利润 incremental_profit
incremental_gross_profit - 全部触达成本
折扣已进入毛利,故增量利润只再扣触达成本,避免重复扣优惠。
触达成本 outreach_cost
Σ campaign_exposures.outreach_cost
经济性桥接只扣触达成本。折扣已进入净收入和毛利,不得把全部 campaign_cost 再从增量毛利扣一遍。
投入回报率 roi
incremental_profit / campaign_cost
本 Demo 保留整体负 ROI,用于说明转化提升不等于利润提升。分群行动需结合 95% CI、样本量和增量利润,不能只看 raw lift。
经营原因
- 问题
- 2025-08 相对 2025-07,销售收入为什么变化?
- 粒度
- 已成交订单(demo_orders)按自然月汇总;缺货影响按周库存估计后再按日历日均摊。
- 窗口
- 2025-08 vs 2025-07。收入、订单、客户、客单价、毛利率均来自已确认销售。
- 为什么选择这些图表
- 只有两个时点,所以用加法 waterfall 而不是伪时间序列。门店条形图按变化额排序,并给出上月收入。缺货图是周估计均摊,不是日级趋势。促销贡献是占比,不进入加法分解。
- 可以支持
- 核对收入变化主要由 Volume 驱动,并查看哪些门店和缺货估计需要跟进。
- 不能据此结论
- 不能据此谈论流量或转化,因为本数据集没有这些字段。也不能把四周完整周当成完整自然月缺货观测。
KPI 公式
销售收入 revenue
Σ 订单净额
使用已完成并确认收入的订单净额,不是标价。件数与库存 sold_qty 按周×门店×SKU 对账。
订单数 orders
COUNT(订单)
取消订单未模拟,无需剔除。
成交客户数 customers
COUNT(DISTINCT customer_id)
不是会员池规模。
客单价 average_order_value
销售收入 / 订单数
按订单平均,不是按客户平均。
毛利率 gross_margin_rate
Σ 毛利 / Σ 净收入
毛利已扣折扣,不再扣触达成本。
新客 / 老客结构 new_returning_mix
新客成交人数 / 成交客户数;老客 = 1 - 新客
新客按模拟历史定义,不是CRM入会日期的运营口径。
价格 / 销量 / 结构贡献 price_volume_mix
价格=Σ(p1-p0)·q1;销量=(Q1-Q0)·(R0/Q0);结构=Q1·Σ(s1-s0)·p0。p 为品类收入/销量,s 为销量占比
三项各自计算。某一期销量为 0 时,该期均价用另一期均价。
促销贡献 promotion_contribution
活动标记订单净额 / 当月净额
这是活动期订单占比,不是增量贡献。
缺货影响 stockout_impact
Σ(周 stockout_qty × 该周落在当月的覆盖日占比 × 该 SKU 当月实际净售价;无成交回退标价)
周级估计的额外未满足需求,不是把已成交订单改写成缺货。sold_qty 等于对应周已确认订单件数;stockout_qty 是销售之外的估计流失;demand_qty = sold_qty + stockout_qty。不是日级缺货观测,也不是四个完整周等于完整自然月。
经营汇总查询
SELECT to_char(o.order_date, 'YYYY-MM') AS month, round(sum(o.net_amount), 2) AS revenue, count(*) AS orders, count(DISTINCT o.customer_id) AS customers, round(sum(o.net_amount) / nullif(count(*), 0), 2) AS average_order_value, round(sum(o.gross_profit) / nullif(sum(o.net_amount), 0), 4) AS gross_margin_rate FROM public.demo_orders AS o WHERE o.dataset_version = 'v1.2.0' AND o.order_date >= '2025-07-01' AND o.order_date < '2025-09-01' GROUP BY 1 ORDER BY 1;
定价与库存
- 问题
- 在运行日,哪些门店×SKU 应优先清仓、补货、调拨、测价或观察?
- 粒度
- 运行日 × 门店 × SKU。分布与矩阵覆盖全部建议行,不是 24 条样本。
- 窗口
- 运行日 2025-12-29;窗口为截至该日的最近 8 个周初周一,最后一周为部分周。库存 as-of 2025-12-29。
- 为什么选择这些图表
- 信号构成用水平条而不是饼图,便于比较数量。库存天数直方图保留 180+ 封顶组。决策矩阵展示全体组合的库存×毛利密度,24 条清单只是配额样本。
- 可以支持
- 把人工复核集中到清仓、补货和调拨信号,并解释封顶与未封顶库存天数不可混比。
- 不能据此结论
- 不能把 24 条称为全局 Top 24,也不能把 180 天读成真实库龄恰好 180 天。建议价格是规则输出,需人工复核。
KPI 公式
毛利率 gross_margin_rate
(近期售价 - 成本) / 近期售价
清仓品可能售价接近或低于成本。
库龄 inventory_age
选定快照日的 inventory_age_days
禁止跨日期把库存数量加总。
库存周转天数 inventory_days
closing_qty × 窗口覆盖天数 / 窗口 sold_qty;连锁级仅销量≥4 的组合做 ratio-of-sums 后再换算为天数
库存只取一个日期。180 是右删失/封顶值,不代表真实库存恰好为 180 天。不得静默删除封顶记录后再算中位数。周均销量分母必须与实际覆盖天数一致,不能按 9 个快照或按 8 个完整周硬除。
售罄率 sell_through_rate
窗口销量 / (窗口第一周 opening_qty + 窗口内 inbound_qty)
分母用窗口第一周 opening,不用最后一周 opening,也不把销量加进分母。
缺货率 stockout_rate
stockout_qty > 0 的周次数 / 周快照次数
按周计数,不按日库存加总。stockout_qty 是已成交销售之外的估计未满足需求,不能把已确认订单改写成缺货。
滞销率 slow_moving_rate
库龄≥60 且 8 周售罄率<0.25 的 SKU-门店数 / 全部 SKU-门店数
滞销阈值是演示假设,不是行业标准。
价差 price_gap
(标价 - 近期成交价) / 标价
正价差表示成交低于标价。
预期需求变化 expected_demand_change
-price_elasticity × (recommended_mid / recent_price - 1)
公式与 lib/demo-data/formulas.ts 的 expectedDemandChange 一致。仅用于排序。
建议价格区间 recommended_price_range
按毛利、库龄和售罄率把标价约束在 70%–115%
区间是规则引擎输出,需人工复核后再改价。
全体组合封顶库存天数中位数 inventory_days_capped_median
对全部门店×SKU 的 capped inventory_days 取中位数,含 180 封顶记录
180 是右删失/封顶,不是真实库存恰好 180 天。
全体组合封顶库存天数 P75 inventory_days_capped_p75
对全部门店×SKU 的 capped inventory_days 取 75 分位,含 180 封顶记录
与中位数同一口径,包含全部封顶记录。
有动销组合未封顶库存天数中位数 inventory_days_moving_uncapped_median
窗口 sold_qty>0 的组合,用 closing × 覆盖天数 / sold 取中位数,不封顶
无动销组合没有未封顶天数。可大于 180。
有动销组合未封顶库存天数 P75 inventory_days_moving_uncapped_p75
窗口 sold_qty>0 的组合未封顶周转天数的 75 分位
与有动销中位数同一口径。