如何处理高稀疏特征的降维?
解读
在国内互联网公司的用户运营面试中,面试官问“高稀疏特征降维”并不是想听数学推导,而是想看候选人能否把高维稀疏用户行为数据(如用户-商品点击矩阵、用户-优惠券核销矩阵)快速变成低维稠密向量,并直接服务于拉新、促活、留存、转化、召回五大运营场景。回答必须体现三点:①业务可解释性;②线上实时性;③效果可验证性。如果只说“用PCA”而没提“PCA在稀疏矩阵里会爆炸”,基本会被判不及格。
知识点
- 高稀疏特征的典型来源:用户ID、商品ID、优惠券ID、渠道ID、LBS的geohash、用户主动标签等one-hot后维度轻易破千万,稀疏度>99.5%。
- 降维目标:把稀疏高维→稠密低维(50~200维),同时保留用户价值分层、兴趣区分、转化潜力三类信号。
- 四大主流方案(必须按国内实际落地顺序讲):
① Embedding化:Word2Vec、Item2Vec、DeepWalk、Node2Vec,把用户行为序列当“句子”,生成用户向量与商品向量,维度64~128即可上线。
② FM/FFM隐向量:用Field-aware FM做CTR预估时,一阶权重保留可解释性,二阶隐向量直接当用户特征输入后续RFM模型,AUC提升3~5个百分点即可全量。
③ AutoEncoder + 稀疏输入层:TensorFlow SparseTensor + Keras SparseInput,隐层加L1正则,训练10轮即可收敛,线上用Encoder部分做实时推断,延迟<5 ms。
④ PCA/TruncatedSVD的稀疏安全版本:Scipy.sparse.linalg.svds,只取Top 100奇异值,内存占用<1 GB,适合离线用户分层,但线上需配合Redis缓存。 - 效果验证:
- 离线:用降维后的向量跑K-means,看Silhouette是否>0.5;再用向量做LR,对比原始稀疏特征LR的AUC提升。
- 在线:灰度实验,核心指标**次留+7%、转化率+4%、push召回率+10%**即可全量。
- 踩坑提示:
- 直接对one-hot做PCA会内存爆炸;
- Embedding窗口过大(>10)会把**“高价值但低频”**用户行为淹没;
- 隐向量维度<32会导致用户价值分层失效,>256会拖垮线上推理性能。
答案
“遇到高稀疏特征,我按业务节奏分三步走:
第一步,行为序列Embedding。把近30天用户点击、收藏、下单的SKU ID按时间序排列,用Item2Vec(Skip-gram + 负采样)训练64维向量,用户向量取行为序列里Item向量的时间衰减平均,这样既能保留兴趣演化,又能把维度从500万降到64。
第二步,FM隐向量二次降维。把用户属性、上下文、Embedding向量一起喂给Field-aware FM,训练CTR预估任务,取出用户隐向量(k=64)作为新的用户特征,这一步在美团“神券节”项目中让券核销率提升4.2%。
第三步,线上实时推断。FM隐向量部分用TensorFlow Serving部署,用户行为更新后5分钟内刷新向量,通过Redis String + Protobuf缓存,单次读取<2 ms,支持日均2亿次调用。
最后用A/B实验验证:实验组用64维向量跑push召回,对照组用原始稀疏特征,7天后实验组次留提升7.1%,GMV提升5.3%,通过显著性检验(p<0.01)后全量。”
拓展思考
- 多任务Embedding:如果公司同时做会员转化和直播促活,可以用Multi-task Item2Vec,共享Item向量,用户向量分别用会员任务权重和直播任务权重做Attention Pooling,一套向量同时服务两个运营目标,节省30%内存。
- 冷启动降级方案:新用户行为不足5条时,用渠道+机型+省市的统计Embedding做兜底,线上用向量拼接方式平滑过渡,保证新用户首单转化率不下降。
- 合规与隐私:国内《个人信息保护法》要求向量可解释,可在FM隐向量层加L1正则,把绝对值<1e-4的维度置0,生成稀疏向量,再用SHAP值反向映射到原始特征,满足法务审计要求。