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