跳转至

用户行为分析

⚠️ 时效性说明:本章涉及前沿模型/价格/榜单等信息,可能随版本快速变化;请以论文原文、官方发布页和 API 文档为准。

用户行为分析

📖 章节导读

用户行为数据是推荐系统的核心输入,深入理解用户行为是构建高质量推荐系统的基础。本章将介绍用户行为的类型、数据采集方法、用户画像构建和行为特征工程技术。

🎯 学习目标

  • 理解用户行为的类型和特点
  • 掌握用户行为数据的采集方法
  • 学会构建用户画像
  • 掌握行为特征工程技术
  • 能够进行用户行为分析实践

2.1 用户行为类型

2.1.1 显式行为(Explicit Feedback)

定义:用户主动表达对物品的偏好或评价

常见类型: 1. 评分(Rating):用户给物品打分(1-5星) - 特点:信息明确,但数据稀疏 - 应用:电影、商品、餐厅评分

  1. 评论(Review):用户对物品的文字评价
  2. 特点:信息丰富,需要文本分析
  3. 应用:商品评论、影评、餐厅评价

  4. 点赞/踩(Like/Dislike):用户表达喜欢或不喜欢

  5. 特点:简单直接,易于收集
  6. 应用:社交媒体、短视频

  7. 收藏(Favorite):用户收藏感兴趣的物品

  8. 特点:表示较强兴趣
  9. 应用:文章、商品、视频

  10. 分享(Share):用户分享物品给他人

  11. 特点:表示认可和推荐意愿
  12. 应用:社交媒体、新闻

优势: - 信息明确,易于理解 - 可以直接反映用户偏好 - 适合作为训练标签

劣势: - 数据稀疏,大部分用户很少主动评价 - 评价标准不一致 - 容易受情绪影响

2.1.2 隐式行为(Implicit Feedback)

定义:用户在自然使用过程中产生的行为数据

常见类型: 1. 点击(Click):用户点击物品 - 特点:数据量大,但点击不一定代表喜欢 - 应用:搜索结果、推荐列表

  1. 浏览(View):用户浏览物品详情
  2. 特点:浏览时长和深度可以反映兴趣
  3. 应用:商品详情页、文章阅读

  4. 购买(Purchase):用户购买物品

  5. 特点:最强的偏好信号
  6. 应用:电商

  7. 播放(Play):用户播放视频或音频

  8. 特点:播放时长和完成率很重要
  9. 应用:视频、音乐平台

  10. 搜索(Search):用户搜索关键词

  11. 特点:反映当前需求
  12. 应用:电商、内容平台

  13. 停留时长(Dwell Time):用户在页面停留的时间

  14. 特点:时长越长,兴趣可能越大
  15. 应用:所有类型应用

优势: - 数据丰富,易于收集 - 反映真实用户行为 - 数据量大,适合训练

劣势: - 噪声多,需要过滤 - 行为含义不明确 - 需要推断用户意图

2.1.3 行为权重设计

不同行为反映的用户偏好程度不同,需要设计合理的权重:

Text Only
行为权重示例:
购买    > 收藏    > 分享    > 评论    > 点赞    > 浏览    > 点击
1.0       0.8      0.7      0.6      0.5      0.3      0.1

权重设计原则: 1. 行为成本越高,权重越大:购买 > 浏览 2. 行为越主动,权重越大:评论 > 点击 3. 结合业务场景:根据业务特点调整

计算公式:

Python
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 数据采集系统架构

Text Only
┌─────────────────────────────────────────────────────────┐
│                     客户端应用                           │
│  (Web、App、小程序、智能硬件)                            │
└─────────────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────────────┐
│                     埋点SDK                              │
│  (事件上报、数据缓存、网络请求)                           │
└─────────────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────────────┐
│                     网关服务                             │
│  (负载均衡、流量控制、数据校验)                           │
└─────────────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────────────┐
│                     消息队列                             │
│  (Kafka、Pulsar、RocketMQ)                              │
└─────────────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────────────┐
│                     数据处理服务                          │
│  (数据清洗、数据转换、数据存储)                           │
└─────────────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────────────┐
│                     数据存储                             │
│  (HDFS、HBase、Elasticsearch、MySQL)                     │
└─────────────────────────────────────────────────────────┘

