ソースを参照

删除无用实验代码

gufengshou1 1 年間 前
コミット
80ed5b6135

+ 1 - 1
ad-engine-service/src/main/java/com/tzld/piaoquan/ad/engine/service/predict/constant/RuleRedisKeyConst.java

@@ -37,6 +37,6 @@ public class RuleRedisKeyConst {
     public static String AD_ENGINE_USER_FUTURE_KEY="ad:engine:user:features:";
 
     //    用户90分享分组结果存放 redis key 前缀,完整格式:mid:90share:group:{mid}
-    public static String KEY_NAME_PREFIX_90_SHARE_TYPE="mid:90share:group:";
+//    public static String KEY_NAME_PREFIX_90_SHARE_TYPE="mid:90share:group:";
 
 }

+ 12 - 44
ad-engine-service/src/main/java/com/tzld/piaoquan/ad/engine/service/predict/impl/PredictModelServiceImpl.java

@@ -48,16 +48,11 @@ public class PredictModelServiceImpl implements PredictModelService {
     @Autowired
     RoiModelConfig roiModelConfig;
 
-    @Value("${ad.predict.break.switch:false}")
-    private boolean adPredictBreakSwitch;
-    @Value("${ad.predict.break.exp.code:570}")
-    private String adPredictBreakExpCode;
-
     @Value("${ad.predict.share0.exp.code:000}")
     private String adPredictNoShareUserExpCode;
 
-    @Value("${ad.predict.90d.share0.exp.code:612}")
-    private String adPredict90DNoShareUserExpCode;
+//    @Value("${ad.predict.90d.share0.exp.code:612}")
+//    private String adPredict90DNoShareUserExpCode;
 
     @Value("${ad.predict.immersion.exp.code:607}")
     private String adPredictImmersionExpCode;
@@ -91,17 +86,12 @@ public class PredictModelServiceImpl implements PredictModelService {
         Map<String,List<JSONObject>> configMap=new HashMap<>();
         //该用户所有实验合集
         Set<String> expCodes=new HashSet<>();
-        boolean isHit = false;
         for(Map<String,Object> map:mapList){
             String expCode=map.getOrDefault("abExpCode","").toString();
             expCodes.add(expCode);
             if("555".equals(expCode)){
                 configMap=JSONObject.parseObject(map.get("configValue").toString(),Map.class);
             }
-            //判断570是否命中
-            if (StringUtils.equals(expCode, adPredictBreakExpCode)) {
-                isHit = true;
-            }
         }
 
         int hourOfDay= DateUtils.getCurrentHour();
@@ -142,12 +132,12 @@ public class PredictModelServiceImpl implements PredictModelService {
         // Determine the group to which mid belongs
         String groupClassKey = (String) abtestParam.get("group_class_key");
         String midGroupKeyName = RuleRedisKeyConst.KEY_NAME_PREFIX_MID_GROUP + groupClassKey + ":" + requestParam.getMid();
-        String midGroup=null;
-        if(expCodes.contains(adPredict90DNoShareUserExpCode)){
-            midGroup = redisHelper.getString(RuleRedisKeyConst.KEY_NAME_PREFIX_90_SHARE_TYPE+requestParam.getMid());
-        }else {
-            midGroup = redisHelper.getString(midGroupKeyName);
-        }
+        String midGroup = redisHelper.getString(midGroupKeyName);;
+//        if(expCodes.contains(adPredict90DNoShareUserExpCode)){
+//            midGroup = redisHelper.getString(RuleRedisKeyConst.KEY_NAME_PREFIX_90_SHARE_TYPE+requestParam.getMid());
+//        }else {
+//            midGroup = redisHelper.getString(midGroupKeyName);
+//        }
 
         //没有时为新用户或者无分享用户
         String shareType =midGroup;
@@ -200,17 +190,8 @@ public class PredictModelServiceImpl implements PredictModelService {
         modelParam.setExtraParam(new HashMap<>());
         modelParam.addUserExtraFuture("shareType",shareType);
         setExtraParam(modelParam);
-        if(expCodes.contains("602")){
-            String userEngineFuture=redisHelper.getString(RuleRedisKeyConst.AD_ENGINE_USER_FUTURE_KEY+requestParam.getMid());
-            if(userEngineFuture!=null){
-                modelParam.addAllIntoUserExtraFuture(JSONObject.parseObject(userEngineFuture,Map.class));
-            }else {
-                modelParam.addUserExtraFuture("30rp","0");
-            }
-            result = ThresholdModelContainer.
-                    getThresholdPredictModel("random602")
-                    .predict(modelParam);
-        } else if(expCodes.contains("599")||expCodes.contains(adPredict90DNoShareUserExpCode)){
+
+          if(expCodes.contains("599")){
 //        if(randomModelExpCode!=null){
 //            modelParam.addUserExtraFuture("randomModelKey",ExpCodeEnum.valueOfExpCode(randomModelExpCode).getRandomModelKey());
             result = ThresholdModelContainer.
@@ -222,21 +203,8 @@ public class PredictModelServiceImpl implements PredictModelService {
             result = ThresholdModelContainer.
                     getThresholdPredictModel("immersion")
                     .predict(modelParam);
-        } else if (adPredictBreakSwitch || isHit) {
-            if(expCodes.contains(adPredictNoShareUserExpCode)&&"noShare".equals(shareType)){
-                result = ThresholdModelContainer.
-                        getThresholdPredictModel("share0")
-                        .predict(modelParam);
-            }else if(expCodes.contains(adPredictNoShareUserExpCode)&&"return25_nmids".equals(shareType)){
-                result.put("mid_group", midGroup);
-                result.put("ad_predict", 1);
-                result.put("no_ad_strategy", adPredictNoShareUserExpCode+"_"+midGroup);
-            }else {
-                result = ThresholdModelContainer.
-                        getThresholdPredictModel("modelV2")
-                        .predict(modelParam);
-            }
-        } else {
+        }
+        else {
             Object thresholdMixFunc = abtestParam.getOrDefault("threshold_mix_func", "basic");
             result = ThresholdModelContainer.
                     getThresholdPredictModel(thresholdMixFunc.toString())

+ 65 - 65
ad-engine-service/src/main/java/com/tzld/piaoquan/ad/engine/service/predict/model/threshold/NoShareUserThresholdPredictModel.java

@@ -1,65 +1,65 @@
-package com.tzld.piaoquan.ad.engine.service.predict.model.threshold;
-
-import com.alibaba.fastjson.JSONObject;
-import com.tzld.piaoquan.ad.engine.commons.score.AdConfig;
-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.CommonCollectionUtils;
-import com.tzld.piaoquan.ad.engine.service.predict.container.PredictPidContainer;
-import com.tzld.piaoquan.ad.engine.service.predict.container.RandWContainer;
-import com.tzld.piaoquan.ad.engine.service.predict.container.ThresholdModelContainer;
-import com.tzld.piaoquan.ad.engine.service.predict.param.ThresholdPredictModelParam;
-import com.tzld.piaoquan.ad.engine.service.remote.FeatureRemoteService;
-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.UserAdFeature;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.beans.factory.annotation.Value;
-import org.springframework.stereotype.Component;
-
-import javax.annotation.PostConstruct;
-import java.time.LocalDateTime;
-import java.time.format.DateTimeFormatter;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.Random;
-import java.util.concurrent.Executors;
-import java.util.concurrent.ScheduledExecutorService;
-import java.util.concurrent.TimeUnit;
-
-import static com.tzld.piaoquan.ad.engine.commons.score.ScorerUtils.BREAK_CONFIG;
-import static com.tzld.piaoquan.ad.engine.commons.score.ScorerUtils.SHARE0_CONFIG;
-
-@Component
-public class NoShareUserThresholdPredictModel extends ThresholdPredictModel {
-    private final static Logger log = LoggerFactory.getLogger(NoShareUserThresholdPredictModel.class);
-
-    @Value("${ad.predict.threshold.share0:0.4}")
-    private double threshold;
-    @Value("${ad.model.pid.type.share0:-1}")
-    private double pidType;
-
-
-    @Override
-    String initName() {
-        return "share0";
-    }
-
-    @Override
-    public Map<String, Object> predict(ThresholdPredictModelParam modelParam) {
-
-        double score=(modelParam.getMid().hashCode()+ RandWContainer.getRandW())%100/100d;
-        score=score<0?-score:score;
-
-        Map<String, Object> result = new HashMap<>();
-//        result.put("threshold", realThreshold);
-//        result.put("score", maxItem == null ? -1 : maxItem.getScore());
-        result.put("ad_predict", score<threshold?2:1);
-        result.put("score", score);
-
-        return result;
-    }
-}
+//package com.tzld.piaoquan.ad.engine.service.predict.model.threshold;
+//
+//import com.alibaba.fastjson.JSONObject;
+//import com.tzld.piaoquan.ad.engine.commons.score.AdConfig;
+//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.CommonCollectionUtils;
+//import com.tzld.piaoquan.ad.engine.service.predict.container.PredictPidContainer;
+//import com.tzld.piaoquan.ad.engine.service.predict.container.RandWContainer;
+//import com.tzld.piaoquan.ad.engine.service.predict.container.ThresholdModelContainer;
+//import com.tzld.piaoquan.ad.engine.service.predict.param.ThresholdPredictModelParam;
+//import com.tzld.piaoquan.ad.engine.service.remote.FeatureRemoteService;
+//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.UserAdFeature;
+//import org.slf4j.Logger;
+//import org.slf4j.LoggerFactory;
+//import org.springframework.beans.factory.annotation.Autowired;
+//import org.springframework.beans.factory.annotation.Value;
+//import org.springframework.stereotype.Component;
+//
+//import javax.annotation.PostConstruct;
+//import java.time.LocalDateTime;
+//import java.time.format.DateTimeFormatter;
+//import java.util.HashMap;
+//import java.util.List;
+//import java.util.Map;
+//import java.util.Random;
+//import java.util.concurrent.Executors;
+//import java.util.concurrent.ScheduledExecutorService;
+//import java.util.concurrent.TimeUnit;
+//
+//import static com.tzld.piaoquan.ad.engine.commons.score.ScorerUtils.BREAK_CONFIG;
+//import static com.tzld.piaoquan.ad.engine.commons.score.ScorerUtils.SHARE0_CONFIG;
+//
+//@Component
+//public class NoShareUserThresholdPredictModel extends ThresholdPredictModel {
+//    private final static Logger log = LoggerFactory.getLogger(NoShareUserThresholdPredictModel.class);
+//
+//    @Value("${ad.predict.threshold.share0:0.4}")
+//    private double threshold;
+//    @Value("${ad.model.pid.type.share0:-1}")
+//    private double pidType;
+//
+//
+//    @Override
+//    String initName() {
+//        return "share0";
+//    }
+//
+//    @Override
+//    public Map<String, Object> predict(ThresholdPredictModelParam modelParam) {
+//
+//        double score=(modelParam.getMid().hashCode()+ RandWContainer.getRandW())%100/100d;
+//        score=score<0?-score:score;
+//
+//        Map<String, Object> result = new HashMap<>();
+////        result.put("threshold", realThreshold);
+////        result.put("score", maxItem == null ? -1 : maxItem.getScore());
+//        result.put("ad_predict", score<threshold?2:1);
+//        result.put("score", score);
+//
+//        return result;
+//    }
+//}

+ 44 - 44
ad-engine-service/src/main/java/com/tzld/piaoquan/ad/engine/service/predict/model/threshold/Random602PredictModel.java

@@ -1,44 +1,44 @@
-package com.tzld.piaoquan.ad.engine.service.predict.model.threshold;
-
-import com.tzld.piaoquan.ad.engine.service.predict.container.RandWContainer;
-import com.tzld.piaoquan.ad.engine.service.predict.param.ThresholdPredictModelParam;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.stereotype.Component;
-
-import java.util.HashMap;
-import java.util.Map;
-
-@Component
-public class Random602PredictModel extends ThresholdPredictModel {
-    private final static Logger log = LoggerFactory.getLogger(Random602PredictModel.class);
-
-    @Override
-    String initName() {
-        return "random602";
-    }
-
-
-    @Override
-    public Map<String, Object> predict(ThresholdPredictModelParam modelParam) {
-        int hash=modelParam.getMid().hashCode();
-        hash=hash<0?-hash:hash;
-        double score=(hash+ RandWContainer.getRandW())%100/100d;
-        double threshold=Double.parseDouble(
-                modelParam.getExtraParam().getOrDefault(modelParam.getAppType()+"_30rp_"+modelParam.getUserExtraFuture("30rp").toString(),-1
-                ).toString());
-        if(threshold<0d){
-            threshold=Double.parseDouble(
-                    modelParam.getExtraParam().getOrDefault("default_threshold","0.5")
-                            .toString());
-        }
-        Map<String, Object> result = new HashMap<>();
-        result.put("ad_predict", score<threshold?2:1);
-        result.put("score", score);
-        result.put("threshold", threshold);
-        result.put("model", "random600");
-
-        return result;
-    }
-
-}
+//package com.tzld.piaoquan.ad.engine.service.predict.model.threshold;
+//
+//import com.tzld.piaoquan.ad.engine.service.predict.container.RandWContainer;
+//import com.tzld.piaoquan.ad.engine.service.predict.param.ThresholdPredictModelParam;
+//import org.slf4j.Logger;
+//import org.slf4j.LoggerFactory;
+//import org.springframework.stereotype.Component;
+//
+//import java.util.HashMap;
+//import java.util.Map;
+//
+//@Component
+//public class Random602PredictModel extends ThresholdPredictModel {
+//    private final static Logger log = LoggerFactory.getLogger(Random602PredictModel.class);
+//
+//    @Override
+//    String initName() {
+//        return "random602";
+//    }
+//
+//
+//    @Override
+//    public Map<String, Object> predict(ThresholdPredictModelParam modelParam) {
+//        int hash=modelParam.getMid().hashCode();
+//        hash=hash<0?-hash:hash;
+//        double score=(hash+ RandWContainer.getRandW())%100/100d;
+//        double threshold=Double.parseDouble(
+//                modelParam.getExtraParam().getOrDefault(modelParam.getAppType()+"_30rp_"+modelParam.getUserExtraFuture("30rp").toString(),-1
+//                ).toString());
+//        if(threshold<0d){
+//            threshold=Double.parseDouble(
+//                    modelParam.getExtraParam().getOrDefault("default_threshold","0.5")
+//                            .toString());
+//        }
+//        Map<String, Object> result = new HashMap<>();
+//        result.put("ad_predict", score<threshold?2:1);
+//        result.put("score", score);
+//        result.put("threshold", threshold);
+//        result.put("model", "random600");
+//
+//        return result;
+//    }
+//
+//}

+ 134 - 134
ad-engine-service/src/main/java/com/tzld/piaoquan/ad/engine/service/predict/model/threshold/ScoreV2ThresholdPredictModel.java

@@ -1,134 +1,134 @@
-package com.tzld.piaoquan.ad.engine.service.predict.model.threshold;
-
-import com.alibaba.fastjson.JSONArray;
-import com.alibaba.fastjson.JSONObject;
-import com.tzld.piaoquan.ad.engine.commons.score.AdConfig;
-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.CommonCollectionUtils;
-import com.tzld.piaoquan.ad.engine.commons.util.TimerWatchUtil;
-import com.tzld.piaoquan.ad.engine.service.predict.container.PredictPidContainer;
-import com.tzld.piaoquan.ad.engine.service.predict.impl.PredictModelServiceImpl;
-import com.tzld.piaoquan.ad.engine.service.predict.param.ThresholdPredictModelParam;
-import com.tzld.piaoquan.ad.engine.service.remote.FeatureRemoteService;
-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.UserAdFeature;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.beans.factory.annotation.Value;
-import org.springframework.stereotype.Component;
-
-import java.time.LocalDateTime;
-import java.time.format.DateTimeFormatter;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-import static com.tzld.piaoquan.ad.engine.commons.score.ScorerUtils.BREAK_CONFIG;
-
-@Component
-public class ScoreV2ThresholdPredictModel extends ThresholdPredictModel {
-    private final static Logger log = LoggerFactory.getLogger(ScoreV2ThresholdPredictModel.class);
-    @Autowired
-    private FeatureRemoteService featureRemoteService;
-
-    @Value("${ad.predict.threshold:1}")
-    private double threshold;
-    @Value("${ad.model.pid.type:0.0}")
-    private double pidType;
-
-    @Override
-    String initName() {
-        return "modelV2";
-    }
-
-    @Override
-    public Map<String, Object> predict(ThresholdPredictModelParam modelParam) {
-
-        UserAdFeature userAdFeature = featureRemoteService.getUserAdFeature(modelParam.getMid());
-        if (userAdFeature == null) {
-            userAdFeature = new UserAdFeature();
-        }
-        List<AdRankItem> rankItems = featureRemoteService.getAllAdFeatureList(CommonCollectionUtils.toList(AdConfig.getAdIds(), id -> id.toString()));
-
-        // scoreParam
-        AdRequestContext context = new AdRequestContext();
-        context.setApptype(modelParam.getAppType().toString());
-        context.setMachineinfoBrand(modelParam.getMachineInfo().getBrand());
-        context.setMachineinfoModel(modelParam.getMachineInfo().getModel());
-        context.setMachineinfoSdkversion(modelParam.getMachineInfo().getSdkVersion());
-        context.setMachineinfoWchatversion(modelParam.getMachineInfo().getWeChatVersion());
-        LocalDateTime date = LocalDateTime.now();
-        context.setHour(date.getHour() + "");
-        context.setDay(date.format(DateTimeFormatter.ofPattern("yyyyMMdd")));
-        context.setWeek(date.getDayOfWeek().getValue() + "");
-
-        ScoreParam scoreParam = new ScoreParam();
-        scoreParam.setRequestContext(context);
-        scoreParam.getRequestContext().setRegion(modelParam.getRegion().replace("省", ""));
-        scoreParam.getRequestContext().setCity(modelParam.getCity().replace("市", ""));
-        scoreParam.setVideoId(modelParam.getVideoId());
-        scoreParam.setMid(modelParam.getMid());
-        scoreParam.setUid("");
-        scoreParam.setProvince(modelParam.getRegion());
-        scoreParam.setCity(modelParam.getCity());
-        scoreParam.setExtraParam(modelParam.getExtraParam());
-
-        List<AdRankItem> scoreResult = ScorerUtils
-                .getScorerPipeline(BREAK_CONFIG)
-                .scoring(scoreParam, userAdFeature, rankItems);
-
-        // 找出ctr*cvr最大的
-        double max = -1;
-        AdRankItem maxItem = null;
-        for (int i = 0; i < scoreResult.size(); i++) {
-            AdRankItem item = scoreResult.get(i);
-            double ctrCvr = item.getCtr() * item.getCvr();
-            if (ctrCvr > max) {
-                max = ctrCvr;
-                maxItem = item;
-            }
-        }
-
-        double realThreshold=Double.parseDouble(
-                scoreParam.getExtraParam().getOrDefault("ScoreV2ThresholdPredict_"+modelParam.getAppType(),threshold).toString()
-        );
-        int adPredict;
-        //加入pid逻辑
-        if(pidType>1){
-            realThreshold=realThreshold+ PredictPidContainer.getPidLambda(
-                    scoreParam.getExtraParam().getOrDefault("predict_test_id","default")+"_"+modelParam.getAppType());
-        }else if(pidType>=0){
-            realThreshold=PredictPidContainer.getLatestThreshold(
-                    scoreParam.getExtraParam().getOrDefault("predict_test_id","default")+"_"+modelParam.getAppType());
-        }
-
-
-        if (maxItem != null && maxItem.getScore() < realThreshold) {
-            // If final score is below threshold, do not show the ad
-            adPredict = 1;
-        } else {
-            // Otherwise, show the ad
-            adPredict = 2;
-        }
-        if(maxItem != null){
-//            ThresholdModelContainer.mergingDigestAddScore(modelParam.getAppType(),maxItem.getScore());
-            //删除多余打印
-            maxItem.setItemFeature(null);
-            maxItem.setLrSampleString(null);
-            maxItem.setLrSampleStringOrgin(null);
-            log.info("svc=ScoreV2ThresholdPredictModel_predict modelName=ScoreV2ThresholdPredictModel maxItem={} extraParam={} app_type={} realThreshold={}",
-                    JSONObject.toJSONString(maxItem), JSONObject.toJSONString(scoreParam.getExtraParam()),modelParam.getAppType(),realThreshold);
-        }
-
-        Map<String, Object> result = new HashMap<>();
-        result.put("threshold", realThreshold);
-        result.put("score", maxItem == null ? -1 : maxItem.getScore());
-        result.put("ad_predict", adPredict);
-
-
-        return result;
-    }
-}
+//package com.tzld.piaoquan.ad.engine.service.predict.model.threshold;
+//
+//import com.alibaba.fastjson.JSONArray;
+//import com.alibaba.fastjson.JSONObject;
+//import com.tzld.piaoquan.ad.engine.commons.score.AdConfig;
+//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.CommonCollectionUtils;
+//import com.tzld.piaoquan.ad.engine.commons.util.TimerWatchUtil;
+//import com.tzld.piaoquan.ad.engine.service.predict.container.PredictPidContainer;
+//import com.tzld.piaoquan.ad.engine.service.predict.impl.PredictModelServiceImpl;
+//import com.tzld.piaoquan.ad.engine.service.predict.param.ThresholdPredictModelParam;
+//import com.tzld.piaoquan.ad.engine.service.remote.FeatureRemoteService;
+//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.UserAdFeature;
+//import org.slf4j.Logger;
+//import org.slf4j.LoggerFactory;
+//import org.springframework.beans.factory.annotation.Autowired;
+//import org.springframework.beans.factory.annotation.Value;
+//import org.springframework.stereotype.Component;
+//
+//import java.time.LocalDateTime;
+//import java.time.format.DateTimeFormatter;
+//import java.util.HashMap;
+//import java.util.List;
+//import java.util.Map;
+//
+//import static com.tzld.piaoquan.ad.engine.commons.score.ScorerUtils.BREAK_CONFIG;
+//
+//@Component
+//public class ScoreV2ThresholdPredictModel extends ThresholdPredictModel {
+//    private final static Logger log = LoggerFactory.getLogger(ScoreV2ThresholdPredictModel.class);
+//    @Autowired
+//    private FeatureRemoteService featureRemoteService;
+//
+//    @Value("${ad.predict.threshold:1}")
+//    private double threshold;
+//    @Value("${ad.model.pid.type:0.0}")
+//    private double pidType;
+//
+//    @Override
+//    String initName() {
+//        return "modelV2";
+//    }
+//
+//    @Override
+//    public Map<String, Object> predict(ThresholdPredictModelParam modelParam) {
+//
+//        UserAdFeature userAdFeature = featureRemoteService.getUserAdFeature(modelParam.getMid());
+//        if (userAdFeature == null) {
+//            userAdFeature = new UserAdFeature();
+//        }
+//        List<AdRankItem> rankItems = featureRemoteService.getAllAdFeatureList(CommonCollectionUtils.toList(AdConfig.getAdIds(), id -> id.toString()));
+//
+//        // scoreParam
+//        AdRequestContext context = new AdRequestContext();
+//        context.setApptype(modelParam.getAppType().toString());
+//        context.setMachineinfoBrand(modelParam.getMachineInfo().getBrand());
+//        context.setMachineinfoModel(modelParam.getMachineInfo().getModel());
+//        context.setMachineinfoSdkversion(modelParam.getMachineInfo().getSdkVersion());
+//        context.setMachineinfoWchatversion(modelParam.getMachineInfo().getWeChatVersion());
+//        LocalDateTime date = LocalDateTime.now();
+//        context.setHour(date.getHour() + "");
+//        context.setDay(date.format(DateTimeFormatter.ofPattern("yyyyMMdd")));
+//        context.setWeek(date.getDayOfWeek().getValue() + "");
+//
+//        ScoreParam scoreParam = new ScoreParam();
+//        scoreParam.setRequestContext(context);
+//        scoreParam.getRequestContext().setRegion(modelParam.getRegion().replace("省", ""));
+//        scoreParam.getRequestContext().setCity(modelParam.getCity().replace("市", ""));
+//        scoreParam.setVideoId(modelParam.getVideoId());
+//        scoreParam.setMid(modelParam.getMid());
+//        scoreParam.setUid("");
+//        scoreParam.setProvince(modelParam.getRegion());
+//        scoreParam.setCity(modelParam.getCity());
+//        scoreParam.setExtraParam(modelParam.getExtraParam());
+//
+//        List<AdRankItem> scoreResult = ScorerUtils
+//                .getScorerPipeline(BREAK_CONFIG)
+//                .scoring(scoreParam, userAdFeature, rankItems);
+//
+//        // 找出ctr*cvr最大的
+//        double max = -1;
+//        AdRankItem maxItem = null;
+//        for (int i = 0; i < scoreResult.size(); i++) {
+//            AdRankItem item = scoreResult.get(i);
+//            double ctrCvr = item.getCtr() * item.getCvr();
+//            if (ctrCvr > max) {
+//                max = ctrCvr;
+//                maxItem = item;
+//            }
+//        }
+//
+//        double realThreshold=Double.parseDouble(
+//                scoreParam.getExtraParam().getOrDefault("ScoreV2ThresholdPredict_"+modelParam.getAppType(),threshold).toString()
+//        );
+//        int adPredict;
+//        //加入pid逻辑
+//        if(pidType>1){
+//            realThreshold=realThreshold+ PredictPidContainer.getPidLambda(
+//                    scoreParam.getExtraParam().getOrDefault("predict_test_id","default")+"_"+modelParam.getAppType());
+//        }else if(pidType>=0){
+//            realThreshold=PredictPidContainer.getLatestThreshold(
+//                    scoreParam.getExtraParam().getOrDefault("predict_test_id","default")+"_"+modelParam.getAppType());
+//        }
+//
+//
+//        if (maxItem != null && maxItem.getScore() < realThreshold) {
+//            // If final score is below threshold, do not show the ad
+//            adPredict = 1;
+//        } else {
+//            // Otherwise, show the ad
+//            adPredict = 2;
+//        }
+//        if(maxItem != null){
+////            ThresholdModelContainer.mergingDigestAddScore(modelParam.getAppType(),maxItem.getScore());
+//            //删除多余打印
+//            maxItem.setItemFeature(null);
+//            maxItem.setLrSampleString(null);
+//            maxItem.setLrSampleStringOrgin(null);
+//            log.info("svc=ScoreV2ThresholdPredictModel_predict modelName=ScoreV2ThresholdPredictModel maxItem={} extraParam={} app_type={} realThreshold={}",
+//                    JSONObject.toJSONString(maxItem), JSONObject.toJSONString(scoreParam.getExtraParam()),modelParam.getAppType(),realThreshold);
+//        }
+//
+//        Map<String, Object> result = new HashMap<>();
+//        result.put("threshold", realThreshold);
+//        result.put("score", maxItem == null ? -1 : maxItem.getScore());
+//        result.put("ad_predict", adPredict);
+//
+//
+//        return result;
+//    }
+//}