浏览代码

Merge branch 'refs/heads/master' into dev-xym-update-guarantee

# Conflicts:
#	ad-engine-service/src/main/java/com/tzld/piaoquan/ad/engine/service/score/strategy/RankStrategyBasic.java
#	ad-engine-service/src/main/java/com/tzld/piaoquan/ad/engine/service/score/strategy/RankStrategyBy679.java
#	ad-engine-service/src/main/java/com/tzld/piaoquan/ad/engine/service/score/strategy/RankStrategyBy680.java
#	ad-engine-service/src/main/java/com/tzld/piaoquan/ad/engine/service/score/strategy/RankStrategyBy683.java
#	ad-engine-service/src/main/java/com/tzld/piaoquan/ad/engine/service/score/strategy/RankStrategyBy688.java
xueyiming 3 天之前
父节点
当前提交
a810ee3410

+ 11 - 0
ad-engine-service/src/main/java/com/tzld/piaoquan/ad/engine/service/entity/CorrectCtcvrScoreParam.java

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

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

@@ -7,6 +7,7 @@ import com.ctrip.framework.apollo.spring.annotation.ApolloJsonValue;
 import com.tzld.piaoquan.ad.engine.commons.dto.AdPlatformCreativeDTO;
 import com.tzld.piaoquan.ad.engine.commons.enums.RedisPrefixEnum;
 import com.tzld.piaoquan.ad.engine.commons.param.RankRecommendRequestParam;
+import com.tzld.piaoquan.ad.engine.commons.param.RecommendRequestParam;
 import com.tzld.piaoquan.ad.engine.commons.redis.AdRedisHelper;
 import com.tzld.piaoquan.ad.engine.commons.redis.AlgorithmRedisHelper;
 import com.tzld.piaoquan.ad.engine.commons.score.ScoreParam;
@@ -14,6 +15,7 @@ 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.CorrectCpaParam;
+import com.tzld.piaoquan.ad.engine.service.entity.CorrectCtcvrScoreParam;
 import com.tzld.piaoquan.ad.engine.service.entity.GuaranteeView;
 import com.tzld.piaoquan.ad.engine.service.feature.Feature;
 import com.tzld.piaoquan.ad.engine.service.feature.FeatureService;
