用户行为分析¶
⚠️ 时效性说明:本章涉及前沿模型/价格/榜单等信息,可能随版本快速变化;请以论文原文、官方发布页和 API 文档为准。
📖 章节导读¶
用户行为数据是推荐系统的核心输入,深入理解用户行为是构建高质量推荐系统的基础。本章将介绍用户行为的类型、数据采集方法、用户画像构建和行为特征工程技术。
🎯 学习目标¶
- 理解用户行为的类型和特点
- 掌握用户行为数据的采集方法
- 学会构建用户画像
- 掌握行为特征工程技术
- 能够进行用户行为分析实践
2.1 用户行为类型¶
2.1.1 显式行为(Explicit Feedback)¶
定义:用户主动表达对物品的偏好或评价
常见类型: 1. 评分(Rating):用户给物品打分(1-5星) - 特点:信息明确,但数据稀疏 - 应用:电影、商品、餐厅评分
- 评论(Review):用户对物品的文字评价
- 特点:信息丰富,需要文本分析
-
应用:商品评论、影评、餐厅评价
-
点赞/踩(Like/Dislike):用户表达喜欢或不喜欢
- 特点:简单直接,易于收集
-
应用:社交媒体、短视频
-
收藏(Favorite):用户收藏感兴趣的物品
- 特点:表示较强兴趣
-
应用:文章、商品、视频
-
分享(Share):用户分享物品给他人
- 特点:表示认可和推荐意愿
- 应用:社交媒体、新闻
优势: - 信息明确,易于理解 - 可以直接反映用户偏好 - 适合作为训练标签
劣势: - 数据稀疏,大部分用户很少主动评价 - 评价标准不一致 - 容易受情绪影响
2.1.2 隐式行为(Implicit Feedback)¶
定义:用户在自然使用过程中产生的行为数据
常见类型: 1. 点击(Click):用户点击物品 - 特点:数据量大,但点击不一定代表喜欢 - 应用:搜索结果、推荐列表
- 浏览(View):用户浏览物品详情
- 特点:浏览时长和深度可以反映兴趣
-
应用:商品详情页、文章阅读
-
购买(Purchase):用户购买物品
- 特点:最强的偏好信号
-
应用:电商
-
播放(Play):用户播放视频或音频
- 特点:播放时长和完成率很重要
-
应用:视频、音乐平台
-
搜索(Search):用户搜索关键词
- 特点:反映当前需求
-
应用:电商、内容平台
-
停留时长(Dwell Time):用户在页面停留的时间
- 特点:时长越长,兴趣可能越大
- 应用:所有类型应用
优势: - 数据丰富,易于收集 - 反映真实用户行为 - 数据量大,适合训练
劣势: - 噪声多,需要过滤 - 行为含义不明确 - 需要推断用户意图
2.1.3 行为权重设计¶
不同行为反映的用户偏好程度不同,需要设计合理的权重:
权重设计原则: 1. 行为成本越高,权重越大:购买 > 浏览 2. 行为越主动,权重越大:评论 > 点击 3. 结合业务场景:根据业务特点调整
计算公式:
def calculate_behavior_score(behaviors):
"""
计算用户对物品的行为得分
"""
weights = {
'purchase': 1.0,
'favorite': 0.8,
'share': 0.7,
'review': 0.6,
'like': 0.5,
'view': 0.3,
'click': 0.1
}
score = 0
for behavior in behaviors:
score += weights.get(behavior['type'], 0)
return score
2.2 用户行为数据采集¶
2.2.1 数据采集系统架构¶
┌─────────────────────────────────────────────────────────┐
│ 客户端应用 │
│ (Web、App、小程序、智能硬件) │
└─────────────────────────────────────────────────────────┘
↓
┌─────────────────────────────────────────────────────────┐
│ 埋点SDK │
│ (事件上报、数据缓存、网络请求) │
└─────────────────────────────────────────────────────────┘
↓
┌─────────────────────────────────────────────────────────┐
│ 网关服务 │
│ (负载均衡、流量控制、数据校验) │
└─────────────────────────────────────────────────────────┘
↓
┌─────────────────────────────────────────────────────────┐
│ 消息队列 │
│ (Kafka、Pulsar、RocketMQ) │
└─────────────────────────────────────────────────────────┘
↓
┌─────────────────────────────────────────────────────────┐
│ 数据处理服务 │
│ (数据清洗、数据转换、数据存储) │
└─────────────────────────────────────────────────────────┘
↓
┌─────────────────────────────────────────────────────────┐
│ 数据存储 │
│ (HDFS、HBase、Elasticsearch、MySQL) │
└─────────────────────────────────────────────────────────┘
2.2.2 埋点设计¶
埋点原则: 1. 全面性:覆盖所有关键用户行为 2. 准确性:确保数据准确无误 3. 完整性:不遗漏重要信息 4. 可扩展性:便于后续新增埋点
埋点事件设计:
{
"event_id": "click_item",
"timestamp": 1634567890123,
"user_id": "user_12345",
"session_id": "session_67890",
"device_id": "device_abc",
"app_version": "1.0.0",
"platform": "ios",
"network_type": "wifi",
"location": {
"city": "北京",
"province": "北京市"
},
"event_data": {
"item_id": "item_001",
"item_type": "product",
"item_category": "electronics",
"position": 5,
"page": "home",
"referral": "recommendation"
}
}
必埋字段: - event_id:事件ID - timestamp:时间戳 - user_id:用户ID - session_id:会话ID - device_id:设备ID - event_data:事件具体数据
可选字段: - app_version:应用版本 - platform:平台信息 - network_type:网络类型 - location:地理位置
2.2.3 数据质量保证¶
数据清洗: 1. 去重:去除重复数据 2. 过滤:过滤无效数据 3. 补全:补全缺失字段 4. 标准化:统一数据格式
数据校验:
def validate_event(event):
"""
校验埋点数据
"""
# 必填字段检查
required_fields = ['event_id', 'timestamp', 'user_id', 'event_data']
for field in required_fields:
if field not in event:
return False, f"Missing required field: {field}"
# 时间戳检查
if event['timestamp'] > time.time() * 1000:
return False, "Invalid timestamp"
# 用户ID检查
if not event['user_id']:
return False, "Invalid user_id"
return True, "Valid"
异常检测: - 流量异常:突然的流量激增或下降 - 行为异常:异常的用户行为模式 - 数据异常:格式错误、缺失值
2.3 用户画像构建¶
2.3.1 用户画像概述¶
定义:用户画像(User Profile)是对用户特征的结构化描述,包括用户的基本属性、行为偏好、兴趣标签等信息。
作用: 1. 个性化推荐:根据用户画像推荐相关物品 2. 用户分群:将用户分成不同群体,进行精准营销 3. 产品优化:了解用户特征,优化产品设计 4. 商业分析:支持商业决策
2.3.2 用户画像维度¶
1. 基础属性维度¶
人口统计学特征: - 年龄:18-24、25-34、35-44、45-54、55+ - 性别:男、女、未知 - 地域:城市、省份、国家 - 职业:学生、白领、自由职业等 - 收入:低、中、高 - 学历:高中、本科、硕士、博士
设备特征: - 设备类型:手机、平板、电脑 - 操作系统:iOS、Android、Windows - 设备品牌:Apple、华为、小米等 - 网络类型:WiFi、4G、5G
2. 行为偏好维度¶
活跃度: - 日活跃天数 - 周活跃天数 - 月活跃天数 - 平均在线时长
消费能力: - 历史消费金额 - 消费频次 - 平均客单价 - 消费品类偏好
内容偏好: - 喜欢的类别 - 偏好的价格区间 - 偏好的品牌 - 偏好的风格
3. 兴趣标签维度¶
标签来源: - 用户自填:注册时填写的兴趣 - 行为推断:根据行为推断兴趣 - 社交关系:好友的兴趣 - 内容分析:浏览内容的主题
标签类型: - 一级标签:大类(如"科技"、"娱乐") - 二级标签:中类(如"手机"、"电影") - 三级标签:小类(如"iPhone"、"科幻片")
标签权重:
def calculate_tag_weight(user_behaviors, tag):
"""
计算标签权重
"""
weight = 0
for behavior in user_behaviors:
if tag in behavior['tags']:
weight += behavior['score'] * behavior['time_decay']
return weight
2.3.3 用户画像构建方法¶
1. 基于规则的方法¶
示例规则:
def build_user_profile_rules(user):
"""
基于规则构建用户画像
"""
profile = {}
# 年龄段
if user['age'] < 25:
profile['age_group'] = '18-24'
elif user['age'] < 35:
profile['age_group'] = '25-34'
else:
profile['age_group'] = '35+'
# 消费能力
total_spend = sum(b['amount'] for b in user['purchases'])
if total_spend < 1000:
profile['spend_level'] = 'low'
elif total_spend < 5000:
profile['spend_level'] = 'medium'
else:
profile['spend_level'] = 'high'
# 活跃度
active_days = len(set(b['date'] for b in user['behaviors']))
if active_days > 20:
profile['activity'] = 'high'
elif active_days > 10:
profile['activity'] = 'medium'
else:
profile['activity'] = 'low'
return profile
2. 基于机器学习的方法¶
聚类算法: - K-Means聚类:将用户分成K个群体 - 层次聚类:构建用户层次结构 - DBSCAN聚类:发现任意形状的簇
分类算法: - 逻辑回归:预测用户类别 - 随机森林:多标签分类 - 深度学习:端到端画像构建
示例:
from sklearn.cluster import KMeans
from sklearn.preprocessing import StandardScaler
def build_user_profile_ml(users):
"""
基于机器学习构建用户画像
"""
# 特征提取
features = extract_user_features(users)
# 特征标准化
scaler = StandardScaler()
features_scaled = scaler.fit_transform(features)
# 聚类
kmeans = KMeans(n_clusters=5, random_state=42)
clusters = kmeans.fit_predict(features_scaled)
# 构建画像
profiles = []
for i, user in enumerate(users): # enumerate同时获取索引和元素
profile = {
'user_id': user['user_id'],
'cluster': clusters[i],
'features': features[i]
}
profiles.append(profile)
return profiles
3. 基于深度学习的方法¶
Embedding方法: - 用户Embedding:将用户映射到低维向量空间 - 物品Embedding:将物品映射到低维向量空间 - 相似用户:通过向量相似度找相似用户
序列模型: - RNN/LSTM:建模用户行为序列 - Transformer:捕捉长距离依赖 - BERT4Rec:基于BERT的序列推荐
2.3.4 用户画像更新¶
更新策略: 1. 实时更新:用户行为发生后立即更新 2. 批量更新:定期批量更新用户画像 3. 增量更新:只更新变化的部分
时间衰减:
def time_decay(timestamp, current_time, decay_rate=0.1):
"""
时间衰减函数
"""
time_diff = (current_time - timestamp) / (24 * 3600) # 天数
return math.exp(-decay_rate * time_diff)
画像版本管理: - 保留历史版本 - 支持画像回滚 - 画像变更追踪
2.4 行为特征工程¶
2.4.1 统计特征¶
用户统计特征:
def extract_user_statistics(user_behaviors):
"""
提取用户统计特征
"""
stats = {}
# 点击次数
stats['click_count'] = len([b for b in user_behaviors if b['type'] == 'click'])
# 购买次数
stats['purchase_count'] = len([b for b in user_behaviors if b['type'] == 'purchase'])
# 平均停留时长
view_behaviors = [b for b in user_behaviors if b['type'] == 'view']
stats['avg_dwell_time'] = np.mean([b['duration'] for b in view_behaviors])
# 活跃天数
stats['active_days'] = len(set(b['date'] for b in user_behaviors))
# 消费金额
purchase_behaviors = [b for b in user_behaviors if b['type'] == 'purchase']
stats['total_spend'] = sum(b['amount'] for b in purchase_behaviors)
return stats
物品统计特征:
def extract_item_statistics(item_behaviors):
"""
提取物品统计特征
"""
stats = {}
# 点击率
stats['click_rate'] = len([b for b in item_behaviors if b['type'] == 'click']) / len(item_behaviors)
# 转化率
stats['conversion_rate'] = len([b for b in item_behaviors if b['type'] == 'purchase']) / len(item_behaviors)
# 平均评分
ratings = [b['rating'] for b in item_behaviors if b['type'] == 'rating']
stats['avg_rating'] = np.mean(ratings) if ratings else 0
# 热度
stats['popularity'] = len(item_behaviors)
return stats
2.4.2 序列特征¶
行为序列: - 用户行为的时间序列 - 物品访问序列 - 搜索关键词序列
序列特征提取:
def extract_sequence_features(user_behaviors):
"""
提取序列特征
"""
features = {}
# 按时间排序
behaviors = sorted(user_behaviors, key=lambda x: x['timestamp']) # lambda匿名函数
# 最后N次行为
features['last_5_items'] = [b['item_id'] for b in behaviors[-5:]]
features['last_5_categories'] = [b['category'] for b in behaviors[-5:]]
# 行为间隔
intervals = []
for i in range(1, len(behaviors)):
interval = behaviors[i]['timestamp'] - behaviors[i-1]['timestamp']
intervals.append(interval)
features['avg_interval'] = np.mean(intervals)
# 行为模式
features['behavior_pattern'] = extract_behavior_pattern(behaviors)
return features
2.4.3 上下文特征¶
时间特征:
def extract_time_features(timestamp):
"""
提取时间特征
"""
dt = datetime.fromtimestamp(timestamp)
features = {
'hour': dt.hour,
'day_of_week': dt.weekday(),
'day_of_month': dt.day,
'month': dt.month,
'is_weekend': 1 if dt.weekday() >= 5 else 0,
'is_holiday': check_holiday(dt)
}
return features
地理位置特征: - 城市、省份、国家 - 气候信息 - 经济水平
设备特征: - 设备类型、操作系统 - 网络类型 - 屏幕分辨率
2.4.4 交叉特征¶
用户-物品交叉特征:
def extract_user_item_features(user, item):
"""
提取用户-物品交叉特征
"""
features = {}
# 用户偏好与物品类别的匹配度
user_categories = user['preferred_categories']
item_category = item['category']
features['category_match'] = 1 if item_category in user_categories else 0
# 用户消费能力与物品价格的匹配度
user_spend_level = user['spend_level']
item_price = item['price']
features['price_match'] = check_price_match(user_spend_level, item_price)
# 用户地域与物品地域的匹配度
user_location = user['location']
item_location = item['location']
features['location_match'] = calculate_location_similarity(user_location, item_location)
return features
用户-上下文交叉特征: - 用户活跃时段与当前时间 - 用户常用设备与当前设备 - 用户常用地点与当前地点
2.5 实战案例¶
案例1:电商用户行为分析¶
目标:分析电商用户的购买行为,构建用户画像
步骤: 1. 数据采集:采集用户的浏览、点击、购买行为 2. 数据清洗:去除异常数据,补全缺失值 3. 特征提取:提取用户统计特征、序列特征 4. 画像构建:基于规则和机器学习构建用户画像 5. 分析洞察:分析用户行为模式,发现商业机会
代码示例:
import pandas as pd
import numpy as np
from sklearn.cluster import KMeans
from sklearn.preprocessing import StandardScaler
# 1. 加载数据
behaviors = pd.read_csv('user_behaviors.csv')
# 2. 数据清洗
behaviors = behaviors.dropna()
behaviors = behaviors[behaviors['amount'] > 0]
# 3. 特征提取
def extract_features(user_behaviors):
features = {
'total_spend': user_behaviors['amount'].sum(),
'purchase_count': len(user_behaviors),
'avg_price': user_behaviors['amount'].mean(),
'category_diversity': user_behaviors['category'].nunique(),
'active_days': user_behaviors['date'].nunique()
}
return features
user_features = behaviors.groupby('user_id').apply(extract_features).apply(pd.Series)
# 4. 用户聚类
scaler = StandardScaler()
features_scaled = scaler.fit_transform(user_features)
kmeans = KMeans(n_clusters=5, random_state=42)
clusters = kmeans.fit_predict(features_scaled)
user_features['cluster'] = clusters
# 5. 分析结果
for cluster in range(5):
cluster_users = user_features[user_features['cluster'] == cluster]
print(f"Cluster {cluster}:")
print(cluster_users.describe())
案例2:短视频用户兴趣分析¶
目标:分析短视频用户的兴趣偏好,优化推荐效果
步骤: 1. 采集用户的观看、点赞、分享行为 2. 提取视频内容特征(类别、标签、主题) 3. 分析用户对不同类型视频的偏好 4. 构建用户兴趣标签 5. 验证推荐效果
代码示例:
# 1. 加载数据
behaviors = pd.read_csv('video_behaviors.csv')
videos = pd.read_csv('video_info.csv')
# 2. 合并数据
data = behaviors.merge(videos, on='video_id')
# 3. 计算用户对不同类别的偏好
def calculate_category_preference(user_data):
category_scores = {}
for _, row in user_data.iterrows():
category = row['category']
score = get_behavior_score(row['behavior_type'])
category_scores[category] = category_scores.get(category, 0) + score
# 归一化
total = sum(category_scores.values())
if total > 0:
category_scores = {k: v/total for k, v in category_scores.items()}
return category_scores
user_preferences = data.groupby('user_id').apply(calculate_category_preference)
# 4. 提取Top兴趣标签
def extract_top_interests(user_prefs, top_k=5):
sorted_prefs = sorted(user_prefs.items(), key=lambda x: x[1], reverse=True)
return [tag for tag, score in sorted_prefs[:top_k]]
user_interests = user_preferences.apply(extract_top_interests)
# 5. 分析结果
print("用户兴趣分布:")
print(user_interests.head(10))
📝 本章小结¶
本章介绍了用户行为分析的各个方面,包括:
- ✅ 用户行为的类型和特点
- ✅ 用户行为数据的采集方法
- ✅ 用户画像构建技术
- ✅ 行为特征工程技术
- ✅ 实战案例分析
通过本章学习,你应该能够: - 理解显式和隐式行为的区别 - 设计合理的埋点方案 - 构建高质量的用户画像 - 提取有效的行为特征 - 进行用户行为分析实践
🔗 下一步¶
下一章我们将深入学习协同过滤算法,这是推荐系统中最经典和最常用的算法之一。
继续学习: 03-协同过滤算法.md
💡 思考题¶
-
显式行为和隐式行为各有什么优缺点?如何结合使用?
显式(评分/收藏):意图明确但稀疏(<1%用户会评分)。隐式(点击/浏览/停留):数据丰富但噪声大(点击≠喜欢)。结合:隐式行为作主信号,显式行为作高置信度信号,按行为类型赋权(a×点击 + b×收藏 + c×购买)。
-
如何设计合理的埋点方案?
分层埋点:①全埋点(自动采集所有点击/曝光) ②业务埋点(关键事件:加购/下单/支付) ③可视埋点(作品曝光时间/滑动深度)。关键字段:用户ID、物品ID、事件类型、时间戳、背景信息(设备/位置/网络)。工具:神策/GrowingIO全埋点 + 自定义事件。
-
用户画像应该包含哪些维度?如何构建?
维度:①基础属性(年龄/性别/地域) ②行为偏好(类目偏好/活跃时段/价格敏感度) ③生命周期(新用户/活跃/流失风险) ④社交关系(影响力/圈层)。构建:实时特征(流式计算)+离线特征(批处理统计)+模型特征(Embedding)。存储:Redis(实时)+Hive(离线)。
-
如何评估用户画像的质量?
①覆盖率(画像字段非空比例) ②准确率(抽样人工核验/别从功能交叉验证) ③业务指标关联(画像更新后CTR是否提升) ④时效性(画像更新频率是否足够) ⑤区分度(不同用户群的画像差异是否显著)。
-
行为特征工程中有哪些常用的技术?
①统计特征(点击次数/播放时长/购买频率) ②时序特征(最近1/7/30天行为统计) ③交叉特征(用户×类目点击率) ④序列特征(最近N次点击序列→Transformer编码) ⑤图特征(用户-物品二部图→Node2Vec/GNN) ⑥Target Attention(候选物品与历史行为的注意力,如DIN)。
📚 参考资料¶
- 《Recommender Systems Handbook》- Chapter 2
- 《推荐系统实践》- 第2章
- 《数据挖掘:概念与技术》- 第8章
- Google Analytics Documentation
- Mixpanel Documentation
