Skill-Product-Lifecycle-Stage
Skill-Product-Lifecycle-Stage · 06-增长模型
1. 解决的问题
核心思想:把一个 SKU 或品类的销量时间序列,分解为趋势+季节+残差三层信号,通过微分分析(斜率变化率)自动定位「成长→成熟→衰退」的阶段边界,并用年龄-销量矩(AVM)作为阶段状态的低成本代理特征,最终输出四阶段标签(引入/成长/成熟/衰退)+ 进入时机决策建议。
2. 核心算法逻辑
核心思想:把一个 SKU 或品类的销量时间序列,分解为趋势+季节+残差三层信号,通过微分分析(斜率变化率)自动定位「成长→成熟→衰退」的阶段边界,并用年龄销量矩(AVM)作为阶段状态的低成本代理特征,最终输出四阶段标签(引入/成长/成熟/衰退)+ 进入时机决策建议。
3. 业务应用场景
- 业务问题:考虑进入 baby UV-C sterilizer 品类,不知道该品类处于哪个 PLC 阶段,是该现在进还是已经过了最佳时机。 - 数据要求: - 品类月度搜索量(Google Trends 指数,近 24 个月) - Top 10 竞品的月度 BSR 排名或 Review 增速(近 24 个月) - 竞品数量(同类 ASIN 数,近 24 个月) - 预期产出: - 当前阶段标签(引入/成长/成熟/衰退) - 阶段置信度(基于斜率比和 AVM 特征) - 进入时机建议(GO/WAIT/NO-GO + 理由) - 业务价值:避免在衰退期进入,节省产品开发 + 认证 + 首批备货成
场景 B:在售 SKU 生命周期监控(换代预警)
- 业务问题:主力 SKU baby sterilizer Pro 已上市 18 个月,近 3 个月 BSR 在下滑,不确定是暂时性的还是进入衰退期,是否该启动换代新品研发。 - 数据要求:该 SKU 每周 BSR 排名(或 Review 增速)近 24 个月 - 预期产出: - 当前阶段 + 进入该阶段的月份数 - 衰退斜率/成熟斜率比值(>3× 触发换代预警) - 预测剩余「有效生命期」(基于历史同类 SKU 衰退速度) - 业务价值:新品研发周期约 8-12 个月,提前 6 个月发出换代预警可确保无断档期
4. 输入数据要求
请查看原始代码模板获取输入规格。
5. 输出结果
请查看原始代码模板获取输出规格。
6. 业务价值 / ROI
- ROI 预估:
- 避免衰退期进入:baby UV wand 品类已进入衰退(FDA 召回 + 竞品清仓),若误判为成长期进入,首批备货+认证成本损失约 $20,000-$50,000
- 准确判断成长期进入时机:UV-C 密闭消毒器品类当前成长期,提前 6-12 个月进入比成熟期进入预期 LTV 高 2-3×
- 换代预警价值:提前 6 个月发出衰退预警,节省新品研发断档期销售损失约 $5,000-$15,000/月
- 实施难度:⭐⭐☆☆☆(2/5)— STL+微分分析,纯数值计算,无需 GPU/大数据
- 优先级评分:⭐⭐⭐⭐⭐(5/5)— WF-D 选品扫描的核心前置决策,缺失此 Skill 等于盲目进入品类
7. 代码模板
代码块数量:6 · 路径:paper2skills-code/growth_model/product_lifecycle_stage
"""
Skill-Product-Lifecycle-Stage
基于 arXiv:2511.16248 (PhaseFormer, AAAI 2025) + arXiv:2511.17275 (AVM, 2025)
母婴跨境电商品类/SKU 生命周期阶段检测
"""
import numpy as np
import pandas as pd
from dataclasses import dataclass
from typing import Optional
from enum import Enum
try:
from statsmodels.tsa.seasonal import STL
HAS_STATSMODELS = True
except ImportError:
HAS_STATSMODELS = False
print("提示: pip install statsmodels 启用 STL 分解,当前使用简化版")
class PLCStage(Enum):
INTRODUCTION = "引入期"
GROWTH = "成长期"
MATURITY = "成熟期"
DECLINE = "衰退期"
UNKNOWN = "数据不足"
@dataclass
class PLCResult:
sku_id: str
current_stage: PLCStage
confidence: float # 0-1
months_in_stage: int
growth_rate_mom: float # 最近3个月平均月增速
slope_ratio: Optional[float] # 衰退斜率/成熟斜率,>3× 为强衰退信号
avm_score: float # 年龄-销量矩归一化值
decision: str # GO / WAIT / NO-GO
rationale: str
warning: Optional[str] = None
# ── STL 分解(剥离大促季节性)─────────────────────────────
def decompose_trend(sales: np.ndarray, period: int = 12) -> np.ndarray:
"""
STL 分解提取趋势项,剥离促销季节性噪声。
Y_t = T_t + S_t + R_t,返回 T_t。
"""
if len(sales) < period * 2:
# 数据不足时用移动平均代替
window = min(3, len(sales))
return pd.Series(sales).rolling(window, center=True, min_periods=1).mean().values
if HAS_STATSMODELS:
stl = STL(sales, period=period, robust=True)
result = stl.fit()
return result.trend
else:
# 简化版:中心移动平均
return pd.Series(sales).rolling(period, center=True, min_periods=1).mean().values
8. 论文来源
- 2511.16248
- 2511.17275