|
@@ -54,7 +54,7 @@ public class PidLambdaV2Container {
|
|
|
Double minLambda = 0d;
|
|
|
OSS client;
|
|
|
|
|
|
- private static ConcurrentHashMap<Long,Double> lambdaCache=new ConcurrentHashMap<>();
|
|
|
+ private static ConcurrentHashMap<Long,CacheItem> lambdaCache=new ConcurrentHashMap<>();
|
|
|
private Date cacheDate;
|
|
|
|
|
|
@PostConstruct
|
|
@@ -92,22 +92,27 @@ public class PidLambdaV2Container {
|
|
|
InputStreamReader isr=new InputStreamReader(is);
|
|
|
BufferedReader bufferedReader = new BufferedReader(isr);
|
|
|
String line = null;
|
|
|
- ConcurrentHashMap<Long,Double> temp=new ConcurrentHashMap<>();
|
|
|
+ ConcurrentHashMap<Long,CacheItem> temp=new ConcurrentHashMap<>();
|
|
|
+ Double conversion=0d;
|
|
|
+ Double cpa=0d;
|
|
|
+ Double realCost=0d;
|
|
|
+ Double yesterdayConv=0d;
|
|
|
+ Double yesterdayCpa=0d;
|
|
|
+ Double yesterdayRealCost=0d;
|
|
|
+ Double latestRealCPA=0d;
|
|
|
while ((line = bufferedReader.readLine()) != null){
|
|
|
try {
|
|
|
String[] cols=line.split(",");
|
|
|
Long creativeId=Long.parseLong(cols[0]);
|
|
|
- Double conversion=Double.parseDouble(cols[1]);
|
|
|
- Double cpa=Double.parseDouble(cols[2]);
|
|
|
- Double realCost=Double.parseDouble(cols[3]);
|
|
|
- Double yesterdayConv=Double.parseDouble(cols[4]);
|
|
|
- Double yesterdayCpa=Double.parseDouble(cols[5]);
|
|
|
- Double yesterdayRealCost=Double.parseDouble(cols[6]);
|
|
|
+ CacheItem cacheItem=lambdaCache.getOrDefault(creativeId,new CacheItem(creativeId));
|
|
|
+ conversion=Double.parseDouble(cols[1]);
|
|
|
+ cpa=Double.parseDouble(cols[2]);
|
|
|
+ realCost=Double.parseDouble(cols[3]);
|
|
|
+ yesterdayConv=Double.parseDouble(cols[4]);
|
|
|
+ yesterdayCpa=Double.parseDouble(cols[5]);
|
|
|
+ yesterdayRealCost=Double.parseDouble(cols[6]);
|
|
|
Double lambdaNew=1d;
|
|
|
if((conversion+yesterdayConv)!=0){
|
|
|
-// if(cpa*conversion!=0&&!realCost.equals(0d)){
|
|
|
-// lambdaNew=(cpa*conversion)/realCost;
|
|
|
-// }
|
|
|
if((realCost*yesterdayRealCost)!=0){
|
|
|
double yesterdayW=yesterdayConv/(yesterdayConv+2*conversion);
|
|
|
lambdaNew=(yesterdayW*yesterdayConv*yesterdayCpa)/yesterdayRealCost
|
|
@@ -117,7 +122,16 @@ public class PidLambdaV2Container {
|
|
|
}else if(yesterdayRealCost!=0){
|
|
|
lambdaNew=(yesterdayConv*yesterdayCpa)/yesterdayRealCost;
|
|
|
}
|
|
|
-
|
|
|
+ }
|
|
|
+ if(conversion!=0){
|
|
|
+ latestRealCPA=realCost/conversion;
|
|
|
+ if(Math.abs(latestRealCPA-cpa)-Math.abs(cacheItem.latestRealCpa-cpa)>0){
|
|
|
+ cacheItem.pow=2d;
|
|
|
+ }else {
|
|
|
+ cacheItem.pow=1.2;
|
|
|
+ }
|
|
|
+ lambdaNew=Math.pow(lambdaNew,cacheItem.pow);
|
|
|
+ cacheItem.latestRealCpa=latestRealCPA;
|
|
|
}
|
|
|
|
|
|
|
|
@@ -126,7 +140,9 @@ public class PidLambdaV2Container {
|
|
|
}else if(lambdaNew<minLambda){
|
|
|
lambdaNew=minLambda;
|
|
|
}
|
|
|
- temp.put(creativeId,lambdaNew);
|
|
|
+ cacheItem.lambda=lambdaNew;
|
|
|
+ cacheItem.latestConv=conversion;
|
|
|
+ temp.put(creativeId,cacheItem);
|
|
|
|
|
|
log.info("svc=calNewLambdaV2 creativeId={} lambdaNew={}", creativeId,lambdaNew);
|
|
|
}catch (Exception e){
|
|
@@ -168,7 +184,7 @@ public class PidLambdaV2Container {
|
|
|
while ((line=bufferedReader.readLine())!=null){
|
|
|
builder.append(line);
|
|
|
}
|
|
|
- lambdaCache=JSONObject.parseObject(builder.toString(),new TypeReference<ConcurrentHashMap<Long,Double>>(){});
|
|
|
+ lambdaCache=JSONObject.parseObject(builder.toString(),new TypeReference<ConcurrentHashMap<Long,CacheItem>>(){});
|
|
|
this.cacheDate=object.getObjectMetadata().getLastModified();
|
|
|
}catch (Exception e){
|
|
|
log.error("svc=loadLambdaV2File status=failed error={}", Arrays.toString(e.getStackTrace()));
|
|
@@ -178,10 +194,31 @@ public class PidLambdaV2Container {
|
|
|
|
|
|
public static Double getPidLambda(Long creativeId){
|
|
|
try {
|
|
|
- return lambdaCache.getOrDefault(creativeId,1d);
|
|
|
+ return lambdaCache.getOrDefault(creativeId,new CacheItem(creativeId)).lambda;
|
|
|
}catch (Exception e){
|
|
|
return 1d;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+
|
|
|
+ public static class CacheItem{
|
|
|
+
|
|
|
+ public CacheItem(){
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ public CacheItem(Long creativeId){
|
|
|
+ this.creativeId=creativeId;
|
|
|
+ }
|
|
|
+
|
|
|
+ public Long creativeId;
|
|
|
+
|
|
|
+ public double lambda=1d;
|
|
|
+
|
|
|
+ public double latestConv=0d;
|
|
|
+
|
|
|
+ public double pow=1d;
|
|
|
+
|
|
|
+ public double latestRealCpa=0d;
|
|
|
+ }
|
|
|
}
|