背景
随着**商城电商平台业务的持续扩张,用户行为数据呈现出更加复杂和多样化的特征。在已完成基础购买行为分析的基础上,平台需要进一步挖掘用户行为背后的深层规律,包括用户活跃度变化趋势、商品关联购买模式、高价值用户识别以及流失风险预警等。这些深度分析将为精细化运营、个性化推荐和风险管控提供强有力的数据支撑。
题目
**商城电商平台需要基于历史用户行为数据,进行更深层次的用户行为洞察:
- 计算用户活跃度趋势指标
- 构建用户价值分层模型
- 分析用户流失风险特征
数据模型设计
用户信息表 (dim_users)
| 字段名 | 类型 | 说明 |
|---|---|---|
| user_id | BIGINT | 用户唯一标识ID |
| user_name | STRING | 用户昵称 |
| register_date | DATE | 用户注册日期 |
| city | STRING | 用户常驻城市 |
| membership_level | STRING | 会员等级:普通/白银/黄金/钻石 |
| is_vip | BOOLEAN | 是否VIP用户 |
订单事实表 (fact_orders)
| 字段名 | 类型 | 说明 |
|---|---|---|
| order_id | BIGINT | 订单唯一标识ID |
| user_id | BIGINT | 用户ID,关联dim_users表 |
| order_date | DATE | 订单创建日期 |
| order_time | TIMESTAMP | 订单创建时间戳 |
| total_amount | DOUBLE | 订单实付金额 |
| discount_amount | DOUBLE | 优惠折扣金额 |
| status | STRING | 订单状态:paid/refunded/cancelled |
| payment_method | STRING | 支付方式:alipay/wechat/credit/card |
| channel | STRING | 下单渠道:app/web/miniprogram |
订单明细表 (fact_order_items)
| 字段名 | 类型 | 说明 |
|---|---|---|
| order_id | BIGINT | 订单ID,关联fact_orders表 |
| product_id | BIGINT | 商品唯一标识ID |
| product_name | STRING | 商品名称 |
| category | STRING | 商品一级类目 |
| sub_category | STRING | 商品二级类目 |
| quantity | INT | 购买数量 |
| unit_price | DOUBLE | 商品单价 |
| item_amount | DOUBLE | 商品小计金额 |
用户行为日志表 (fact_user_behavior)
| 字段名 | 类型 | 说明 |
|---|---|---|
| user_id | BIGINT | 用户ID |
| behavior_date | DATE | 行为发生日期 |
| behavior_time | TIMESTAMP | 行为发生时间戳 |
| behavior_type | STRING | 行为类型:view/cart/favorite/buy |
| product_id | BIGINT | 商品ID |
| category | STRING | 商品一级类目 |
| duration_seconds | INT | 停留时长(秒),仅view行为有值 |
| device_type | STRING | 设备类型:mobile/pc/tablet |
| page_source | STRING | 来源页面:home/search/recommend/detail |
统计需求
- 计算用户活跃度趋势指标(以2026-02-19为基准)
- 统计最近30天内每个用户的活跃天数
- 计算用户最近7天与之前23天的活跃天数比值(活跃度变化率)
- 别活跃用户(最近7天活跃天数≥4天)、普通用户(最近7天活跃天数>=0 AND < 4)、沉默用户(最近7天无活跃但之前23天有活跃)、流失用户(最近30天无活跃)
查询结果按活跃天数降序排序,相等则按用户id升序
SELECT
t.user_id AS user_id
, u.user_name AS user_name
, COUNT(DISTINCT t.behavior_date) AS active_days
, ROUND(COUNT(DISTINCT IF(t.behavior_date >= DATE_SUB('2026-02-19', 7),
t.behavior_date, NULL)) / COUNT(DISTINCT IF(
t.behavior_date < DATE_SUB('2026-02-19', 7), t.behavior_date, NULL)) *
100, 2) AS active_days_change_rate
, CASE
WHEN COUNT(DISTINCT IF(t.behavior_date >= DATE_SUB('2026-02-19', 7),
t.behavior_date, NULL)) >= 4 THEN '活跃用户'
WHEN COUNT(DISTINCT IF(t.behavior_date >= DATE_SUB('2026-02-19', 7),
t.behavior_date, NULL)) BETWEEN 0 AND 3
THEN '普通用户'
WHEN COUNT(DISTINCT IF(t.behavior_date >= DATE_SUB('2026-02-19', 7),
t.behavior_date, NULL)) = 0 AND
COUNT(DISTINCT IF(t.behavior_date >= DATE_SUB('2026-02-19', 7),
t.behavior_date, NULL)) > 0 THEN '沉默用户'
WHEN COUNT(DISTINCT t.behavior_date) = 0 THEN '流失用户'
END AS user_type
FROM
dataspire_catalog.db_dev.fact_user_behavior t
LEFT JOIN dataspire_catalog.db_dev.dim_users u
ON t.user_id = u.user_id
WHERE
1 = 1 AND t.behavior_date >= DATE_SUB('2026-02-19', 30)
GROUP BY
t.user_id, u.user_name
ORDER BY
active_days DESC, user_id
LIMIT 10
;
预期输出:
- 构建用户价值分层模型(以2026-02-19为基准)
- 基于RFM模型计算每个用户的价值得分:
- R(Recency):最近一次购买距离当前的天数,分值1-5分(越近分数越高)
- 5分:天数最小的前 20% 用户(最近刚买过)
- 4分:天数在 20%-40% 之间的用户
- 3分:天数在 40%-60% 之间的用户
- 2分:天数在 60%-80% 之间的用户
- 1分:天数最大的后 20% 用户(很久没买了)
- F(Frequency):购买频次,分值1-5分(越高分数越高)
- 5分:频次最高的前 20% 用户
- 4分:频次在 20%-40% 之间的用户
- 3分:频次在 40%-60% 之间的用户
- 2分:频次在 60%-80% 之间的用户
- 1分:频次最低的后 20% 用户
- M(Monetary):消费总金额,分值1-5分(越高分数越高)
- 5分:金额最高的前 20% 用户
- 4分:金额在 20%-40% 之间的用户
- 3分:金额在 40%-60% 之间的用户
- 2分:金额在 60%-80% 之间的用户
- 1分:金额最低的后 20% 用户
- 综合得分 = R * 0.3 + F * 0.3 + M * 0.4
- 根据综合得分将用户分为:高价值用户(前20%)、潜力用户(20%-50%)、一般用户(50%-80%)、低价值用户(后20%)
- R(Recency):最近一次购买距离当前的天数,分值1-5分(越近分数越高)
查询结果按综合得分降序排序,相等则按用户id升序,分值保留两位小数
WITH tab AS
(
SELECT
t.user_id AS user_id
, u.user_name AS user_name
, DATEDIFF('2025-02-19', MAX(t.order_date)) AS date_diff
, COUNT(DISTINCT t.order_id) AS order_cnt
, SUM(i.item_amount) AS item_amt
FROM
dataspire_catalog.db_dev.fact_orders t
LEFT JOIN dataspire_catalog.db_dev.fact_order_items i
ON t.order_id = i.order_id
LEFT JOIN dataspire_catalog.db_dev.dim_users u
ON t.user_id = u.user_id
WHERE
1 = 1 AND t.status = 'paid'
GROUP BY
t.user_id, u.user_name
),
tab1 AS
(
SELECT
tab.user_id AS user_id
, tab.user_name AS user_name
, CASE
WHEN PERCENT_RANK() OVER (ORDER BY date_diff) <= 0.2 THEN 5
WHEN PERCENT_RANK() OVER (ORDER BY date_diff) BETWEEN 0.2 AND 0.4 THEN 4
WHEN PERCENT_RANK() OVER (ORDER BY date_diff) BETWEEN 0.4 AND 0.6 THEN 3
WHEN PERCENT_RANK() OVER (ORDER BY date_diff) BETWEEN 0.6 AND 0.8 THEN 2
ELSE 1
END AS date_diff_rank
, CASE
WHEN PERCENT_RANK() OVER (ORDER BY order_cnt DESC) <= 0.2 THEN 5
WHEN PERCENT_RANK() OVER (ORDER BY order_cnt DESC) BETWEEN 0.2 AND 0.4
THEN 4
WHEN PERCENT_RANK() OVER (ORDER BY order_cnt DESC) BETWEEN 0.4 AND 0.6
THEN 3
WHEN PERCENT_RANK() OVER (ORDER BY order_cnt DESC) BETWEEN 0.6 AND 0.8
THEN 2
ELSE 1
END AS order_cnt_rank
, CASE
WHEN PERCENT_RANK() OVER (ORDER BY item_amt DESC) <= 0.2 THEN 5
WHEN PERCENT_RANK() OVER (ORDER BY item_amt DESC) BETWEEN 0.2 AND 0.4
THEN 4
WHEN PERCENT_RANK() OVER (ORDER BY item_amt DESC) BETWEEN 0.4 AND 0.6
THEN 3
WHEN PERCENT_RANK() OVER (ORDER BY item_amt DESC) BETWEEN 0.6 AND 0.8
THEN 2
ELSE 1
END AS item_amt_rank
FROM
tab
WHERE
1 = 1
)
SELECT
tab1.user_id AS user_id
, tab1.user_name AS user_name
, ROUND(tab1.date_diff_rank * 0.3 + tab1.order_cnt_rank * 0.3 +
tab1.item_amt_rank * 0.4, 2) AS final_rank
, CASE
WHEN PERCENT_RANK() OVER (ORDER BY tab1.date_diff_rank * 0.3 +
tab1.order_cnt_rank * 0.3 +
tab1.item_amt_rank * 0.4 DESC) <= 0.2
THEN '高价值用户'
WHEN PERCENT_RANK() OVER (ORDER BY tab1.date_diff_rank * 0.3 +
tab1.order_cnt_rank * 0.3 +
tab1.item_amt_rank *
0.4 DESC) BETWEEN 0.2 AND 0.5
THEN '潜力用户'
WHEN PERCENT_RANK() OVER (ORDER BY tab1.date_diff_rank * 0.3 +
tab1.order_cnt_rank * 0.3 +
tab1.item_amt_rank *
0.4 DESC) BETWEEN 0.5 AND 0.8
THEN '一般用户'
WHEN PERCENT_RANK() OVER (ORDER BY tab1.date_diff_rank * 0.3 +
tab1.order_cnt_rank * 0.3 +
tab1.item_amt_rank *
0.4 DESC) BETWEEN 0.8 AND 1
THEN '低价值用户'
ELSE '低价值用户'
END
FROM
tab1
WHERE
1 = 1
ORDER BY
final_rank DESC, tab1.user_id
;
预期输出:
- 分析用户流失风险特征
- 识别有流失风险的用户
- 我们需要对比两个时间段:
- 基准期:例如 31-60 天前(用来定义用户的“正常活跃度”)。
- 观察期:最近 30 天(用来定义用户的“当前活跃度”)。
- 筛选条件:
- 在 fact_user_behavior 表中发生任意行为(behavior_type IN ('view', 'cart', 'favorite', 'buy'))的天数。
- 条件:观察期活跃天数 < 基准期活跃天数 * 0.5且最近30天无购买行为
- 我们需要对比两个时间段:
- 分析流失风险用户的行为特征:
- 平均浏览时长变化率: (基准期平均每日浏览时长 - 观察期平均每日浏览时长) / 基准期平均每日浏览时长。
- 主要浏览品类:统计观察期内用户浏览次数最多的 category(一级类目)。
查询结果平均浏览时长变化率降序排序
WITH tab AS
(
SELECT
t.user_id AS user_id -- 用户id
, u.user_name AS user_name -- 用户名
, t.category AS category -- 商品一级类目
, IF(COUNT(DISTINCT IF(t.behavior_date >= DATE_SUB('2026-02-19', 30),
t.duration_seconds, NULL)) = 0, 0,
SUM(IF(t.behavior_date >= DATE_SUB('2026-02-19', 30), t.duration_seconds,
0)) / COUNT(DISTINCT
IF(t.behavior_date >= DATE_SUB('2026-02-19', 30),
t.duration_seconds,
NULL))) AS avg_dur_seconds_obs -- 观察期平均每日浏览时长
, IF(COUNT(DISTINCT IF(t.behavior_date < DATE_SUB('2026-02-19', 30),
t.duration_seconds, NULL)) = 0, 0,
SUM(IF(t.behavior_date < DATE_SUB('2026-02-19', 30), t.duration_seconds,
0)) / COUNT(DISTINCT
IF(t.behavior_date < DATE_SUB('2026-02-19', 30),
t.duration_seconds,
NULL))) AS avg_dur_seconds_bench -- 基期期平均每日浏览时长
, COUNT(1) AS view_cnt -- 浏览次数
FROM
dataspire_catalog.db_dev.fact_user_behavior t
LEFT JOIN dataspire_catalog.db_dev.dim_users u
ON t.user_id = u.user_id
WHERE
1 = 1 AND t.behavior_date >= DATE_SUB('2026-02-19', 60)
GROUP BY
t.user_id, u.user_name, t.category
HAVING
-- 观察期活跃天数 < 基准期活跃天数 * 0.5
IF(COUNT(DISTINCT IF(
t.behavior_type IN ('view', 'cart', 'favorite', 'buy') AND
t.behavior_date >= DATE_SUB('2026-02-19', 30), t.behavior_date,
NULL))
< COUNT(DISTINCT IF(
t.behavior_type IN ('view', 'cart', 'favorite', 'buy') AND
t.behavior_date < DATE_SUB('2026-02-19', 30), t.behavior_date,
NULL)) * 0.5, 1, 0) = 1
),
tab1 AS
(
SELECT
tab.user_id AS user_id -- 用户id
, tab.user_name AS user_name -- 用户名
, tab.category AS category -- 商品一级类目
, ROW_NUMBER() OVER (PARTITION BY tab.user_id
ORDER BY view_cnt DESC) AS order_rank -- 排序
, tab.avg_dur_seconds_obs AS avg_dur_seconds_obs -- 观察期平均每日浏览时长
, tab.avg_dur_seconds_bench AS avg_dur_seconds_bench -- 基期期平均每日浏览时长
FROM
tab
WHERE
1 = 1
)
SELECT
tab1.user_id AS user_id -- 用户id
, tab1.user_name AS user_name -- 用户名
, tab1.category AS category -- 用户浏览次数最多的 category
, ROUND((tab1.avg_dur_seconds_bench - tab1.avg_dur_seconds_obs) /
tab1.avg_dur_seconds_bench * 100,
2) AS avg_dur_seconds_diff -- 平均浏览时长变化率
FROM
tab1
-- 过滤掉最近30天内有消费的用户
INNER JOIN (SELECT DISTINCT
t.user_id AS user_id
FROM
dataspire_catalog.db_dev.fact_orders t
WHERE
1 = 1 AND t.order_date < DATE_SUB('2026-02-19', 30)) o
ON tab1.user_id = o.user_id
WHERE
-- 取浏览次数最多的一级类目
1 = 1 AND tab1.order_rank = 1
ORDER BY
avg_dur_seconds_diff DESC, user_id
LIMIT 10
;
预期输出:
DDL
DROP TABLE IF EXISTS dataspire_catalog.db_dev.fact_user_behavior PURGE;
CREATE TABLE IF NOT EXISTS dataspire_catalog.db_dev.fact_user_behavior
(
user_id STRING COMMENT '用户ID',
behavior_date STRING COMMENT '行为发生日期',
behavior_time STRING COMMENT '行为发生时间戳',
behavior_type STRING COMMENT '行为类型:view/cart/favorite/buy',
product_id STRING COMMENT '商品ID',
category STRING COMMENT '商品一级类目',
duration_seconds STRING COMMENT '停留时长(秒),仅view行为有值',
device_type STRING COMMENT '设备类型:mobile/pc/tablet',
page_source STRING COMMENT '来源页面:home/search/recommend/detail'
)
USING iceberg
TBLPROPERTIES (
'comment' = '用户行为日志表'
)
;
-- ==================== 插入用户行为数据 ====================
INSERT INTO dataspire_catalog.db_dev.fact_user_behavior VALUES
-- ========== 用户10001(活跃用户 - 最近30天有多次活跃)==========
(10001, '2026-02-18', '2026-02-18 10:30:00', 'view', 5001, '手机数码', 120, 'mobile', 'home'),
(10001, '2026-02-18', '2026-02-18 10:35:00', 'view', 5002, '手机数码', 85, 'mobile', 'search'),
(10001, '2026-02-18', '2026-02-18 10:40:00', 'cart', 5001, '手机数码', 0, 'mobile', 'detail'),
(10001, '2026-02-18', '2026-02-18 10:45:00', 'buy', 5001, '手机数码', 0, 'mobile', 'detail'),
(10001, '2026-02-17', '2026-02-17 14:20:00', 'view', 5004, '电脑办公', 200, 'mobile', 'recommend'),
(10001, '2026-02-17', '2026-02-17 14:25:00', 'favorite', 5004, '电脑办公', 0, 'mobile', 'detail'),
(10001, '2026-02-16', '2026-02-16 09:15:00', 'view', 5005, '电脑办公', 150, 'web', 'home'),
(10001, '2026-02-16', '2026-02-16 09:20:00', 'cart', 5005, '电脑办公', 0, 'web', 'detail'),
(10001, '2026-02-15', '2026-02-15 16:00:00', 'view', 5006, '电脑办公', 180, 'mobile', 'search'),
(10001, '2026-02-15', '2026-02-15 16:10:00', 'buy', 5006, '电脑办公', 0, 'mobile', 'detail'),
(10001, '2026-02-14', '2026-02-14 11:30:00', 'view', 5016, '家用电器', 90, 'mobile', 'recommend'),
(10001, '2026-02-13', '2026-02-13 10:00:00', 'view', 5017, '家用电器', 110, 'mobile', 'home'),
(10001, '2026-02-13', '2026-02-13 10:05:00', 'cart', 5017, '家用电器', 0, 'mobile', 'detail'),
(10001, '2026-02-12', '2026-02-12 15:30:00', 'view', 5025, '美妆个护', 75, 'mobile', 'search'),
(10001, '2026-02-10', '2026-02-10 09:00:00', 'view', 5010, '服饰鞋包', 95, 'web', 'home'),
(10001, '2026-02-08', '2026-02-08 14:00:00', 'view', 5012, '智能穿戴', 130, 'mobile', 'recommend'),
(10001, '2026-02-08', '2026-02-08 14:10:00', 'buy', 5012, '智能穿戴', 0, 'mobile', 'detail'),
(10001, '2026-02-05', '2026-02-05 11:00:00', 'view', 5020, '手机数码', 160, 'mobile', 'search'),
(10001, '2026-02-01', '2026-02-01 10:30:00', 'view', 5001, '手机数码', 100, 'mobile', 'home'),
(10001, '2026-02-01', '2026-02-01 10:35:00', 'favorite', 5001, '手机数码', 0, 'mobile', 'detail'),
(10001, '2026-01-28', '2026-01-28 16:00:00', 'view', 5018, '家用电器', 140, 'mobile', 'recommend'),
(10001, '2026-01-25', '2026-01-25 09:30:00', 'view', 5003, '手机数码', 80, 'web', 'search'),
(10001, '2026-01-25', '2026-01-25 09:35:00', 'buy', 5003, '手机数码', 0, 'web', 'detail'),
(10001, '2026-01-20', '2026-01-20 14:00:00', 'view', 5019, '服饰鞋包', 105, 'mobile', 'home'),
(10001, '2026-01-15', '2026-01-15 11:00:00', 'view', 5007, '电脑办公', 175, 'mobile', 'recommend'),
(10001, '2026-01-15', '2026-01-15 11:10:00', 'cart', 5007, '电脑办公', 0, 'mobile', 'detail'),
(10001, '2026-01-15', '2026-01-15 11:15:00', 'buy', 5007, '电脑办公', 0, 'mobile', 'detail'),
-- ========== 用户10002(高价值用户 - 购买金额高)==========
(10002, '2026-02-19', '2026-02-19 10:00:00', 'view', 5009, '家用电器', 250, 'mobile', 'home'),
(10002, '2026-02-19', '2026-02-19 10:10:00', 'cart', 5009, '家用电器', 0, 'mobile', 'detail'),
(10002, '2026-02-19', '2026-02-19 10:15:00', 'buy', 5009, '家用电器', 0, 'mobile', 'detail'),
(10002, '2026-02-17', '2026-02-17 11:00:00', 'view', 5022, '电脑办公', 300, 'web', 'search'),
(10002, '2026-02-17', '2026-02-17 11:15:00', 'favorite', 5022, '电脑办公', 0, 'web', 'detail'),
(10002, '2026-02-16', '2026-02-16 14:30:00', 'view', 5020, '手机数码', 220, 'mobile', 'recommend'),
(10002, '2026-02-16', '2026-02-16 14:40:00', 'buy', 5020, '手机数码', 0, 'mobile', 'detail'),
(10002, '2026-02-14', '2026-02-14 09:00:00', 'view', 5024, '家用电器', 280, 'mobile', 'home'),
(10002, '2026-02-14', '2026-02-14 09:20:00', 'cart', 5024, '家用电器', 0, 'mobile', 'detail'),
(10002, '2026-02-14', '2026-02-14 09:30:00', 'buy', 5024, '家用电器', 0, 'mobile', 'detail'),
(10002, '2026-02-10', '2026-02-10 15:00:00', 'view', 5021, '手机数码', 190, 'mobile', 'search'),
(10002, '2026-02-10', '2026-02-10 15:10:00', 'buy', 5021, '手机数码', 0, 'mobile', 'detail'),
(10002, '2026-02-05', '2026-02-05 10:30:00', 'view', 5006, '电脑办公', 260, 'web', 'recommend'),
(10002, '2026-02-05', '2026-02-05 10:45:00', 'buy', 5006, '电脑办公', 0, 'web', 'detail'),
(10002, '2026-02-01', '2026-02-01 11:00:00', 'view', 5008, '家居生活', 240, 'mobile', 'home'),
(10002, '2026-02-01', '2026-02-01 11:15:00', 'cart', 5008, '家居生活', 0, 'mobile', 'detail'),
(10002, '2026-02-01', '2026-02-01 11:20:00', 'buy', 5008, '家居生活', 0, 'mobile', 'detail'),
(10002, '2026-01-28', '2026-01-28 14:00:00', 'view', 5023, '手机数码', 210, 'mobile', 'search'),
(10002, '2026-01-28', '2026-01-28 14:15:00', 'buy', 5023, '手机数码', 0, 'mobile', 'detail'),
(10002, '2026-01-20', '2026-01-20 09:30:00', 'view', 5017, '家用电器', 185, 'mobile', 'recommend'),
(10002, '2026-01-20', '2026-01-20 09:40:00', 'buy', 5017, '家用电器', 0, 'mobile', 'detail'),
-- ========== 用户10003(流失风险用户 - 最近30天活跃度下降)==========
(10003, '2026-01-15', '2026-01-15 08:00:00', 'view', 5010, '服饰鞋包', 90, 'web', 'home'),
(10003, '2026-01-15', '2026-01-15 08:10:00', 'cart', 5010, '服饰鞋包', 0, 'web', 'detail'),
(10003, '2026-01-10', '2026-01-10 19:30:00', 'view', 5011, '服饰鞋包', 75, 'mobile', 'search'),
(10003, '2026-01-10', '2026-01-10 19:35:00', 'favorite', 5011, '服饰鞋包', 0, 'mobile', 'detail'),
(10003, '2026-01-05', '2026-01-05 10:00:00', 'view', 5014, '手机数码', 100, 'web', 'recommend'),
(10003, '2026-01-05', '2026-01-05 10:05:00', 'cart', 5014, '手机数码', 0, 'web', 'detail'),
(10003, '2025-12-28', '2025-12-28 14:00:00', 'view', 5015, '手机数码', 85, 'mobile', 'home'),
(10003, '2025-12-28', '2025-12-28 14:05:00', 'buy', 5015, '手机数码', 0, 'mobile', 'detail'),
(10003, '2025-12-20', '2025-12-20 11:30:00', 'view', 5019, '服饰鞋包', 110, 'web', 'search'),
(10003, '2025-12-20', '2025-12-20 11:40:00', 'buy', 5019, '服饰鞋包', 0, 'web', 'detail'),
(10003, '2025-12-15', '2025-12-15 09:00:00', 'view', 5010, '服饰鞋包', 95, 'mobile', 'home'),
(10003, '2025-12-15', '2025-12-15 09:10:00', 'cart', 5010, '服饰鞋包', 0, 'mobile', 'detail'),
(10003, '2025-12-15', '2025-12-15 09:15:00', 'buy', 5010, '服饰鞋包', 0, 'mobile', 'detail'),
(10003, '2025-12-10', '2025-12-10 16:00:00', 'view', 5025, '美妆个护', 70, 'mobile', 'recommend'),
(10003, '2025-12-10', '2025-12-10 16:05:00', 'favorite', 5025, '美妆个护', 0, 'mobile', 'detail'),
(10003, '2025-12-05', '2025-12-05 10:30:00', 'view', 5012, '智能穿戴', 120, 'web', 'search'),
(10003, '2025-12-05', '2025-12-05 10:40:00', 'buy', 5012, '智能穿戴', 0, 'web', 'detail'),
-- ========== 用户10004(新活跃用户 - 最近刚注册活跃)==========
(10004, '2026-02-19', '2026-02-19 10:00:00', 'view', 5012, '智能穿戴', 150, 'mobile', 'home'),
(10004, '2026-02-19', '2026-02-19 10:05:00', 'cart', 5012, '智能穿戴', 0, 'mobile', 'detail'),
(10004, '2026-02-19', '2026-02-19 10:10:00', 'buy', 5012, '智能穿戴', 0, 'mobile', 'detail'),
(10004, '2026-02-18', '2026-02-18 15:00:00', 'view', 5013, '智能穿戴', 130, 'mobile', 'search'),
(10004, '2026-02-18', '2026-02-18 15:05:00', 'buy', 5013, '智能穿戴', 0, 'mobile', 'detail'),
(10004, '2026-02-17', '2026-02-17 12:00:00', 'view', 5014, '手机数码', 110, 'web', 'recommend'),
(10004, '2026-02-17', '2026-02-17 12:05:00', 'cart', 5014, '手机数码', 0, 'web', 'detail'),
(10004, '2026-02-17', '2026-02-17 12:10:00', 'buy', 5014, '手机数码', 0, 'web', 'detail'),
(10004, '2026-02-16', '2026-02-16 18:00:00', 'view', 5015, '手机数码', 95, 'mobile', 'home'),
(10004, '2026-02-16', '2026-02-16 18:05:00', 'buy', 5015, '手机数码', 0, 'mobile', 'detail'),
(10004, '2026-02-15', '2026-02-15 09:00:00', 'view', 5001, '手机数码', 140, 'mobile', 'search'),
(10004, '2026-02-15', '2026-02-15 09:10:00', 'favorite', 5001, '手机数码', 0, 'mobile', 'detail'),
(10004, '2026-02-14', '2026-02-14 14:00:00', 'view', 5002, '手机数码', 100, 'mobile', 'recommend'),
(10004, '2026-02-14', '2026-02-14 14:05:00', 'cart', 5002, '手机数码', 0, 'mobile', 'detail'),
(10004, '2026-02-14', '2026-02-14 14:10:00', 'buy', 5002, '手机数码', 0, 'mobile', 'detail'),
(10004, '2026-02-10', '2026-02-10 11:00:00', 'view', 5025, '美妆个护', 80, 'mobile', 'home'),
(10004, '2026-02-10', '2026-02-10 11:05:00', 'buy', 5025, '美妆个护', 0, 'mobile', 'detail'),
(10004, '2026-02-05', '2026-02-05 16:00:00', 'view', 5010, '服饰鞋包', 115, 'web', 'search'),
(10004, '2026-02-05', '2026-02-05 16:10:00', 'buy', 5010, '服饰鞋包', 0, 'web', 'detail'),
-- ========== 用户10005(稳定复购用户)==========
(10005, '2026-02-18', '2026-02-18 10:00:00', 'view', 5016, '家用电器', 180, 'mobile', 'home'),
(10005, '2026-02-18', '2026-02-18 10:10:00', 'cart', 5016, '家用电器', 0, 'mobile', 'detail'),
(10005, '2026-02-18', '2026-02-18 10:15:00', 'buy', 5016, '家用电器', 0, 'mobile', 'detail'),
(10005, '2026-02-15', '2026-02-15 14:00:00', 'view', 5017, '家用电器', 200, 'mobile', 'search'),
(10005, '2026-02-15', '2026-02-15 14:15:00', 'buy', 5017, '家用电器', 0, 'mobile', 'detail'),
(10005, '2026-02-10', '2026-02-10 16:00:00', 'view', 5018, '家用电器', 170, 'web', 'recommend'),
(10005, '2026-02-10', '2026-02-10 16:10:00', 'favorite', 5018, '家用电器', 0, 'web', 'detail'),
(10005, '2026-02-10', '2026-02-10 16:15:00', 'buy', 5018, '家用电器', 0, 'web', 'detail'),
(10005, '2026-02-05', '2026-02-05 11:00:00', 'view', 5009, '家用电器', 220, 'mobile', 'home'),
(10005, '2026-02-05', '2026-02-05 11:20:00', 'buy', 5009, '家用电器', 0, 'mobile', 'detail'),
(10005, '2026-01-28', '2026-01-28 10:00:00', 'view', 5024, '家用电器', 250, 'mobile', 'search'),
(10005, '2026-01-28', '2026-01-28 10:20:00', 'buy', 5024, '家用电器', 0, 'mobile', 'detail'),
(10005, '2026-01-20', '2026-01-20 14:00:00', 'view', 5006, '电脑办公', 190, 'mobile', 'recommend'),
(10005, '2026-01-20', '2026-01-20 14:15:00', 'cart', 5006, '电脑办公', 0, 'mobile', 'detail'),
(10005, '2026-01-20', '2026-01-20 14:20:00', 'buy', 5006, '电脑办公', 0, 'mobile', 'detail'),
(10005, '2026-01-15', '2026-01-15 09:00:00', 'view', 5020, '手机数码', 160, 'web', 'home'),
(10005, '2026-01-15', '2026-01-15 09:10:00', 'buy', 5020, '手机数码', 0, 'web', 'detail'),
(10005, '2026-01-08', '2026-01-08 10:00:00', 'view', 5021, '手机数码', 175, 'mobile', 'search'),
(10005, '2026-01-08', '2026-01-08 10:10:00', 'buy', 5021, '手机数码', 0, 'mobile', 'detail'),
-- ========== 用户10006(单次购买用户 - 低活跃)==========
(10006, '2026-01-10', '2026-01-10 11:00:00', 'view', 5019, '服饰鞋包', 120, 'mobile', 'home'),
(10006, '2026-01-10', '2026-01-10 11:05:00', 'cart', 5019, '服饰鞋包', 0, 'mobile', 'detail'),
(10006, '2026-01-10', '2026-01-10 11:10:00', 'buy', 5019, '服饰鞋包', 0, 'mobile', 'detail'),
(10006, '2026-01-05', '2026-01-05 14:00:00', 'view', 5010, '服饰鞋包', 90, 'mobile', 'search'),
(10006, '2026-01-05', '2026-01-05 14:05:00', 'favorite', 5010, '服饰鞋包', 0, 'mobile', 'detail'),
(10006, '2025-12-28', '2025-12-28 10:00:00', 'view', 5011, '服饰鞋包', 85, 'web', 'recommend'),
(10006, '2025-12-28', '2025-12-28 10:05:00', 'cart', 5011, '服饰鞋包', 0, 'web', 'detail'),
-- ========== 用户10007(VIP高价值用户 - 高频高消费)==========
(10007, '2026-02-19', '2026-02-19 09:00:00', 'view', 5020, '手机数码', 280, 'mobile', 'home'),
(10007, '2026-02-19', '2026-02-19 09:15:00', 'cart', 5020, '手机数码', 0, 'mobile', 'detail'),
(10007, '2026-02-19', '2026-02-19 09:20:00', 'buy', 5020, '手机数码', 0, 'mobile', 'detail'),
(10007, '2026-02-18', '2026-02-18 10:30:00', 'view', 5021, '手机数码', 260, 'mobile', 'search'),
(10007, '2026-02-18', '2026-02-18 10:45:00', 'buy', 5021, '手机数码', 0, 'mobile', 'detail'),
(10007, '2026-02-17', '2026-02-17 11:30:00', 'view', 5022, '电脑办公', 300, 'web', 'recommend'),
(10007, '2026-02-17', '2026-02-17 11:50:00', 'buy', 5022, '电脑办公', 0, 'web', 'detail'),
(10007, '2026-02-16', '2026-02-16 15:00:00', 'view', 5023, '手机数码', 240, 'mobile', 'home'),
(10007, '2026-02-16', '2026-02-16 15:15:00', 'favorite', 5023, '手机数码', 0, 'mobile', 'detail'),
(10007, '2026-02-16', '2026-02-16 15:20:00', 'buy', 5023, '手机数码', 0, 'mobile', 'detail'),
(10007, '2026-02-15', '2026-02-15 10:00:00', 'view', 5024, '家用电器', 320, 'mobile', 'search'),
(10007, '2026-02-15', '2026-02-15 10:25:00', 'buy', 5024, '家用电器', 0, 'mobile', 'detail'),
(10007, '2026-02-12', '2026-02-12 14:00:00', 'view', 5006, '电脑办公', 270, 'web', 'recommend'),
(10007, '2026-02-12', '2026-02-12 14:20:00', 'buy', 5006, '电脑办公', 0, 'web', 'detail'),
(10007, '2026-02-08', '2026-02-08 09:00:00', 'view', 5009, '家用电器', 290, 'mobile', 'home'),
(10007, '2026-02-08', '2026-02-08 09:20:00', 'cart', 5009, '家用电器', 0, 'mobile', 'detail'),
(10007, '2026-02-08', '2026-02-08 09:25:00', 'buy', 5009, '家用电器', 0, 'mobile', 'detail'),
(10007, '2026-02-05', '2026-02-05 11:00:00', 'view', 5007, '电脑办公', 250, 'mobile', 'search'),
(10007, '2026-02-05', '2026-02-05 11:15:00', 'buy', 5007, '电脑办公', 0, 'mobile', 'detail'),
(10007, '2026-02-01', '2026-02-01 10:00:00', 'view', 5008, '家居生活', 230, 'web', 'recommend'),
(10007, '2026-02-01', '2026-02-01 10:15:00', 'buy', 5008, '家居生活', 0, 'web', 'detail'),
(10007, '2026-01-28', '2026-01-28 14:00:00', 'view', 5016, '家用电器', 210, 'mobile', 'home'),
(10007, '2026-01-28', '2026-01-28 14:15:00', 'buy', 5016, '家用电器', 0, 'mobile', 'detail'),
(10007, '2026-01-25', '2026-01-25 09:00:00', 'view', 5017, '家用电器', 200, 'mobile', 'search'),
(10007, '2026-01-25', '2026-01-25 09:15:00', 'buy', 5017, '家用电器', 0, 'mobile', 'detail'),
(10007, '2026-01-20', '2026-01-20 10:00:00', 'view', 5018, '家用电器', 220, 'web', 'recommend'),
(10007, '2026-01-20', '2026-01-20 10:20:00', 'buy', 5018, '家用电器', 0, 'web', 'detail'),
(10007, '2026-01-15', '2026-01-15 15:00:00', 'view', 5001, '手机数码', 190, 'mobile', 'home'),
(10007, '2026-01-15', '2026-01-15 15:10:00', 'buy', 5001, '手机数码', 0, 'mobile', 'detail'),
-- ========== 用户10008(新用户 - 数据最新)==========
(10008, '2026-02-19', '2026-02-19 14:00:00', 'view', 5025, '美妆个护', 140, 'mobile', 'home'),
(10008, '2026-02-19', '2026-02-19 14:05:00', 'cart', 5025, '美妆个护', 0, 'mobile', 'detail'),
(10008, '2026-02-19', '2026-02-19 14:10:00', 'buy', 5025, '美妆个护', 0, 'mobile', 'detail'),
(10008, '2026-02-18', '2026-02-18 16:00:00', 'view', 5026, '美妆个护', 125, 'mobile', 'search'),
(10008, '2026-02-18', '2026-02-18 16:05:00', 'buy', 5026, '美妆个护', 0, 'mobile', 'detail'),
(10008, '2026-02-17', '2026-02-17 10:00:00', 'view', 5001, '手机数码', 160, 'mobile', 'recommend'),
(10008, '2026-02-17', '2026-02-17 10:10:00', 'favorite', 5001, '手机数码', 0, 'mobile', 'detail'),
(10008, '2026-02-16', '2026-02-16 11:00:00', 'view', 5002, '手机数码', 135, 'mobile', 'home'),
(10008, '2026-02-16', '2026-02-16 11:05:00', 'cart', 5002, '手机数码', 0, 'mobile', 'detail'),
(10008, '2026-02-16', '2026-02-16 11:10:00', 'buy', 5002, '手机数码', 0, 'mobile', 'detail'),
(10008, '2026-02-15', '2026-02-15 14:00:00', 'view', 5012, '智能穿戴', 150, 'web', 'search'),
(10008, '2026-02-15', '2026-02-15 14:10:00', 'buy', 5012, '智能穿戴', 0, 'web', 'detail'),
(10008, '2026-02-12', '2026-02-12 09:00:00', 'view', 5010, '服饰鞋包', 110, 'mobile', 'recommend'),
(10008, '2026-02-12', '2026-02-12 09:05:00', 'cart', 5010, '服饰鞋包', 0, 'mobile', 'detail'),
(10008, '2026-02-12', '2026-02-12 09:10:00', 'buy', 5010, '服饰鞋包', 0, 'mobile', 'detail'),
(10008, '2026-02-08', '2026-02-08 15:00:00', 'view', 5014, '手机数码', 130, 'mobile', 'home'),
(10008, '2026-02-08', '2026-02-08 15:05:00', 'buy', 5014, '手机数码', 0, 'mobile', 'detail'),
(10008, '2026-02-05', '2026-02-05 10:00:00', 'view', 5015, '手机数码', 105, 'web', 'search'),
(10008, '2026-02-05', '2026-02-05 10:05:00', 'favorite', 5015, '手机数码', 0, 'web', 'detail'),
(10008, '2026-02-05', '2026-02-05 10:10:00', 'buy', 5015, '手机数码', 0, 'web', 'detail');