把 Coupert 里"会在 CPS 商家实际购物"的 SP 用户,按营销可运营的维度分成若干桶,供后续差异化营销素材、Push 频次、邮件策略、返现补贴使用。
| 维度 | 定义 | 取值范围 | 业务含义 |
|---|---|---|---|
| 主商家类目 | 用户 90d 内 SP 次数最多的商家类目 | 9 类(综合电商/旅游/食品/电子/家居/健康/商务/其他/未分类) | 用户购物倾向(在哪里买) |
| R (Recency) | 最近一次 SP 距 2026-07-07 的天数 | 0 – 90 天 | 新鲜度(还活跃吗) |
| F (Frequency) | 90d 内 SP 次数(distinct sp_id) | 1 – 数百 | 购物频次 |
| M (Monetary) | 90d 累计订单金额(USD, cap $10k/单) | $0 – $50k+ | 消费能力(GMV 权重) |
经典 RFM 会把"一年买 2 次机票的高价值旅游用户"和"一年买 2 次电脑的电子用户"扔到同一桶(F=2 中频),但他们营销策略完全不同 — 一个要做旅游季触发,一个要做数码新品推送。
加入"主商家类目"后,我们能识别:这个用户是"综合电商高频"还是"垂直类低频专家",从而给出差异化策略。
soar_dw.dws_log_sp_user_shopping_journey_detail_diCoupert SP(Shopping Success)用户成单明细宽表。每一行 = 一次 SP journey(一个 checkout 页触发的下单流程)。
| 关键字段 | 类型 | 说明 |
|---|---|---|
pt | date | 分区日 |
guid | varchar | Coupert 用户唯一标识(跨设备匿名 ID) |
sp_id | varchar | 单次 SP journey 唯一 ID(distinct 后 = 频次 F) |
domain | varchar | 下单商家域名(如 amazon.com, booking.com) |
order_value | double | 订单金额,已归一化 USD(从 SP checkout 页取回) |
cps_score | int | 商家 CPS 质量分(≥40 为真实 CPS 商家阈值,chensu 定义) |
create_time | datetime | SP 触发时间 |
extra_session_first_page | varchar | = '1' 表示"首页误触",非真实 SP |
extra_no_checkout | varchar | = '1' 表示"没进 checkout",非真实 SP |
service_used | tinyint | 是否使用了 Coupert 服务(CB/AT/PCP) |
| # | 条件 | 目的 | 过滤前 → 过滤后 |
|---|---|---|---|
| 1 | pt BETWEEN '2026-04-09' AND '2026-07-07' | 90 天窗口(对齐 chensu 之前 30d/90d 双基线) | — |
| 2 | cps_score >= 40 | 只算"真 CPS 商家"(chensu memory: 低质小站 cps_score<40 剔除) | — |
| 3 | COALESCE(extra_session_first_page,'0') != '1' | 剔除首页误触(chensu 明确要求) | — |
| 4 | COALESCE(extra_no_checkout,'0') != '1' | 剔除未进 checkout(不算真 SP) | — |
| 5 | order_value BETWEEN 0.01 AND 10000 | 脏数据 cap(用于 M 计算,不影响用户圈选) | — |
chensu 明确确认:"这个表已经是 cp 的数据了,不需要额外 bu=cp 过滤"。因此本次分析未加 bu 条件。
另 extra_session_first_page 和 extra_no_checkout 是 varchar 而非 int,比较时用字符串 '1'。
-- 基础用户表 SQL SELECT guid, sp_id, domain, order_value, create_time FROM soar_dw.dws_log_sp_user_shopping_journey_detail_di WHERE pt BETWEEN DATE '2026-04-09' AND DATE '2026-07-07' AND cps_score >= 40 AND COALESCE(extra_session_first_page, '0') != '1' AND COALESCE(extra_no_checkout, '0') != '1'
用户 SP 商家跨度大 —— 有人只买 amazon,有人在 booking / doordash / mi.com 都买。要给用户打"主类目"标签,就必须先给每个 domain 打上类目标签,再按用户 SP 次数投票选出主类目。
数仓里有多张商家类目表,chensu 指定用 soar_dw.v_dwd_store_merchant_ai_audit_df(AI 判定的商家审核表)。
| 候选表 | 字段 | 状态 | 说明 |
|---|---|---|---|
ods_coupert_store_store_merchant_ai_audit_df | category | ❌ 权限拒绝 | 需申请 |
ods_coupert_tracking_store_base_info_df | category/sub_category | ❌ 权限拒绝 | 需申请 |
ods_coupert_tracking_merchant_category_hd_df | first/secondary_category | ❌ 权限拒绝 | 需申请 |
dim_pub_normalmerchant_df | category_detail | ⚠️ 可用但脏 | SimilarWeb 数据,Unknown 73K |
v_dwd_store_merchant_ai_audit_df | category, shopping_type, is_merchant | ✅ 采用 | 186K unique domain 全量,34 类 |
DESCRIBE soar_dw.v_dwd_store_merchant_ai_audit_df; -- 核心字段: -- pt (datetime), store_id, domain, category (varchar 256), -- shopping_type, is_merchant (0/1), ai_model, ai_prompt_version -- 每个 domain 只在被审核的那天出现一次(非每日快照),所以取 domain 最新记录用 ROW_NUMBER
| # | 大类 | 合并的原始 category | Domain 数 | SP 流量占比 |
|---|---|---|---|---|
| 1 | 综合电商 | E-commerce & Shopping | 3,124 | 50.8% |
| 2 | Uncategorized | (空字符串 / NULL) | 4,291 | 35.1% |
| 3 | 旅游 | Travel & Tourism + Tickets | 316 | 5.6% |
| 4 | 食品 | Food & Drink | 87 | 2.1% |
| 5 | 电子 | Computers Electronics & Technology | 321 | 2.1% |
| 6 | 家居 | Home & Garden | 104 | 0.8% |
| 7 | 健康 | Health / Health & Fitness | 93 | 1.0% |
| 8 | 商务金融 | Business & Consumer Services + Finance + Science & Education + Legal + Jobs + Real Estate | 454 | 1.5% |
| 9 | 其他 | Pets / Sports / Games / Vehicles / Arts / Adult / Gambling ... | 635 | 1.1% |
拉 Uncategorized 里 top 100 高流量 domain 后发现:全部 100 个 status = IN_AUDIT_BUT_EMPTY(AI 跑过但没打 category 标签),且清一色是知名大牌。
| # | Domain | SP 记录数 | 用户数 | GMV ($) | AOV | 手工归类 |
|---|---|---|---|---|---|---|
| 1 | amazon.com | 2,050,549 | 336,183 | 162.0M | $86 | 综合电商 |
| 2 | ebay.com | 212,315 | 64,597 | 27.2M | $160 | 综合电商 |
| 3 | booking.com | 210,311 | 72,280 | 87.6M | $579 | 旅游 |
| 4 | etsy.com | 132,343 | 68,838 | 6.6M | $57 | 综合电商 |
| 5 | doordash.com | 92,211 | 20,644 | 3.1M | $43 | 食品 |
| 6 | amazon.es | 46,910 | 21,916 | 3.3M | $74 | 综合电商 |
| 7 | woolworths.com.au | 42,471 | 11,290 | 7.6M | $196 | 食品(超市) |
| 8 | amazon.it | 41,633 | 17,026 | 3.2M | $86 | 综合电商 |
| 9 | lieferando.de | 41,601 | 11,700 | 1.3M | $36 | 食品(外卖) |
| 10 | target.com | 34,305 | 17,463 | 3.0M | $91 | 综合电商 |
| 11 | amazon.com.br | 31,758 | 18,127 | 1.7M | $57 | 综合电商 |
| 12 | chewy.com | 18,996 | 12,333 | 1.7M | $91 | 其他(宠物) |
| 13 | aliexpress.us | 14,284 | 5,513 | 1.0M | $73 | 综合电商 |
| 14 | docmorris.de | 13,927 | 7,593 | 0.8M | $64 | 健康(药房) |
| 15 | macys.com | 12,580 | 4,580 | 1.5M | $243 | 综合电商 |
| 16 | priceline.com | 10,736 | 6,562 | 2.7M | $511 | 旅游 |
| 17 | groupon.com | 8,487 | 6,012 | 0.6M | $85 | 综合电商 |
| 18 | kohls.com | 7,306 | 4,832 | 0.8M | $105 | 综合电商 |
| 19 | oscaro.com | 7,219 | 6,040 | 0.9M | $123 | 其他(汽配) |
| 20 | amazon.pl | 7,037 | 3,316 | 0.4M | $67 | 综合电商 |
33.6 万用户 / 205 万 SP 记录都被算作"未分类",实际上就是 Amazon 主站的用户。手工兜底这 91 个 top domain 后,能救回 94% 的原 Uncategorized 用户。
amazon 各国(.com/.es/.it/.com.br/.pl/.in/.com.au/.com.be)、ebay/etsy/target/macys/kohls/belk/bedbathandbeyond/groupon/newlook/kogan/aliexpress/1688/wilko/barnesandnoble/jcrew/boohoo/desigual/placedestendances/intimissimi/pandora/laredoute/oakley/birkenstock/bonds/momox/rebuy/avon/eyebuydirect/carters/centauro
booking / priceline / transavia / tripadvisor / etihad / ita-airways / jettours / promosejours / decolar / ticketmaster.fr
doordash / lieferando.de / lieferando.at / pyszne.pl / dominos.co.uk / just-eat.ch / takeaway / foodlion / e.leclerc / monoprix / carrefour.com.br / woolworths.com.au / totalwine / nescafe-dolcegusto.com.br
mi.com / notebooksbilliger / bestbuy.ca / farnell / tineco / waves / terabyteshop / alza.hu / alza.de
docmorris / pharmacy2u / drmax / drogal / esn
leroymerlin.es / bueroshop24 / yeti | myperfectresume / onfastspring / lebara
宠物: chewy/petsmart/petsmart.ca/petco | 运动: hoka/dickssportinggoods/anacondastores/decathlon.com.br/nike.com.br/crocs/jdsports/topps | 汽配: motointegrator.de/motointegrator.fr/oscaro | 工具: acmetools/zoro
| # | 主类目 | Before (仅 AI) | After (兜底 91 domain) | 变化 (pp) |
|---|---|---|---|---|
| 1 | 综合电商 | 1,149,178 (59.10%) | 1,520,556 (78.20%) | +19.1pp ⬆️ |
| 2 | Uncategorized | 500,928 (25.76%) | 32,761 (1.68%) | -24.1pp ⬇️⬇️ |
| 3 | 旅游 | 135,201 (6.95%) | 184,474 (9.49%) | +2.5pp |
| 4 | 食品 | 24,329 (1.25%) | 51,166 (2.63%) | +1.4pp |
| 5 | 电子 | 62,574 (3.22%) | 67,675 (3.48%) | +0.3pp |
| 6 | 健康 | 14,377 (0.74%) | 19,232 (0.99%) | +0.3pp |
| 7 | 家居 | 6,954 (0.36%) | 7,837 (0.40%) | +0.04pp |
| 8 | 商务金融 | 33,368 (1.72%) | 34,768 (1.79%) | +0.07pp |
| 9 | 其他 | 17,605 (0.91%) | 26,045 (1.34%) | +0.4pp |
-- ═══ Step 1: 用户主商家 9 类聚类 ═══ WITH audit_uniq AS ( -- 取每个 domain 最新一次 AI 审核记录 SELECT domain, category FROM ( SELECT domain, category, ROW_NUMBER() OVER (PARTITION BY domain ORDER BY pt DESC, id DESC) AS rn FROM soar_dw.v_dwd_store_merchant_ai_audit_df WHERE domain IS NOT NULL AND domain != '' ) t1 WHERE rn = 1 ), manual_map AS ( -- 手工兜底 91 个高流量 domain SELECT * FROM (VALUES ('amazon.com','1_Ecom'), ('amazon.es','1_Ecom'), ...(38 Ecom) ('booking.com','3_Travel'), ...(10 Travel) ('doordash.com','4_Food'), ...(14 Food) ('mi.com','5_Electronics'), ...(9 Electronics) ('docmorris.de','7_Health'), ...(5 Health) ... (17 Other, 3 Home, 3 Business) ) AS mm(domain, cat_manual) ), sp AS ( SELECT guid, domain FROM soar_dw.dws_log_sp_user_shopping_journey_detail_di WHERE pt BETWEEN DATE '2026-04-09' AND DATE '2026-07-07' AND cps_score >= 40 AND COALESCE(extra_session_first_page, '0') != '1' AND COALESCE(extra_no_checkout, '0') != '1' ), tagged AS ( -- 每条 SP 记录打上 9 类标签:优先手工兜底,其次 AI 类目,最后 Uncategorized SELECT s.guid, COALESCE( m.cat_manual, CASE WHEN a.category = 'E-commerce & Shopping' THEN '1_Ecom' WHEN a.category IN ('Travel & Tourism','Tickets') THEN '3_Travel' WHEN a.category = 'Food & Drink' THEN '4_Food' WHEN a.category IN ('Computers Electronics & Technology',...) THEN '5_Electronics' WHEN a.category = 'Home & Garden' THEN '6_Home' WHEN a.category IN ('Health','Health & Fitness') THEN '7_Health' WHEN a.category IN ('Business & Consumer Services','Finance',...) THEN '8_Business' WHEN a.category IS NULL OR a.category = '' THEN '2_Uncategorized' ELSE '9_Other' END ) AS cat9 FROM sp s LEFT JOIN audit_uniq a ON a.domain = s.domain LEFT JOIN manual_map m ON m.domain = s.domain ), user_cat AS (-- 每 user × 每类目 SP 次数 SELECT guid, cat9, COUNT(*) AS c FROM tagged GROUP BY guid, cat9 ), user_cat_rn AS ( SELECT guid, cat9, ROW_NUMBER() OVER (PARTITION BY guid ORDER BY c DESC, cat9) AS rn FROM user_cat ) -- 主类目 = 该用户 SP 次数最多的类目 SELECT guid, cat9 AS main_cat FROM user_cat_rn WHERE rn = 1;
按数据实际分布选切分点,避免"拍脑袋" 25%/50%/75% 分位。分布决定切分逻辑。
| R 桶 | 用户数 | 占比 | 累计 | 解读 |
|---|---|---|---|---|
| 0-7 天 | 421,309 | 21.68% | 21.7% | 本周活跃 |
| 8-14 天 | 233,868 | 12.03% | 33.7% | 上周活跃 |
| 15-30 天 | 387,390 | 19.92% | 53.6% | 中期 |
| 31-60 天 | 524,378 | 26.97% | 80.6% | 1-2 月前 |
| 61-90 天 | 377,569 | 19.42% | 100.0% | 快流失 |
R 分布相对均匀(各档 12-27%),没有明显的"活跃/沉睡"断层。这符合 SaaS 型产品特征 — Coupert 是随购物场景触发的,用户不会"每天用",但 90d 内会零散触发多次。
切分点选择:14d 和 30d — 一个 2 周(本月本周)+ 一个月线,符合运营周期。
| F 桶 | 用户数 | 占比 | 累计 | 解读 |
|---|---|---|---|---|
| F = 1 | 700,068 | 36.00% | 36.0% | 单次尝鲜 |
| F = 2 | 353,297 | 18.17% | 54.2% | 重复过一次 |
| F = 3-4 | 352,987 | 18.15% | 72.3% | 中低频 |
| F = 5-9 | 310,816 | 15.99% | 88.3% | 中高频 |
| F ≥ 10 | 227,346 | 11.69% | 100.0% | 核心忠粉 |
36% 用户只 SP 过 1 次(一次性用户,"漏斗尾部"),另一头是 11.7% 用户 SP ≥ 10 次。这是极其典型的幂律分布 —— 少数高频用户驱动大部分行为。
切分点选择:1 / 2-4 / 5+ — 一次性 vs 中频 vs 高频 3 档。
| M 桶 | 用户数 | 占比 | 累计 | 解读 |
|---|---|---|---|---|
| $0 | 169,574 | 8.72% | 8.7% | SP 有但 order_value 缺失(可能 checkout URL 提取失败) |
| $1-100 | 636,962 | 32.76% | 41.5% | 小额 |
| $100-500 | 667,340 | 34.32% | 75.8% | 中额(中位数带) |
| $500-2000 | 356,467 | 18.33% | 94.1% | 较高 |
| >$2000 | 114,171 | 5.87% | 100.0% | 高价值 |
M 集中在 $100-500 中位带(34%),高价值 >$2000 只有 5.9%(≈ 11.4 万人)。
但注意 —— M 高度依赖 F(次数越多 GMV 越大),如果同时用 R×F×M 分桶会有严重共线性。因此本次分层不把 M 作为切分维度,只作为桶内画像属性使用。
WITH ug AS ( SELECT guid, DATEDIFF(DATE '2026-07-07', CAST(MAX(create_time) AS DATE)) AS r_days, COUNT(DISTINCT sp_id) AS f, SUM(CASE WHEN order_value BETWEEN 0.01 AND 10000 THEN order_value ELSE 0 END) AS m FROM sp GROUP BY guid ) SELECT 'R (recency days)' AS metric, SUM(CASE WHEN r_days <= 7 THEN 1 ELSE 0 END) AS b1_le7, SUM(CASE WHEN r_days BETWEEN 8 AND 14 THEN 1 ELSE 0 END) AS b2_8_14, ... (类似 for 15-30, 31-60, 61-90) FROM ug UNION ALL SELECT 'F (sp count)', ... 类似 F 分档 UNION ALL SELECT 'M (gmv usd)', ... 类似 M 分档
| 桶 | 命名 | R 条件 | F 条件 | 业务定位 |
|---|---|---|---|---|
| B1 | 🏆 Champions | ≤14d | ≥5 | 近期&高频,核心资产 |
| B2 | ⭐ Loyal | ≤30d | 2-4 | 近期&中频,稳定回头客 |
| B3 | 🆕 NewBuyer | ≤14d | 1 | 近期&单次,新客 |
| B4 | ⚠️ AtRisk | >30d | ≥5 | 曾高频快流失,救回优先 |
| B5 | 💤 Hibernating | >30d | 2-4 | 中期休眠 |
| B6 | 🌑 Lost | >30d | 1 | 一次性丢失,几近死亡 |
| B7 | 🌱 MidNew | 15-30d | 1 | 中期新客(新客回访前的 gap 期) |
| B8 | 🚀 MidActive | 15-30d | ≥5 | 准 Champion(等回来) |
| 桶 | 用户数 | 用户% | avg_R | avg_F | avg_M ($) | Total GMV | GMV% |
|---|---|---|---|---|---|---|---|
| B1 Champions | 328,450 | 16.89% | 5.3d | 15.45 | $1,745 | $573.2M | 49.75% ⭐ |
| B2 Loyal | 373,004 | 19.18% | 13.4d | 2.80 | $383 | $142.7M | 12.38% |
| B3 NewBuyer | 116,109 | 5.97% | 6.6d | 1.00 | $160 | $18.6M | 1.62% |
| B4 AtRisk | 98,338 | 5.06% | 47.9d | 9.10 | $1,015 | $99.8M | 8.66% |
| B5 Hibernating | 333,280 | 17.14% | 54.2d | 2.58 | $313 | $104.4M | 9.06% |
| B6 Lost | 470,329 | 24.19% | 61.4d | 1.00 | $133 | $62.4M | 5.41% |
| B7 MidNew | 113,630 | 5.84% | 22.7d | 1.00 | $155 | $17.6M | 1.53% |
| B8 MidActive | 111,374 | 5.73% | 21.6d | 9.71 | $1,200 | $133.6M | 11.59% |
| 合计 | 1,944,514 | 100% | — | — | — | $1,151.8M | 100% |
-- ═══ Step 3: R×F 8 桶分层 ═══ WITH user_rfm AS ( SELECT guid, DATEDIFF(DATE '2026-07-07', CAST(MAX(create_time) AS DATE)) AS r_days, COUNT(DISTINCT sp_id) AS f, SUM(CASE WHEN order_value BETWEEN 0.01 AND 10000 THEN order_value ELSE 0 END) AS m FROM tagged -- 来自 Step 1 的 tagged CTE GROUP BY guid ), user_seg AS ( SELECT guid, r_days, f, m, CASE WHEN r_days <= 14 AND f >= 5 THEN 'B1_Champions' WHEN r_days <= 30 AND f BETWEEN 2 AND 4 THEN 'B2_Loyal' WHEN r_days <= 14 AND f = 1 THEN 'B3_NewBuyer' WHEN r_days > 30 AND f >= 5 THEN 'B4_AtRisk' WHEN r_days > 30 AND f BETWEEN 2 AND 4 THEN 'B5_Hibernating' WHEN r_days > 30 AND f = 1 THEN 'B6_Lost' WHEN r_days BETWEEN 15 AND 30 AND f = 1 THEN 'B7_MidNew' WHEN r_days BETWEEN 15 AND 30 AND f >= 5 THEN 'B8_MidActive' ELSE 'B9_Other' END AS rf_bucket FROM user_rfm ) SELECT rf_bucket, COUNT(*) AS users, ROUND(100.0 * COUNT(*) / SUM(COUNT(*)) OVER (), 2) AS pct, ROUND(AVG(r_days), 1) AS avg_r, ROUND(AVG(f), 2) AS avg_f, ROUND(AVG(m), 0) AS avg_m, SUM(m) AS total_gmv, ROUND(100.0 * SUM(m) / SUM(SUM(m)) OVER (), 2) AS gmv_pct FROM user_seg GROUP BY rf_bucket ORDER BY rf_bucket;
| 桶 | 综合电商 | Uncat | 旅游 | 食品 | 电子 | 家居 | 健康 | 商务 | 其他 | 总数 |
|---|---|---|---|---|---|---|---|---|---|---|
| B1 Champions | 89.0% | 0.3% | 5.1% | 3.5% | 0.6% | 0.1% | 0.4% | 0.4% | 0.5% | 328K |
| B2 Loyal | 84.2% | 1.2% | 8.2% | 1.9% | 1.7% | 0.2% | 0.9% | 0.8% | 0.9% | 373K |
| B3 NewBuyer | 71.1% | 3.2% | 12.2% | 2.5% | 4.1% | 0.8% | 1.9% | 2.0% | 2.2% | 116K |
| B4 AtRisk | 77.7% | 0.7% | 11.9% | 3.3% | 3.1% | 0.2% | 0.4% | 1.6% | 1.0% | 98K |
| B5 Hibernating | 79.5% | 1.4% | 10.0% | 2.0% | 3.2% | 0.3% | 0.7% | 1.7% | 1.1% | 333K |
| B6 Lost | 67.3% | 3.0% | 11.7% | 2.7% | 7.1% | 0.7% | 1.5% | 3.7% | 2.2% | 470K |
| B7 MidNew | 69.8% | 3.0% | 12.4% | 2.6% | 5.3% | 0.8% | 1.7% | 2.2% | 2.2% | 114K |
| B8 MidActive | 84.9% | 0.5% | 7.9% | 3.5% | 1.3% | 0.2% | 0.5% | 0.6% | 0.7% | 111K |
B1 里 89% 都是综合电商用户(垂直类合计只有 11%)。这告诉我们高频复购的主力就是 Amazon 系电商。综合电商类目内 Amazon 是绝对权重 ── 205 万 SP 记录 / 33.6 万独立用户,占电商类 30% 用户。
营销含义:Champions 池不需要按类目做子分层,一套"跨店电商返现"素材可以覆盖 89% 用户。
对比 B1 vs B6:
解释:电子/商务/健康 用户天然低频(一年买 1-2 次相机、注册一次简历工具、买一次药)。他们出现在 B6 Lost 桶里不是真流失,只是"品类特性决定的低频"。
营销含义:不要按 RFM 对垂直类用户做"流失挽回"营销,浪费预算。应该按品类事件触发(黑五数码/药房折扣季)。
Travel 在每个 R×F 桶都占 5-12%(B1 5.1% / B2 8.2% / B3 12.2% / ... / B6 11.7%),没有明显集中。
解释:旅游是"事件驱动"型 —— 用户不会每天订机票,暑假前订、圣诞前订,各桶都存在。
营销含义:旅游用户单独抽出来做一个"旅游需求型"桶,用季节触发(旺季前 push)而不是 RFM。
SELECT rf_bucket, SUM(CASE WHEN main_cat='1_Ecom' THEN 1 ELSE 0 END) AS ecom, SUM(CASE WHEN main_cat='2_Uncategorized' THEN 1 ELSE 0 END) AS uncat, SUM(CASE WHEN main_cat='3_Travel' THEN 1 ELSE 0 END) AS travel, SUM(CASE WHEN main_cat='4_Food' THEN 1 ELSE 0 END) AS food, SUM(CASE WHEN main_cat='5_Electronics' THEN 1 ELSE 0 END) AS elec, -- ... home / health / biz / other 类似 COUNT(*) AS total FROM user_seg s JOIN user_main u ON u.guid = s.guid -- 来自 Step 1 GROUP BY rf_bucket ORDER BY rf_bucket;
综合 R×F 8 桶 + 主商家类目 heatmap,输出 10 个可运营的营销分层桶。按 GMV 权重 × 可营销性 排序。
Coupert 商业价值的重心不在"用户数",在"33 万 Champions"上。任何 Amazon 服务体验波动(如近期 AT 出站失败)都会直接冲击这个池子。
行动优先级:
建议:单独设立"Amazon 服务健康度"监控 —— 出站成功率、返现兑现率、AT 弹窗准确率。任何一项下滑立即触发告警。
数据事实:
行动:从营销预算中彻底剔除 B6 用户群。省下预算全部转移给 B4 AtRisk 救回(同样的钱救 7.6 万高价值用户,比撒给 47 万死用户高 20x ROI)。
但保留 B6 名单做产品体验分析 —— 为什么他们只用了一次就不来了?是弹窗过度?返现兑现不到位?跳转失败?这是产品迭代的输入。
| 字段 | 计算逻辑 | 业务解读 | 取值范围 |
|---|---|---|---|
| avg_svc% | AVG per guid of SUM(service_used) / COUNT(records) | 平均服务使用率。该用户在他所有 SP 记录里用到 Coupert 服务(CB/AT/PCP 弹窗曝出并被使用)的比例。0=完全不用;1=每次都用。判断"Coupert 依赖度" | 0.0 – 1.0 |
| avg_f (F) | AVG per guid of COUNT(DISTINCT sp_id) | 平均 SP 次数(频次 F)。90d 内该用户下了几次单 | 1 – 数百 |
| avg_ov (M) | AVG per guid of SUM(order_value) capped $10k | 平均订单总额(美元 M)。SP 表里 order_value 已归一化 USD,capped 是过滤脏数据(>10k 或 ≤0)。用户 90d 累计 GMV | $0 – $50k+ |
| avg_dom | AVG per guid of COUNT(DISTINCT domain) | 平均独立 CPS 商家数(多样性)。90d 内他在几个不同商家域名下过单。1=专一;5+=杂食 | 1 – 数百 |
| avg_r (R) | AVG per guid of DATEDIFF('2026-07-07', MAX(create_time)) | 平均距今天数(新鲜度 R)。最近一次 SP 距今多少天。0=昨天刚下;90=90d 前那一单是唯一记录(要流失了) | 0 – 90 |
| 表名 | 用途 | 关键字段 | 行数量级 |
|---|---|---|---|
soar_dw.dws_log_sp_user_shopping_journey_detail_di | SP 用户下单明细宽表(本次分析主表) | guid, sp_id, domain, order_value, cps_score, create_time, service_used, extra_session_first_page, extra_no_checkout | ~1000 万/90d |
soar_dw.v_dwd_store_merchant_ai_audit_df | AI 判定的商家审核表(类目来源) | domain, category, shopping_type, is_merchant, pt | 186K 独立 domain |
soar_dw.dim_pub_normalmerchant_df | SimilarWeb 商家维表(备用类目源) | domain, category_detail | ~180K |
-- ═══════════════════════════════════════════════ -- Coupert SP 用户分层完整 SQL · 2026-07-09 -- ═══════════════════════════════════════════════ WITH audit_uniq AS ( -- 每个 domain 最新审核结果 SELECT domain, category FROM ( SELECT domain, category, ROW_NUMBER() OVER (PARTITION BY domain ORDER BY pt DESC, id DESC) AS rn FROM soar_dw.v_dwd_store_merchant_ai_audit_df WHERE domain IS NOT NULL AND domain != '' ) t1 WHERE rn = 1 ), manual_map AS ( -- 91 个 top domain 手工兜底 SELECT * FROM (VALUES -- Ecom 综合电商 (38) ('amazon.com','1_Ecom'),('amazon.es','1_Ecom'),('amazon.it','1_Ecom'), ('amazon.com.br','1_Ecom'),('amazon.pl','1_Ecom'),('amazon.in','1_Ecom'), ('amazon.com.au','1_Ecom'),('amazon.com.be','1_Ecom'), ('ebay.com','1_Ecom'),('etsy.com','1_Ecom'),('target.com','1_Ecom'), ('macys.com','1_Ecom'),('kohls.com','1_Ecom'),('belk.com','1_Ecom'), ('bedbathandbeyond.com','1_Ecom'),('groupon.com','1_Ecom'), ('newlook.com','1_Ecom'),('kogan.com','1_Ecom'),('aliexpress.us','1_Ecom'), ('1688.com','1_Ecom'),('wilko.com','1_Ecom'),('barnesandnoble.com','1_Ecom'), ('jcrew.com','1_Ecom'),('boohoo.com','1_Ecom'),('desigual.com','1_Ecom'), ('placedestendances.com','1_Ecom'),('intimissimi.com','1_Ecom'), ('pandora.net','1_Ecom'),('laredoute.co.uk','1_Ecom'),('oakley.com','1_Ecom'), ('birkenstock.com','1_Ecom'),('bonds.com.au','1_Ecom'),('momox.de','1_Ecom'), ('rebuy.de','1_Ecom'),('avon.com','1_Ecom'),('eyebuydirect.com','1_Ecom'), ('carters.com','1_Ecom'),('centauro.com.br','1_Ecom'), -- Travel 旅游 (10) ('booking.com','3_Travel'),('priceline.com','3_Travel'),('transavia.com','3_Travel'), ('tripadvisor.com','3_Travel'),('etihad.com','3_Travel'),('ita-airways.com','3_Travel'), ('jettours.com','3_Travel'),('promosejours.com','3_Travel'), ('decolar.com','3_Travel'),('ticketmaster.fr','3_Travel'), -- Food 食品 (14) ('doordash.com','4_Food'),('lieferando.de','4_Food'),('lieferando.at','4_Food'), ('pyszne.pl','4_Food'),('dominos.co.uk','4_Food'),('just-eat.ch','4_Food'), ('takeaway.com','4_Food'),('foodlion.com','4_Food'),('e.leclerc','4_Food'), ('monoprix.fr','4_Food'),('carrefour.com.br','4_Food'),('woolworths.com.au','4_Food'), ('totalwine.com','4_Food'),('nescafe-dolcegusto.com.br','4_Food'), -- Electronics 电子 (9) ('mi.com','5_Electronics'),('notebooksbilliger.de','5_Electronics'), ('bestbuy.ca','5_Electronics'),('farnell.com','5_Electronics'), ('tineco.com','5_Electronics'),('waves.com','5_Electronics'), ('terabyteshop.com.br','5_Electronics'),('alza.hu','5_Electronics'),('alza.de','5_Electronics'), -- Home 家居 (3) ('leroymerlin.es','6_Home'),('bueroshop24.de','6_Home'),('yeti.com','6_Home'), -- Health 健康 (5) ('docmorris.de','7_Health'),('pharmacy2u.co.uk','7_Health'), ('drmax.cz','7_Health'),('drogal.com.br','7_Health'),('esn.com','7_Health'), -- Business 商务 (3) ('myperfectresume.com','8_Business'),('onfastspring.com','8_Business'),('lebara.co.uk','8_Business'), -- Other 其他 (17): 宠物+运动+汽配+工具 ('chewy.com','9_Other'),('petsmart.com','9_Other'),('petsmart.ca','9_Other'), ('petco.com','9_Other'),('hoka.com','9_Other'),('dickssportinggoods.com','9_Other'), ('anacondastores.com','9_Other'),('decathlon.com.br','9_Other'), ('nike.com.br','9_Other'),('crocs.com','9_Other'),('jdsports.fr','9_Other'), ('topps.com','9_Other'),('motointegrator.de','9_Other'),('motointegrator.fr','9_Other'), ('oscaro.com','9_Other'),('acmetools.com','9_Other'),('zoro.com','9_Other') ) AS mm(domain, cat_manual) ), sp AS ( SELECT guid, sp_id, domain, order_value, create_time FROM soar_dw.dws_log_sp_user_shopping_journey_detail_di WHERE pt BETWEEN DATE '2026-04-09' AND DATE '2026-07-07' AND cps_score >= 40 AND COALESCE(extra_session_first_page, '0') != '1' AND COALESCE(extra_no_checkout, '0') != '1' ), tagged AS ( SELECT s.guid, s.sp_id, s.order_value, s.create_time, COALESCE( m.cat_manual, CASE WHEN a.category = 'E-commerce & Shopping' THEN '1_Ecom' WHEN a.category IN ('Travel & Tourism','Tickets') THEN '3_Travel' WHEN a.category = 'Food & Drink' THEN '4_Food' WHEN a.category IN ('Computers Electronics & Technology', 'Computers, Electronics & Technology') THEN '5_Electronics' WHEN a.category = 'Home & Garden' THEN '6_Home' WHEN a.category IN ('Health','Health & Fitness') THEN '7_Health' WHEN a.category IN ('Business & Consumer Services','Finance', 'Science & Education','Legal Services & Government', 'Jobs & Career','Real Estate') THEN '8_Business' WHEN a.category IS NULL OR a.category = '' THEN '2_Uncategorized' ELSE '9_Other' END ) AS cat9 FROM sp s LEFT JOIN audit_uniq a ON a.domain = s.domain LEFT JOIN manual_map m ON m.domain = s.domain ), user_cat AS ( SELECT guid, cat9, COUNT(*) AS c FROM tagged GROUP BY guid, cat9 ), user_cat_rn AS ( SELECT guid, cat9, ROW_NUMBER() OVER (PARTITION BY guid ORDER BY c DESC, cat9) AS rn FROM user_cat ), user_main AS ( SELECT guid, cat9 AS main_cat FROM user_cat_rn WHERE rn = 1 ), user_rfm AS ( SELECT guid, DATEDIFF(DATE '2026-07-07', CAST(MAX(create_time) AS DATE)) AS r_days, COUNT(DISTINCT sp_id) AS f, SUM(CASE WHEN order_value BETWEEN 0.01 AND 10000 THEN order_value ELSE 0 END) AS m FROM tagged GROUP BY guid ), user_seg AS ( SELECT r.guid, u.main_cat, r.r_days, r.f, r.m, CASE WHEN r.r_days <= 14 AND r.f >= 5 THEN 'B1_Champions' WHEN r.r_days <= 30 AND r.f BETWEEN 2 AND 4 THEN 'B2_Loyal' WHEN r.r_days <= 14 AND r.f = 1 THEN 'B3_NewBuyer' WHEN r.r_days > 30 AND r.f >= 5 THEN 'B4_AtRisk' WHEN r.r_days > 30 AND r.f BETWEEN 2 AND 4 THEN 'B5_Hibernating' WHEN r.r_days > 30 AND r.f = 1 THEN 'B6_Lost' WHEN r.r_days BETWEEN 15 AND 30 AND r.f = 1 THEN 'B7_MidNew' WHEN r.r_days BETWEEN 15 AND 30 AND r.f >= 5 THEN 'B8_MidActive' ELSE 'B9_Other' END AS rf_bucket FROM user_rfm r JOIN user_main u ON u.guid = r.guid ) -- 最终查询:R×F × 主类目 交叉画像 SELECT rf_bucket, main_cat, COUNT(*) AS users, ROUND(AVG(r_days), 1) AS avg_r, ROUND(AVG(f), 2) AS avg_f, ROUND(AVG(m), 0) AS avg_m, SUM(m) AS total_gmv FROM user_seg GROUP BY rf_bucket, main_cat ORDER BY rf_bucket, main_cat;