Browse Source

602随机试验

gufengshou1 1 year ago
parent
commit
47b39c05bd

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

@@ -33,4 +33,7 @@ public class RuleRedisKeyConst {
     //  视频无广告时的分享率预测结果存放 redis key 前缀,完整格式:video:predict:share:rate:no:ad:{video_data_key}:{date}
     public static String KEY_NAME_PREFIX_VIDEO_NO_AD="video:predict:share:rate:no:ad:";
 
+    //广告引擎用户特征  ad:engine:user:features:{mid}
+    public static String AD_ENGINE_USER_FUTURE_KEY="ad:engine:user:features:";
+
 }

+ 34 - 0
ad-engine-service/src/main/java/com/tzld/piaoquan/ad/engine/service/predict/enums/ExpCodeEnum.java

@@ -0,0 +1,34 @@
+package com.tzld.piaoquan.ad.engine.service.predict.enums;
+
+public enum ExpCodeEnum {
+
+    EXP_599("599","shareType"),
+    EXP_602("602","30rp");
+    public String getCode() {
+        return code;
+    }
+
+    public String getRandomModelKey() {
+        return randomModelKey;
+    }
+
+    private String code;
+    private String randomModelKey;
+
+    private ExpCodeEnum(String code, String randomModelKey) {
+        this.code = code;
+        this.randomModelKey = randomModelKey;
+    }
+
+    public static ExpCodeEnum valueOfExpCode(String code) {
+        if (code == null) {
+            return null;
+        }
+        for (ExpCodeEnum expCodeEnum : ExpCodeEnum.values()) {
+            if (expCodeEnum.getCode().equals(code)) {
+                return expCodeEnum;
+            }
+        }
+        return null;
+    }
+}

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

@@ -3,12 +3,9 @@ package com.tzld.piaoquan.ad.engine.service.predict.impl;
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
 import com.alibaba.fastjson.TypeReference;
-import com.google.common.reflect.TypeToken;
 import com.tzld.piaoquan.ad.engine.commons.enums.AppTypeEnum;
 import com.tzld.piaoquan.ad.engine.commons.redis.AlgorithmRedisHelper;
 import com.tzld.piaoquan.ad.engine.commons.util.DateUtils;
-import com.tzld.piaoquan.ad.engine.commons.util.JSONUtils;
-import com.tzld.piaoquan.ad.engine.commons.util.TimerWatchUtil;
 import com.tzld.piaoquan.ad.engine.service.predict.config.RoiModelConfig;
 import com.tzld.piaoquan.ad.engine.service.predict.constant.RuleRedisKeyConst;
 import com.tzld.piaoquan.ad.engine.service.predict.PredictModelService;
@@ -89,6 +86,7 @@ public class PredictModelServiceImpl implements PredictModelService {
         //该用户所有实验合集
         Set<String> expCodes=new HashSet<>();
         boolean isHit = false;
+//        String randomModelExpCode=null;
         for(Map<String,Object> map:mapList){
             String expCode=map.getOrDefault("abExpCode","").toString();
             expCodes.add(expCode);
@@ -99,6 +97,9 @@ public class PredictModelServiceImpl implements PredictModelService {
             if (StringUtils.equals(expCode, adPredictBreakExpCode)) {
                 isHit = true;
             }
+//            if(ExpCodeEnum.EXP_599.getCode().equals(expCode)||ExpCodeEnum.EXP_600.getCode().equals(expCode)){
+//                randomModelExpCode=expCode;
+//            }
         }
 
         int hourOfDay= DateUtils.getCurrentHour();
@@ -121,27 +122,6 @@ public class PredictModelServiceImpl implements PredictModelService {
             return result;
         }
 
-        //人群选择算法判定-570
-//        try {
-//            JSONObject object = requestParam.getAbExpInfo();
-//            if (object != null) {
-//                JSONArray array = object.getJSONArray("ab_test002");
-//                if (array != null) {
-//                    List<Map<String, String>> abExps = JSONUtils.fromJson(array.toJSONString(),
-//                            new TypeToken<List<Map<String, String>>>() {
-//                            }, Collections.emptyList());
-//                    for (Map<String, String> abExpMap : abExps) {
-//                        if (StringUtils.equals(abExpMap.get("abExpCode"), adPredictBreakExpCode)) {
-//                            isHit = true;
-//                            break;
-//                        }
-//                    }
-//                }
-//            }
-//        } catch (Exception e) {
-//            log.error("adPredict hit error", e);
-//        }
-
         String[] abParamArr = abConfig.getAbParams(requestParam.getAbTestCode(), requestParam.getAbExpInfo());
         if (abParamArr == null) {
             result.put("msg", "abConfig_error");
@@ -220,7 +200,19 @@ public class PredictModelServiceImpl implements PredictModelService {
         modelParam.setExtraParam(new HashMap<>());
         modelParam.addUserExtraFuture("shareType",shareType);
         setExtraParam(modelParam);
-        if(expCodes.contains("599")){
+        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")){
+//        if(randomModelExpCode!=null){
+//            modelParam.addUserExtraFuture("randomModelKey",ExpCodeEnum.valueOfExpCode(randomModelExpCode).getRandomModelKey());
             result = ThresholdModelContainer.
                     getThresholdPredictModel("random")
                     .predict(modelParam);
@@ -298,4 +290,5 @@ public class PredictModelServiceImpl implements PredictModelService {
             }
         }
     }
+
 }

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

@@ -0,0 +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;
+    }
+
+}

+ 1 - 0
ad-engine-service/src/main/java/com/tzld/piaoquan/ad/engine/service/predict/model/threshold/RandomPredictModel.java

@@ -44,6 +44,7 @@ public class RandomPredictModel extends ThresholdPredictModel {
         result.put("ad_predict", score<threshold?2:1);
         result.put("score", score);
         result.put("threshold", threshold);
+        result.put("model", "random");
 
         return result;
     }

+ 8 - 0
ad-engine-service/src/main/java/com/tzld/piaoquan/ad/engine/service/predict/param/ThresholdPredictModelParam.java

@@ -54,6 +54,14 @@ public class ThresholdPredictModelParam {
         }
     }
 
+    public void addAllIntoUserExtraFuture(Map<String,Object> map){
+        if(userExtraFutureMap!=null){
+            userExtraFutureMap.putAll(map);
+        }else {
+            userExtraFutureMap=map;
+        }
+    }
+
     public Object getUserExtraFuture(String key){
         if(userExtraFutureMap!=null){
             return userExtraFutureMap.getOrDefault(key,new T());