Browse Source

Merge branch 'feature_gufengshou_20240306_pid_v3' into pre-master

gufengshou1 1 year ago
parent
commit
7e06c0d4c0

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

@@ -48,13 +48,13 @@ public class PidLambdaContainer {
     @Value("${model.oss.pid.filename.dCpa:pid/dCpa}")
     String dCpaFileName = "";
 
-    @Value("${ad.model.pid.kp:0.5}")
+    @Value("${ad.model.pid.kp:0.4}")
     Double kp = 0d;
 
-    @Value("${ad.model.pid.ki:0.05}")
+    @Value("${ad.model.pid.ki:0.4}")
     Double ki = 0d;
 
-    @Value("${ad.model.pid.kd:0.005}")
+    @Value("${ad.model.pid.kd:0.2}")
     Double kd = 0d;
 
     OSS client;
@@ -105,18 +105,10 @@ public class PidLambdaContainer {
 //                    Double lambdaNew=lambdaCache.getOrDefault(creativeId,0d)+
 //                            kp*Double.parseDouble(cols[1])+ki*Double.parseDouble(cols[2])+kd*Double.parseDouble(cols[3]);
 //                  Ecpm = CPA * pctr * pcvr * bid * lambad
-//                  Lambad = real_ctcvr / p_ctcvr (按上一个小时统计这两个值)
-                    Double pctr=Double.parseDouble(cols[1]);
-                    Double pcvr=Double.parseDouble(cols[2]);
-                    Double ctr=Double.parseDouble(cols[3]);
-                    Double cvr=Double.parseDouble(cols[4]);
-                    Double lambdaNew=null;
-                    if((pctr*pcvr)==0d||ctr*cvr==0d){
-                        lambdaNew=1d;
-                    }else {
-                        lambdaNew=cvr*ctr/(pctr*pctr);
-                    }
+//0.4* (昨天realctcvr / 昨天pctcvr ) + 0.4 * (当天累计realctcvr / 当天的pctcvr ) + 0.2 * (最近一个小时realctcvr / 最近一个小时pctcvr)
+                    Double lambdaNew=kp*getYesterdayLambda(cols)+ki*getTodayLambda(cols)+kp*getLatestHourLambda(cols);
                     temp.put(creativeId,lambdaNew);
+                    log.error("svc=calNewLambda creativeId={} lambdaNew={}", creativeId,lambdaNew);
                 }catch (Exception e){
                     e.printStackTrace();
                 }
@@ -171,4 +163,58 @@ public class PidLambdaContainer {
             return 1d;
         }
     }
+
+    private  Double getLatestHourLambda(String[] cols){
+        try {
+            Double pctr=Double.parseDouble(cols[1]);
+            Double pcvr=Double.parseDouble(cols[2]);
+            Double ctr=Double.parseDouble(cols[3]);
+            Double cvr=Double.parseDouble(cols[4]);
+            Double lambdaNew=null;
+            if((pctr*pcvr)==0d||ctr*cvr==0d){
+                lambdaNew=1d;
+            }else {
+                lambdaNew=cvr*ctr/(pctr*pctr);
+            }
+            return lambdaNew;
+        }catch (Exception e){
+            return 1d;
+        }
+    }
+
+    private  Double getTodayLambda(String[] cols){
+        try {
+            Double pctr=Double.parseDouble(cols[9]);
+            Double pcvr=Double.parseDouble(cols[10]);
+            Double ctr=Double.parseDouble(cols[11]);
+            Double cvr=Double.parseDouble(cols[12]);
+            Double lambdaNew=null;
+            if((pctr*pcvr)==0d||ctr*cvr==0d){
+                lambdaNew=1d;
+            }else {
+                lambdaNew=cvr*ctr/(pctr*pctr);
+            }
+            return lambdaNew;
+        }catch (Exception e){
+            return 1d;
+        }
+    }
+
+    private  Double getYesterdayLambda(String[] cols){
+        try {
+            Double pctr=Double.parseDouble(cols[5]);
+            Double pcvr=Double.parseDouble(cols[6]);
+            Double ctr=Double.parseDouble(cols[7]);
+            Double cvr=Double.parseDouble(cols[8]);
+            Double lambdaNew=null;
+            if((pctr*pcvr)==0d||ctr*cvr==0d){
+                lambdaNew=1d;
+            }else {
+                lambdaNew=cvr*ctr/(pctr*pctr);
+            }
+            return lambdaNew;
+        }catch (Exception e){
+            return 1d;
+        }
+    }
 }

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

@@ -173,12 +173,9 @@ public class RankServiceImpl implements RankService {
         result.setPcvr(topItem.getCvr());
         result.setCreativeCode(groupMap.get(topItem.getAdId()+"").get(0).getCreativeCode());
         double realECpm=0d;
-        if(rankResult.size()<=1){
             //经验值 待定
-            realECpm=topItem.getEcpm1()*0.9;
-        }else {
-            realECpm=rankResult.get(1).getEcpm1();
-        }
+        realECpm=topItem.getEcpm1();
+
         if(realECpm>cpmMax/1000d){
             realECpm=cpmMax/1000d;
         }