mcpField
C
customer-segmentation

customer-segmentation

github.com/finsilabs营销与增长6090 次安装6 天前更新
代码仓库

关于 customer-segmentation

面向电商营销团队的客户细分技能,说明如何依据购买行为建立客群并关联营销行动。涵盖 Shopify、WooCommerce、BigCommerce 和自定义方案,并介绍 RFM 分析与广告排除名单。

主要功能

  1. 01按购买行为建立客户细分
  2. 02使用 RFM 评分
  3. 03将细分映射到营销行动
  4. 04导出或同步客群数据
  5. 05建立广告抑制名单

适用场景

  1. 01按生命周期定制邮件营销
  2. 02识别高价值客户并邀请加入 VIP 计划
  3. 03排除已购买客户以减少广告浪费
  4. 04比较不同获客群体的留存情况

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/finsilabs/awesome-ecommerce-skills --skill customer-segmentation

安装后在 Claude Code 中输入/customer-segmentation确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

tile.json
evals/cohort-retention-analysis-and-behavioral/
criteria.json
task.md
evals/rfm-scoring-and-segment-classification/
criteria.json
task.md
evals/segment-export-to-marketing-platforms-wi/
criteria.json
task.md

详细介绍

客户细分

概述

客户细分是将客户群划分为购买行为相似的群组,以便精准定位营销活动、促销和产品推荐。Klaviyo、Omnisend 和 Metorik 均为 Shopify 和 WooCommerce 提供开箱即用的 RFM 风格细分,无需自定义 SQL。只有当平台工具不支持所需的细分逻辑时,才构建自定义细分系统。

何时使用此技能

  • 按生命周期阶段(新客、活跃、存在流失风险、已流失)个性化电子邮件营销活动时
  • 构建排除名单,避免对已转化客户浪费广告支出时
  • 识别适合 VIP 计划和抢先体验活动的“优质”客户时
  • 分析哪个获客群组的 90 天留存率最高时
  • 将行为细分同步到广告平台(Meta、Google)时

核心说明

第 1 步:确定平台并选择合适的细分工具
平台内置细分功能推荐工具
Shopify基础:Admin → Customers → Filters;高级:Klaviyo 或 Omnisend用于电子邮件 + SMS 的 Klaviyo;用于群组分析的 Lifetimely
WooCommerceWooCommerce Analytics → Customers(基础筛选条件)Klaviyo + WooCommerce 插件;或用于分析的 Metorik
BigCommerceCustomer Groups(基于层级);Analytics → Customers用于行为细分的 Klaviyo
Custom / Headless在 SQL 中构建 RFM 评分;同步到 Klaviyo 以便激活当平台没有细分工具时必需

第 2 步:平台特定设置

Shopify

选项 A:Shopify Admin 细分(基础、免费)

  1. 前往 Admin → Customers
  2. 使用筛选栏,根据以下条件创建细分:
    • 订单数量、消费总额、上次下单日期
    • 电子邮件订阅状态、标签、位置
    • 已购买的产品
  3. 将筛选条件保存为客户细分
  4. 将细分导出为 CSV,用于广告或电子邮件营销活动

选项 B:Klaviyo(推荐用于生命周期细分)

Klaviyo 会自动与 Shopify 同步,并基于实际购买数据提供 RFM 风格的细分。

要在 Klaviyo 中创建的关键细分:

  1. 优质客户(价值高、购买频繁、近期有购买):

    • 规则:Ordered at least 3 times AND Last order within 60 days AND Total spent > $200
    • 操作:提供新产品抢先体验、VIP 福利和推荐计划邀请
  2. 存在流失风险的高价值客户:

    • 规则:Total spent > $200 AND Last order 90–180 days ago
    • 操作:通过个性化优惠开展挽回自动化流程
  3. 近期首次购买客户:

    • 规则:Order count equals 1 AND First order within 30 days
    • 操作:发送新手引导序列,鼓励客户进行第二次购买
  4. 已流失客户:

    • 规则:Last order more than 180 days ago AND Order count >= 2
    • 操作:开展重新互动营销活动,传达“我们想你了”的信息
  5. 从未购买的订阅者:

    • 规则:Email subscriber AND Order count equals 0
    • 操作:发送欢迎系列邮件,展示社会认同并提供首单优惠

