Bladeren bron

Merge branch 'feature_20240909_zhaohaipeng_xgb_auto_update' of algorithm/ad-engine into master

zhaohaipeng 7 maanden geleden
bovenliggende
commit
1f416ae28e
38 gewijzigde bestanden met toevoegingen van 749 en 261 verwijderingen
  1. 2 12
      ad-engine-commons/src/main/java/com/tzld/piaoquan/ad/engine/commons/score/ScorerUtils.java
  2. 1 1
      ad-engine-server/src/main/java/com/tzld/piaoquan/ad/engine/server/controller/AdRecommendController.java
  3. 8 0
      ad-engine-server/src/main/resources/ad_score_config_xgboost_20240909.conf
  4. 4 4
      ad-engine-server/src/main/resources/feeds_score_config_baseline.conf
  5. 5 5
      ad-engine-server/src/main/resources/feeds_score_config_break.conf
  6. 5 5
      ad-engine-server/src/main/resources/feeds_score_config_cvr_adjusting.conf
  7. 5 5
      ad-engine-server/src/main/resources/feeds_score_config_share0.conf
  8. 1 1
      ad-engine-server/src/main/resources/feeds_score_config_thompson.conf
  9. 1 1
      ad-engine-server/src/main/resources/video_ad_thompson.conf
  10. 1 1
      ad-engine-service/src/main/java/com/tzld/piaoquan/ad/engine/service/score/RankService.java
  11. 39 59
      ad-engine-service/src/main/java/com/tzld/piaoquan/ad/engine/service/score/RankService680.java
  12. 40 58
      ad-engine-service/src/main/java/com/tzld/piaoquan/ad/engine/service/score/RankService683.java
  13. 2 56
      ad-engine-service/src/main/java/com/tzld/piaoquan/ad/engine/service/score/RankService687.java
  14. 11 0
      ad-engine-service/src/main/java/com/tzld/piaoquan/ad/engine/service/score/RankStrategy.java
  15. 509 0
      ad-engine-service/src/main/java/com/tzld/piaoquan/ad/engine/service/score/RankStrategyXGBAutoUpdateModel688.java
  16. 71 0
      ad-engine-service/src/main/java/com/tzld/piaoquan/ad/engine/service/score/RankStrategyXGBBasic.java
  17. 3 2
      ad-engine-service/src/main/java/com/tzld/piaoquan/ad/engine/service/score/deprecated/BidRankRecommendRequestParam.java
  18. 1 2
      ad-engine-service/src/main/java/com/tzld/piaoquan/ad/engine/service/score/deprecated/RankServiceThompsonImpl.java
  19. 1 2
      ad-engine-service/src/main/java/com/tzld/piaoquan/ad/engine/service/score/deprecated/Share0MergeBreakScorer.java
  20. 1 2
      ad-engine-service/src/main/java/com/tzld/piaoquan/ad/engine/service/score/deprecated/TacticsAndLRModelScoreRankService.java
  21. 1 1
      ad-engine-service/src/main/java/com/tzld/piaoquan/ad/engine/service/score/deprecated/VideoAdThompsonScorer.java
  22. 1 1
      ad-engine-service/src/main/java/com/tzld/piaoquan/ad/engine/service/score/deprecated/VideoAdThompsonScorerV2.java
  23. 2 1
      ad-engine-service/src/main/java/com/tzld/piaoquan/ad/engine/service/score/deprecated/VlogAdBreakScorer.java
  24. 1 1
      ad-engine-service/src/main/java/com/tzld/piaoquan/ad/engine/service/score/deprecated/VlogAdCtrCalibrationScorer.java
  25. 1 2
      ad-engine-service/src/main/java/com/tzld/piaoquan/ad/engine/service/score/deprecated/VlogAdCtrLRScorer.java
  26. 1 1
      ad-engine-service/src/main/java/com/tzld/piaoquan/ad/engine/service/score/deprecated/VlogAdCvrCalibrationScorer.java
  27. 1 1
      ad-engine-service/src/main/java/com/tzld/piaoquan/ad/engine/service/score/deprecated/VlogAdCvrLRAdjustingScorer.java
  28. 1 2
      ad-engine-service/src/main/java/com/tzld/piaoquan/ad/engine/service/score/deprecated/VlogAdCvrLRScorer.java
  29. 2 1
      ad-engine-service/src/main/java/com/tzld/piaoquan/ad/engine/service/score/deprecated/VlogAdRosAndStrScorer.java
  30. 1 5
      ad-engine-service/src/main/java/com/tzld/piaoquan/ad/engine/service/score/deprecated/VlogAdThompsonScorer.java
  31. 1 2
      ad-engine-service/src/main/java/com/tzld/piaoquan/ad/engine/service/score/deprecated/VlogMergeBreakScorer.java
  32. 1 6
      ad-engine-service/src/main/java/com/tzld/piaoquan/ad/engine/service/score/deprecated/VlogMergeEcpmScorer.java
  33. 1 4
      ad-engine-service/src/main/java/com/tzld/piaoquan/ad/engine/service/score/deprecated/container/AdCreativeFeatureContainer.java
  34. 1 4
      ad-engine-service/src/main/java/com/tzld/piaoquan/ad/engine/service/score/deprecated/container/PidLambdaContainer.java
  35. 1 2
      ad-engine-service/src/main/java/com/tzld/piaoquan/ad/engine/service/score/deprecated/container/PidLambdaForCpcContainer.java
  36. 1 3
      ad-engine-service/src/main/java/com/tzld/piaoquan/ad/engine/service/score/deprecated/container/PidLambdaV2Container.java
  37. 20 6
      ad-engine-service/src/main/java/com/tzld/piaoquan/ad/engine/service/score/impl/RankServiceImpl.java
  38. 0 2
      ad-engine-service/src/main/java/com/tzld/piaoquan/ad/engine/service/score/param/MachineInfoParam.java

+ 2 - 12
ad-engine-commons/src/main/java/com/tzld/piaoquan/ad/engine/commons/score/ScorerUtils.java

