发散创新:基于图神经网络(GNN)构建动态用户画像的实践与落地
在推荐系统、精准营销与风控建模中,静态标签体系已难以应对用户行为的时序性、场景依赖性与兴趣漂移。传统用户画像多依赖规则引擎+宽表聚合(如user_id, age, city, last_7d_click_cnt, avg_order_amt),但这类结构化特征存在三大瓶颈:
- 语义割裂:将“深夜浏览母婴用品+白天搜索儿童疫苗”强行映射为独立标签,丢失行为上下文关联;
- 冷启动僵化:新用户无历史行为,仅靠注册信息无法生成有效向量表示;
- 关系盲区:忽略用户与商品、用户与用户、用户与社群间的拓扑交互(如“同群聊用户高频共购某小众咖啡豆”)。
本文提出一种端到端可训练的图神经网络用户画像建模方案,以真实电商日志为驱动,在 PyTorch Geometric 框架下实现动态画像生成,并开源核心代码模块。
- 关系盲区:忽略用户与商品、用户与用户、用户与社群间的拓扑交互(如“同群聊用户高频共购某小众咖啡豆”)。
一、图结构设计:从行为日志到异构图
我们定义三类节点与两类边:
| 节点类型 | 示例ID | 特征维度 | 构建逻辑 |
|---|---|---|---|
user | u_892341 | 128(嵌入) | 初始随机初始化,经GNN更新 |
item | i_55678 | 64(品类/价格/销量等统计编码) | 预计算后固定 |
session | s_20240512_7789 | 32(时间戳哈希+设备指纹MD5) | 每次会话唯一ID |
边关系:
user → item:点击/加购/下单(带时间戳权重w = 1 / (t_now - t_click))user → session:归属关系(无向)
构建脚本(build_hetero_graph.py)关键片段:
importtorchfromtorch_geometric.dataimportHeteroDatafromtorch_geometric.transformsimportToUndirected# 假设已加载清洗后日志:[user_id, item_id, session_id, timestamp]logs=pd.read_parquet("clean_logs.parquet")# 节点ID映射user2idx={u:ifori,uinenumerate(logs['user_id'].unique())}item2idx={i:ifori,iinenumerate(logs['item_id'].unique())}session2idx={s:ifori,sinenumerate(logs['session_id'].unique())}data=HeteroData()data['user'].x=torch.randn(len(user2idx),128)# 可替换为预训练ID embeddingdata['item'].x=torch.from_numpy(item_features)# 归一化后的统计特征data['session'].x=torch.from_numpy(session_feats)# 构建 user→item 边(带时间衰减权重)edge_index_ui=torch.tensor([[user2idx[u]foruinlogs['user_id']],[item2idx[i]foriinlogs['item_id']]<