@@ -65,6 +67,21 @@ public abstract class RankStrategyBasic implements RankStrategy {
     @Value("${correct.cpa.view:1000}")
     protected Integer correctCpaView;
 
+    @Value("${exclude.exp:772}")
+    protected String excludeExp;
+
+    @Value("${target.crowd.exclude.exp:785}")
+    protected String targetCrowdExcludeExp;
+
+    @Value("${calibration.coefficient.exp:786}")
+    protected String calibrationCoefficientExp;
+
+    @Value("${calibration.view:2000}")
+    protected Integer calibrationView;
+
+    @Value("${calibration.alpha:0.5}")
+    protected Double calibrationAlpha;
+
     @Value("${guarantee.weight:30}")
     protected Integer guaranteeWeight;
 
@@ -88,6 +105,8 @@ public abstract class RankStrategyBasic implements RankStrategy {
 
     String adVerLayerDayKey = "ad:platform:adver:day:{layer}:{clazz}:{adverId}";
 
+    String cidLayerKey = "ad:engine:cid:layer:info:{cid}:{userLayer}";
+
 
     protected static final List<String> hasChannelScenes = new ArrayList<String>() {{
         add("DaiTou");
@@ -222,6 +241,37 @@ public abstract class RankStrategyBasic implements RankStrategy {
 
     }
 
+    protected void filterRequestAdList(RankRecommendRequestParam request, ScoreParam scoreParam) {
+        Map<String, String> userLayer = this.getUserLayer(request.getMid());
+        String layer = userLayer.getOrDefault("layer", "无曝光");
+        String clazz = userLayer.getOrDefault("class", "近期未出现");
+        if (StringUtils.isNotEmpty(layer) && layer.equals("已转化")) {
+            layer = "有转化";
+        }
+        //有转化中医层,中医和兴趣教育同时存在过滤兴趣教育行业
+        if (Objects.equals(layer, "有转化") && Objects.equals(clazz, "中医") && scoreParam.getExpCodeSet().contains(excludeExp)) {
+            List<AdPlatformCreativeDTO> adIdList = request.getAdIdList();
+            Set<String> professions = adIdList.stream().map(AdPlatformCreativeDTO::getProfession).collect(Collectors.toSet());
+            //同时存在中医行业和兴趣教育行业
+            if (professions.contains("中医") && professions.contains("兴趣教育")) {
+                List<AdPlatformCreativeDTO> filteredAdList = adIdList.stream()
+                        .filter(e -> !Objects.equals(e.getProfession(), "兴趣教育")).collect(Collectors.toList());
+                request.setAdIdList(filteredAdList);
+            }
+            log.info("excludeExp filtered request={}", JSONObject.toJSONString(request));
+        }
+
+        // 有曝光无转化-其他 过滤德瑞骅客户 客户id 26
+        if (Objects.equals(layer, "有曝光无转化") && Objects.equals(clazz, "其他") && scoreParam.getExpCodeSet().contains(targetCrowdExcludeExp)) {
+            List<AdPlatformCreativeDTO> adIdList = request.getAdIdList();
+            List<AdPlatformCreativeDTO> filteredAdList = adIdList.stream().filter(e -> e.getCustomerId() == null || e.getCustomerId() != 26L).collect(Collectors.toList());
+            request.setAdIdList(filteredAdList);
+            log.info("targetCrowdExcludeExp filtered request={}", JSONObject.toJSONString(request));
+        }
+    }
+
+
+    protected Map<String, GuaranteeView> getGuaranteeViewMap(RankRecommendRequestParam request, ScoreParam scoreParam) {
     protected boolean getIsGuaranteedFlow(ScoreParam scoreParam) {
         if (System.currentTimeMillis() < guaranteeSwitchingTime) {
             return scoreParam.getExpCodeSet().contains(guaranteeExp);
@@ -477,6 +527,79 @@ public abstract class RankStrategyBasic implements RankStrategy {
         }
     }
 
+    protected void calculateCtcvrScore(List<AdRankItem> items, RankRecommendRequestParam request, ScoreParam scoreParam) {
+        if (scoreParam.getExpCodeSet().contains(calibrationCoefficientExp)) {
+            calibrationCtcvrScore(items, request);
+        }
+    }
+
+    protected void calibrationCtcvrScore(List<AdRankItem> items, RankRecommendRequestParam request) {
+        Map<String, String> userLayer = this.getUserLayer(request.getMid());
+        String layer = userLayer.getOrDefault("layer", "无曝光");
+        String clazz = userLayer.getOrDefault("class", "近期未出现");
+        layer = "已转化".equals(layer) ? "有转化" : layer;
+        String userLayerClass = buildUserLayerClass(request.getIsFilterUser(), layer, clazz);
+        String cidLayerClassKey = cidLayerKey.replace("{userLayer}", userLayerClass);
+
+        // 3. 批量查询Redis
+        List<Long> cidList = items.stream().map(AdRankItem::getAdId).collect(Collectors.toList());
+        List<String> redisKeys = cidList.stream()
+                .map(cid -> cidLayerClassKey.replace("{cid}", cid.toString()))
+                .collect(Collectors.toList());
+
+        List<String> redisValues = algRedisHelper.mget(redisKeys);
+        Map<Long, CorrectCtcvrScoreParam> calibrationMap = parseRedisValues(cidList, redisValues);
+
+        // 4. 应用校准逻辑
+        applyCalibration(items, calibrationMap);
+    }
+
+    // 解析Redis返回值到Map
+    private Map<Long, CorrectCtcvrScoreParam> parseRedisValues(List<Long> cidList, List<String> values) {
+        Map<Long, CorrectCtcvrScoreParam> map = new HashMap<>();
+        for (int i = 0; i < cidList.size(); i++) {
+            String value = values.get(i);
+            if (StringUtils.isEmpty(value)) continue;
+
+            try {
+                JSONObject json = JSONObject.parseObject(value);
+                Integer view = json.getInteger("view");
+                Double ctcvr = json.getDouble("ctcvr");
+                if (view != null && ctcvr != null) {
+                    CorrectCtcvrScoreParam param = new CorrectCtcvrScoreParam();
+                    param.setView(view);
+                    param.setRealCtcvr(ctcvr);
+                    map.put(cidList.get(i), param);
+                }
+            } catch (Exception e) {
+                log.error("Failed to parse calibration data for cid={}", cidList.get(i), e);
+            }
+        }
+        return map;
+    }
+
+    // 应用校准到广告项
+    private void applyCalibration(List<AdRankItem> items, Map<Long, CorrectCtcvrScoreParam> calibrationMap) {
+        for (AdRankItem item : items) {
+            CorrectCtcvrScoreParam param = calibrationMap.get(item.getAdId());
+            if (param == null || param.getView() == null || param.getView() < calibrationView) {
+                continue; // 跳过无效数据
+            }
+
+            double realCtcvr = Optional.ofNullable(param.getRealCtcvr()).orElse(0.0);
+            double calibratedScore = item.getLrScore() * calibrationAlpha + (1 - calibrationAlpha) * realCtcvr;
+            item.getExt().put("correctCtcvrScoreParam", JSONObject.toJSONString(param));
+            item.getScoreMap().put("ctcvrScore", calibratedScore);
+            item.getScoreMap().put("realCtcvr", realCtcvr);
+            item.setLrScore(calibratedScore);
+        }
+    }
+
+    private String buildUserLayerClass(boolean isFilterUser, String layer, String clazz) {
+        if (Objects.equals(layer, "已转化")) layer = "有转化";
+        return isFilterUser ? layer + "-炸-" + clazz : layer + "-" + clazz;
+    }
+
 
     protected AdRankItem creativeCovertRankItem(AdPlatformCreativeDTO dto, RankRecommendRequestParam request, Set<String> noApiAdVerIds) {
         AdRankItem adRankItem = new AdRankItem();

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

@@ -66,6 +66,8 @@ public class RankStrategyBy679 extends RankStrategyBasic {
         }
 
         long start = System.currentTimeMillis();
+        //过滤创意
+        filterRequestAdList(request, scoreParam);
         // 特征处理
         // feature1
         Feature feature = this.getFeature(scoreParam, request);
@@ -219,16 +221,25 @@ 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);
         // loop
         double cpmCoefficient = weightParam.getOrDefault("cpmCoefficient", 0.9);
+
         boolean isGuaranteeType = false;
         for (AdRankItem item : result) {
+            double bid = item.getCpa();
+            if (scoreParam.getExpCodeSet().contains(correctCpaExp1) || scoreParam.getExpCodeSet().contains(correctCpaExp2)) {
+                Double correctionFactor = (Double) item.getExt().get("correctionFactor");
+                item.getScoreMap().put("correctionFactor", correctionFactor);
+                bid = bid * correctionFactor;
+            }
+            item.getScoreMap().put("ecpm", item.getLrScore() * bid * 1000);
             if (isGuaranteedFlow && item.getExt().get("isGuaranteed") != null && (boolean) item.getExt().get("isGuaranteed")) {
                 isGuaranteeType = true;
             }
             double scoreCoefficient = creativeScoreCoefficient.getOrDefault(item.getAdId(), 1d);
             double guaranteeScoreCoefficient = getGuaranteeScoreCoefficient(isGuaranteedFlow, item.getExt());
-            double score = item.getLrScore() * scoreCoefficient * item.getCpa() * guaranteeScoreCoefficient;
+            double score = item.getLrScore() * bid * scoreCoefficient * guaranteeScoreCoefficient;
             item.getScoreMap().put("guaranteeScoreCoefficient", guaranteeScoreCoefficient);
             item.getScoreMap().put("cpa", item.getCpa());
             item.getScoreMap().put("cpm", item.getCpm());

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

@@ -76,6 +76,8 @@ public class RankStrategyBy680 extends RankStrategyBasic {
         }
 
         long start = System.currentTimeMillis();
+        //过滤创意
+        filterRequestAdList(request, scoreParam);
         // 特征处理
         // feature1
         Feature feature = this.getFeature(scoreParam, request);
@@ -90,30 +92,6 @@ public class RankStrategyBy680 extends RankStrategyBasic {
 
         Map<String, String> userFeatureMap = new HashMap<>();
         Map<String, String> c1Feature = userFeature.getOrDefault("alg_mid_feature_ad_action", new HashMap<>());
-        //用户历史是否有转化
-        boolean targetCrowd = false;
-        if (c1Feature.containsKey("user_conver_ad_class") && StringUtils.isNotEmpty(c1Feature.get("user_conver_ad_class"))
-                && c1Feature.get("user_conver_ad_class").contains("中医")) {
-            targetCrowd = true;
-        } else {
-            if (c1Feature.containsKey("user_conver_ad_class_history_delta")
-                    && StringUtils.isNotEmpty(c1Feature.get("user_conver_ad_class_history_delta"))
-                    && c1Feature.get("user_conver_ad_class_history_delta").contains("中医")) {
-                targetCrowd = true;
-            }
-        }
-        //满足试验条件&&特定人群
-        if (scoreParam.getExpCodeSet().contains(excludeExp) && targetCrowd) {
-            List<AdPlatformCreativeDTO> adIdList = request.getAdIdList();
-            Set<String> professions = adIdList.stream().map(AdPlatformCreativeDTO::getProfession).collect(Collectors.toSet());
-            //同时存在中医行业和兴趣教育行业
-            if (professions.contains("中医") && professions.contains("兴趣教育")) {
-                List<AdPlatformCreativeDTO> filteredAdList = adIdList.stream()
-                        .filter(e -> !Objects.equals(e.getProfession(), "兴趣教育")).collect(Collectors.toList());
-                request.setAdIdList(filteredAdList);
-            }
-            log.info("excludeExp filtered request={}", JSONObject.toJSONString(request));
-        }
 
         List<TupleMapEntry<Tuple5>> midActionList = this.handleC1Feature(c1Feature, userFeatureMap);
 
@@ -268,12 +246,19 @@ public class RankStrategyBy680 extends RankStrategyBasic {
 
         boolean isGuaranteeType = false;
         for (AdRankItem item : result) {
+            double bid = item.getCpa();
+            if (scoreParam.getExpCodeSet().contains(correctCpaExp1) || scoreParam.getExpCodeSet().contains(correctCpaExp2)) {
+                Double correctionFactor = (Double) item.getExt().get("correctionFactor");
+                item.getScoreMap().put("correctionFactor", correctionFactor);
+                bid = bid * correctionFactor;
+            }
+            item.getScoreMap().put("ecpm", item.getLrScore() * bid * 1000);
             if (isGuaranteedFlow && item.getExt().get("isGuaranteed") != null && (boolean) item.getExt().get("isGuaranteed")) {
                 isGuaranteeType = true;
             }
             double scoreCoefficient = creativeScoreCoefficient.getOrDefault(item.getAdId(), 1d);
             double guaranteeScoreCoefficient = getGuaranteeScoreCoefficient(isGuaranteedFlow, item.getExt());
-            double score = item.getLrScore() * scoreCoefficient * item.getCpa() * guaranteeScoreCoefficient;
+            double score = item.getLrScore() * bid * scoreCoefficient * guaranteeScoreCoefficient;
             item.getScoreMap().put("guaranteeScoreCoefficient", guaranteeScoreCoefficient);
             item.getScoreMap().put("cpa", item.getCpa());
             item.getScoreMap().put("cpm", item.getCpm());

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

@@ -74,6 +74,8 @@ public class RankStrategyBy683 extends RankStrategyBasic {
         }
 
         long start = System.currentTimeMillis();
+        //过滤创意
+        filterRequestAdList(request, scoreParam);
         // 特征处理
         // feature1
         Feature feature = this.getFeature(scoreParam, request);
@@ -233,36 +235,40 @@ public class RankStrategyBy683 extends RankStrategyBasic {
             double calibratedScore = originalScore / (originalScore + (1 - originalScore) / negSampleRate);
             item.setLrScore(calibratedScore);
             item.getScoreMap().put("originCtcvrScore", originalScore);
+            item.getScoreMap().put("modelCtcvrScore", calibratedScore);
             item.getScoreMap().put("ctcvrScore", calibratedScore);
         }
 
+        calculateCtcvrScore(result, request, scoreParam);
         // loop
         double cpmCoefficient = weightParam.getOrDefault("cpmCoefficient", 0.9);
         boolean isGuaranteeType = false;
         for (AdRankItem item : result) {
+            double bid = item.getCpa();
+            if (scoreParam.getExpCodeSet().contains(correctCpaExp1) || scoreParam.getExpCodeSet().contains(correctCpaExp2)) {
+                Double correctionFactor = (Double) item.getExt().get("correctionFactor");
+                item.getScoreMap().put("correctionFactor", correctionFactor);
+                bid = bid * correctionFactor;
+            }
+            item.getScoreMap().put("ecpm", item.getLrScore() * bid * 1000);
             if (isGuaranteedFlow && item.getExt().get("isGuaranteed") != null && (boolean) item.getExt().get("isGuaranteed")) {
                 isGuaranteeType = true;
             }
             double scoreCoefficient = creativeScoreCoefficient.getOrDefault(item.getAdId(), 1d);
             double guaranteeScoreCoefficient = getGuaranteeScoreCoefficient(isGuaranteedFlow, item.getExt());
-            double score = item.getLrScore() * scoreCoefficient * item.getCpa() * guaranteeScoreCoefficient;
+            double score = item.getLrScore() * bid * scoreCoefficient * guaranteeScoreCoefficient;
             item.getScoreMap().put("guaranteeScoreCoefficient", guaranteeScoreCoefficient);
             item.getScoreMap().put("cpa", item.getCpa());
             item.getScoreMap().put("cpm", item.getCpm());
+            item.getScoreMap().put("bid", bid);
             item.getScoreMap().put("cpmCoefficient", cpmCoefficient);
             item.getScoreMap().put("scoreCoefficient", scoreCoefficient);
             item.getFeatureMap().putAll(userFeatureMap);
             item.getFeatureMap().putAll(sceneFeatureMap);
-
             // 没有转化回传的广告主,使用后台配置的CPM
             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);
         }
 

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

@@ -46,9 +46,6 @@ public class RankStrategyBy688 extends RankStrategyBasic {
     @Value("${word2vec.exp:694}")
     private String word2vecExp;
 
-    @Value("${swap.exp:772}")
-    protected String excludeExp;
-
 
     // FIXME(zhoutian): 可能需要独立配置
     @ApolloJsonValue("${rank.score.weight.680:{}}")
@@ -83,6 +80,8 @@ public class RankStrategyBy688 extends RankStrategyBasic {
         }
 
         long start = System.currentTimeMillis();
+        //过滤创意
+        filterRequestAdList(request, scoreParam);
         // 特征处理
         // feature1
         Feature feature = this.getFeature(scoreParam, request);
@@ -97,31 +96,6 @@ public class RankStrategyBy688 extends RankStrategyBasic {
 
         Map<String, String> userFeatureMap = new HashMap<>();
         Map<String, String> c1Feature = userFeature.getOrDefault("alg_mid_feature_ad_action", new HashMap<>());
-        //用户历史是否有转化
-        boolean targetCrowd = false;
-        if (c1Feature.containsKey("user_conver_ad_class") && StringUtils.isNotEmpty(c1Feature.get("user_conver_ad_class"))
-                && c1Feature.get("user_conver_ad_class").contains("中医")) {
-            targetCrowd = true;
-        } else {
-            if (c1Feature.containsKey("user_conver_ad_class_history_delta")
-                    && StringUtils.isNotEmpty(c1Feature.get("user_conver_ad_class_history_delta"))
-                    && c1Feature.get("user_conver_ad_class_history_delta").contains("中医")) {
-                targetCrowd = true;
-            }
-        }
-        //满足试验条件&&特定人群
-        if (scoreParam.getExpCodeSet().contains(excludeExp) && targetCrowd) {
-            List<AdPlatformCreativeDTO> adIdList = request.getAdIdList();
-            Set<String> professions = adIdList.stream().map(AdPlatformCreativeDTO::getProfession).collect(Collectors.toSet());
-            //同时存在中医行业和兴趣教育行业
-            if (professions.contains("中医") && professions.contains("兴趣教育")) {
-                List<AdPlatformCreativeDTO> filteredAdList = adIdList.stream()
-                        .filter(e -> !Objects.equals(e.getProfession(), "兴趣教育")).collect(Collectors.toList());
-                request.setAdIdList(filteredAdList);
-            }
-            log.info("excludeExp filtered request={}", JSONObject.toJSONString(request));
-        }
-
         List<TupleMapEntry<Tuple5>> midActionList = this.handleC1Feature(c1Feature, userFeatureMap);
 
         Map<String, Double> midTimeDiffMap = this.parseC1FeatureListToTimeDiffMap(midActionList, ts);
@@ -316,22 +290,32 @@ public class RankStrategyBy688 extends RankStrategyBasic {
             }
             item.setLrScore(calibratedScore);
             item.getScoreMap().put("originCtcvrScore", originalScore);
+            item.getScoreMap().put("modelCtcvrScore", calibratedScore);
             item.getScoreMap().put("ctcvrScore", calibratedScore);
         }
 
+        calculateCtcvrScore(result, request, scoreParam);
         // loop
         double cpmCoefficient = weightParam.getOrDefault("cpmCoefficient", 0.9);
         boolean isGuaranteeType = false;
         for (AdRankItem item : result) {
+            double bid = item.getCpa();
+            if (scoreParam.getExpCodeSet().contains(correctCpaExp1) || scoreParam.getExpCodeSet().contains(correctCpaExp2)) {
+                Double correctionFactor = (Double) item.getExt().get("correctionFactor");
+                item.getScoreMap().put("correctionFactor", correctionFactor);
+                bid = bid * correctionFactor;
+            }
+            item.getScoreMap().put("ecpm", item.getLrScore() * bid * 1000);
             if (isGuaranteedFlow && item.getExt().get("isGuaranteed") != null && (boolean) item.getExt().get("isGuaranteed")) {
                 isGuaranteeType = true;
             }
             double scoreCoefficient = creativeScoreCoefficient.getOrDefault(item.getAdId(), 1d);
             double guaranteeScoreCoefficient = getGuaranteeScoreCoefficient(isGuaranteedFlow, item.getExt());
-            double score = item.getLrScore() * scoreCoefficient * item.getCpa() * guaranteeScoreCoefficient;
+            double score = item.getLrScore() * bid * scoreCoefficient * guaranteeScoreCoefficient;
             item.getScoreMap().put("guaranteeScoreCoefficient", guaranteeScoreCoefficient);
             item.getScoreMap().put("cpa", item.getCpa());
             item.getScoreMap().put("cpm", item.getCpm());
+            item.getScoreMap().put("bid", bid);
             item.getScoreMap().put("cpmCoefficient", cpmCoefficient);
             item.getScoreMap().put("scoreCoefficient", scoreCoefficient);
             item.getFeatureMap().putAll(userFeatureMap);
@@ -341,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);
         }