소스 검색

feat: V568 add stat-rov fusion for newNorDNNScore

在 V568 排序公式的 ROV 因子处融合统计 ROV:
  fusedRov = predRovW * newNorDNNScore + statRovW * statRov
  score = fmRov * (rosAdd + rosW * fusedRov) * (vorAdd + vorW * vor) + ...

- 统计 ROV 复用 fetchCoarseRankScores 的 coarseRankMap (1h+24h plusSmooth 加权),
  vid 缺失兜底 0 → 该 vid 自动退回纯预测
- Apollo predRovW / statRovW 动态控制, 默认 1.0 / 0.0 = 等价原公式
- scoresMap 记录 statRov / fusedRov / predRovW / statRovW 便于线上排查
apple 3 일 전
부모
커밋
60948ce0ee

+ 15 - 1
recommend-server-service/src/main/java/com/tzld/piaoquan/recommend/server/service/rank/strategy/RankStrategy4RegionMergeModelV568.java

@@ -215,6 +215,11 @@ public class RankStrategy4RegionMergeModelV568 extends RankStrategy4RegionMergeM
         double dnRovn1hW = mergeWeight.getOrDefault("dn_rovn_1h_w", 0d);
         double dnRovn24hW = mergeWeight.getOrDefault("dn_rovn_24h_w", 0d);
 
+        // V568 rov 融合:newNorDNNScore(预测 ROV) 与 coarseRankScore(统计 ROV) 加权和
+        // 默认 predRovW=1.0 / statRovW=0.0 → 退化为原公式,保底不掉指标
+        double predRovW = mergeWeight.getOrDefault("predRovW", 1.0d);
+        double statRovW = mergeWeight.getOrDefault("statRovW", 0.0d);
+
         Map<String, Map<String, String>> vid2MapFeature = this.getVideoRedisFeature(vids, "redis:vid_hasreturn_vor:");
 
 
@@ -237,6 +242,15 @@ public class RankStrategy4RegionMergeModelV568 extends RankStrategy4RegionMergeM
             item.getScoresMap().put("rosAdd", rosAdd);
             item.getScoresMap().put("rosW", rosW);
 
+            // 统计 ROV:coarseRankScore = plusSmooth(return_n_uv, exp, 30, 1), 1h+24h 加权
+            // 数据源同 fetchCoarseRankScores 计算, 缺失 vid 兜底 0 (退回纯预测)
+            double statRov = coarseRankMap.getOrDefault(item.getVideoId(), 0d);
+            double fusedRov = predRovW * newNorDNNScore + statRovW * statRov;
+            item.getScoresMap().put("statRov", statRov);
+            item.getScoresMap().put("predRovW", predRovW);
+            item.getScoresMap().put("statRovW", statRovW);
+            item.getScoresMap().put("fusedRov", fusedRov);
+
             double vor = Double.parseDouble(vid2MapFeature.getOrDefault(item.getVideoId() + "", new HashMap<>()).getOrDefault("vor", "0"));
             item.getScoresMap().put("vor", vor);
             item.getScoresMap().put("vorAdd", vorAdd);
@@ -291,7 +305,7 @@ public class RankStrategy4RegionMergeModelV568 extends RankStrategy4RegionMergeM
             item.getScoresMap().put("dnRovn24hW", dnRovn24hW);
             item.getScoresMap().put("dnRovn24h", dnRovn24h);
 
-            score = fmRov * (rosAdd + rosW * newNorDNNScore) * (vorAdd + vorW * vor) + c1RovnScore + b0StrScore + b0RorScore + cnRovnScore + dnRovnScore;
+            score = fmRov * (rosAdd + rosW * fusedRov) * (vorAdd + vorW * vor) + c1RovnScore + b0StrScore + b0RorScore + cnRovnScore + dnRovnScore;
 
             Video video = item.getVideo();
             video.setScore(score);