在 Klaviyo 中创建细分:

  1. 前往 Lists & Segments → Create Segment
  2. 使用筛选条件构建器添加条件——Klaviyo 提供 150 多种预置筛选条件类型,包括 Shopify 专属事件
  3. 清晰地为细分命名(例如,“高价值流失风险客户 — 90-180 天”)
  4. 在 Flow 触发器中使用该细分,或将其用作 Campaign 的受众

Klaviyo 预测分析(付费计划):

  • Klaviyo 会自动计算每位客户的 Predicted CLV、Expected Date of Next Order 和 Churn Risk
  • 在 Analytics → Predictive Analytics 下查看这些数据
  • 将这些预测用作细分筛选条件,无需编写任何自定义代码

WooCommerce

选项 A:Metorik(推荐的分析平台)

  1. 安装 Metorik(通过 WooCommerce REST API 连接)
  2. 前往 Metorik → Segments → Create Segment
  3. 根据购买历史、产品偏好、地理位置等创建基于规则的细分
  4. Metorik 会自动计算 RFM 评分
  5. 将细分导出为 CSV,或直接同步到 Klaviyo/Mailchimp

选项 B:适用于 WooCommerce 的 Klaviyo

  1. 从 WordPress.org 安装 Klaviyo: Email Marketing for WooCommerce
  2. Klaviyo 会同步 WooCommerce 订单历史,并为所有客户创建个人资料
  3. 按照上文 Shopify 部分所述,创建相同的生命周期细分

BigCommerce

用于分层细分的客户群组:

  1. 前往 Customers → Customer Groups → Add Group
  2. 根据购买行为规则创建群组:
    • “VIP” — 生命周期消费超过 $500 的客户
    • “Repeat Buyers” — 订单数达到 3 笔或以上的客户
  3. 设置群组专属定价、类别访问权限或配送规则

使用 Klaviyo 进行行为细分:

  • 安装 Klaviyo for BigCommerce 应用
  • 连接你的 BigCommerce 商店
  • 在 Klaviyo 中根据购买历史和事件数据创建行为细分

自定义 / 无头架构

使用 SQL 构建 RFM 评分,并同步到 ESP 以用于营销触达:

-- PostgreSQL: Calculate RFM scores for all customers
WITH customer_rfm AS (
  SELECT
    customer_id,
    EXTRACT(EPOCH FROM (NOW() - MAX(created_at))) / 86400 AS recency_days,
    COUNT(id) AS frequency,
    SUM(subtotal_cents) / 100.0 AS monetary
  FROM orders
  WHERE status NOT IN ('cancelled', 'refunded')
  GROUP BY customer_id
),
rfm_scored AS (
  SELECT
    customer_id,
    recency_days, frequency, monetary,
    NTILE(5) OVER (ORDER BY recency_days DESC) AS r_score,  -- Lower recency = higher score
    NTILE(5) OVER (ORDER BY frequency ASC) AS f_score,
    NTILE(5) OVER (ORDER BY monetary ASC) AS m_score
  FROM customer_rfm
)
SELECT
  customer_id, r_score, f_score, m_score,
  r_score + f_score + m_score AS rfm_total,
  CASE
    WHEN r_score >= 4 AND f_score >= 4 AND m_score >= 4 THEN 'champions'
    WHEN r_score >= 3 AND f_score >= 3 AND m_score >= 3 THEN 'loyal_customers'
    WHEN r_score >= 4 AND f_score <= 2 THEN 'recent_customers'
    WHEN r_score <= 2 AND f_score >= 4 AND m_score >= 4 THEN 'cannot_lose_them'
    WHEN r_score <= 2 AND f_score >= 3 THEN 'at_risk'
    WHEN r_score = 1 AND f_score <= 2 THEN 'lost'
    ELSE 'needs_attention'
  END AS segment
