浏览代码

Merge branch 'refs/heads/dev-xym-calibration-dnn1' into pre-master

xueyiming 2 天之前
父节点
当前提交
de3cf04992

+ 1 - 1
ad-engine-commons/pom.xml

@@ -26,7 +26,7 @@
         <dependency>
             <groupId>com.tzld.piaoquan</groupId>
             <artifactId>recommend-feature-client</artifactId>
-            <version>1.1.23</version>
+            <version>1.1.24</version>
         </dependency>
         <dependency>
             <groupId>com.tzld.piaoquan</groupId>

+ 13 - 0
ad-engine-service/src/main/java/com/tzld/piaoquan/ad/engine/service/entity/CalibrationModelCtcvrData.java

@@ -0,0 +1,13 @@
+package com.tzld.piaoquan.ad.engine.service.entity;
+
+import lombok.Data;
+
+@Data
+public class CalibrationModelCtcvrData {
+
+    private Integer view;
+
+    private Double realCtcvr;
+
+    private Double pCtcvr;
+}

+ 63 - 2
ad-engine-service/src/main/java/com/tzld/piaoquan/ad/engine/service/score/strategy/RankStrategyBasic.java

@@ -14,6 +14,7 @@ import com.tzld.piaoquan.ad.engine.commons.score.ScoreParam;
 import com.tzld.piaoquan.ad.engine.commons.util.DateUtils;
 import com.tzld.piaoquan.ad.engine.commons.util.NumUtil;
 import com.tzld.piaoquan.ad.engine.commons.util.ObjUtil;
+import com.tzld.piaoquan.ad.engine.service.entity.CalibrationModelCtcvrData;
 import com.tzld.piaoquan.ad.engine.service.entity.CorrectCpaParam;
 import com.tzld.piaoquan.ad.engine.service.entity.CorrectCtcvrScoreParam;
 import com.tzld.piaoquan.ad.engine.service.entity.GuaranteeView;
@@ -46,6 +47,12 @@ public abstract class RankStrategyBasic implements RankStrategy {
     @ApolloJsonValue("${alpha:1.0}")
     protected Double alpha;
 
+    @Value("${calibration:ctcvr.exp:779}")
+    protected String calibrationCtcvrExp;
+
+    @ApolloJsonValue("${calibration.view.count:5000}")
+    protected Integer calibrationViewCount;
+
     @Value("${correct.cpa.exp.1:}")
     protected String correctCpaExp1;
 
@@ -97,6 +104,8 @@ public abstract class RankStrategyBasic implements RankStrategy {
 
     String adPlatformGuaranteeKey = "ad:platform:guarantee:data:{date}:{adverId}";
 
+    String realLayerCtcvrKey = "ad:platform:real:ctcvr:{model}:{layer}:{class}";
+
     String adCustomerLayerHourKey = "ad:platform:customer:hour:{layer}:{clazz}:{customerId}";
 
     String adVerLayerHourKey = "ad:platform:adver:hour:{layer}:{clazz}:{adverId}";
@@ -526,7 +535,12 @@ public abstract class RankStrategyBasic implements RankStrategy {
         }
     }
 
-    protected void calculateCtcvrScore(List<AdRankItem> items, RankRecommendRequestParam request, ScoreParam scoreParam) {
+    protected void calculateCtcvrScore(List<AdRankItem> items, RankRecommendRequestParam request, ScoreParam scoreParam, String modelName) {
+        //判断是否走校准试验
+        if (scoreParam.getExpCodeSet().contains(calibrationCtcvrExp)) {
+            calibrationDnnCtcvrScore(scoreParam, items, request.getMid(), request.getIsFilterUser(), modelName);
+        }
+
         if (scoreParam.getExpCodeSet().contains(calibrationCoefficientExp)) {
             calibrationCtcvrScore(items, request);
         }
@@ -697,4 +711,51 @@ public abstract class RankStrategyBasic implements RankStrategy {
             return new HashMap<>();
         }
     }
-}
+
+    protected void calibrationDnnCtcvrScore(ScoreParam scoreParam, List<AdRankItem> adRankItems, String mid, boolean isFilterUser, String modelName) {
+        if (StringUtils.isEmpty(modelName)) {
+            return;
+        }
+        // 1. 获取用户分层信息
+        Map<String, String> userLayer = getUserLayer(mid);
+        String layer = userLayer.getOrDefault("layer", "无曝光");
+        String clazz = userLayer.getOrDefault("class", "近期未出现");
+        if (Objects.equals(layer, "已转化")) {
+            layer = "有转化";
+        }
+        if (isFilterUser) {
+            layer += "-炸";
+        }
+        // 2. 构建Key模板
+        String layerKeyTemplate = realLayerCtcvrKey
+                .replace("{model}", modelName)
+                .replace("{layer}", layer)
+                .replace("{class}", clazz);
+
+        String value = adRedisHelper.get(layerKeyTemplate);
+        JSONObject json = JSONObject.parseObject(value);
+        Integer view = json.getInteger("view");
+        Double realCtcvr = json.getDouble("ctcvr");
+        Double pCtcvr = json.getDouble("pCtcvr");
+        CalibrationModelCtcvrData calibrationModelCtcvrData = new CalibrationModelCtcvrData();
+        calibrationModelCtcvrData.setRealCtcvr(realCtcvr);
+        calibrationModelCtcvrData.setView(view);
+        calibrationModelCtcvrData.setPCtcvr(pCtcvr);
+        for (AdRankItem item : adRankItems) {
+            item.getExt().put("calibrationModelCtcvrData", JSONObject.toJSONString(calibrationModelCtcvrData));
+            if (view == null || view < calibrationViewCount) {
+                continue;
+            }
+            if (pCtcvr == null || pCtcvr == 0.0 || realCtcvr == null || realCtcvr == 0.0) {
+                continue;
+            }
+            double diff = realCtcvr / pCtcvr;
+            if (Math.abs(diff - 1) < 0.1) {
+                continue;
+            }
+            double correctCtcvrScore = item.getLrScore() * diff;
+            item.getScoreMap().put("correctCtcvrScore", correctCtcvrScore);
+            item.setLrScore(correctCtcvrScore);
+        }
+    }
+}