@@ -23,32 +23,22 @@ public final class ScorerUtils {
 
     public static String THOMPSON_CONF = "feeds_score_config_thompson.conf";
 
-    public static String BREAK_CONFIG = "feeds_score_config_break.conf";
-    public static String SHARE0_CONFIG = "feeds_score_config_share0.conf";
-
     public static String CVR_ADJUSTING = "feeds_score_config_cvr_adjusting.conf";
-    public static String VIDEO_CREATIVE_THOMPSON = "video_ad_thompson.conf";
 
     public static String LR_ROV_SCORE_20240626 = "ad_score_config_20240626.conf";
-    public static String LR_ROV_SCORE_20240813 = "ad_score_config_20240813.conf";
 
     public static String XGBOOST_SCORE_CONF = "ad_score_config_xgboost.conf";
     public static String XGBOOST_SCORE_CONF_683 = "ad_score_config_xgboost_683.conf";
+    public static String XGBOOST_SCORE_CONF_20240909 = "ad_score_config_xgboost_20240909.conf";
 
     public static void warmUp() {
         log.info("scorer warm up ");
-        // ScorerUtils.init(BASE_CONF);
-        // ScorerUtils.init(THOMPSON_CONF);
-        // ScorerUtils.init(BREAK_CONFIG);
-        // ScorerUtils.init(SHARE0_CONFIG);
-        // ScorerUtils.init(CVR_ADJUSTING);
-        // ScorerUtils.init(VIDEO_CREATIVE_THOMPSON);
 
         ScorerUtils.init(LR_ROV_SCORE_20240626);
-        // ScorerUtils.init(LR_ROV_SCORE_20240813);
 
         ScorerUtils.init(XGBOOST_SCORE_CONF_683);
         ScorerUtils.init(XGBOOST_SCORE_CONF);
+        ScorerUtils.init(XGBOOST_SCORE_CONF_20240909);
     }
 
     private ScorerUtils() {

+ 1 - 1
ad-engine-server/src/main/java/com/tzld/piaoquan/ad/engine/server/controller/AdRecommendController.java

@@ -2,7 +2,7 @@ package com.tzld.piaoquan.ad.engine.server.controller;
 
 import com.tzld.piaoquan.ad.engine.service.score.RankService;
 import com.tzld.piaoquan.ad.engine.service.score.dto.AdPlatformCreativeDTO;
-import com.tzld.piaoquan.ad.engine.service.score.param.BidRankRecommendRequestParam;
+import com.tzld.piaoquan.ad.engine.service.score.deprecated.BidRankRecommendRequestParam;
 import com.tzld.piaoquan.ad.engine.service.score.param.RankRecommendRequestParam;
 import com.tzld.piaoquan.recommend.feature.domain.ad.base.AdRankItem;
 import org.apache.commons.collections.CollectionUtils;

+ 8 - 0
ad-engine-server/src/main/resources/ad_score_config_xgboost_20240909.conf

@@ -0,0 +1,8 @@
+scorer-config = {
+  lr-rov-score-config = {
+    scorer-name = "com.tzld.piaoquan.ad.engine.service.score.XGBoostScorer683"
+    scorer-priority = 99
+    model-path = "zhangbo/model_xgb_351_1000_v2.tar.gz"
+  }
+
+}

+ 4 - 4
ad-engine-server/src/main/resources/feeds_score_config_baseline.conf

@@ -1,21 +1,21 @@
 scorer-config = {
   lr-ctr-score-config = {
-    scorer-name = "com.tzld.piaoquan.ad.engine.service.score.VlogAdCtrLRScorer"
+    scorer-name = "com.tzld.piaoquan.ad.engine.service.score.deprecated.VlogAdCtrLRScorer"
     scorer-priority = 99
     model-path = "ad_ctr_model/model_ad_ctr.txt"
   }
   lr-cvr-score-config = {
-      scorer-name = "com.tzld.piaoquan.ad.engine.service.score.VlogAdCvrLRScorer"
+      scorer-name = "com.tzld.piaoquan.ad.engine.service.score.deprecated.VlogAdCvrLRScorer"
       scorer-priority = 98
       model-path = "ad_cvr_model/model_ad_cvr.txt"
   }
     tf-ctr-score-config = {
-      scorer-name = "com.tzld.piaoquan.ad.engine.service.score.VlogAdThompsonScorer"
+      scorer-name = "com.tzld.piaoquan.ad.engine.service.score.deprecated.VlogAdThompsonScorer"
       scorer-priority = 97
       model-path = "ad_thompson_model/model_ad_thompson.txt"
     }
   lr-ecpm-merge-config = {
-      scorer-name = "com.tzld.piaoquan.ad.engine.service.score.VlogMergeEcpmScorer"
+      scorer-name = "com.tzld.piaoquan.ad.engine.service.score.deprecated.VlogMergeEcpmScorer"
       scorer-priority = 1
   }
 

+ 5 - 5
ad-engine-server/src/main/resources/feeds_score_config_break.conf

@@ -1,24 +1,24 @@
 scorer-config = {
   lr-ctr-score-config = {
-    scorer-name = "com.tzld.piaoquan.ad.engine.service.score.VlogAdCtrLRScorer"
+    scorer-name = "com.tzld.piaoquan.ad.engine.service.score.deprecated.VlogAdCtrLRScorer"
     scorer-priority = 99
     model-path = "ad_ctr_model/model_ad_ctr.txt"
   }
   lr-cvr-score-config = {
-      scorer-name = "com.tzld.piaoquan.ad.engine.service.score.VlogAdCvrLRScorer"
+      scorer-name = "com.tzld.piaoquan.ad.engine.service.score.deprecated.VlogAdCvrLRScorer"
       scorer-priority = 98
       model-path = "ad_cvr_model/model_ad_cvr.txt"
   }
   str-ros-score-config = {
-      scorer-name = "com.tzld.piaoquan.ad.engine.service.score.VlogAdRosAndStrScorer"
+      scorer-name = "com.tzld.piaoquan.ad.engine.service.score.deprecated.VlogAdRosAndStrScorer"
       scorer-priority = 97
   }
   break-score-config = {
-      scorer-name = "com.tzld.piaoquan.ad.engine.service.score.VlogAdBreakScorer"
+      scorer-name = "com.tzld.piaoquan.ad.engine.service.score.deprecated.VlogAdBreakScorer"
       scorer-priority = 96
   }
   break-merge-config = {
-      scorer-name = "com.tzld.piaoquan.ad.engine.service.score.VlogMergeBreakScorer"
+      scorer-name = "com.tzld.piaoquan.ad.engine.service.score.deprecated.VlogMergeBreakScorer"
       scorer-priority = 1
   }
 

+ 5 - 5
ad-engine-server/src/main/resources/feeds_score_config_cvr_adjusting.conf

@@ -1,26 +1,26 @@
 scorer-config = {
   lr-ctr-score-config = {
-    scorer-name = "com.tzld.piaoquan.ad.engine.service.score.VlogAdCtrLRScorer"
+    scorer-name = "com.tzld.piaoquan.ad.engine.service.score.deprecated.VlogAdCtrLRScorer"
     scorer-priority = 99
     model-path = "ad_ctr_model/model_ad_ctr.txt"
   }
   lr-cvr-score-config = {
-      scorer-name = "com.tzld.piaoquan.ad.engine.service.score.VlogAdCvrLRScorer"
+      scorer-name = "com.tzld.piaoquan.ad.engine.service.score.deprecated.VlogAdCvrLRScorer"
       scorer-priority = 98
       model-path = "ad_cvr_model/model_ad_cvr.txt"
   }
     tf-ctr-score-config = {
-      scorer-name = "com.tzld.piaoquan.ad.engine.service.score.VlogAdThompsonScorer"
+      scorer-name = "com.tzld.piaoquan.ad.engine.service.score.deprecated.VlogAdThompsonScorer"
       scorer-priority = 97
       model-path = "ad_thompson_model/model_ad_thompson.txt"
     }
     lr-cvr-adjusting-score-config = {
-          scorer-name = "com.tzld.piaoquan.ad.engine.service.score.VlogAdCvrLRAdjustingScorer"
+          scorer-name = "com.tzld.piaoquan.ad.engine.service.score.deprecated.VlogAdCvrLRAdjustingScorer"
           scorer-priority = 96
           model-path = "ad_cvr_model/cvr_adjusting_strategy_coefficient.txt"
     }
   lr-ecpm-merge-config = {
-      scorer-name = "com.tzld.piaoquan.ad.engine.service.score.VlogMergeEcpmScorer"
+      scorer-name = "com.tzld.piaoquan.ad.engine.service.score.deprecated.VlogMergeEcpmScorer"
       scorer-priority = 1
   }
 

+ 5 - 5
ad-engine-server/src/main/resources/feeds_score_config_share0.conf

@@ -1,24 +1,24 @@
 scorer-config = {
   lr-ctr-score-config = {
-    scorer-name = "com.tzld.piaoquan.ad.engine.service.score.VlogAdCtrLRScorer"
+    scorer-name = "com.tzld.piaoquan.ad.engine.service.score.deprecated.VlogAdCtrLRScorer"
     scorer-priority = 99
     model-path = "ad_ctr_model/model_ad_ctr.txt"
   }
   lr-cvr-score-config = {
-      scorer-name = "com.tzld.piaoquan.ad.engine.service.score.VlogAdCvrLRScorer"
+      scorer-name = "com.tzld.piaoquan.ad.engine.service.score.deprecated.VlogAdCvrLRScorer"
       scorer-priority = 98
       model-path = "ad_cvr_model/model_ad_cvr.txt"
   }
   str-ros-score-config = {
-      scorer-name = "com.tzld.piaoquan.ad.engine.service.score.VlogAdRosAndStrScorer"
+      scorer-name = "com.tzld.piaoquan.ad.engine.service.score.deprecated.VlogAdRosAndStrScorer"
       scorer-priority = 97
   }
   break-score-config = {
-      scorer-name = "com.tzld.piaoquan.ad.engine.service.score.VlogAdBreakScorer"
+      scorer-name = "com.tzld.piaoquan.ad.engine.service.score.deprecated.VlogAdBreakScorer"
       scorer-priority = 96
   }
   break-merge-config = {
-      scorer-name = "com.tzld.piaoquan.ad.engine.service.score.Share0MergeBreakScorer"
+      scorer-name = "com.tzld.piaoquan.ad.engine.service.score.deprecated.Share0MergeBreakScorer"
       scorer-priority = 1
   }
 

+ 1 - 1
ad-engine-server/src/main/resources/feeds_score_config_thompson.conf

@@ -1,7 +1,7 @@
 scorer-config = {
 
   tf-ecpm-merge-config = {
-        scorer-name = "com.tzld.piaoquan.ad.engine.service.score.VlogMergeEcpmScorer"
+        scorer-name = "com.tzld.piaoquan.ad.engine.service.score.deprecated.VlogMergeEcpmScorer"
         scorer-priority = 98
   }
 

+ 1 - 1
ad-engine-server/src/main/resources/video_ad_thompson.conf

@@ -1,7 +1,7 @@
 scorer-config = {
 
   tf-ecpm-merge-config = {
-        scorer-name = "com.tzld.piaoquan.ad.engine.service.score.VideoAdThompsonScorer"
+        scorer-name = "com.tzld.piaoquan.ad.engine.service.score.deprecated.VideoAdThompsonScorer"
         scorer-priority = 98
         model-path = "ad_thompson_model/video_ad_thompson.txt"
 

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

@@ -2,7 +2,7 @@ package com.tzld.piaoquan.ad.engine.service.score;
 
 import com.tzld.piaoquan.ad.engine.commons.score.ScoreParam;
 import com.tzld.piaoquan.ad.engine.service.score.dto.AdPlatformCreativeDTO;
-import com.tzld.piaoquan.ad.engine.service.score.param.BidRankRecommendRequestParam;
+import com.tzld.piaoquan.ad.engine.service.score.deprecated.BidRankRecommendRequestParam;
 import com.tzld.piaoquan.ad.engine.service.score.param.RankRecommendRequestParam;
 import com.tzld.piaoquan.recommend.feature.domain.ad.base.AdRankItem;
 import com.tzld.piaoquan.recommend.feature.domain.ad.base.UserAdFeature;

+ 39 - 59
ad-engine-service/src/main/java/com/tzld/piaoquan/ad/engine/service/score/RankService680.java

@@ -5,15 +5,12 @@ import com.tzld.piaoquan.ad.engine.commons.score.ScoreParam;
 import com.tzld.piaoquan.ad.engine.commons.score.ScorerUtils;
 import com.tzld.piaoquan.ad.engine.commons.util.*;
 import com.tzld.piaoquan.ad.engine.service.feature.Feature;
-import com.tzld.piaoquan.ad.engine.service.feature.FeatureService;
 import com.tzld.piaoquan.ad.engine.service.score.dto.AdPlatformCreativeDTO;
 import com.tzld.piaoquan.ad.engine.service.score.param.RankRecommendRequestParam;
 import com.tzld.piaoquan.recommend.feature.domain.ad.base.AdRankItem;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.collections4.MapUtils;
 import org.apache.commons.lang3.StringUtils;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Service;
 import org.xm.Similarity;
 
@@ -26,18 +23,16 @@ import java.util.stream.Collectors;
 
 @Slf4j
 @Service
-public class RankService680 {
+public class RankService680 extends RankStrategyXGBBasic {
 
     @ApolloJsonValue("${no.postback.conversion.adverids:[]}")
     private Set<String> noPostbackConversionAdVerIds;
 
-    @Autowired
-    private FeatureService featureService;
-
     private Map<String, double[]> bucketsMap = new HashMap<>();
 
     private Map<String, Double> bucketsLen = new HashMap<>();
 
+    @Override
     public List<AdRankItem> adItemRank(RankRecommendRequestParam request, ScoreParam scoreParam) {
 
         long ts = System.currentTimeMillis() / 1000;
@@ -166,21 +161,6 @@ public class RankService680 {
         return result;
     }
 
-    private Feature getFeature(ScoreParam param, RankRecommendRequestParam request) {
-        List<AdPlatformCreativeDTO> adIdList = request.getAdIdList();
-        List<String> cidList = adIdList.stream()
-                .map(AdPlatformCreativeDTO::getCreativeId)
-                .map(Object::toString)
-                .collect(Collectors.toList());
-
-        List<String> adVerIdList = adIdList.stream()
-                .map(AdPlatformCreativeDTO::getAdVerId)
-                .filter(StringUtils::isNotBlank)
-                .distinct()
-                .collect(Collectors.toList());
-        return featureService.getFeature(cidList, adVerIdList, param);
-    }
-
     private void handleB1Feature(Map<String, String> b1Feature, Map<String, String> cidFeatureMap, String cid) {
         cidFeatureMap.put("cid_" + cid, "0.1");
         // if (StringUtils.isNotBlank(b1Feature.get("adid"))) {
@@ -550,41 +530,41 @@ public class RankService680 {
         return newFeatureMap;
     }
 
-    public static class Tuple5 {
-        public String f1;
-        public String f2;
-        public String f3;
-        public String f4;
-        public String f5;
-
-        public Tuple5(String f1, String f2, String f3, String f4, String f5) {
-            this.f1 = f1;
-            this.f2 = f2;
-            this.f3 = f3;
-            this.f4 = f4;
-            this.f5 = f5;
-        }
-    }
-
-    public static class TupleMapEntry<T> {
-        public String key;
-        public T value;
-
-        public TupleMapEntry(String key, T value) {
-            this.key = key;
-            this.value = value;
-        }
-    }
-
-    public static class Tuple2<F1, F2> {
-        public F1 f1;
-
-        public F2 f2;
-
-        public Tuple2(F1 first, F2 name) {
-            this.f1 = first;
-            this.f2 = name;
-        }
-
-    }
+    // public static class Tuple5 {
+    //     public String f1;
+    //     public String f2;
+    //     public String f3;
+    //     public String f4;
+    //     public String f5;
+    //
+    //     public Tuple5(String f1, String f2, String f3, String f4, String f5) {
+    //         this.f1 = f1;
+    //         this.f2 = f2;
+    //         this.f3 = f3;
+    //         this.f4 = f4;
+    //         this.f5 = f5;
+    //     }
+    // }
+    //
+    // public static class TupleMapEntry<T> {
+    //     public String key;
+    //     public T value;
+    //
+    //     public TupleMapEntry(String key, T value) {
+    //         this.key = key;
+    //         this.value = value;
+    //     }
+    // }
+    //
+    // public static class Tuple2<F1, F2> {
+    //     public F1 f1;
+    //
+    //     public F2 f2;
+    //
+    //     public Tuple2(F1 first, F2 name) {
+    //         this.f1 = first;
+    //         this.f2 = name;
+    //     }
+    //
+    // }
 }

+ 40 - 58
ad-engine-service/src/main/java/com/tzld/piaoquan/ad/engine/service/score/RankService683.java

@@ -5,14 +5,12 @@ import com.tzld.piaoquan.ad.engine.commons.score.ScoreParam;
 import com.tzld.piaoquan.ad.engine.commons.score.ScorerUtils;
 import com.tzld.piaoquan.ad.engine.commons.util.*;
 import com.tzld.piaoquan.ad.engine.service.feature.Feature;
-import com.tzld.piaoquan.ad.engine.service.feature.FeatureService;
 import com.tzld.piaoquan.ad.engine.service.score.dto.AdPlatformCreativeDTO;
 import com.tzld.piaoquan.ad.engine.service.score.param.RankRecommendRequestParam;
 import com.tzld.piaoquan.recommend.feature.domain.ad.base.AdRankItem;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.collections4.MapUtils;
 import org.apache.commons.lang3.StringUtils;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.xm.Similarity;
 
@@ -25,18 +23,17 @@ import java.util.stream.Collectors;
 
 @Slf4j
 @Service
-public class RankService683 {
+public class RankService683 extends RankStrategyXGBBasic {
 
     @ApolloJsonValue("${no.postback.conversion.adverids:[]}")
     private Set<String> noPostbackConversionAdVerIds;
 
-    @Autowired
-    private FeatureService featureService;
-
     private Map<String, double[]> bucketsMap = new HashMap<>();
 
     private Map<String, Double> bucketsLen = new HashMap<>();
 
+
+    @Override
     public List<AdRankItem> adItemRank(RankRecommendRequestParam request, ScoreParam scoreParam) {
 
         long ts = System.currentTimeMillis() / 1000;
@@ -165,21 +162,6 @@ public class RankService683 {
         return result;
     }
 
-    private Feature getFeature(ScoreParam param, RankRecommendRequestParam request) {
-        List<AdPlatformCreativeDTO> adIdList = request.getAdIdList();
-        List<String> cidList = adIdList.stream()
-                .map(AdPlatformCreativeDTO::getCreativeId)
-                .map(Object::toString)
-                .collect(Collectors.toList());
-
-        List<String> adVerIdList = adIdList.stream()
-                .map(AdPlatformCreativeDTO::getAdVerId)
-                .filter(StringUtils::isNotBlank)
-                .distinct()
-                .collect(Collectors.toList());
-        return featureService.getFeature(cidList, adVerIdList, param);
-    }
-
     private void handleB1Feature(Map<String, String> b1Feature, Map<String, String> cidFeatureMap, String cid) {
         cidFeatureMap.put("cid_" + cid, "0.1");
         // if (StringUtils.isNotBlank(b1Feature.get("adid"))) {
@@ -549,41 +531,41 @@ public class RankService683 {
         return newFeatureMap;
     }
 
-    public static class Tuple5 {
-        public String f1;
-        public String f2;
-        public String f3;
-        public String f4;
-        public String f5;
-
-        public Tuple5(String f1, String f2, String f3, String f4, String f5) {
-            this.f1 = f1;
-            this.f2 = f2;
-            this.f3 = f3;
-            this.f4 = f4;
-            this.f5 = f5;
-        }
-    }
-
-    public static class TupleMapEntry<T> {
-        public String key;
-        public T value;
-
-        public TupleMapEntry(String key, T value) {
-            this.key = key;
-            this.value = value;
-        }
-    }
-
-    public static class Tuple2<F1, F2> {
-        public F1 f1;
-
-        public F2 f2;
-
-        public Tuple2(F1 first, F2 name) {
-            this.f1 = first;
-            this.f2 = name;
-        }
-
-    }
+    // public static class Tuple5 {
+    //     public String f1;
+    //     public String f2;
+    //     public String f3;
+    //     public String f4;
+    //     public String f5;
+    //
+    //     public Tuple5(String f1, String f2, String f3, String f4, String f5) {
+    //         this.f1 = f1;
+    //         this.f2 = f2;
+    //         this.f3 = f3;
+    //         this.f4 = f4;
+    //         this.f5 = f5;
+    //     }
+    // }
+    //
+    // public static class TupleMapEntry<T> {
+    //     public String key;
+    //     public T value;
+    //
+    //     public TupleMapEntry(String key, T value) {
+    //         this.key = key;
+    //         this.value = value;
+    //     }
+    // }
+    //
+    // public static class Tuple2<F1, F2> {
+    //     public F1 f1;
+    //
+    //     public F2 f2;
+    //
+    //     public Tuple2(F1 first, F2 name) {
+    //         this.f1 = first;
+    //         this.f2 = name;
+    //     }
+    //
+    // }
 }

+ 2 - 56
ad-engine-service/src/main/java/com/tzld/piaoquan/ad/engine/service/score/RankService687.java

@@ -25,18 +25,16 @@ import java.util.stream.Collectors;
 
 @Slf4j
 @Service
-public class RankService687 {
+public class RankService687 extends RankStrategyXGBBasic {
 
     @ApolloJsonValue("${no.postback.conversion.adverids:[]}")
     private Set<String> noPostbackConversionAdVerIds;
 
-    @Autowired
-    private FeatureService featureService;
-
     private Map<String, double[]> bucketsMap = new HashMap<>();
 
     private Map<String, Double> bucketsLen = new HashMap<>();
 
+    @Override
     public List<AdRankItem> adItemRank(RankRecommendRequestParam request, ScoreParam scoreParam) {
 
         long ts = System.currentTimeMillis() / 1000;
@@ -170,21 +168,6 @@ public class RankService687 {
         return result;
     }
 
-    private Feature getFeature(ScoreParam param, RankRecommendRequestParam request) {
-        List<AdPlatformCreativeDTO> adIdList = request.getAdIdList();
-        List<String> cidList = adIdList.stream()
-                .map(AdPlatformCreativeDTO::getCreativeId)
-                .map(Object::toString)
-                .collect(Collectors.toList());
-
-        List<String> adVerIdList = adIdList.stream()
-                .map(AdPlatformCreativeDTO::getAdVerId)
-                .filter(StringUtils::isNotBlank)
-                .distinct()
-                .collect(Collectors.toList());
-        return featureService.getFeature(cidList, adVerIdList, param);
-    }
-
     private void handleB1Feature(Map<String, String> b1Feature, Map<String, String> cidFeatureMap, String cid) {
         cidFeatureMap.put("cid_" + cid, "0.1");
         // if (StringUtils.isNotBlank(b1Feature.get("adid"))) {
@@ -554,41 +537,4 @@ public class RankService687 {
         return newFeatureMap;
     }
 
-    public static class Tuple5 {
-        public String f1;
-        public String f2;
-        public String f3;
-        public String f4;
-        public String f5;
-
-        public Tuple5(String f1, String f2, String f3, String f4, String f5) {
-            this.f1 = f1;
-            this.f2 = f2;
-            this.f3 = f3;
-            this.f4 = f4;
-            this.f5 = f5;
-        }
-    }
-
-    public static class TupleMapEntry<T> {
-        public String key;
-        public T value;
-
-        public TupleMapEntry(String key, T value) {
-            this.key = key;
-            this.value = value;
-        }
-    }
-
-    public static class Tuple2<F1, F2> {
-        public F1 f1;
-
-        public F2 f2;
-
-        public Tuple2(F1 first, F2 name) {
-            this.f1 = first;
-            this.f2 = name;
-        }
-
-    }
 }

+ 11 - 0
ad-engine-service/src/main/java/com/tzld/piaoquan/ad/engine/service/score/RankStrategy.java

@@ -0,0 +1,11 @@
+package com.tzld.piaoquan.ad.engine.service.score;
+
+import com.tzld.piaoquan.ad.engine.commons.score.ScoreParam;
+import com.tzld.piaoquan.ad.engine.service.score.param.RankRecommendRequestParam;
+import com.tzld.piaoquan.recommend.feature.domain.ad.base.AdRankItem;
+
+import java.util.List;
+
+public interface RankStrategy {
+    List<AdRankItem> adItemRank(RankRecommendRequestParam request, ScoreParam scoreParam);
+}

+ 509 - 0
ad-engine-service/src/main/java/com/tzld/piaoquan/ad/engine/service/score/RankStrategyXGBAutoUpdateModel688.java

@@ -0,0 +1,509 @@
+package com.tzld.piaoquan.ad.engine.service.score;
+
+import com.ctrip.framework.apollo.spring.annotation.ApolloJsonValue;
+import com.tzld.piaoquan.ad.engine.commons.score.ScoreParam;
+import com.tzld.piaoquan.ad.engine.commons.score.ScorerUtils;
+import com.tzld.piaoquan.ad.engine.commons.util.*;
+import com.tzld.piaoquan.ad.engine.service.feature.Feature;
+import com.tzld.piaoquan.ad.engine.service.score.dto.AdPlatformCreativeDTO;
+import com.tzld.piaoquan.ad.engine.service.score.param.RankRecommendRequestParam;
+import com.tzld.piaoquan.recommend.feature.domain.ad.base.AdRankItem;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.collections4.MapUtils;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.stereotype.Component;
+import org.xm.Similarity;
+
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.util.*;
+import java.util.stream.Collectors;
+
+@Slf4j
+@Component
+public class RankStrategyXGBAutoUpdateModel688 extends RankStrategyXGBBasic {
+
+    @ApolloJsonValue("${no.postback.conversion.adverids:[]}")
+    private Set<String> noPostbackConversionAdVerIds;
+
+    private Map<String, double[]> bucketsMap = new HashMap<>();
+
+    private Map<String, Double> bucketsLen = new HashMap<>();
+
+    @Override
+    public List<AdRankItem> adItemRank(RankRecommendRequestParam request, ScoreParam scoreParam) {
+
+        long ts = System.currentTimeMillis() / 1000;
+
+        String brand = scoreParam.getRequestContext().getMachineinfoBrand();
+        if (StringUtils.isNotEmpty(brand)) {
+            scoreParam.getRequestContext().setMachineinfoBrand(brand + "-n");
+        }
+
+        // 特征处理
+        Feature feature = this.getFeature(scoreParam, request);
+
+        Map<String, Map<String, String>> userFeature = feature.getUserFeature();
+        Map<String, Map<String, String>> videoFeature = feature.getVideoFeature();
+        Map<String, Map<String, Map<String, String>>> allAdVerFeature = feature.getAdVerFeature();
+        Map<String, Map<String, Map<String, String>>> allCidFeature = feature.getCidFeature();
+
+        Map<String, String> userFeatureMap = new HashMap<>();
+        Map<String, String> c1Feature = userFeature.getOrDefault("alg_mid_feature_ad_action", new HashMap<>());
+        List<TupleMapEntry<Tuple5>> midActionList = this.handleC1Feature(c1Feature, userFeatureMap);
+
+        Map<String, Double> midTimeDiffMap = this.parseC1FeatureListToTimeDiffMap(midActionList, ts);
+        Map<String, Double> actionStaticMap = this.parseC1FeatureListToActionStaticMap(midActionList);
+
+        Map<String, String> d2Feature = videoFeature.getOrDefault("alg_cid_feature_vid_cf_rank", new HashMap<>());
+        Map<String, String> d3Feature = videoFeature.getOrDefault("alg_vid_feature_basic_info", new HashMap<>());
+
+        Map<String, Map<String, Double>> vidRankMaps = this.parseD2FeatureMap(d2Feature);
+
+        Map<String, String> e1Feature = userFeature.getOrDefault("alg_mid_feature_return_tags", new HashMap<>());
+        Map<String, String> e2Feature = userFeature.getOrDefault("alg_mid_feature_share_tags", new HashMap<>());
+
+        Map<String, String> sceneFeatureMap = this.handleSceneFeature(ts);
+
+        List<AdRankItem> adRankItems = new ArrayList<>(request.getAdIdList().size());
+        for (AdPlatformCreativeDTO dto : request.getAdIdList()) {
+            AdRankItem adRankItem = new AdRankItem();
+            adRankItem.setAdId(dto.getCreativeId());
+            adRankItem.setCreativeCode(dto.getCreativeCode());
+            adRankItem.setAdVerId(dto.getAdVerId());
+            adRankItem.setVideoId(request.getVideoId());
+            adRankItem.setCpa(dto.getCpa());
+            adRankItem.setId(dto.getAdId());
+            adRankItem.setCampaignId(dto.getCampaignId());
+            adRankItem.setCpm(ObjUtil.nullOrDefault(dto.getCpm(), 90).doubleValue());
+
+            String cidStr = dto.getCreativeId().toString();
+            Map<String, String> cidFeatureMap = new HashMap<>();
+            Map<String, Map<String, String>> cidFeature = allCidFeature.getOrDefault(cidStr, new HashMap<>());
+            Map<String, String> b1Feature = cidFeature.getOrDefault("alg_cid_feature_basic_info", new HashMap<>());
+
+            Map<String, Map<String, String>> adVerFeature = allAdVerFeature.getOrDefault(dto.getAdVerId(), new HashMap<>());
+
+            Map<String, String> d1Feature = cidFeature.getOrDefault("alg_cid_feature_vid_cf", new HashMap<>());
+
+            this.handleB1Feature(b1Feature, cidFeatureMap, cidStr);
+
+            this.handleB2ToB5AndB8ToB9Feature(cidFeature, adVerFeature, cidFeatureMap);
+
+            this.handleB6ToB7Feature(cidFeature, cidFeatureMap);
+
+            this.handleC1UIFeature(midTimeDiffMap, actionStaticMap, cidFeatureMap, cidStr);
+
+            this.handleD1Feature(d1Feature, cidFeatureMap);
+
+            this.handleD2Feature(vidRankMaps, cidFeatureMap, cidStr);
+
+            String title = b1Feature.getOrDefault("cidtitle", "");
+            this.handleE1AndE2Feature(e1Feature, e2Feature, title, cidFeatureMap);
+
+            this.handleD3AndB1Feature(d3Feature, title, cidFeatureMap);
+
+            adRankItem.setFeatureMap(cidFeatureMap);
+
+            adRankItems.add(adRankItem);
+
+        }
+
+        // 分桶
+        this.readBucketFile();
+        userFeatureMap = this.featureBucket(userFeatureMap);
+        for (AdRankItem adRankItem : adRankItems) {
+            Map<String, String> featureMap = adRankItem.getFeatureMap();
+            adRankItem.setFeatureMap(this.featureBucket(featureMap));
+        }
+
+        // 打分排序
+        List<AdRankItem> result = ScorerUtils.getScorerPipeline(ScorerUtils.XGBOOST_SCORE_CONF_20240909).scoring(sceneFeatureMap, userFeatureMap, adRankItems);
+        for (AdRankItem item : result) {
+            item.setScore(item.getLrScore() * item.getCpa());
+            item.getScoreMap().put("cpa", item.getCpa());
+            item.getScoreMap().put("cpm", item.getCpm());
+            item.getFeatureMap().putAll(userFeatureMap);
+            item.getFeatureMap().putAll(sceneFeatureMap);
+
+            // 没有转化回传的广告主,使用后台配置的CPM
+            if (noPostbackConversionAdVerIds.contains(item.getAdVerId())) {
+                item.setScore(item.getCpm() / 1000);
+            }
+
+            for (Map.Entry<String, Map<String, String>> entry : videoFeature.entrySet()) {
+                if (MapUtils.isNotEmpty(entry.getValue())) {
+                    item.getMetaFeatureMap().put(entry.getKey(), entry.getValue());
+                }
+            }
+
+            for (Map.Entry<String, Map<String, String>> entry : userFeature.entrySet()) {
+                if (MapUtils.isNotEmpty(entry.getValue())) {
+                    item.getMetaFeatureMap().put(entry.getKey(), entry.getValue());
+                }
+            }
+
+            Map<String, Map<String, String>> adVerFeature = allAdVerFeature.getOrDefault(item.getAdVerId(), new HashMap<>());
+            for (Map.Entry<String, Map<String, String>> entry : adVerFeature.entrySet()) {
+                if (MapUtils.isNotEmpty(entry.getValue())) {
+                    item.getMetaFeatureMap().put(entry.getKey(), entry.getValue());
+                }
+            }
+
+            Map<String, Map<String, String>> cidFeature = allCidFeature.getOrDefault(String.valueOf(item.getAdId()), new HashMap<>());
+            for (Map.Entry<String, Map<String, String>> entry : cidFeature.entrySet()) {
+                if (MapUtils.isNotEmpty(entry.getValue())) {
+                    item.getMetaFeatureMap().put(entry.getKey(), entry.getValue());
+                }
+            }
+        }
+
+        result.sort(ComparatorUtil.equalsRandomComparator());
+
+        return result;
+    }
+
+    private void handleB1Feature(Map<String, String> b1Feature, Map<String, String> cidFeatureMap, String cid) {
+        cidFeatureMap.put("cid_" + cid, "0.1");
+        // if (StringUtils.isNotBlank(b1Feature.get("adid"))) {
+        //     String adId = b1Feature.get("adid");
+        //     cidFeatureMap.put("adid_" + adId, idDefaultValue);
+        // }
+        if (StringUtils.isNotBlank(b1Feature.get("adverid"))) {
+            String adVerId = b1Feature.get("adverid");
+            cidFeatureMap.put("adverid_" + adVerId, "0.1");
+        }
+        // if (StringUtils.isNotBlank(b1Feature.get("targeting_conversion"))) {
+        //     String targetingConversion = b1Feature.get("targeting_conversion");
+        //     cidFeatureMap.put("targeting_conversion_" + targetingConversion, idDefaultValue);
+        // }
+        if (StringUtils.isNotBlank(b1Feature.get("cpa"))) {
+            String cpa = b1Feature.get("cpa");
+            cidFeatureMap.put("cpa", cpa);
+        }
+    }
+
+    private void handleB2ToB5AndB8ToB9Feature(Map<String, Map<String, String>> c1Feature, Map<String, Map<String, String>> adVerFeature, Map<String, String> cidFeatureMap) {
+        Map<String, String> b2Feature = adVerFeature.getOrDefault("alg_cid_feature_adver_action", new HashMap<>());
+        Map<String, String> b3Feature = c1Feature.getOrDefault("alg_cid_feature_cid_action", new HashMap<>());
+        Map<String, String> b4Feature = c1Feature.getOrDefault("alg_cid_feature_region_action", new HashMap<>());
+        Map<String, String> b5Feature = c1Feature.getOrDefault("alg_cid_feature_app_action", new HashMap<>());
+        Map<String, String> b8Feature = c1Feature.getOrDefault("alg_cid_feature_brand_action", new HashMap<>());
+        Map<String, String> b9Feature = c1Feature.getOrDefault("alg_cid_feature_weChatVersion_action", new HashMap<>());
+
+        List<String> timeList = Arrays.asList("1h", "2h", "3h", "6h", "12h", "1d", "3d", "7d", "yesterday", "today");
+        List<Tuple2<Map<String, String>, String>> featureList = Arrays.asList(new Tuple2<>(b2Feature, "b2"), new Tuple2<>(b3Feature, "b3"), new Tuple2<>(b4Feature, "b4"), new Tuple2<>(b5Feature, "b5"), new Tuple2<>(b8Feature, "b8"), new Tuple2<>(b9Feature, "b9"));
+        for (Tuple2<Map<String, String>, String> tuple2 : featureList) {
+            Map<String, String> feature = tuple2.f1;
+            String prefix = tuple2.f2;
+            for (String time : timeList) {
+                double view = Double.parseDouble(feature.getOrDefault("ad_view_" + time, "0"));
+                double click = Double.parseDouble(feature.getOrDefault("ad_click_" + time, "0"));
+                double conver = Double.parseDouble(feature.getOrDefault("ad_conversion_" + time, "0"));
+                double income = Double.parseDouble(feature.getOrDefault("ad_income_" + time, "0"));
+                double f2 = NumUtil.div(conver, view);
+                cidFeatureMap.put(prefix + "_" + time + "_ctr", String.valueOf(NumUtil.div(click, view)));
+                cidFeatureMap.put(prefix + "_" + time + "_ctcvr", String.valueOf(f2));
+                cidFeatureMap.put(prefix + "_" + time + "_cvr", String.valueOf(NumUtil.div(conver, click)));
+                cidFeatureMap.put(prefix + "_" + time + "_conver", String.valueOf(conver));
+                // cidFeatureMap.put(prefix + "_" + time + "_ecpm", String.valueOf(NumUtil.div(income * 1000, view)));
+
+                cidFeatureMap.put(prefix + "_" + time + "_click", String.valueOf(click));
+                cidFeatureMap.put(prefix + "_" + time + "_conver*log(view)", String.valueOf(conver * NumUtil.log(view)));
+                cidFeatureMap.put(prefix + "_" + time + "_conver*ctcvr", String.valueOf(conver * f2));
+            }
+        }
+
+    }
+
+    private void handleB6ToB7Feature(Map<String, Map<String, String>> c1Feature, Map<String, String> cidFeatureMap) {
+        Map<String, String> b6Feature = c1Feature.getOrDefault("alg_cid_feature_week_action", new HashMap<>());
+        Map<String, String> b7Feature = c1Feature.getOrDefault("alg_cid_feature_hour_action", new HashMap<>());
+
+        List<String> timeList = Arrays.asList("7d", "14d");
+        List<Tuple2<Map<String, String>, String>> featureList = Arrays.asList(new Tuple2<>(b6Feature, "b6"), new Tuple2<>(b7Feature, "b7"));
+        for (Tuple2<Map<String, String>, String> tuple2 : featureList) {
+            Map<String, String> feature = tuple2.f1;
+            String prefix = tuple2.f2;
+            for (String time : timeList) {
+                double view = Double.parseDouble(feature.getOrDefault("ad_view_" + time, "0"));
+                double click = Double.parseDouble(feature.getOrDefault("ad_click_" + time, "0"));
+                double conver = Double.parseDouble(feature.getOrDefault("ad_conversion_" + time, "0"));
+                double income = Double.parseDouble(feature.getOrDefault("ad_income_" + time, "0"));
+                double f2 = NumUtil.div(conver, view);
+                cidFeatureMap.put(prefix + "_" + time + "_ctr", String.valueOf(NumUtil.div(click, view)));
+                cidFeatureMap.put(prefix + "_" + time + "_ctcvr", String.valueOf(f2));
+                cidFeatureMap.put(prefix + "_" + time + "_cvr", String.valueOf(NumUtil.div(conver, click)));
+                cidFeatureMap.put(prefix + "_" + time + "_conver", String.valueOf(conver));
+                // cidFeatureMap.put(prefix + "_" + time + "_ecpm", String.valueOf(NumUtil.div(income * 1000, view)));
+
+                cidFeatureMap.put(prefix + "_" + time + "_click", String.valueOf(click));
+                cidFeatureMap.put(prefix + "_" + time + "_conver*log(view)", String.valueOf(conver * NumUtil.log(view)));
+                cidFeatureMap.put(prefix + "_" + time + "_conver*ctcvr", String.valueOf(conver * f2));
+            }
+        }
+
+    }
+
+    private List<TupleMapEntry<Tuple5>> handleC1Feature(Map<String, String> c1Feature, Map<String, String> featureMap) {
+
+        // 用户特征
+        List<TupleMapEntry<Tuple5>> midActionList = new ArrayList<>();
+        if (c1Feature.containsKey("action")) {
+            String action = c1Feature.get("action");
+            midActionList = Arrays.stream(action.split(",")).map(r -> {
+                        String[] rList = r.split(":");
+                        Tuple5 tuple5 = new Tuple5(rList[1], rList[2], rList[3], rList[4], rList[5]);
+                        return new TupleMapEntry<>(rList[0], tuple5);
+                    })
+                    // TODO 倒排
+                    .sorted((a, b) -> Integer.compare(Integer.parseInt(b.value.f1), Integer.parseInt(a.value.f1))).collect(Collectors.toList());
+        }
+
+        double viewAll = midActionList.size();
+        double clickAll = midActionList.stream().mapToInt(e -> Integer.parseInt(e.value.f2)).sum();
+        double converAll = midActionList.stream().mapToInt(e -> Integer.parseInt(e.value.f3)).sum();
+        double incomeAll = midActionList.stream().mapToInt(e -> Integer.parseInt(e.value.f4)).sum();
+        featureMap.put("viewAll", String.valueOf(viewAll));
+        featureMap.put("clickAll", String.valueOf(clickAll));
+        featureMap.put("converAll", String.valueOf(converAll));
+        featureMap.put("incomeAll", String.valueOf(incomeAll));
+        featureMap.put("ctr_all", String.valueOf(NumUtil.div(clickAll, viewAll)));
+        featureMap.put("ctcvr_all", String.valueOf(NumUtil.div(converAll, viewAll)));
+        featureMap.put("cvr_all", String.valueOf(NumUtil.div(clickAll, converAll)));
+        // featureMap.put("ecpm_all", String.valueOf(NumUtil.div(incomeAll * 1000, viewAll)));
+
+        return midActionList;
+    }
+
+    private void handleC1UIFeature(Map<String, Double> midTimeDiffMap, Map<String, Double> midActionStatic, Map<String, String> featureMap, String cid) {
+        if (midTimeDiffMap.containsKey("timediff_view_" + cid)) {
+            featureMap.put("timediff_view", String.valueOf(midTimeDiffMap.getOrDefault("timediff_view_" + cid, 0.0)));
+        }
+        if (midTimeDiffMap.containsKey("timediff_click_" + cid)) {
+            featureMap.put("timediff_click", String.valueOf(midTimeDiffMap.getOrDefault("timediff_click_" + cid, 0.0)));
+        }
+        if (midTimeDiffMap.containsKey("timediff_conver_" + cid)) {
+            featureMap.put("timediff_conver", String.valueOf(midTimeDiffMap.getOrDefault("timediff_conver_" + cid, 0.0)));
+        }
+        if (midActionStatic.containsKey("actionstatic_view_" + cid)) {
+            featureMap.put("actionstatic_view", String.valueOf(midActionStatic.getOrDefault("actionstatic_view_" + cid, 0.0)));
+        }
+        if (midActionStatic.containsKey("actionstatic_click_" + cid)) {
+            featureMap.put("actionstatic_click", String.valueOf(midActionStatic.getOrDefault("actionstatic_click_" + cid, 0.0)));
+        }
+        if (midActionStatic.containsKey("actionstatic_conver_" + cid)) {
+            featureMap.put("actionstatic_conver", String.valueOf(midActionStatic.getOrDefault("actionstatic_conver_" + cid, 0.0)));
+        }
+        if (midActionStatic.containsKey("actionstatic_income_" + cid)) {
+            featureMap.put("actionstatic_income", String.valueOf(midActionStatic.getOrDefault("actionstatic_income_" + cid, 0.0)));
+        }
+        if (midActionStatic.containsKey("actionstatic_view_" + cid) && midActionStatic.containsKey("actionstatic_click_" + cid)) {
+            double ctr = NumUtil.div(midActionStatic.getOrDefault("actionstatic_click_" + cid, 0.0), midActionStatic.getOrDefault("actionstatic_view_" + cid, 0.0));
+            featureMap.put("actionstatic_ctr", String.valueOf(ctr));
+        }
+        if (midActionStatic.containsKey("actionstatic_view_" + cid) && midActionStatic.containsKey("actionstatic_conver_" + cid)) {
+            double ctcvr = NumUtil.div(midActionStatic.getOrDefault("actionstatic_conver_" + cid, 0.0), midActionStatic.getOrDefault("actionstatic_view_" + cid, 0.0));
+            featureMap.put("actionstatic_ctcvr", String.valueOf(ctcvr));
+        }
+        if (midActionStatic.containsKey("actionstatic_conver_" + cid) && midActionStatic.containsKey("actionstatic_click_" + cid)) {
+            double cvr = NumUtil.div(midActionStatic.getOrDefault("actionstatic_conver_" + cid, 0.0), midActionStatic.getOrDefault("actionstatic_click_" + cid, 0.0));
+            featureMap.put("actionstatic_cvr", String.valueOf(cvr));
+        }
+    }
+
+    private void handleD1Feature(Map<String, String> d1Feature, Map<String, String> featureMap) {
+        for (String prefix : Arrays.asList("3h", "6h", "12h", "1d", "3d", "7d")) {
+            double view = Double.parseDouble(d1Feature.getOrDefault("ad_view_" + prefix, "0"));
+            double click = Double.parseDouble(d1Feature.getOrDefault("ad_click_" + prefix, "0"));
+            double conver = Double.parseDouble(d1Feature.getOrDefault("ad_conversion_" + prefix, "0"));
+            double income = Double.parseDouble(d1Feature.getOrDefault("ad_income_" + prefix, "0"));
+            featureMap.put("d1_feature_" + prefix + "_ctr", String.valueOf(NumUtil.div(click, view)));
+            featureMap.put("d1_feature_" + prefix + "_ctcvr", String.valueOf(NumUtil.div(conver, view)));
+            featureMap.put("d1_feature_" + prefix + "_cvr", String.valueOf(NumUtil.div(conver, click)));
+            featureMap.put("d1_feature_" + prefix + "_conver", String.valueOf(conver));
+            // featureMap.put("d1_feature_" + prefix + "_ecpm", String.valueOf(NumUtil.div(income * 1000, view)));
+        }
+    }
+
+    private void handleD2Feature(Map<String, Map<String, Double>> vidRankMaps, Map<String, String> featureMap, String cid) {
+        if (MapUtils.isEmpty(vidRankMaps)) {
+            return;
+        }
+
+        // List<String> prefixes1 = Arrays.asList("ctr", "ctcvr", "ecpm");
+        List<String> prefixes1 = Arrays.asList("ctr", "ctcvr");
+        List<String> prefixes2 = Arrays.asList("1d", "3d", "7d", "14d");
+
+        for (String prefix1 : prefixes1) {
+            for (String prefix2 : prefixes2) {
+                String combinedKey = prefix1 + "_" + prefix2;
+                if (vidRankMaps.containsKey(combinedKey)) {
+                    Double rank = vidRankMaps.get(combinedKey).getOrDefault(cid, 0.0);
+                    if (rank >= 1.0) {
+                        featureMap.put("vid_rank_" + combinedKey, String.valueOf(NumUtil.div(1, rank)));
+                    }
+                }
+            }
+        }
+    }
+
+    private void handleD3AndB1Feature(Map<String, String> d3Feature, String cTitle, Map<String, String> featureMap) {
+        if (MapUtils.isEmpty(d3Feature) || !d3Feature.containsKey("title") || StringUtils.isEmpty(cTitle)) {
+            return;
+        }
+        String vTitle = d3Feature.get("title");
+        double score = Similarity.conceptSimilarity(cTitle, vTitle);
+        featureMap.put("ctitle_vtitle_similarity", String.valueOf(score));
+    }
+
+    private void handleE1AndE2Feature(Map<String, String> e1Feature, Map<String, String> e2Feature, String title, Map<String, String> featureMap) {
+        if (StringUtils.isEmpty(title)) {
+            return;
+        }
+
+        List<Tuple2<Map<String, String>, String>> tuple2List = Arrays.asList(new Tuple2<>(e1Feature, "e1"), new Tuple2<>(e2Feature, "e2"));
+
+        List<String> tagsFieldList = Arrays.asList("tags_3d", "tags_7d", "tags_14d");
+        for (Tuple2<Map<String, String>, String> tuple2 : tuple2List) {
+            Map<String, String> feature = tuple2.f1;
+            String prefix = tuple2.f2;
+            if (MapUtils.isEmpty(feature)) {
+                continue;
+            }
+
+            for (String tagsField : tagsFieldList) {
+                if (StringUtils.isNotEmpty(feature.get(tagsField))) {
+                    String tags = feature.get(tagsField);
+                    Double[] doubles = ExtractorUtils.funcC34567ForTags(tags, title);
+                    featureMap.put(prefix + "_" + tagsField + "_matchnum", String.valueOf(doubles[0]));
+                    featureMap.put(prefix + "_" + tagsField + "_maxscore", String.valueOf(doubles[1]));
+                    featureMap.put(prefix + "_" + tagsField + "_avgscore", String.valueOf(doubles[2]));
+                }
+            }
+        }
+    }
+
+    private Map<String, Double> parseC1FeatureListToTimeDiffMap(List<TupleMapEntry<Tuple5>> midActionList, long ts) {
+        Map<String, Double> midTimeDiffMap = new HashMap<>();
+        for (TupleMapEntry<Tuple5> entry : midActionList) {
+            String cid = entry.key;
+            double tsHistory = Double.parseDouble(entry.value.f1);
+            double click = Double.parseDouble(entry.value.f2);
+            double conver = Double.parseDouble(entry.value.f3);
+            double d = (ts - tsHistory) / 3600 / 24;
+            if (!midTimeDiffMap.containsKey("timediff_view_" + cid)) {
+                midTimeDiffMap.put("timediff_view_" + cid, NumUtil.div(1, d));
+            }
+            if (!midTimeDiffMap.containsKey("timediff_click_" + cid) && click > 0) {
+                midTimeDiffMap.put("timediff_click_" + cid, NumUtil.div(1, d));
+            }
+            if (!midTimeDiffMap.containsKey("timediff_conver_" + cid) && conver > 0) {
+                midTimeDiffMap.put("timediff_conver_" + cid, NumUtil.div(1, d));
+            }
+        }
+        return midTimeDiffMap;
+    }
+
+    private Map<String, Double> parseC1FeatureListToActionStaticMap(List<TupleMapEntry<Tuple5>> midActionList) {
+        Map<String, Double> midActionStaticsMap = new HashMap<>();
+        for (TupleMapEntry<Tuple5> entry : midActionList) {
+            String cid = entry.key;
+            double click = Double.parseDouble(entry.value.f2);
+            double conver = Double.parseDouble(entry.value.f3);
+            double income = Double.parseDouble(entry.value.f4);
+
+            Double viewSum = midActionStaticsMap.getOrDefault("actionstatic_view_" + cid, 0.0);
+            midActionStaticsMap.put("actionstatic_view_" + cid, 1 + viewSum);
+
+            Double clickSum = midActionStaticsMap.getOrDefault("actionstatic_click_" + cid, 0.0);
+            midActionStaticsMap.put("actionstatic_click_" + cid, clickSum + click);
+
+            Double converSum = midActionStaticsMap.getOrDefault("actionstatic_conver_" + cid, 0.0);
+            midActionStaticsMap.put("actionstatic_conver_" + cid, converSum + conver);
+
+            Double incomSum = midActionStaticsMap.getOrDefault("actionstatic_income_" + cid, 0.0);
+            midActionStaticsMap.put("actionstatic_income_" + cid, incomSum + income);
+        }
+
+        return midActionStaticsMap;
+    }
+
+    private Map<String, Map<String, Double>> parseD2FeatureMap(Map<String, String> d2Feature) {
+        Map<String, Map<String, Double>> vidRankMaps = new HashMap<>();
+        for (Map.Entry<String, String> entry : d2Feature.entrySet()) {
+            String key = entry.getKey();
+            String value = entry.getValue();
+            Map<String, Double> valueMap = Arrays.stream(value.split(",")).map(r -> r.split(":")).collect(Collectors.toMap(rList -> rList[0], rList -> Double.parseDouble(rList[2])));
+            vidRankMaps.put(key, valueMap);
+        }
+        return vidRankMaps;
+    }
+
+    public Map<String, String> handleSceneFeature(long ts) {
+        Map<String, String> sceneFeatureMap = new HashMap<>();
+        sceneFeatureMap.put("hour_" + DateUtils.getHourByTimestamp(ts), "0.1");
+        sceneFeatureMap.put("dayofweek_" + DateUtils.getDayOrWeekByTimestamp(ts), "0.1");
+        return sceneFeatureMap;
+    }
+
+    private void readBucketFile() {
+        if (MapUtils.isNotEmpty(bucketsMap)) {
+            return;
+        }
+        synchronized (this) {
+            InputStream resourceStream = RankService687.class.getClassLoader().getResourceAsStream("20240718_ad_bucket_688.txt");
+            if (resourceStream != null) {
+                try (BufferedReader reader = new BufferedReader(new InputStreamReader(resourceStream))) {
+                    Map<String, double[]> bucketsMap = new HashMap<>();
+                    Map<String, Double> bucketsLen = new HashMap<>();
+                    String line;
+                    while ((line = reader.readLine()) != null) {
+                        // 替换空格和换行符,过滤空行
+                        line = line.replace(" ", "").replaceAll("\n", "");
+                        if (!line.isEmpty()) {
+                            String[] rList = line.split("\t");
+                            if (rList.length == 3) {
+                                String key = rList[0];
+                                double value1 = Double.parseDouble(rList[1]);
+                                bucketsLen.put(key, value1);
+                                double[] value2 = Arrays.stream(rList[2].split(",")).mapToDouble(Double::valueOf).toArray();
+                                bucketsMap.put(key, value2);
+                            }
+                        }
+                    }
+                    this.bucketsMap = bucketsMap;
+                    this.bucketsLen = bucketsLen;
+                } catch (IOException e) {
+                    log.error("something is wrong in parse bucket file:", e);
+                }
+            } else {
+                log.error("no bucket file");
+            }
+        }
+    }
+
+    private Map<String, String> featureBucket(Map<String, String> featureMap) {
+        Map<String, String> newFeatureMap = new HashMap<>(featureMap.size());
+        for (Map.Entry<String, String> entry : featureMap.entrySet()) {
+            String name = entry.getKey();
+            double score = Double.parseDouble(entry.getValue());
+            // 注意:0值、不在分桶文件中的特征,会被过滤掉。
+            if (score > 1E-8) {
+                if (this.bucketsMap.containsKey(name) && this.bucketsLen.containsKey(name)) {
+                    double[] buckets = this.bucketsMap.get(name);
+                    double bucketNum = this.bucketsLen.get(name);
+                    Double scoreNew = 1.0 / bucketNum * (ExtractorUtils.findInsertPosition(buckets, score) + 1.0);
+                    newFeatureMap.put(name, String.valueOf(scoreNew));
+                } else {
+                    newFeatureMap.put(name, String.valueOf(score));
+                }
+            }
+        }
+
+        return newFeatureMap;
+    }
+
+}

+ 71 - 0
ad-engine-service/src/main/java/com/tzld/piaoquan/ad/engine/service/score/RankStrategyXGBBasic.java

@@ -0,0 +1,71 @@
+package com.tzld.piaoquan.ad.engine.service.score;
+
+import com.tzld.piaoquan.ad.engine.commons.score.ScoreParam;
+import com.tzld.piaoquan.ad.engine.service.feature.Feature;
+import com.tzld.piaoquan.ad.engine.service.feature.FeatureService;
+import com.tzld.piaoquan.ad.engine.service.score.dto.AdPlatformCreativeDTO;
+import com.tzld.piaoquan.ad.engine.service.score.param.RankRecommendRequestParam;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+
+import java.util.List;
+import java.util.stream.Collectors;
+
+public abstract class RankStrategyXGBBasic implements RankStrategy {
+
+    @Autowired
+    private FeatureService featureService;
+
+    protected Feature getFeature(ScoreParam param, RankRecommendRequestParam request) {
+        List<AdPlatformCreativeDTO> adIdList = request.getAdIdList();
+        List<String> cidList = adIdList.stream()
+                .map(AdPlatformCreativeDTO::getCreativeId)
+                .map(Object::toString)
+                .collect(Collectors.toList());
+
+        List<String> adVerIdList = adIdList.stream()
+                .map(AdPlatformCreativeDTO::getAdVerId)
+                .filter(StringUtils::isNotBlank)
+                .distinct()
+                .collect(Collectors.toList());
+        return featureService.getFeature(cidList, adVerIdList, param);
+    }
+
+    protected static class Tuple5 {
+        public String f1;
+        public String f2;
+        public String f3;
+        public String f4;
+        public String f5;
+
+        public Tuple5(String f1, String f2, String f3, String f4, String f5) {
+            this.f1 = f1;
+            this.f2 = f2;
+            this.f3 = f3;
+            this.f4 = f4;
+            this.f5 = f5;
+        }
+    }
+
+    protected static class TupleMapEntry<T> {
+        public String key;
+        public T value;
+
+        public TupleMapEntry(String key, T value) {
+            this.key = key;
+            this.value = value;
+        }
+    }
+
+    protected static class Tuple2<F1, F2> {
+        public F1 f1;
+
+        public F2 f2;
+
+        public Tuple2(F1 first, F2 name) {
+            this.f1 = first;
+            this.f2 = name;
+        }
+
+    }
+}

+ 3 - 2
ad-engine-service/src/main/java/com/tzld/piaoquan/ad/engine/service/score/param/BidRankRecommendRequestParam.java → ad-engine-service/src/main/java/com/tzld/piaoquan/ad/engine/service/score/deprecated/BidRankRecommendRequestParam.java

@@ -1,12 +1,13 @@
-package com.tzld.piaoquan.ad.engine.service.score.param;
+package com.tzld.piaoquan.ad.engine.service.score.deprecated;
 
 import com.tzld.piaoquan.ad.engine.service.score.dto.AdPlatformCreativeDTO;
+import com.tzld.piaoquan.ad.engine.service.score.param.RecommendRequestParam;
 import lombok.Data;
 
 import java.util.List;
 
 @Data
-public class BidRankRecommendRequestParam extends RecommendRequestParam{
+public class BidRankRecommendRequestParam extends RecommendRequestParam {
 
      List<AdPlatformCreativeDTO> creativeList;
 

+ 1 - 2
ad-engine-service/src/main/java/com/tzld/piaoquan/ad/engine/service/score/impl/RankServiceThompsonImpl.java → ad-engine-service/src/main/java/com/tzld/piaoquan/ad/engine/service/score/deprecated/RankServiceThompsonImpl.java

@@ -1,4 +1,4 @@
-package com.tzld.piaoquan.ad.engine.service.score.impl;
+package com.tzld.piaoquan.ad.engine.service.score.deprecated;
 
 import com.tzld.piaoquan.ad.engine.commons.score.ScoreParam;
 import com.tzld.piaoquan.ad.engine.commons.score.ScorerUtils;
@@ -7,7 +7,6 @@ import com.tzld.piaoquan.ad.engine.service.remote.FeatureRemoteService;
 import com.tzld.piaoquan.ad.engine.service.score.RankService;
 import com.tzld.piaoquan.ad.engine.service.score.convert.RequestConvert;
 import com.tzld.piaoquan.ad.engine.service.score.dto.AdPlatformCreativeDTO;
-import com.tzld.piaoquan.ad.engine.service.score.param.BidRankRecommendRequestParam;
 import com.tzld.piaoquan.ad.engine.service.score.param.RankRecommendRequestParam;
 import com.tzld.piaoquan.recommend.feature.domain.ad.base.AdRankItem;
 import com.tzld.piaoquan.recommend.feature.domain.ad.base.UserAdFeature;

+ 1 - 2
ad-engine-service/src/main/java/com/tzld/piaoquan/ad/engine/service/score/Share0MergeBreakScorer.java → ad-engine-service/src/main/java/com/tzld/piaoquan/ad/engine/service/score/deprecated/Share0MergeBreakScorer.java

@@ -1,4 +1,4 @@
-package com.tzld.piaoquan.ad.engine.service.score;
+package com.tzld.piaoquan.ad.engine.service.score.deprecated;
 
 
 import com.tzld.piaoquan.ad.engine.commons.score.BaseLRModelScorer;
@@ -9,7 +9,6 @@ import com.tzld.piaoquan.recommend.feature.domain.ad.base.UserAdFeature;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import java.math.BigDecimal;
 import java.util.Collections;
 import java.util.List;
 

+ 1 - 2
ad-engine-service/src/main/java/com/tzld/piaoquan/ad/engine/service/score/impl/TacticsAndLRModelScoreRankService.java → ad-engine-service/src/main/java/com/tzld/piaoquan/ad/engine/service/score/deprecated/TacticsAndLRModelScoreRankService.java

@@ -1,6 +1,5 @@
-package com.tzld.piaoquan.ad.engine.service.score.impl;
+package com.tzld.piaoquan.ad.engine.service.score.deprecated;
 
-import com.alibaba.fastjson.JSONObject;
 import com.tzld.piaoquan.ad.engine.commons.score.ScoreParam;
 import com.tzld.piaoquan.ad.engine.commons.util.NumUtil;
 import com.tzld.piaoquan.ad.engine.service.score.RankService680;

+ 1 - 1
ad-engine-service/src/main/java/com/tzld/piaoquan/ad/engine/service/score/VideoAdThompsonScorer.java → ad-engine-service/src/main/java/com/tzld/piaoquan/ad/engine/service/score/deprecated/VideoAdThompsonScorer.java

@@ -1,4 +1,4 @@
-package com.tzld.piaoquan.ad.engine.service.score;
+package com.tzld.piaoquan.ad.engine.service.score.deprecated;
 
 import com.tzld.piaoquan.ad.engine.commons.score.BaseThompsonSamplingScorer;
 import com.tzld.piaoquan.ad.engine.commons.score.ScoreParam;

+ 1 - 1
ad-engine-service/src/main/java/com/tzld/piaoquan/ad/engine/service/score/VideoAdThompsonScorerV2.java → ad-engine-service/src/main/java/com/tzld/piaoquan/ad/engine/service/score/deprecated/VideoAdThompsonScorerV2.java

@@ -1,4 +1,4 @@
-package com.tzld.piaoquan.ad.engine.service.score;
+package com.tzld.piaoquan.ad.engine.service.score.deprecated;
 
 import com.alibaba.fastjson.JSON;
 import com.google.gson.Gson;

+ 2 - 1
ad-engine-service/src/main/java/com/tzld/piaoquan/ad/engine/service/score/VlogAdBreakScorer.java → ad-engine-service/src/main/java/com/tzld/piaoquan/ad/engine/service/score/deprecated/VlogAdBreakScorer.java

@@ -1,4 +1,4 @@
-package com.tzld.piaoquan.ad.engine.service.score;
+package com.tzld.piaoquan.ad.engine.service.score.deprecated;
 
 
 import com.tzld.piaoquan.ad.engine.commons.redis.AlgorithmRedisHelper;
@@ -7,6 +7,7 @@ import com.tzld.piaoquan.ad.engine.commons.score.ScoreParam;
 import com.tzld.piaoquan.ad.engine.commons.score.ScorerConfigInfo;
 import com.tzld.piaoquan.ad.engine.service.predict.config.AdOutV1OnlineWeightConfig;
 import com.tzld.piaoquan.ad.engine.service.predict.constant.RuleRedisKeyConst;
+import com.tzld.piaoquan.ad.engine.service.score.ServiceBeanFactory;
 import com.tzld.piaoquan.recommend.feature.domain.ad.base.AdRankItem;
 import com.tzld.piaoquan.recommend.feature.domain.ad.base.UserAdFeature;
 import org.apache.commons.lang3.math.NumberUtils;

+ 1 - 1
ad-engine-service/src/main/java/com/tzld/piaoquan/ad/engine/service/score/VlogAdCtrCalibrationScorer.java → ad-engine-service/src/main/java/com/tzld/piaoquan/ad/engine/service/score/deprecated/VlogAdCtrCalibrationScorer.java

@@ -1,4 +1,4 @@
-package com.tzld.piaoquan.ad.engine.service.score;
+package com.tzld.piaoquan.ad.engine.service.score.deprecated;
 
 
 import com.tzld.piaoquan.ad.engine.commons.score.BaseCalibrationScorer;

+ 1 - 2
ad-engine-service/src/main/java/com/tzld/piaoquan/ad/engine/service/score/VlogAdCtrLRScorer.java → ad-engine-service/src/main/java/com/tzld/piaoquan/ad/engine/service/score/deprecated/VlogAdCtrLRScorer.java

@@ -1,4 +1,4 @@
-package com.tzld.piaoquan.ad.engine.service.score;
+package com.tzld.piaoquan.ad.engine.service.score.deprecated;
 
 
 import com.tzld.piaoquan.ad.engine.commons.util.FeatureUtils;
@@ -17,7 +17,6 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 import java.util.ArrayList;
-import java.util.Collections;
 import java.util.List;
 import java.util.Map;
 import java.util.concurrent.*;

+ 1 - 1
ad-engine-service/src/main/java/com/tzld/piaoquan/ad/engine/service/score/VlogAdCvrCalibrationScorer.java → ad-engine-service/src/main/java/com/tzld/piaoquan/ad/engine/service/score/deprecated/VlogAdCvrCalibrationScorer.java

@@ -1,4 +1,4 @@
-package com.tzld.piaoquan.ad.engine.service.score;
+package com.tzld.piaoquan.ad.engine.service.score.deprecated;
 
 
 import com.tzld.piaoquan.ad.engine.commons.score.BaseCalibrationScorer;

+ 1 - 1
ad-engine-service/src/main/java/com/tzld/piaoquan/ad/engine/service/score/VlogAdCvrLRAdjustingScorer.java → ad-engine-service/src/main/java/com/tzld/piaoquan/ad/engine/service/score/deprecated/VlogAdCvrLRAdjustingScorer.java

@@ -1,4 +1,4 @@
-package com.tzld.piaoquan.ad.engine.service.score;
+package com.tzld.piaoquan.ad.engine.service.score.deprecated;
 
 
 import com.tzld.piaoquan.ad.engine.commons.score.AbstractScorer;

+ 1 - 2
ad-engine-service/src/main/java/com/tzld/piaoquan/ad/engine/service/score/VlogAdCvrLRScorer.java → ad-engine-service/src/main/java/com/tzld/piaoquan/ad/engine/service/score/deprecated/VlogAdCvrLRScorer.java

@@ -1,4 +1,4 @@
-package com.tzld.piaoquan.ad.engine.service.score;
+package com.tzld.piaoquan.ad.engine.service.score.deprecated;
 
 
 import com.tzld.piaoquan.ad.engine.commons.score.BaseLRModelScorer;
@@ -15,7 +15,6 @@ import org.slf4j.LoggerFactory;
 
 import java.util.ArrayList;
 import java.util.List;
-import java.util.Objects;
 import java.util.concurrent.*;
 
 

+ 2 - 1
ad-engine-service/src/main/java/com/tzld/piaoquan/ad/engine/service/score/VlogAdRosAndStrScorer.java → ad-engine-service/src/main/java/com/tzld/piaoquan/ad/engine/service/score/deprecated/VlogAdRosAndStrScorer.java

@@ -1,10 +1,11 @@
-package com.tzld.piaoquan.ad.engine.service.score;
+package com.tzld.piaoquan.ad.engine.service.score.deprecated;
 
 
 import com.tzld.piaoquan.ad.engine.commons.score.BaseLRModelScorer;
 import com.tzld.piaoquan.ad.engine.commons.score.ScoreParam;
 import com.tzld.piaoquan.ad.engine.commons.score.ScorerConfigInfo;
 import com.tzld.piaoquan.ad.engine.service.remote.ModelRemoteService;
+import com.tzld.piaoquan.ad.engine.service.score.ServiceBeanFactory;
 import com.tzld.piaoquan.recommend.feature.domain.ad.base.AdRankItem;
 import com.tzld.piaoquan.recommend.feature.domain.ad.base.UserAdFeature;
 

+ 1 - 5
ad-engine-service/src/main/java/com/tzld/piaoquan/ad/engine/service/score/VlogAdThompsonScorer.java → ad-engine-service/src/main/java/com/tzld/piaoquan/ad/engine/service/score/deprecated/VlogAdThompsonScorer.java

@@ -1,21 +1,17 @@
-package com.tzld.piaoquan.ad.engine.service.score;
+package com.tzld.piaoquan.ad.engine.service.score.deprecated;
 
 
 import com.tzld.piaoquan.ad.engine.commons.score.BaseThompsonSamplingScorer;
 import com.tzld.piaoquan.ad.engine.commons.score.ScoreParam;
 import com.tzld.piaoquan.ad.engine.commons.score.ScorerConfigInfo;
-import com.tzld.piaoquan.ad.engine.commons.score.model.LRModel;
 import com.tzld.piaoquan.ad.engine.commons.score.model.ThompsonSamplingModel;
 import com.tzld.piaoquan.recommend.feature.domain.ad.base.*;
-import com.tzld.piaoquan.recommend.feature.domain.ad.feature.VlogAdCtrLRFeatureExtractor;
-import com.tzld.piaoquan.recommend.feature.model.sample.LRSamples;
 import org.apache.commons.collections4.CollectionUtils;
 import org.apache.commons.lang.exception.ExceptionUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 import java.util.ArrayList;
-import java.util.Collections;
 import java.util.List;
 import java.util.concurrent.*;
 

+ 1 - 2
ad-engine-service/src/main/java/com/tzld/piaoquan/ad/engine/service/score/VlogMergeBreakScorer.java → ad-engine-service/src/main/java/com/tzld/piaoquan/ad/engine/service/score/deprecated/VlogMergeBreakScorer.java

@@ -1,7 +1,6 @@
-package com.tzld.piaoquan.ad.engine.service.score;
+package com.tzld.piaoquan.ad.engine.service.score.deprecated;
 
 
-import com.alibaba.fastjson.JSONArray;
 import com.tzld.piaoquan.ad.engine.commons.score.BaseLRModelScorer;
 import com.tzld.piaoquan.ad.engine.commons.score.ScoreParam;
 import com.tzld.piaoquan.ad.engine.commons.score.ScorerConfigInfo;

+ 1 - 6
ad-engine-service/src/main/java/com/tzld/piaoquan/ad/engine/service/score/VlogMergeEcpmScorer.java → ad-engine-service/src/main/java/com/tzld/piaoquan/ad/engine/service/score/deprecated/VlogMergeEcpmScorer.java

@@ -1,19 +1,14 @@
-package com.tzld.piaoquan.ad.engine.service.score;
+package com.tzld.piaoquan.ad.engine.service.score.deprecated;
 
 
 import com.tzld.piaoquan.ad.engine.commons.score.BaseLRModelScorer;
 import com.tzld.piaoquan.ad.engine.commons.score.ScoreParam;
 import com.tzld.piaoquan.ad.engine.commons.score.ScorerConfigInfo;
-import com.tzld.piaoquan.ad.engine.commons.score.model.LRModel;
 import com.tzld.piaoquan.recommend.feature.domain.ad.base.AdRankItem;
-import com.tzld.piaoquan.recommend.feature.domain.ad.base.AdRequestContext;
-import com.tzld.piaoquan.recommend.feature.domain.ad.base.UserAdBytesFeature;
 import com.tzld.piaoquan.recommend.feature.domain.ad.base.UserAdFeature;
-import org.apache.commons.lang.exception.ExceptionUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import java.util.ArrayList;
 import java.util.Collections;
 import java.util.List;
 import java.util.concurrent.*;

+ 1 - 4
ad-engine-service/src/main/java/com/tzld/piaoquan/ad/engine/service/score/container/AdCreativeFeatureContainer.java → ad-engine-service/src/main/java/com/tzld/piaoquan/ad/engine/service/score/deprecated/container/AdCreativeFeatureContainer.java

@@ -1,11 +1,9 @@
-package com.tzld.piaoquan.ad.engine.service.score.container;
+package com.tzld.piaoquan.ad.engine.service.score.deprecated.container;
 
 import com.alibaba.fastjson.JSONObject;
-import com.google.common.cache.Cache;
 import com.google.common.cache.CacheBuilder;
 import com.google.common.cache.CacheLoader;
 import com.google.common.cache.LoadingCache;
-import com.google.common.collect.ImmutableMap;
 import com.tzld.piaoquan.ad.engine.service.remote.FeatureRemoteService;
 import com.tzld.piaoquan.recommend.feature.domain.ad.base.AdRankItem;
 import org.slf4j.Logger;
@@ -17,7 +15,6 @@ import javax.annotation.PostConstruct;
 import java.util.*;
 import java.util.concurrent.TimeUnit;
 import java.util.function.Function;
-import java.util.stream.Collectors;
 
 @Component
 public class AdCreativeFeatureContainer {

+ 1 - 4
ad-engine-service/src/main/java/com/tzld/piaoquan/ad/engine/service/score/container/PidLambdaContainer.java → ad-engine-service/src/main/java/com/tzld/piaoquan/ad/engine/service/score/deprecated/container/PidLambdaContainer.java

@@ -1,4 +1,4 @@
-package com.tzld.piaoquan.ad.engine.service.score.container;
+package com.tzld.piaoquan.ad.engine.service.score.deprecated.container;
 
 import com.alibaba.fastjson.JSONObject;
 import com.alibaba.fastjson.TypeReference;
@@ -10,13 +10,11 @@ import com.aliyun.oss.model.CopyObjectResult;
 import com.aliyun.oss.model.OSSObject;
 import com.aliyun.oss.model.PutObjectResult;
 import com.tzld.piaoquan.ad.engine.commons.util.DateUtils;
-import com.tzld.piaoquan.ad.engine.service.predict.impl.PredictModelServiceImpl;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Component;
 
-import javax.annotation.PostConstruct;
 import java.io.BufferedReader;
 import java.io.ByteArrayInputStream;
 import java.io.InputStream;
@@ -26,7 +24,6 @@ import java.util.Date;
 import java.util.concurrent.ConcurrentHashMap;
 import java.util.concurrent.Executors;
 import java.util.concurrent.ScheduledExecutorService;
-import java.util.concurrent.TimeUnit;
 
 @Component
 public class PidLambdaContainer {

+ 1 - 2
ad-engine-service/src/main/java/com/tzld/piaoquan/ad/engine/service/score/container/PidLambdaForCpcContainer.java → ad-engine-service/src/main/java/com/tzld/piaoquan/ad/engine/service/score/deprecated/container/PidLambdaForCpcContainer.java

@@ -1,4 +1,4 @@
-package com.tzld.piaoquan.ad.engine.service.score.container;
+package com.tzld.piaoquan.ad.engine.service.score.deprecated.container;
 
 import com.alibaba.fastjson.JSONObject;
 import com.alibaba.fastjson.TypeReference;
@@ -25,7 +25,6 @@ import java.util.Date;
 import java.util.concurrent.ConcurrentHashMap;
 import java.util.concurrent.Executors;
 import java.util.concurrent.ScheduledExecutorService;
-import java.util.concurrent.TimeUnit;
 
 @Component
 public class PidLambdaForCpcContainer {

+ 1 - 3
ad-engine-service/src/main/java/com/tzld/piaoquan/ad/engine/service/score/container/PidLambdaV2Container.java → ad-engine-service/src/main/java/com/tzld/piaoquan/ad/engine/service/score/deprecated/container/PidLambdaV2Container.java

@@ -1,4 +1,4 @@
-package com.tzld.piaoquan.ad.engine.service.score.container;
+package com.tzld.piaoquan.ad.engine.service.score.deprecated.container;
 
 import com.alibaba.fastjson.JSONObject;
 import com.alibaba.fastjson.TypeReference;
@@ -15,7 +15,6 @@ import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Component;
 
-import javax.annotation.PostConstruct;
 import java.io.BufferedReader;
 import java.io.ByteArrayInputStream;
 import java.io.InputStream;
@@ -25,7 +24,6 @@ import java.util.Date;
 import java.util.concurrent.ConcurrentHashMap;
 import java.util.concurrent.Executors;
 import java.util.concurrent.ScheduledExecutorService;
-import java.util.concurrent.TimeUnit;
 
 @Component
 public class PidLambdaV2Container {

+ 20 - 6
ad-engine-service/src/main/java/com/tzld/piaoquan/ad/engine/service/score/impl/RankServiceImpl.java

@@ -9,13 +9,16 @@ import com.tzld.piaoquan.ad.engine.service.predict.helper.NewExpInfoHelper;
 import com.tzld.piaoquan.ad.engine.service.predict.param.ThresholdPredictModelParam;
 import com.tzld.piaoquan.ad.engine.service.remote.FeatureRemoteService;
 import com.tzld.piaoquan.ad.engine.service.score.*;
-import com.tzld.piaoquan.ad.engine.service.score.container.AdCreativeFeatureContainer;
-import com.tzld.piaoquan.ad.engine.service.score.container.PidLambdaContainer;
-import com.tzld.piaoquan.ad.engine.service.score.container.PidLambdaForCpcContainer;
-import com.tzld.piaoquan.ad.engine.service.score.container.PidLambdaV2Container;
 import com.tzld.piaoquan.ad.engine.service.score.convert.RequestConvert;
+import com.tzld.piaoquan.ad.engine.service.score.deprecated.BidRankRecommendRequestParam;
+import com.tzld.piaoquan.ad.engine.service.score.deprecated.RankServiceThompsonImpl;
+import com.tzld.piaoquan.ad.engine.service.score.deprecated.TacticsAndLRModelScoreRankService;
+import com.tzld.piaoquan.ad.engine.service.score.deprecated.VideoAdThompsonScorerV2;
+import com.tzld.piaoquan.ad.engine.service.score.deprecated.container.AdCreativeFeatureContainer;
+import com.tzld.piaoquan.ad.engine.service.score.deprecated.container.PidLambdaContainer;
+import com.tzld.piaoquan.ad.engine.service.score.deprecated.container.PidLambdaForCpcContainer;
+import com.tzld.piaoquan.ad.engine.service.score.deprecated.container.PidLambdaV2Container;
 import com.tzld.piaoquan.ad.engine.service.score.dto.AdPlatformCreativeDTO;
-import com.tzld.piaoquan.ad.engine.service.score.param.BidRankRecommendRequestParam;
 import com.tzld.piaoquan.ad.engine.service.score.param.RankRecommendRequestParam;
 import com.tzld.piaoquan.recommend.feature.domain.ad.base.AdItemFeature;
 import com.tzld.piaoquan.recommend.feature.domain.ad.base.AdRankItem;
@@ -59,6 +62,8 @@ public class RankServiceImpl implements RankService {
     @Autowired
     private RankService687 rankService687;
     @Autowired
+    private RankStrategyXGBAutoUpdateModel688 rankStrategyXGBAutoUpdateModel688;
+    @Autowired
     private TacticsAndLRModelScoreRankService tacticsAndFmModelScoreRankService;
 
     @Value("${ad.model.cpm.max:200}")
@@ -84,10 +89,12 @@ public class RankServiceImpl implements RankService {
             return rankBy680(requestParam);
         } else if (AbUtil.isInAbExp(expCodeSet, appType, newExpGroup, "683")) {
             return rankBy683(requestParam);
-        }else if (AbUtil.isInAbExp(expCodeSet, appType, newExpGroup, "687")){
+        } else if (AbUtil.isInAbExp(expCodeSet, appType, newExpGroup, "687")) {
             return rankBy687(requestParam);
         } else if (AbUtil.isInAbExp(expCodeSet, appType, newExpGroup, tacticsAndFmModelScoreExpCode)) {
             return rankBy679(requestParam);
+        } else if (AbUtil.isInAbExp(expCodeSet, appType, newExpGroup, "688")) {
+            return rankStrategyXGBAutoUpdateModel688(requestParam);
         } else {
             return adItemRankWithVideoAdThompson(requestParam);
         }
@@ -114,6 +121,13 @@ public class RankServiceImpl implements RankService {
         return adRankItems.get(0);
     }
 
+    private AdRankItem rankStrategyXGBAutoUpdateModel688(RankRecommendRequestParam request) {
+        ScoreParam scoreParam = RequestConvert.requestConvert(request);
+        List<AdRankItem> adRankItems = rankStrategyXGBAutoUpdateModel688.adItemRank(request, scoreParam);
+        logHubService.scoreLogUpload(scoreParam, request.getAdIdList(), adRankItems, request, "688");
+        return adRankItems.get(0);
+    }
+
     private AdRankItem rankBy679(RankRecommendRequestParam requestParam) {
         ScoreParam scoreParam = RequestConvert.requestConvert(requestParam);
         List<AdRankItem> adRankItems = tacticsAndFmModelScoreRankService.adItemRank(requestParam, scoreParam);

+ 0 - 2
ad-engine-service/src/main/java/com/tzld/piaoquan/ad/engine/service/score/param/MachineInfoParam.java

@@ -12,6 +12,4 @@ public class MachineInfoParam {
     String model;
     String weChatVersion;
 
-
-
 }