促销量化模型简介和示例
促销量化模型
“促销量化模型”通常指的是一种用来量化促销活动对销售额影响的模型,它帮助企业评估不同促销策略(如打折、买赠、限时优惠)对销量的提升作用,支持科学定价与市场推广决策。
📊 一、促销量化模型的基本框架
模块 | 内容 |
---|---|
输入变量 | 商品原价、促销类型、促销力度、促销时长、媒体曝光量、门店分布、季节等 |
输出变量 | 销售量 uplift、销售额 uplift、ROI(投入产出比)、毛利变化等 |
数据来源 | 历史销售数据、促销活动记录、广告花费、库存情况、外部天气/节假日数据等 |
常用算法 | 回归模型(如线性回归、Lasso)、树模型(如XGBoost、Random Forest)、贝叶斯结构、A/B测试等 |
模型目标 | 预测促销带来的销量提升;估计不同策略的效果;支持优化促销组合 |
🧠 二、典型模型类型与实现方式
1. 回归模型
-
目标变量:销售量 uplift(= 促销销售量 - 非促销预估销售量)
-
特征变量:促销类型、价格折扣、曝光次数、历史销量、节假日等
-
示例模型:
from sklearn.linear_model import LinearRegression X = df[["discount_rate", "promotion_duration", "store_count", "holiday_flag"]] y = df["sales_uplift"] model = LinearRegression().fit(X, y)
2. A/B 测试
-
通过对比促销组与控制组,直接计算 uplift:
Uplift = 销售量 促销组 − 销售量 控制组 销售量 控制组 \text{Uplift} = \frac{\text{销售量}_{\text{促销组}} - \text{销售量}_{\text{控制组}}}{\text{销售量}_{\text{控制组}}} Uplift=销售量控制组销售量促销组−销售量控制组
3. 时间序列预测 + Counterfactual Estimation
- 使用ARIMA、Prophet等预测非促销情况下的销量(Counterfactual)
- 比较实际销量与预测值估算 uplift
🔍 三、示例:护手霜电商促销销量建模
假设你要评估“双11”期间护手霜电商活动的效果,建模步骤如下:
1. 数据收集
- 历史每天销量
- 促销信息(满减、买赠、打折)
- 广告曝光、直播流量、社交媒体讨论量
- 天气、节假日等外部数据
2. 特征工程
df["discount_rate"] = 1 - df["promo_price"] / df["original_price"]
df["is_double11"] = df["date"].isin(double11_dates)
3. 模型构建(例如XGBoost)
import xgboost as xgb
model = xgb.XGBRegressor()
model.fit(X_train, y_train)
4. 效果评估
- 预测 vs 实际销量
- uplift 评估
- ROI = 增加销售额 / 促销成本
📈 四、结果可视化建议
- 销量 vs 时间线:标注促销期,看销量是否明显上升
- uplift 对比图:促销 vs 非促销产品对比
- ROI 热力图:不同促销策略组合下的回报率
示例
下面是一个护手霜电商促销量化模型的完整示例,用于评估促销活动对销量的影响,并预测在不同促销策略下可能带来的销量提升(uplift)。
🧪 场景设定
我们有一份历史销售数据,字段如下:
日期 | 销量 | 原价 | 促销价 | 是否促销 | 曝光量 | 是否节假日 |
---|---|---|---|---|---|---|
2024-11-01 | 100 | 30 | 30 | 0 | 1000 | 0 |
2024-11-11 | 350 | 30 | 21 | 1 | 5000 | 1 |
… | … | … | … | … | … | … |
🧱 1. 构造样本数据
import pandas as pd# 构建简化版销售数据
data = pd.DataFrame({"date": pd.date_range("2024-11-01", periods=10, freq="D"),"sales": [100, 120, 110, 105, 350, 140, 130, 115, 400, 150],"original_price": [30] * 10,"promo_price": [30, 30, 30, 30, 21, 30, 30, 30, 18, 30],"is_promo": [0, 0, 0, 0, 1, 0, 0, 0, 1, 0],"exposure": [1000, 1100, 1050, 1000, 5000, 1200, 1150, 1000, 5500, 1250],"is_holiday": [0, 0, 0, 0, 1, 0, 0, 0, 1, 0]
})
🧮 2. 特征工程:构建促销折扣率
data["discount_rate"] = 1 - data["promo_price"] / data["original_price"]
🤖 3. 构建模型:使用回归预测销量
from sklearn.linear_model import LinearRegression
from sklearn.model_selection import train_test_splitfeatures = ["discount_rate", "exposure", "is_promo", "is_holiday"]
X = data[features]
y = data["sales"]X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)model = LinearRegression()
model.fit(X_train, y_train)
🔮 4. 模拟促销策略,评估uplift
模拟在 非促销日,如果进行打8折促销(discount_rate=0.2
),销量预计提升多少?
# 选出非促销的样本
non_promo = data[data["is_promo"] == 0].copy()# 构造打8折模拟场景
non_promo["discount_rate"] = 0.2
non_promo["is_promo"] = 1# 预测销量
non_promo["predicted_sales"] = model.predict(non_promo[features])# 与原销量比较,计算uplift
non_promo["uplift"] = non_promo["predicted_sales"] - non_promo["sales"]print(non_promo[["date", "sales", "predicted_sales", "uplift"]])
📈 示例输出(可能结果)
日期 | 原销量 | 预测促销销量 | 销量提升 |
---|---|---|---|
2024-11-01 | 100 | 160.2 | +60.2 |
2024-11-02 | 120 | 165.5 | +45.5 |
… | … | … | … |
📌 结论
该模型可用于:
- 模拟不同促销策略下的销量预估;
- 帮助营销部门评估打折的投入产出比;
- 指导最优促销时机与方式。
如果你有自己的销售数据,我可以帮你代入建模并做更精细的评估。是否需要将代码输出为可运行的Jupyter Notebook或提供CSV导出功能?