客户维度深度分析
概述
深度客户分析技能,从销售明细和客户列表中提取客户价值、识别休眠客户和增长机会,输出交互式 HTML 报告。
适用场景
- Excel 上传分析:用户上传销售明细 Excel + 客户列表 Excel
- MCP 连接器数据分析:通过 MCP 服务直接拉取销售明细和客户列表数据,无需手动上传 Excel
MCP 连接器
当用户未提供本地文件或明确要求通过连接器获取数据时,使用 MCP 服务拉取数据。
- MCP 地址:
https://dev-hdsaas.facehand.cn/gateway/mcpservice/mcp - 认证方式:API Key(由用户在对话时提供)
- 数据获取:通过 MCP 工具调用获取销售明细和客户列表,转为 pandas DataFrame 后进入统一分析流程
MCP 数据获取流程
- 确认用户已提供 API Key(如未提供,主动询问)
- 使用 MCP 地址连接服务,列出可用工具
- 默认数据规则(重要):若用户未指定获取什么数据,统一默认获取商品销售明细统计——调用
get_sales_detail工具(订单级明细穿透,返回含单据信息、客户信息、商品信息、价格金额、成本利润的完整销售明细),按日期区间拉取后进入分析流程。仅在用户明确指定其他数据(如客户列表、库存、品类汇总等)时才调用对应工具。 - 调用 MCP 工具拉取销售明细数据(默认
get_sales_detail) - 调用 MCP 工具拉取客户列表数据(如服务支持,且用户明确需要时)
- 将返回数据转为 DataFrame,传入
scripts/main.py的分析流程(与 Excel 数据同路径)
分析方法
1. SABC 客户级别
按销售额累加占比划分级别(阈值可自定义,默认 40/60/80):
| 级别 | 累加占比 | 经营策略 | |------|----------|----------| | S 类 | 0-40% | 深度绑定,资源倾斜 | | A 类 | 40-60% | 升级培育,向 S 类转化 | | B 类 | 60-80% | 激活复购,提升客单价 | | C 类 | 80-100% | 标准化服务,筛选高潜 |
2. 客户活跃分析
按交易频率分类(4 级,阈值可自定义)。基于「数据截止日 = 全量最大日期」向前推算时间窗口,交易次数按单据编号去重:
统一判定模型(v1.6.0):每级判定条件统一为「近 N 天内,按(累计 / 每周 / 每月)口径,交易 ≥ M 次」,天数、口径、次数三级各自独立设置。
| 状态 | 判定条件(默认) | 行动 | |------|------------------|------| | 高活 | 近30天,每周平均 ≥ 1 次 | 深度绑定,交叉销售 | | 中活 | 近30天,累计 ≥ 2 次 | 提升频次,培育高活 | | 低活 | 近90天,累计 ≥ 1 次 | 定向触达,优惠唤醒 | | 休眠 | 未达到低活判定条件(自动判定) | 紧急干预,1v1 挽回 |
口径枚举(每周/每月为业务频率表达方式,判定在数学上等价于累计阈值):
-
total累计:窗口内交易总次数 ≥ M -
weekly每周:总次数 × 7 ÷ 天数 ≥ M(如 30天每周≥1次 ⟺ 30天内 ≥ 4.3 笔;不做整数化换算,浮点比较) -
monthly每月:总次数 ÷ 窗口覆盖的自然月数 ≥ M(按实际自然月,含首尾月,如近90天 = 3 个自然月) -
分类采用级联判断:先判休眠(未达低活条件)→ 高活 → 中活 → 低活;三级窗口互不联动
-
设置面板按级别导向组织:高活/中活/低活/休眠 4 行级别卡,每行展示「近 __ 天内 [累计/每周/每月▾] 交易 ≥ __ 次」;休眠行为只读展示
-
前端重算基于客户
txnDates(按单据去重的交易日期列表)对任意天数/口径真实重算,窗口修改即时生效
3. 潜力客户识别(4 种类型)
| 类型 | 判定条件 | 策略 | |------|----------|------| | 高频低客单型 | 订单数≥P75 + 客单价≤P25 + 毛利率≥P50 | 组合推荐,提升客单价 | | 降频需激活型 | 末购>30天 + 客单价≥P50 + 销售额≥P50 | 定向活动,重新激活 | | 高毛利低销量型 | 毛利率≥P75 + 销售额≤P50 + 订单≥2 | 爆品引流,以点带面 | | 品类单一型 | 品类数=1 + 销售额≥P50 + 非新客 | 关联推荐,品类渗透 |
4. 老客增品推荐
同组构建优先级:客户分类 > 销售区域 > SABC 级别 推荐条件:同组中 ≥1/3 客户买过但该客户未购的商品,按覆盖率降序 推荐列表包含字段:客户名称、推荐商品、商品毛利率、同组购买率、预计增收、推荐理由 预计增收口径(v1.5.2 起):该商品同组已购客户成交均价 × 人均月销量。人均月销量 = 同组客户购买该商品的总销量 ÷ 购买人数 ÷ 购买月数,历史数据不足时回退 10 件/月;同组 = 同 SABC 级别(客户分类/销售区域字段暂未接入分组)。表头 ⓘ 图标点击弹出口径说明弹层(不可用原生 title 悬浮——内嵌预览中不触发);每行预计增收金额可点击,弹层展示该行具体计算式(如"历史均价 ¥150/件 × 预计月销 0.8 件(同组人均月销)= ¥120"),数据含 avgPrice/estQty 字段
使用流程
方式 A — Excel 上传
- 用户上传销售明细 Excel/CSV(必须含客户名称、优惠后金额)
- 用户上传客户列表 Excel/CSV(可选)
- Skill 自动解析、分析、渲染
- 输出自包含 HTML 交互报告
方式 B — MCP 连接器
- 用户提供 API Key
- Skill 通过 MCP 地址拉取销售明细和客户列表数据
- 数据进入统一分析流程
- 输出自包含 HTML 交互报告
输出报告结构
- 顶部:数据范围(全量明细最小~最大日期)+ KPI 卡片
- KPI 卡片包含:总客户数、总销售额、总毛利、总订单数、S类客户数、休眠客户数等关键指标
- 图表区 Row 1(全宽):SABC 客户级别饼图 + 13 列级别统计表格
- 统计表格列:级别、客户数、占比、销售额、销售额占比、毛利、毛利率、毛利占比、订单数、客单价、客均单数、客均拿货SKU、拿货SKU=1客数(该级别中只拿过 1 个 SKU 的客户数)
- 合计行:S 行后插入「SA合计」行(S+A 各列合计)、B 行后插入「SAB合计」行(S+A+B 各列合计)、末行为「总计」行(全部客户各列合计)
- 穿透交互:点击 S/A/B/C 级别行或饼图扇区 → 穿透查看客户级别明细(自动切换到明细 Tab、按级别筛选、清空其他筛选、滚动到表格区),表格上方显示「已穿透」提示条可一键清除;标题旁有 💡 提示标注该交互
- 图表区 Row 2(两栏):客户活跃分析饼图(4 级:高活/中活/低活/休眠)+ SABC 级别销售额与毛利对比柱状图(分组柱状图,按级别对比销售额和毛利)
- SABC 饼图和活跃分析饼图标题旁有 ⚙ 齿轮图标,点击可打开设置面板调整级别/活跃计算阈值
- 设置面板修改阈值后,前端即时重算级别/活跃分类结果,无需重新分析
- 顶部时间筛选:仅过滤下方客户列表(规则见「时间区间口径」),不重算 KPI/级别/活跃分析
- 中部:AI 经营建议面板(3 个 Tab:级别策略 / 提升活跃策略 / 潜力客户策略;每个潜力策略卡片带类型名 badge,如「高频低客单型」)
- 底部:客户级别明细 + 老客增品推荐(Tab 切换;表格按每页 100 条分页,页码按钮动态生成,总数与筛选数实时显示)
- 客户级别明细中客户名称为蓝色链接样式,点击行或名称可打开客户详情抽屉
- 抽屉:点击客户行 → 详情 + 个性化 AI 建议 + 增品推荐 + 真实月度销售额趋势
- 导出:点击「导出 Excel」按钮,生成单个 .xlsx 文件,包含客户级别明细和老客增品推荐两个页签
客户详情抽屉计算规则(点击客户行)
| 指标 | 计算规则 | 口径 | |------|----------|------| | 首次购买 | 该客户最早一笔交易的录单时间/过账时间 | 全量数据 | | 最近购买 | 该客户最晚一笔交易的录单时间/过账时间 | 全量数据 | | 末购天数 | 数据截止日 − 最近购买日;数据截止日 = 全量数据最大日期(非当前系统日期) | 全量数据 | | 销售额趋势 | 按「录单时间/过账时间」按月聚合的真实销售额(优惠后金额),缺月补 0,X 轴月份跟随顶部筛选区间 | 全量聚合 | | 末购天数着色 | 按客户活跃分析级别着色:绿 = 高活/中活、橙 = 低活、红 = 休眠;9999 = 无日期字段 | — | | 无日期降级 | 数据源缺日期字段时:末购天数显示「—(数据缺日期)」、趋势图提示无分月数据 | — | | AI 推荐话术 | 基于客户级别 + 活跃状态 + Top2 增品推荐自动生成微信/企微触达话术(休眠→回归唤醒、低活→关怀激活、中活→提频增品、高活→优先配额),带一键复制按钮;发送前可微调 | — |
首次购买/最近购买/末购天数/累计指标均基于全量数据,不随顶部时间筛选变化;趋势图展示范围跟随筛选区间,但数值为全量聚合的真实月度销售额,非估算/模拟。
时间区间口径(顶部数据范围与筛选)
- 数据范围:顶部「数据范围:起始 ~ 截止」显示全量销售明细的最小~最大日期,由
get_date_range()计算(优先「录单时间」,缺失时回退「过账时间」;两者皆无时回退到数据截止日 = 全量最大日期)。 - 业务日期口径:统一优先使用「录单时间」作为业务日期(掌天下等系统批量过账时「过账时间」常为同一时间戳,录单时间更接近真实业务日期);「录单时间」缺失时回退「过账时间」,两者皆无时该行不参与日期相关计算;日期相关的数据范围、客户活跃分析、趋势均以此为准。回退到「过账时间」时会在 warnings 中提示。
- 筛选规则:点击「筛选客户」后,仅按「最近一次购买日期落在所选区间内」过滤下方客户列表;KPI 卡片、SABC 级别、客户活跃分析、潜力识别、增品推荐、AI 建议均基于全量数据,不随筛选重算(前端更新「区间内有交易客户数(全量 N 位)」作参考)。
- 日期基准统一:末购天数、首购距今(潜力识别)、客户活跃分析的时间窗口统一以「数据截止日 = 全量最大日期」为基准,不使用当前系统日期,保证历史数据口径一致。
字段降级策略
| 缺失字段 | 降级处理 | |----------|----------| | 成本金额 | 毛利 = 销售额,毛利率 = 100% | | 单据编号 | 订单数 = 行数估算 | | 商品名称 | 增品推荐不可用 | | 商品分类 | 品类分析降级 | | 客户分类/销售区域 | 同组构建降级到 SABC 级别 |
技术架构
数据源 → normalizer.py(字段归一化) → analyzer.py(计算引擎) → template.html(渲染)
scripts/normalizer.py:Excel 解析、字段检测与别名映射、缺失降级scripts/analyzer.py:SABC 级别、客户活跃分析、潜力、增品、AI 建议scripts/main.py:主入口,协调三阶段流程scripts/template.html:锁定样式的数据驱动 HTML 模板
执行流程
当用户触发此 Skill 时,严格按照以下步骤执行:
Step 1 — 确认数据来源
支持两种数据获取方式,优先询问用户选择哪种:
方式 A:Excel 上传
- 确认用户提供的销售明细和客户列表文件路径
- 如用户未指定路径,主动询问文件位置
方式 B:MCP 连接器
- 确认用户已提供 API Key(如未提供,主动询问)
- 通过 MCP 地址
https://dev-hdsaas.facehand.cn/gateway/mcpservice/mcp连接服务 - 默认获取商品销售明细统计(用户未指定数据时):调用
get_sales_detail按日期区间拉取订单级明细;用户明确指定其他数据时才调用对应工具 - 将返回数据保存为临时文件或直接传入分析流程
Step 2 — 安装依赖(如需要)
- 检查 pandas、openpyxl 是否已安装
- 如缺失,使用运行时虚拟环境安装:
pip install pandas openpyxl xlsxwriter
Step 3 — 运行分析
- 执行
scripts/main.py,传入数据(文件路径或 MCP 返回数据):# Excel 方式 python scripts/main.py "销售明细.xlsx" "客户列表.xlsx" # MCP 方式:将拉取的数据保存为临时文件后传入 python scripts/main.py "mcp_sales_temp.xlsx" "mcp_customers_temp.xlsx" - main.py 将输出 JSON 摘要(含 success、output_path、summary)
- 如果 success 为 false,向用户报告错误信息
Step 4 — 呈现报告
- 读取输出的 HTML 文件路径
- 使用
present_files将 HTML 报告展示给用户
Step 5 — 引导使用
- 告知用户报告中的关键交互:
- ⚙ 齿轮图标可调整 SABC 级别阈值(默认 40/60/80)和客户活跃分析阈值(统一句式:天数 + 累计/每周/每月口径 + 次数,三级独立)
- 点击客户行可查看详情抽屉
- Tab 切换客户级别明细 / 老客增品推荐
- 「导出 Excel」按钮导出双页签 .xlsx 文件
注意事项
- 依赖项:Python 3.8+、pandas、openpyxl、xlsxwriter
- 数据要求:销售明细必须包含「客户名称」和「优惠后金额」字段
- 文件格式:支持 .xlsx / .xls / .csv
- 数据量:10 万行以内数据处理时间约 30-60 秒
- 不包含敏感信息:所有脚本仅做本地数据处理,不上传任何数据
- 报告为自包含 HTML:无需网络即可查看图表(ECharts CDN 有本地降级)
- 掌天下适配:支持掌天下导出的字段命名,normalizer.py 自动映射
- MCP 连接器:通过
https://dev-hdsaas.facehand.cn/gateway/mcpservice/mcp获取数据时,需用户提供 API Key;MCP 返回数据字段需与 normalizer.py 字段映射对齐,如字段名不一致需在 normalizer.py 中补充别名映射
微信扫一扫