1. 项目背景与核心价值
在线教育平台用户行为分析一直是数据科学领域的经典应用场景。B站作为国内领先的视频学习平台,其用户学习行为数据蕴含着巨大的分析价值。去年我在为某教育机构优化在线课程时,发现传统的数据统计方法(如UV/PV分析)已经无法满足精细化运营的需求。通过Python+机器学习的组合,我们成功构建了一套能预测用户流失、识别高价值学习路径的分析系统,最终将课程完课率提升了37%。
这个项目的独特之处在于:B站的用户行为数据既有视频平台的共性(如播放、点赞、收藏),又具备学习场景的特性(如反复观看、弹幕提问、笔记记录)。传统电商领域的用户行为分析模型在这里往往水土不服,需要针对学习场景重新设计特征工程和算法选择。
2. 数据采集与预处理实战
2.1 合规数据获取方案
由于B站官方API对历史行为数据获取有限制,我们采用两种合规数据源:
- 通过B站开放平台申请的教育类API权限(需企业资质)
- 用户授权后的个人行为数据采集(需严格脱敏处理)
关键代码示例(使用requests获取公开数据):
python复制import requests
def get_video_stat(bvid):
url = f"https://api.bilibili.com/x/web-interface/view?bvid={bvid}"
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64)"
}
response = requests.get(url, headers=headers)
return response.json()['data']
2.2 行为数据特征工程
原始行为日志需要转化为机器学习可用的特征矩阵。我们对每个用户构建以下维度的特征:
| 特征类别 | 具体特征示例 | 计算方式 |
|---|---|---|
| 活跃度特征 | 周均学习时长 | 总观看时长/活跃周数 |
| 内容偏好特征 | 科技类视频占比 | 科技类播放数/总播放数 |
| 学习深度特征 | 重复观看率 | 重复播放视频数/总播放数 |
| 互动特征 | 弹幕提问频率 | 提问弹幕数/总弹幕数 |
| 时间模式特征 | 周末学习强度 | 周末观看时长/工作日观看时长 |
特别注意:B站的"稍后再看"功能数据往往被忽略,但实际上这是识别高意向学习者的重要信号。
3. 机器学习模型选型与调优
3.1 典型分析场景与算法匹配
根据不同的分析目标,我们测试了多种算法组合:
-
学习路径聚类分析
- 算法:DBSCAN(处理不定长行为序列)
- 关键参数:eps=0.5, min_samples=10
- 优势:自动发现异常学习模式
-
完课率预测
- 算法:XGBoost + SHAP解释
- 特征重要性TOP3:
- 前3次学习的间隔方差(稳定性)
- 课程弹幕的情感极性值
- 同系列视频的完播率
-
优质内容识别
- 算法:LSTM时序分类
- 输入:用户观看该视频前后的行为序列
- 输出:是否会产生二次传播(分享/收藏)
3.2 处理非平衡数据的技巧
B站用户行为存在典型的"长尾分布"问题,我们采用分层抽样+代价敏感学习的组合方案:
python复制from imblearn.over_sampling import SMOTE
smote = SMOTE(sampling_strategy={1: 500}, k_neighbors=3)
X_res, y_res = smote.fit_resample(X, y)
# 在XGBoost中设置样本权重
weights = np.where(y == 1, 5, 1)
model = XGBClassifier(scale_pos_weight=sum(y==0)/sum(y==1))
4. 分析结果可视化实践
4.1 交互式学习路径图谱
使用PyVis库构建可交互的桑基图,清晰展示典型用户流:
python复制from pyvis.network import Network
net = Network(height="600px", directed=True)
# 添加节点和边
net.show("learning_path.html")
4.2 行为时序热力图
通过Seaborn的clustermap展示不同用户群的时间模式差异:
python复制import seaborn as sns
sns.clustermap(behavior_matrix,
metric="cosine",
row_cluster=True,
col_cluster=False)
5. 实战中的经验教训
-
时间窗口陷阱:初期直接按自然周切割数据,导致节假日数据失真。改进方案是采用"用户个人学习周"(从首次学习开始计算7天)
-
冷启动问题:新上传课程缺乏足够行为数据时,我们开发了"相似课程迁移学习"方案:
- 使用Word2Vec将课程标题和简介向量化
- 计算余弦相似度匹配历史课程
- 继承相似课程的行为模式先验分布
-
弹幕文本处理:直接使用通用情感词典效果不佳,我们专门构建了教育领域情感词典:
- 正向词:"懂了"、"感谢"、"清晰"
- 负向词:"太快"、"没听懂"、"卡顿"
-
硬件优化技巧:当用户行为记录超过千万条时,Pandas处理效率骤降。我们采用Dask进行分布式计算:
python复制import dask.dataframe as dd
ddf = dd.from_pandas(df, npartitions=10)
result = ddf.groupby('user_id').apply(my_agg_func)
这个项目给我的最大启示是:在线学习行为分析不能简单套用电商或社交媒体的模型。比如B站用户反复拖动进度条观看某段视频,在电商场景可能是负面信号(商品介绍不清晰),但在学习场景反而是积极行为(深度学习某个知识点)。这种领域特性的理解往往比算法本身更重要。