FROM rfm_scored;
// Sync a segment to Klaviyo — batched at 100 profiles per request
export async function syncSegmentToKlaviyo(segmentCustomers: Customer[], klaviyoListId: string) {
  const BATCH_SIZE = 100;
  for (let i = 0; i < segmentCustomers.length; i += BATCH_SIZE) {
    const batch = segmentCustomers.slice(i, i + BATCH_SIZE);
    await fetch(`https://a.klaviyo.com/api/lists/${klaviyoListId}/relationships/profiles/`, {
      method: 'POST',
      headers: {
        Authorization: `Klaviyo-API-Key ${process.env.KLAVIYO_PRIVATE_KEY}`,
        'Content-Type': 'application/json',
        revision: '2024-10-15',
      },
      body: JSON.stringify({
        data: batch.map(c => ({
          type: 'profile',
          attributes: { email: c.email, first_name: c.firstName, last_name: c.lastName },
        })),
      }),
    });
  }
}

// Export suppression list for Meta Ads — hash emails before sending
export async function exportSuppressionListForMeta(lookbackDays = 30): Promise<string[]> {
  const recentBuyers = await db.orders.findMany({
    where: { createdAt: { gte: new Date(Date.now() - lookbackDays * 86400000) }, status: 'completed' },
    select: { customerEmail: true },
    distinct: ['customerEmail'],
  });

  return recentBuyers.map(({ customerEmail }) => {
    const { createHash } = require('crypto');
    return createHash('sha256').update(customerEmail.toLowerCase().trim()).digest('hex');
  });
}

第 3 步:将细分映射到行动

每个细分都应有明确的营销行动:

细分推荐行动
重要客户VIP 优先体验、邀请加入推荐计划,无需提供挽回折扣
忠实客户加入忠诚度计划、邀请撰写评价、向上销售至下一级
近期首次购买客户第二次购买邮件系列(在首次下单 7 天后发送)
有流失风险 — 高价值发送个性化挽回消息,并表达关切:“好久不见”
不容流失的客户直接联系,提供力度较大的优惠(8 折),由创始人发送私人邮件
已流失 / 流失客户以低成本重新互动(新闻简报、产品公告);从活跃营销活动中移除

第 4 步:为付费广告建立排除名单

将最近购买过的客户上传为 Meta 和 Google 的排除名单,以免浪费获客预算:

  • Meta Business Manager:Audiences → Create Audience → Customer List → Upload hashed email CSV
  • Google Ads:Audience Manager → Customer Match → Upload email list
  • 每月刷新这些排除名单

最佳实践

  • 每晚刷新细分 — Klaviyo 和 Metorik 会自动执行;对于自定义方案,每晚运行 RFM SQL
  • 从 RFM 开始,再叠加行为信号 — 购买时间、频率和金额是最可靠的基础;随着数据增多,再加入类别偏好和渠道偏好
  • 始终同时建立排除名单和定向名单 — 向活跃客户发送重新互动营销活动会浪费预算,也会惹恼他们
  • 发送营销活动前验证细分规模 — 细分结果为 0 位客户通常表示逻辑有误;设置最低阈值检查
  • 跟踪不同细分对各类优惠的响应情况 — 重要客户很少需要折扣;与打折相比,免费配送可能更能打动有流失风险的客户

常见问题

问题解决方案
重要客户细分每月都在缩小重要客户需要近期消费且购买频率高 — 客户自然会逐渐不再符合条件;可用“忠实客户”细分补充,以便长期维护客户关系
RFM 评分受到一笔金额特别大的订单影响Klaviyo 的预测 CLV 会平滑这一影响;自定义方案应在金额评分中使用订单金额中位数,而不是总消费额
同步细分到 Klaviyo 后创建了重复个人资料同步时始终以电子邮件作为主键进行匹配;如果存在重复项,请使用 Klaviyo 的个人资料合并功能
群组分析显示留存率下降,但原因不明按获客渠道细分群组,以确定是否有特定渠道带来的客户质量较低

Related Skills

  • @customer-lifetime-value
  • @personalization-engine
  • @referral-program

评论

支持 Markdown