一、实际应用场景描述
在《时尚产业与品牌创新》课程中,"如何识别并量化不同客群的价值差异"是消费者行为模块的核心议题。
典型教学/实践场景包括:
- 课程作业:学生需要为某轻奢品牌分析"奢侈品追随者"与"原创设计师受众"的消费力差异
- 品牌定位工作坊:评估是否应从"追随大牌"转向"支持原创"的客群策略
- 市场细分课堂:对比两类客群在客单价、复购率、价格敏感度上的结构性差异
- 创业路演预演:用数据模型展示"原创设计师品牌"的目标客群消费力是否支撑商业模式
本工具尝试将 "奢侈品追随者"与"原创设计师受众"两类客群 的消费行为进行结构化对比,通过透明、可审计的计算模型,输出客单价与复购率的多维度统计对比,用于课堂讨论与客群分析教学。
二、引入痛点(中立表述)
- 客群定义模糊:"奢侈品追随者"到底是买真货、买平替,还是只看不买?"原创设计师受众"是核心粉丝还是泛兴趣人群?
- 消费力指标单一:只看客单价,忽略复购频率、生命周期价值(LTV)、价格敏感度
- 对比口径不一:不同品牌、不同渠道的客群数据不可比
- 教学缺乏可运行原型:学生需要一个干净代码骨架,理解"客群特征 → 消费指标"的映射
- 数据来源不透明:直接引用"某报告显示"而不展示计算逻辑,无法教学审计
本工具不依赖真实交易数据,而是回答:
"在给定假设参数下,两类客群的客单价与复购率差异如何结构化呈现?"
三、核心逻辑讲解
1. 两类客群的操作化定义(教学模型)
客群 操作化定义 核心特征
奢侈品追随者(Luxury Follower) 关注奢侈品牌、购买经典款或入门款、对品牌溢价接受度高 高客单、低频、品牌驱动
原创设计师受众(Original Designer Audience) 关注独立设计师、重视独特性与故事性、愿意为创意溢价 中高客单、中高频、价值驱动
2. 消费力对比的核心指标
指标 计算公式 教学意义
平均客单价(AOV) 总销售额 / 总订单数 单笔消费能力
复购率 复购用户数 / 总用户数 忠诚度与持续消费意愿
复购频次 总订单数 / 复购用户数 复购深度
年均消费额 AOV × 年均订单数 单客年度价值
价格敏感度 促销期销量变化率 对折扣的依赖程度
3. 统计对比方法
差异幅度 = (客群B指标 − 客群A指标) / 客群A指标
采用描述性统计 + 相对差异的方式,避免假设检验的过度复杂化(教学阶段)。
4. 关键假设(必须显式声明)
- 所有消费数据为教学假设参数,非真实交易数据
- 客群分类为宽泛划分,实际中存在大量交叉与过渡
- 未考虑地域、年龄、收入等细分维度
- 输出为结构化对比参考,不可直接用于商业决策
四、代码模块化(注释清晰)
目录结构:
consumer_comparison/
├── models.py # 数据结构与客群参数配置
├── stats_calc.py # 消费力指标计算
├── comparator.py # 两类客群对比分析
├── visualizer.py # 终端可视化输出
├── main.py # CLI 入口 + demo
└── README.md
"models.py"
"""
models.py
定义客群消费力对比的数据结构与参数配置。
所有参数均为教学示例,可按课程需要调整。
"""
from dataclasses import dataclass
from typing import Dict, List
@dataclass
class ConsumerGroup:
"""客群消费行为参数(教学假设)"""
name: str # 客群名称
description: str # 客群描述
sample_size: int # 样本量(用户数)
# 客单价分布参数(模拟用)
avg_order_value: float # 平均客单价
order_value_std: float # 客单价标准差
# 复购相关
repurchase_rate: float # 复购率(0-1)
avg_orders_per_year: float # 年均订单数
avg_orders_per_repurchaser: float # 复购用户年均订单数
# 价格敏感度(促销期销量变化,0-1)
price_sensitivity: float
# 品类偏好权重(教学用)
category_preferences: Dict[str, float]
@dataclass
class ComparisonResult:
"""对比分析结果"""
group_a: ConsumerGroup
group_b: ConsumerGroup
# 客单价对比
aov_a: float
aov_b: float
aov_diff_pct: float
# 复购率对比
repurchase_rate_a: float
repurchase_rate_b: float
repurchase_diff_pct: float
# 年均消费对比
annual_spend_a: float
annual_spend_b: float
annual_spend_diff_pct: float
# 价格敏感度对比
sensitivity_diff: float
# 奢侈品追随者参数(教学假设)
LUXURY_FOLLOWER = ConsumerGroup(
name="奢侈品追随者",
description="关注奢侈品牌,购买经典款/入门款,品牌溢价接受度高",
sample_size=500,
avg_order_value=2500.0,
order_value_std=800.0,
repurchase_rate=0.25,
avg_orders_per_year=1.8,
avg_orders_per_repurchaser=3.2,
price_sensitivity=0.35,
category_preferences={
"包袋": 0.45,
"鞋履": 0.25,
"成衣": 0.20,
"配饰": 0.10,
},
)
# 原创设计师受众参数(教学假设)
DESIGNER_AUDIENCE = ConsumerGroup(
name="原创设计师受众",
description="关注独立设计师,重视独特性与故事性,愿为创意溢价",
sample_size=380,
avg_order_value=1800.0,
order_value_std=600.0,
repurchase_rate=0.40,
avg_orders_per_year=2.5,
avg_orders_per_repurchaser=4.5,
price_sensitivity=0.20,
category_preferences={
"成衣": 0.50,
"配饰": 0.25,
"鞋履": 0.15,
"包袋": 0.10,
},
)
"stats_calc.py"
"""
stats_calc.py
计算客群消费力的核心统计指标。
"""
def calc_group_stats(group: "ConsumerGroup") -> dict:
"""
计算单客群的核心消费力指标。
"""
# 基础指标
aov = group.avg_order_value
# 复购用户数
repurchase_users = int(group.sample_size * group.repurchase_rate)
# 总订单数 = 新客订单 + 复购订单
# 新客每人 1 单,复购用户每人 avg_orders_per_repurchaser 单
new_users = group.sample_size - repurchase_users
total_orders = new_users * 1 + repurchase_users * group.avg_orders_per_repurchaser
# 年均消费额(加权平均)
annual_spend = aov * (total_orders / group.sample_size)
# 实际复购率(考虑复购频次)
effective_repurchase_rate = repurchase_users / group.sample_size
return {
"aov": aov,
"repurchase_rate": effective_repurchase_rate,
"total_orders": total_orders,
"annual_spend_per_user": annual_spend,
"price_sensitivity": group.price_sensitivity,
"avg_orders_per_user": total_orders / group.sample_size,
}
"comparator.py"
"""
comparator.py
两类客群的对比分析引擎。
"""
from .models import ComparisonResult
from .stats_calc import calc_group_stats
def compare_groups(
group_a: "ConsumerGroup",
group_b: "ConsumerGroup",
) -> ComparisonResult:
"""
对两类客群进行全面消费力对比。
"""
stats_a = calc_group_stats(group_a)
stats_b = calc_group_stats(group_b)
# 客单价对比
aov_diff = _pct_diff(stats_b["aov"], stats_a["aov"])
# 复购率对比
repurchase_diff = _pct_diff(
stats_b["repurchase_rate"],
stats_a["repurchase_rate"],
)
# 年均消费对比
annual_diff = _pct_diff(
stats_b["annual_spend_per_user"],
stats_a["annual_spend_per_user"],
)
# 价格敏感度差异(绝对值)
sensitivity_diff = (
stats_b["price_sensitivity"] - stats_a["price_sensitivity"]
)
return ComparisonResult(
group_a=group_a, group_b=group_b,
aov_a=stats_a["aov"], aov_b=stats_b["aov"],
aov_diff_pct=aov_diff,
repurchase_rate_a=stats_a["repurchase_rate"],
repurchase_rate_b=stats_b["repurchase_rate"],
repurchase_diff_pct=repurchase_diff,
annual_spend_a=stats_a["annual_spend_per_user"],
annual_spend_b=stats_b["annual_spend_per_user"],
annual_spend_diff_pct=annual_diff,
sensitivity_diff=sensitivity_diff,
)
def _pct_diff(value_b: float, value_a: float) -> float:
"""计算相对差异百分比"""
if value_a == 0:
return 0.0
return (value_b - value_a) / value_a
"visualizer.py"
"""
visualizer.py
终端格式化输出与可视化。
"""
def print_comparison(result: "ComparisonResult"):
a = result.group_a
b = result.group_b
print("\n" + "=" * 62)
print(" 客群消费力对比分析(教学演示)")
print("=" * 62)
# 客群基本信息
print(f"\n 【客群 A】{a.name}")
print(f" {a.description}")
print(f" 样本量: {a.sample_size} 人")
print(f"\n 【客群 B】{b.name}")
print(f" {b.description}")
print(f" 样本量: {b.sample_size} 人")
# 核心指标对比
print(f"\n {'─' * 58}")
print(f" {'指标':<20s} {'客群 A':>12s} {'客群 B':>12s} {'差异':>12s}")
print(f" {'─' * 58}")
_print_row("平均客单价", result.aov_a, result.aov_b, result.aov_diff_pct, "¥")
_print_row("复购率", result.repurchase_rate_a, result.repurchase_rate_b,
result.repurchase_diff_pct, "", is_pct=True)
_print_row("年均消费/人", result.annual_spend_a, result.annual_spend_b,
result.annual_spend_diff_pct, "¥")
# 价格敏感度
print(f"\n {'─' * 58}")
print(f" 价格敏感度(促销期销量变化)")
print(f" 客群 A: {result.group_a.price_sensitivity:.0%}")
print(f" 客群 B: {result.group_b.price_sensitivity:.0%}")
print(f" 差异: {result.sensitivity_diff:+.0%}")
# 品类偏好对比
print(f"\n {'─' * 58}")
print(f" 品类偏好对比")
print(f" {'品类':<10s} {'客群 A':>10s} {'客群 B':>10s}")
print(f" {'─' * 58}")
all_cats = set(a.category_preferences.keys()) | set(b.category_preferences.keys())
for cat in sorted(all_cats):
pref_a = a.category_preferences.get(cat, 0)
pref_b = b.category_preferences.get(cat, 0)
print(f" {cat:<10s} {pref_a:>9.0%} {pref_b:>9.0%}")
# 总结
print(f"\n {'=' * 58}")
print(f" 【关键发现】")
print(f" {'=' * 58}")
if result.aov_diff_pct > 0:
print(f" • 客群 B 客单价低 {abs(result.aov_diff_pct):.1%},"
f"但年均消费{_direction(result.annual_spend_diff_pct)} "
f"{abs(result.annual_spend_diff_pct):.1%}")
else:
print(f" • 客群 A 客单价高 {abs(result.aov_diff_pct):.1%},"
f"但年均消费{_direction(result.annual_spend_diff_pct)} "
f"{abs(result.annual_spend_diff_pct):.1%}")
if result.repurchase_diff_pct > 0:
print(f" • 客群 B 复购率高 {abs(result.repurchase_diff_pct):.1%},"
f"忠诚度更强")
else:
print(f" • 客群 A 复购率高 {abs(result.repurchase_diff_pct):.1%},"
f"忠诚度更强")
if result.sensitivity_diff < 0:
print(f" • 客群 B 价格敏感度低 {abs(result.sensitivity_diff):.0%},"
f"对折扣依赖更小")
else:
print(f" • 客群 A 价格敏感度低 {abs(result.sensitivity_diff):.0%},"
f"对折扣依赖更小")
print(f"\n {'=' * 58}")
print(" 说明:")
print(" - 所有数据均为教学假设参数,非真实交易数据")
print(" - 客群分类为宽泛划分,实际存在大量交叉")
print(" - 建议结合真实用户调研做交叉验证")
print(f" {'=' * 58}\n")
def _print_row(label, val_a, val_b, diff_pct, prefix="", is_pct=False):
if is_pct:
a_str = f"{val_a:.1%}"
b_str = f"{val_b:.1%}"
else:
a_str = f"{prefix}{val_a:,.0f}"
b_str = f"{prefix}{val_b:,.0f}"
diff_str = f"{diff_pct:+.1%}"
print(f" {label:<20s} {a_str:>12s} {b_str:>12s} {diff_str:>12s}")
def _direction(diff):
return "高" if diff > 0 else "低"
"main.py"
"""
main.py
CLI 入口,运行两类客群消费力对比演示。
运行:python main.py
"""
from models import LUXURY_FOLLOWER, DESIGNER_AUDIENCE
from comparator import compare_groups
from visualizer import print_comparison
def run_demo():
result = compare_groups(LUXURY_FOLLOWER, DESIGNER_AUDIENCE)
print_comparison(result)
if __name__ == "__main__":
run_demo()
五、README.md
# Consumer Group Comparison Tool(教学演示)
一个轻量级 Python 工具,用于对比 **"奢侈品追随者"与"原创设计师受众"** 两类客群的消费力差异。
## 定位与边界
- 目的:将"客群分析"从定性描述转化为可审计的量化对比
- 非市场调研工具,不替代问卷/访谈/埋点分析
- 所有数据均为教学假设参数
- 忽略:地域差异、年龄分层、收入分布、竞品影响
- **不构成任何商业决策建议**
## 环境
- Python ≥ 3.8(仅标准库)
## 安装与运行
bash
git clone <repo-url>
cd consumer_comparison
python main.py
## 模块说明
| 文件 | 职责 |
|---|---|
| `models.py` | 客群数据结构、参数配置(含两类客群默认参数) |
| `stats_calc.py` | 客单价、复购率、年均消费等指标计算 |
| `comparator.py` | 两类客群对比分析引擎 |
| `visualizer.py` | 终端格式化输出(含品类偏好对比) |
| `main.py` | CLI 入口与演示 |
## 如何调整
### 修改客群参数
编辑 `models.py` 中的 `LUXURY_FOLLOWER` 或 `DESIGNER_AUDIENCE`。
### 增加第三类客群
定义新的 `ConsumerGroup` 实例,扩展 `comparator.py` 支持多组对比。
### 增加新指标
在 `stats_calc.py` 的 `calc_group_stats()` 中添加计算逻辑。
### 接入真实数据
替换 `models.py` 中的参数为实际调研/交易数据。
## 核心指标说明
| 指标 | 含义 |
|---|---|
| 平均客单价(AOV) | 单笔交易平均金额 |
| 复购率 | 有≥2次购买的用户占比 |
| 年均消费/人 | AOV × 年均订单数 |
| 价格敏感度 | 促销期销量变化幅度 |
## 许可证
MIT(教学用途,自行承担使用风险)
六、核心知识点卡片(中立、去营销)
卡片 1 · 客群细分方法论
- 消费者行为学核心:按行为/态度/需求(而非仅人口统计)细分
- 本工具采用"品牌取向 + 购买动机"双维度划分
- 教学要点:细分不是目的,差异化策略才是
卡片 2 · 复购率的多层含义
- 简单复购率:有复购行为的用户占比
- 复购深度:复购用户的平均购买频次
- 教学价值:两个指标结合,才能区分"偶尔回头"和"核心忠实"
卡片 3 · 价格敏感度测量
- 操作化定义:促销期销量变化率 / 价格弹性系数
- 低敏感度 = 品牌溢价空间大
- 教学要点:敏感度因品类、价格段而异
卡片 4 · 描述性统计 vs 推断统计
- 描述性:均值、标准差、占比(本工具采用)
- 推断性:t 检验、卡方检验、置信区间
- 教学建议:先掌握描述性对比,再引假设检验。
利用AI解决实际问题,如果你觉得这个工具好用,欢迎关注长安牧笛!