圈层运营的基础是清晰、准确的用户数据。第一步是整合分散在各个渠道的用户行为数据,形成统一的用户画像。
在用户可能产生关键行为的地方(如页面浏览、按钮点击、功能使用、停留时长)部署数据采集代码(埋点)。推荐使用开源方案如Apache Flume或Sentry,其核心是确保每个用户行为事件都包含以下字段:
以下是关键页面(如商品详情页)的一个JavaScript埋点示例,可直接部署在页面HTML的标签内或通过标签管理系统加载:
// 数据上报函数
function trackEvent(eventName, properties) {
const eventData = {
distinct_id: window.userId || getDeviceId(), // 获取用户ID
event: eventName,
properties: {
...properties,
url: window.location.href,
referrer: document.referrer,
user_agent: navigator.userAgent,
timestamp: Date.now()
}
};
// 使用navigator.sendBeacon异步上报,确保页面关闭时数据不丢失
navigator.sendBeacon('https://your-data-api.com/track', JSON.stringify(eventData));
}
// 为“加入购物车”按钮绑定事件
document.getElementById('add-to-cart-btn').addEventListener('click', function() {
trackEvent('add_to_cart', {
product_id: 'P12345',
product_name: '智能手机X',
price: 2999,
category: '电子产品'
});
});
将上报的原始数据清洗后,存入数据仓库(如MySQL、ClickHouse)。创建核心用户行为事件表user_events,表结构如下:
CREATE TABLE user_events (
id BIGINT AUTO_INCREMENT PRIMARY KEY,
distinct_id VARCHAR(255) NOT NULL, -- 用户标识
event VARCHAR(100) NOT NULL, -- 事件名称
event_properties JSON, -- 事件属性,JSON格式存储
event_time DATETIME(3) NOT NULL, -- 事件时间,精确到毫秒
INDEX idx_user_time (distinct_id, event_time), -- 复合索引加速查询
INDEX idx_event (event)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
使用定时任务(如Linux crontab)每小时执行一次数据导入:
crontab -e
每小时的第5分钟执行数据同步脚本
5 /usr/bin/python3 /path/to/your/etl_script.py
etl_script.py核心部分:从数据接收API的临时存储(如Kafka或日志文件)中读取数据,清洗后批量插入数据库。
基于整合后的数据,定义具体的圈层规则,并通过SQL或计算引擎自动将用户归入不同圈层。
标签是圈层的基础。根据业务目标创建原子标签,例如:

在数据表基础上,通过SQL视图或物化视图动态计算每个用户的标签和所属圈层。以下SQL示例每天运行,将结果写入user_segments表:
-- 创建或更新用户圈层结果表
REPLACE INTO user_segments (distinct_id, segment_name, calculated_at)
WITH user_stats AS (
SELECT
distinct_id,
-- 计算近30天消费总额
SUM(CASE WHEN event = 'order_paid' THEN CAST(JSON_EXTRACT(event_properties, '$.amount') AS DECIMAL(10,2)) ELSE 0 END) AS last_30d_payment,
-- 计算近7天内容消费次数
COUNT(CASE WHEN event = 'content_view' AND event_time > DATE_SUB(NOW(), INTERVAL 7 DAY) THEN 1 END) AS last_7d_content_views,
-- 判断是否为7天内新用户
MAX(CASE WHEN event = 'user_signup' AND event_time > DATE_SUB(NOW(), INTERVAL 7 DAY) THEN 1 ELSE 0 END) AS is_new_user,
-- 判断最近14天是否有活跃行为
MAX(CASE WHEN event IN ('app_launch', 'page_view') AND event_time > DATE_SUB(NOW(), INTERVAL 14 DAY) THEN 1 ELSE 0 END) AS recent_active
FROM user_events
WHERE event_time > DATE_SUB(NOW(), INTERVAL 30 DAY) -- 只处理近30天数据提升性能
GROUP BY distinct_id
)
SELECT
distinct_id,
CASE
WHEN last_30d_payment >= 5000 THEN '高价值用户'
WHEN last_7d_content_views >= 10 THEN '活跃内容消费者'
WHEN is_new_user = 1 THEN '新注册用户'
WHEN recent_active = 0 THEN '流失风险用户'
ELSE '普通用户'
END AS segment_name,
NOW() AS calculated_at
FROM user_stats;
将此SQL保存为文件update_segments.sql,并通过crontab每日凌晨1点执行:
crontab -e
每天凌晨1点更新用户圈层
0 1 /usr/bin/mysql -u your_db_user -p'your_db_password' your_database < /path/to/update_segments.sql
圈层划分完成后,需要将用户分群结果对接至触达通道(如推送、短信、站内信),并监控触达效果。
以向“流失风险用户”推送优惠券召回为例。创建一个脚本trigger_coupon_push.py,该脚本:
user_segments表中读取今天被标记为“流失风险用户”的列表。
import pymysql
import requests
import json
1. 从数据库获取目标用户
db = pymysql.connect(host='localhost', user='your_user', password='your_pwd', database='your_db')
cursor = db.cursor()
sql = """
SELECT distinct_id FROM user_segments
WHERE segment_name = '流失风险用户'
AND DATE(calculated_at) = CURDATE() -- 只取今天最新计算的用户
"""
cursor.execute(sql)
users_at_risk = [row[0] for row in cursor.fetchall()]
cursor.close()
db.close()
2. 调用推送API(以JPush为例)
if users_at_risk:
push_url = "https://api.jpush.cn/v3/push"
headers = {
'Authorization': 'Basic your_base64_encoded_app_key_and_master_secret',
'Content-Type': 'application/json'
}
为每个用户或按批次构造推送内容
payload = {
"platform": "all",
"audience": {"alias": users_at_risk[:1000]}, JPush alias限制一次最多1000个,可分批
"notification": {
"alert": "我们想您了!为您准备了一张专属8折优惠券,回来看看吧~",
"android": {},
"ios": {}
},
"options": {"apns_production": False} 开发环境设为False,生产环境设为True
}
response = requests.post(push_url, headers=headers, data=json.dumps(payload))
print(f"推送结果: {response.status_code}, {response.text}")
同样,通过crontab设置每日上午10点执行此脚本:0 10 /usr/bin/python3 /path/to/trigger_coupon_push.py
为评估圈层触达效果,必须在推送链接或活动中植入追踪参数。例如,在推送消息的链接后添加UTM参数:https://yourdomain.com/coupon?utm_source=push&utm_medium=notification&utm_campaign=reactivate_risk_users。
在user_events埋点中,捕获用户通过此链接产生的后续行为(如coupon_claim领券、order_paid下单)。通过以下SQL分析该圈层运营活动的转化率:
SELECT
COUNT(DISTINCT ue.distinct_id) AS pushed_users, -- 被推送的用户数
COUNT(DISTINCT CASE WHEN ue2.event = 'coupon_claim' THEN ue2.distinct_id END) AS claimed_users, -- 领券用户数
COUNT(DISTINCT CASE WHEN ue2.event = 'order_paid' THEN ue2.distinct_id END) AS paid_users, -- 下单用户数
ROUND(COUNT(DISTINCT CASE WHEN ue2.event = 'order_paid' THEN ue2.distinct_id END) 100.0 / COUNT(DISTINCT ue.distinct_id), 2) AS conversion_rate -- 转化率
FROM user_events ue
LEFT JOIN user_events ue2 ON ue.distinct_id = ue2.distinct_id
AND ue2.event_time > ue.event_time
AND ue2.event_time < DATE_ADD(ue.event_time, INTERVAL 7 DAY) -- 追踪推送后7天内的行为
WHERE ue.event = 'push_received' -- 假设有推送接收事件
AND JSON_EXTRACT(ue.event_properties, '$.campaign') = 'reactivate_risk_users'
AND ue.event_time > '2023-10-01 00:00:00' -- 指定活动开始时间
将此分析SQL也配置为定时任务,每周生成效果报告,用于评估圈层策略的有效性并指导优化。
易频IT社区是综合性互联网IT技术门户网站,专注分享网络技术、服务器运维、网络安全、编程开发、系统架构、云计算、大数据等行业干货,实时更新IT行业资讯、零基础教程、实战案例,为IT从业者、技术爱好者提供专业的学习交流平台。
Copyright © 2021-2026 易频IT社区. All Rights Reserved. 备案号:闽ICP备2023013482号 网站地图