+ 2 - 1
ad-engine-service/src/main/java/com/tzld/piaoquan/ad/engine/service/score/strategy/RankStrategyBy679.java

@@ -118,6 +118,7 @@ public class RankStrategyBy679 extends RankStrategyBasic {
                     adRankItem.setCpm(ObjUtil.nullOrDefault(dto.getCpm(), 90).doubleValue());
                     adRankItem.setSkuId(dto.getSkuId());
                     adRankItem.setCustomerId(dto.getCustomerId());
+                    adRankItem.setProfession(dto.getProfession());
                     adRankItem.setRandom(random.nextInt(1000));
                     if (noApiAdVerIds.contains(dto.getAdVerId())) {
                         adRankItem.getExt().put("isApi", "0");
@@ -221,7 +222,7 @@ public class RankStrategyBy679 extends RankStrategyBasic {
         // getScorerPipeline
         List<AdRankItem> result = ScorerUtils.getScorerPipeline(ScorerUtils.XGBOOST_SCORE_CONF_20241105).scoring(sceneFeatureMap, userFeatureMap, adRankItems);
         long time5 = System.currentTimeMillis();
-        calculateCtcvrScore(result, request, scoreParam);
+        calculateCtcvrScore(result, request, scoreParam, null);
         // loop
         double cpmCoefficient = weightParam.getOrDefault("cpmCoefficient", 0.9);
 

+ 2 - 1
ad-engine-service/src/main/java/com/tzld/piaoquan/ad/engine/service/score/strategy/RankStrategyBy680.java

@@ -242,7 +242,7 @@ public class RankStrategyBy680 extends RankStrategyBasic {
             item.getScoreMap().put("ctcvrScore", calibratedScore);
         }
 
-        calculateCtcvrScore(result, request, scoreParam);
+        calculateCtcvrScore(result, request, scoreParam, null);
         // loop
         double cpmCoefficient = weightParam.getOrDefault("cpmCoefficient", 0.9);
 
@@ -281,6 +281,7 @@ public class RankStrategyBy680 extends RankStrategyBasic {
             AdRankItem top1Item = result.get(0);
             top1Item.getExt().put("isGuaranteeType", isGuaranteeType);
             putMetaFeature(top1Item, feature, reqFeature, sceneFeatureMap, request);
+            top1Item.getExt().put("model", "xgb");
         }
         long time6 = System.currentTimeMillis();
         log.info("cost={}, getFeature={}, handleFeature={},  similar={}, bucketFeature={}, getScorerPipeline={}, " +

+ 1 - 1
ad-engine-service/src/main/java/com/tzld/piaoquan/ad/engine/service/score/strategy/RankStrategyBy683.java

@@ -239,7 +239,7 @@ public class RankStrategyBy683 extends RankStrategyBasic {
             item.getScoreMap().put("ctcvrScore", calibratedScore);
         }
 
-        calculateCtcvrScore(result, request, scoreParam);
+        calculateCtcvrScore(result, request, scoreParam, null);
         // loop
         double cpmCoefficient = weightParam.getOrDefault("cpmCoefficient", 0.9);
         boolean isGuaranteeType = false;

+ 1 - 6
ad-engine-service/src/main/java/com/tzld/piaoquan/ad/engine/service/score/strategy/RankStrategyBy688.java

@@ -294,7 +294,7 @@ public class RankStrategyBy688 extends RankStrategyBasic {
             item.getScoreMap().put("ctcvrScore", calibratedScore);
         }
 
-        calculateCtcvrScore(result, request, scoreParam);
+        calculateCtcvrScore(result, request, scoreParam, "dnn");
         // loop
         double cpmCoefficient = weightParam.getOrDefault("cpmCoefficient", 0.9);
         boolean isGuaranteeType = false;
@@ -325,11 +325,6 @@ public class RankStrategyBy688 extends RankStrategyBasic {
             if (noApiAdVerIds.contains(item.getAdVerId())) {
                 score = item.getCpm() * cpmCoefficient / 1000;
             }
-            if (scoreParam.getExpCodeSet().contains(correctCpaExp1) || scoreParam.getExpCodeSet().contains(correctCpaExp2)) {
-                Double correctionFactor = (Double) item.getExt().get("correctionFactor");
-                item.getScoreMap().put("correctionFactor", correctionFactor);
-                score = score * correctionFactor;
-            }
             item.setScore(score);
         }