|
@@ -168,7 +168,124 @@ public class RankServiceImpl implements RankService {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ public AdRankItem videoAdThompsonItemRank(RankRecommendRequestParam request){
|
|
|
+ ScoreParam param= RequestConvert.requestConvert(request);
|
|
|
+ LocalDateTime currentTime = LocalDateTime.now();
|
|
|
+ int currentHour = currentTime.getHour();
|
|
|
+ int dayOfWeek = currentTime.getDayOfWeek().getValue();
|
|
|
+ param.getRequestContext().setHour(currentHour+"");
|
|
|
+ param.getRequestContext().setWeek(dayOfWeek+"");
|
|
|
+ param.getRequestContext().setRegion(request.getRegion().replace("省",""));
|
|
|
+ param.getRequestContext().setCity(request.getCity().replace("市",""));
|
|
|
+ param.getRequestContext().setDay(currentTime.format(dateFormatter));
|
|
|
+
|
|
|
+ UserAdFeature userAdFeature=featureRemoteService.getUserAdFeature(request.getMid());
|
|
|
+ if(userAdFeature==null){
|
|
|
+ userAdFeature=new UserAdFeature();
|
|
|
+ }
|
|
|
+ Map<Long,List<AdPlatformCreativeDTO>> groupMap=request
|
|
|
+ .getAdIdList()
|
|
|
+ .stream()
|
|
|
+ .collect(Collectors.groupingBy(creativeDTO -> creativeDTO.getCreativeId()));
|
|
|
+ Map<Long, AdRankItem> cache=adCreativeFeatureContainer.getAll(new ArrayList<>(groupMap.keySet()));
|
|
|
+ List<AdRankItem> rankItems=Collections.emptyList();
|
|
|
+ if(!cache.isEmpty()){
|
|
|
+ rankItems=new LinkedList<>(cache.values());
|
|
|
+ }
|
|
|
+ //避免recommend-feature出问题
|
|
|
+ if(rankItems==null|| rankItems.size()==0){
|
|
|
+ rankItems=new LinkedList<>();
|
|
|
+ for(Long adId:groupMap.keySet()){
|
|
|
+ AdRankItem item=new AdRankItem();
|
|
|
+ item.setAdId(adId);
|
|
|
+ item.setItemFeature(new AdItemFeature());
|
|
|
+ rankItems.add(item);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ boolean inCpcPidExp=false;
|
|
|
+ if (request.getAdAbExpArr() != null && request.getAdAbExpArr().size() != 0) {
|
|
|
+ for (Map<String, Object> map : request.getAdAbExpArr() ) {
|
|
|
+ if (map.getOrDefault("abExpCode", "").equals(cpcPidExpCode)) {
|
|
|
+ inCpcPidExp = true;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ double lambda=-1d;
|
|
|
+ if(inCpcPidExp){
|
|
|
+ for(AdRankItem item:rankItems){
|
|
|
+ try {
|
|
|
+ AdPlatformCreativeDTO dto=groupMap.get(item.getAdId()).get(0);
|
|
|
+ item.setBid1(dto.getBid1());
|
|
|
+ item.setBid2(dto.getBid2());
|
|
|
+ item.setCpa(dto.getCpa());
|
|
|
+ item.setPidLambda(1d);
|
|
|
+ }catch (Exception e){
|
|
|
+ log.error("rankItems info error itemId={}",item.getAdId());
|
|
|
+ e.printStackTrace();
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }else {
|
|
|
+ for(AdRankItem item:rankItems){
|
|
|
+ try {
|
|
|
+ AdPlatformCreativeDTO dto=groupMap.get(item.getAdId()).get(0);
|
|
|
+ item.setBid1(dto.getBid1());
|
|
|
+ item.setBid2(dto.getBid2());
|
|
|
+ lambda= PidLambdaForCpcContainer.getPidLambda(item.getAdId());
|
|
|
+ if(lambda<0){
|
|
|
+ item.setCpa(dto.getCpa());
|
|
|
+ item.setPidLambda(1);
|
|
|
+ }else {
|
|
|
+ if(dto.getCpa()>1&&lambda<=1){
|
|
|
+ lambda=2d;
|
|
|
+ }
|
|
|
+ item.setCpa(lambda);
|
|
|
+ item.setPidLambda(1d);
|
|
|
+ }
|
|
|
+ item.setCpa(dto.getCpa());
|
|
|
+ item.setPidLambda(1d);
|
|
|
+ }catch (Exception e){
|
|
|
+ log.error("rankItems info error itemId={}",item.getAdId());
|
|
|
+ e.printStackTrace();
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ // 兜底方案
|
|
|
+ List<AdRankItem> rankResult;
|
|
|
+ if (inCpcPidExp) {
|
|
|
+ rankResult = rank(param, userAdFeature, rankItems, ScorerUtils.CVR_ADJUSTING);
|
|
|
+ } else {
|
|
|
+ rankResult = rank(param, userAdFeature, rankItems, ScorerUtils.BASE_CONF);
|
|
|
+ }
|
|
|
|
|
|
+ if (!CollectionUtils.isEmpty(rankResult)) {
|
|
|
+ JSONObject object=new JSONObject();
|
|
|
+ object.put("mid",request.getMid());
|
|
|
+ object.put("adid",rankResult.get(0).getAdId());
|
|
|
+ object.put("type",rankResult.get(0).getScore_type());
|
|
|
+ object.put("pctr",rankResult.get(0).getCtr());
|
|
|
+ object.put("pcvr",rankResult.get(0).getCvr());
|
|
|
+ object.put("score",rankResult.get(0).getScore());
|
|
|
+ object.put("pidLambda",rankResult.get(0).getPidLambda());
|
|
|
+ object.put("lrsamples",rankResult.get(0).getLrSampleString());
|
|
|
+ object.put("dataTime",currentTime.format(timeFormatter));
|
|
|
+ object.put("creativeId",rankResult.get(0).getAdId());
|
|
|
+ log.info("svc=adItemRank {}", JSONObject.toJSONString(object));
|
|
|
+ object.remove("lrsamples");
|
|
|
+ if(inCpcPidExp){
|
|
|
+ AdPlatformCreativeDTO dto=groupMap.get(rankResult.get(0).getAdId()).get(0);
|
|
|
+ object.put("cpa",dto.getCpa()*dto.getBid1());
|
|
|
+ object.put("oCpa",dto.getCpa());
|
|
|
+ log.info("svc=cpc_pid obj={}", JSONObject.toJSONString(object));
|
|
|
+ }else {
|
|
|
+ log.info("svc=pid_log obj={}", JSONObject.toJSONString(object));
|
|
|
+ }
|
|
|
+ return rankResult.get(0);
|
|
|
+ }else {
|
|
|
+ //空返回值
|
|
|
+ return new AdRankItem();
|
|
|
+ }
|
|
|
+ }
|
|
|
|
|
|
@Override
|
|
|
public AdPlatformCreativeDTO adBidRank(BidRankRecommendRequestParam request) {
|
|
@@ -265,18 +382,6 @@ public class RankServiceImpl implements RankService {
|
|
|
item.setCpa(lambda);
|
|
|
item.setPidLambda(1d);
|
|
|
}
|
|
|
-// if(lambda<0){
|
|
|
-// item.setCpa(dto.getCpa());
|
|
|
-// item.setPidLambda(dto.getCpa()*0.6);
|
|
|
-// }else {
|
|
|
-// if(dto.getCpa()>1&&lambda<=1){
|
|
|
-// lambda=2d;
|
|
|
-// }
|
|
|
-// item.setCpa(dto.getCpa());
|
|
|
-// item.setPidLambda(lambda);
|
|
|
-// }
|
|
|
-// item.setCpa(dto.getCpa());
|
|
|
-// item.setPidLambda(PidLambdaContainer.getPidLambda(item.getAdId()));
|
|
|
rankItems.add(item);
|
|
|
}
|
|
|
rankResult=rankServiceThompson.rank(param, userAdFeature, rankItems,null);
|
|
@@ -362,21 +467,11 @@ public class RankServiceImpl implements RankService {
|
|
|
double lambda=-1d;
|
|
|
for(AdRankItem item:rankItems){
|
|
|
try {
|
|
|
-// AdPlatformBidCreativeDTO dto=groupMap.get(item.getAdId()+"").get(0);
|
|
|
+
|
|
|
AdPlatformCreativeDTO dto=groupMap.get(item.getAdId()).get(0);
|
|
|
item.setBid1(dto.getBid1());
|
|
|
item.setBid2(dto.getBid2());
|
|
|
lambda=PidLambdaV2Container.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);
|
|
|
-// }
|
|
|
if(lambda<0){
|
|
|
item.setCpa(dto.getCpa());
|
|
|
item.setPidLambda(dto.getCpa()*0.6);
|
|
@@ -403,16 +498,7 @@ public class RankServiceImpl implements RankService {
|
|
|
item.setAdId(dto.getCreativeId());
|
|
|
item.setItemFeature(new AdItemFeature());
|
|
|
lambda=PidLambdaV2Container.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);
|
|
|
-// }
|
|
|
+
|
|
|
if(lambda<0){
|
|
|
item.setCpa(dto.getCpa());
|
|
|
item.setPidLambda(dto.getCpa()*0.6);
|
|
@@ -423,8 +509,6 @@ public class RankServiceImpl implements RankService {
|
|
|
item.setCpa(dto.getCpa());
|
|
|
item.setPidLambda(lambda);
|
|
|
}
|
|
|
-// item.setCpa(dto.getCpa());
|
|
|
-// item.setPidLambda(PidLambdaContainer.getPidLambda(item.getAdId()));
|
|
|
rankItems.add(item);
|
|
|
}
|
|
|
rankResult=rankServiceThompson.rank(param, userAdFeature, rankItems,null);
|
|
@@ -443,8 +527,6 @@ public class RankServiceImpl implements RankService {
|
|
|
result.setPcvr(topItem.getCvr());
|
|
|
result.setCreativeCode(groupMap.get(topItem.getAdId()).get(0).getCreativeCode());
|
|
|
double realECpm=0d;
|
|
|
- //经验值 待定
|
|
|
-// realECpm=topItem.getEcpm1();
|
|
|
realECpm=topItem.getEcpm2();
|
|
|
|
|
|
if(realECpm>cpmMax/1000d){
|
|
@@ -464,7 +546,6 @@ public class RankServiceImpl implements RankService {
|
|
|
object.put("pcvr",topItem.getCvr());
|
|
|
object.put("lrsamples",topItem.getLrSampleString());
|
|
|
object.put("pidLambda",topItem.getPidLambda());
|
|
|
- //临时加入供pid v2使用
|
|
|
object.put("realECpm",realECpm);
|
|
|
object.put("creativeId",result.getCreativeId());
|
|
|
//CPA还原
|