Procházet zdrojové kódy

Merge branch 'master' into feature_gufengshou_20240407_new_exp_sys

gufengshou1 před 1 rokem
rodič
revize
f5afae40db

+ 15 - 12
ad-engine-service/src/main/java/com/tzld/piaoquan/ad/engine/service/score/VlogMergeEcpmScorer.java

@@ -65,24 +65,27 @@ public class VlogMergeEcpmScorer extends BaseLRModelScorer {
 
     public void callMergeScore(AdRankItem item,CountDownLatch countDownLatch){
         try {
-            boolean isTfType=item.getItemFeature().getCreative_7day_cnt_features().getAdView()<5000;
+//            boolean isTfType=item.getItemFeature().getCreative_7day_cnt_features().getAdView()<5000;
+//            double pctr = isTfType?item.getTf_ctr():item.getCtr();
+//            double pcvr = isTfType?item.getTf_cvr():item.getCvr();
             double cpa = item.getCpa();
             double bid1 = item.getBid1();
             double bid2 = item.getBid2();
-            double pctr = isTfType?item.getTf_ctr():item.getCtr();
-            double pcvr = isTfType?item.getTf_cvr():item.getCvr();
-            item.setScore_type( isTfType?1:0);
+            double pctr = item.getCtr();
+            double pcvr = item.getCvr();
+//            item.setScore_type( isTfType?1:0);
+            item.setScore_type( 0);
             //todo
             double ecpm;
-            if(isTfType){
-                ecpm = cpa * bid1 * bid2 * pcvr * pctr * 1000d;
-            }else {
-                cpa=cpa*item.getPidLambda();
-                if(cpa<0.5){
-                    cpa=0.5;
-                }
-                ecpm = cpa* bid1 * bid2 * pcvr * pctr * 1000d;
+//            if(isTfType){
+//                ecpm = cpa * bid1 * bid2 * pcvr * pctr * 1000d;
+//            }else {
+            cpa=cpa*item.getPidLambda();
+            if(cpa<0.5){
+                cpa=0.5;
             }
+            ecpm = cpa* bid1 * bid2 * pcvr * pctr * 1000d;
+//            }
 //            ecpm = cpa * bid1 * bid2 * pcvr * pctr * 1000d;
             item.setEcpm1(ecpm/1000d);
             item.setScore(ecpm/1000d);

+ 14 - 10
ad-engine-service/src/main/java/com/tzld/piaoquan/ad/engine/service/score/container/PidLambdaContainer.java

@@ -46,7 +46,7 @@ public class PidLambdaContainer {
     @Value("${model.oss.pid.filename.lambda:pid/lambda.txt}")
     String lambdaFileName = "";
 
-    @Value("${model.oss.pid.v2.filename.dCpa:pid/dCpaV2.txt}")
+    @Value("${model.oss.pid.filename.dCpa:pid/dCpa.txt}")
     String dCpaFileName = "";
 
     @Value("${ad.model.pid.kp:0.4}")
@@ -58,10 +58,10 @@ public class PidLambdaContainer {
     @Value("${ad.model.pid.kd:0.2}")
     Double kd = 0d;
 
-    @Value("${ad.model.pid.v2.lambda.max:5.0}")
+    @Value("${ad.model.pid.lambda.max:5.0}")
     Double maxLambda = 0d;
 
-    @Value("${ad.model.pid.v2.lambda.min:0.8}")
+    @Value("${ad.model.pid.lambda.min:0.2}")
     Double minLambda = 0d;
     OSS client;
 
@@ -108,9 +108,7 @@ public class PidLambdaContainer {
             Double cpa=0d;
             Double realCost=0d;
             Double latestRealCPA=0d;
-//            double et=0d;
             double sumE=0d;
-//            double ve=0d;
             while ((line = bufferedReader.readLine()) != null){
                 try {
                     String[] cols=line.split(",");
@@ -123,12 +121,19 @@ public class PidLambdaContainer {
                     conversion=Double.parseDouble(cols[1]);
                     cpa=Double.parseDouble(cols[2]);
                     realCost=Double.parseDouble(cols[3]);
-                    if(conversion<5d){
-                        conversion=1d;
+                    if(conversion<1d){
+                        temp.put(creativeId,cacheItem);
+                        continue;
                     }
                     latestRealCPA=realCost/conversion;
+                    if(Math.abs(latestRealCPA-cacheItem.latestRealCpa)<0.01){
+                        temp.put(creativeId,cacheItem);
+                        continue;
+                    }
                     Double lambdaNew =cacheItem.calculate(kp,ki,kd,cpa,latestRealCPA);
-
+                    if(lambdaNew<minLambda){
+                        lambdaNew=minLambda;
+                    }
                     cacheItem.lambda=lambdaNew;
                     cacheItem.latestRealCpa=latestRealCPA;
                     cacheItem.sumError=sumE;
@@ -205,7 +210,7 @@ public class PidLambdaContainer {
 
         public Long creativeId;
 
-        public double lambda=1d;
+        public double lambda=-1d;
 
         public double latestConv=0d;
 
@@ -227,7 +232,6 @@ public class PidLambdaContainer {
             return kp * error + ki * integral + kd * derivative;
         }
 
-
         public void reset() {
             integral = 0;
             lastError = 0;

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

@@ -219,7 +219,8 @@ public class PidLambdaV2Container {
                 this.latestRealCpa=latestRealCPA;
                 return Math.pow(lambdaNew,this.pow);
             }
-            return lambdaNew;
+            this.pow=1.5d;
+            return Math.pow(lambdaNew,this.pow);
         }
 
         public Long creativeId;

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

@@ -145,14 +145,25 @@ public class RankServiceImpl implements RankService {
         if(!cache.isEmpty()){
             rankItems=new LinkedList<>(cache.values());
         }
+        double lambda=-1d;
         for(AdRankItem item:rankItems){
             try {
 //                AdPlatformBidCreativeDTO dto=groupMap.get(item.getAdId()+"").get(0);
                 AdPlatformBidCreativeDTO dto=groupMap.get(item.getAdId()).get(0);
                 item.setBid1(dto.getBid1());
                 item.setBid2(dto.getBid2());
-                item.setCpa(dto.getCpa());
-                item.setPidLambda(PidLambdaContainer.getPidLambda(item.getAdId()));
+                lambda=PidLambdaContainer.getPidLambda(item.getAdId());
+                if(lambda<0){
+                    item.setCpa(dto.getCpa());
+                    item.setPidLambda(0.6);
+                }else {
+                    if(dto.getCpa()>1&&lambda<=1){
+                        lambda=2d;
+                    }
+                    item.setCpa(lambda);
+                    item.setPidLambda(1d);
+                }
+
             }catch (Exception e){
                 log.error("rankItems info error itemId={}",item.getAdId());
                 e.printStackTrace();
@@ -165,10 +176,21 @@ public class RankServiceImpl implements RankService {
                 AdRankItem item=new AdRankItem();
                 item.setBid1(dto.getBid1());
                 item.setBid2(dto.getBid2());
-                item.setCpa(dto.getCpa());
                 item.setAdId(dto.getCreativeId());
                 item.setItemFeature(new AdItemFeature());
-                item.setPidLambda(PidLambdaContainer.getPidLambda(item.getAdId()));
+                lambda=PidLambdaContainer.getPidLambda(item.getAdId());
+                if(lambda<0){
+                    item.setCpa(dto.getCpa());
+                    item.setPidLambda(0.6);
+                }else {
+                    if(dto.getCpa()>1&&lambda<=1){
+                        lambda=2d;
+                    }
+                    item.setCpa(lambda);
+                    item.setPidLambda(1d);
+                }
+//                item.setCpa(dto.getCpa());
+//                item.setPidLambda(PidLambdaContainer.getPidLambda(item.getAdId()));
                 rankItems.add(item);
             }
             rankResult=rankServiceThompson.rank(param, userAdFeature, rankItems,null);
@@ -198,6 +220,7 @@ public class RankServiceImpl implements RankService {
             realECpm=cpmMin/1000d;
         }
         result.setEcpm2(realECpm);
+        AdPlatformBidCreativeDTO dto=groupMap.get(topItem.getAdId()).get(0);
         JSONObject object=new JSONObject();
         object.put("mid",request.getMid());
         object.put("adid",result.getCreativeId());
@@ -210,7 +233,8 @@ public class RankServiceImpl implements RankService {
         //临时加入供pid v2使用
         object.put("realECpm",realECpm);
         object.put("creativeId",result.getCreativeId());
-        object.put("cpa",topItem.getCpa());
+        //CPA还原
+        object.put("cpa",dto.getCpa());
         object.put("dataTime",currentTime.format(timeFormatter));
         log.info("svc=adBidRank {}", JSONObject.toJSONString(object));
         object.remove("lrsamples");