2.2.2 埋点设计

埋点原则: 1. 全面性:覆盖所有关键用户行为 2. 准确性:确保数据准确无误 3. 完整性:不遗漏重要信息 4. 可扩展性:便于后续新增埋点

埋点事件设计:

JSON
{
  "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. 标准化:统一数据格式

数据校验:

Python
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"、"科幻片")

标签权重:

Python
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. 基于规则的方法

示例规则:

Python
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聚类:发现任意形状的簇

分类算法: - 逻辑回归:预测用户类别 - 随机森林:多标签分类 - 深度学习:端到端画像构建

示例:

Python
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. 增量更新:只更新变化的部分

时间衰减:

Python
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 统计特征

用户统计特征:

Python
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

物品统计特征:

Python
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 序列特征

行为序列: - 用户行为的时间序列 - 物品访问序列 - 搜索关键词序列

序列特征提取:

Python
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 上下文特征

时间特征:

Python
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 交叉特征

用户-物品交叉特征:

Python
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. 分析洞察:分析用户行为模式,发现商业机会

代码示例:

Python
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. 验证推荐效果

代码示例:

Python
# 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))

📝 本章小结

本章介绍了用户行为分析的各个方面,包括:

  1. ✅ 用户行为的类型和特点
  2. ✅ 用户行为数据的采集方法
  3. ✅ 用户画像构建技术
  4. ✅ 行为特征工程技术
  5. ✅ 实战案例分析

通过本章学习,你应该能够: - 理解显式和隐式行为的区别 - 设计合理的埋点方案 - 构建高质量的用户画像 - 提取有效的行为特征 - 进行用户行为分析实践

🔗 下一步

下一章我们将深入学习协同过滤算法,这是推荐系统中最经典和最常用的算法之一。

继续学习: 03-协同过滤算法.md

💡 思考题

  1. 显式行为和隐式行为各有什么优缺点?如何结合使用?

    显式(评分/收藏):意图明确但稀疏(<1%用户会评分)。隐式(点击/浏览/停留):数据丰富但噪声大(点击≠喜欢)。结合:隐式行为作主信号,显式行为作高置信度信号,按行为类型赋权(a×点击 + b×收藏 + c×购买)。

  2. 如何设计合理的埋点方案?

    分层埋点:①全埋点(自动采集所有点击/曝光) ②业务埋点(关键事件:加购/下单/支付) ③可视埋点(作品曝光时间/滑动深度)。关键字段:用户ID、物品ID、事件类型、时间戳、背景信息(设备/位置/网络)。工具:神策/GrowingIO全埋点 + 自定义事件。

  3. 用户画像应该包含哪些维度?如何构建?

    维度:①基础属性(年龄/性别/地域) ②行为偏好(类目偏好/活跃时段/价格敏感度) ③生命周期(新用户/活跃/流失风险) ④社交关系(影响力/圈层)。构建:实时特征(流式计算)+离线特征(批处理统计)+模型特征(Embedding)。存储:Redis(实时)+Hive(离线)。

  4. 如何评估用户画像的质量?

    ①覆盖率(画像字段非空比例) ②准确率(抽样人工核验/别从功能交叉验证) ③业务指标关联(画像更新后CTR是否提升) ④时效性(画像更新频率是否足够) ⑤区分度(不同用户群的画像差异是否显著)。

  5. 行为特征工程中有哪些常用的技术?

    ①统计特征(点击次数/播放时长/购买频率) ②时序特征(最近1/7/30天行为统计) ③交叉特征(用户×类目点击率) ④序列特征(最近N次点击序列→Transformer编码) ⑤图特征(用户-物品二部图→Node2Vec/GNN) ⑥Target Attention(候选物品与历史行为的注意力,如DIN)。

📚 参考资料

  1. 《Recommender Systems Handbook》- Chapter 2
  2. 《推荐系统实践》- 第2章
  3. 《数据挖掘:概念与技术》- 第8章
  4. Google Analytics Documentation
  5. Mixpanel Documentation