|
@@ -2,25 +2,25 @@ package com.tzld.piaoquan.ad.engine.service.score.impl;
|
|
|
|
|
|
import com.alibaba.fastjson.JSON;
|
|
|
import com.alibaba.fastjson.JSONObject;
|
|
|
+import com.tzld.piaoquan.ad.engine.commons.score.ScoreParam;
|
|
|
+import com.tzld.piaoquan.ad.engine.commons.score.ScorerUtils;
|
|
|
+import com.tzld.piaoquan.ad.engine.service.log.LogHubService;
|
|
|
import com.tzld.piaoquan.ad.engine.service.predict.helper.NewExpInfoHelper;
|
|
|
import com.tzld.piaoquan.ad.engine.service.predict.param.ThresholdPredictModelParam;
|
|
|
-import com.tzld.piaoquan.ad.engine.service.log.LogHubService;
|
|
|
+import com.tzld.piaoquan.ad.engine.service.remote.FeatureRemoteService;
|
|
|
+import com.tzld.piaoquan.ad.engine.service.score.RankService;
|
|
|
import com.tzld.piaoquan.ad.engine.service.score.VideoAdThompsonScorerV2;
|
|
|
import com.tzld.piaoquan.ad.engine.service.score.container.AdCreativeFeatureContainer;
|
|
|
import com.tzld.piaoquan.ad.engine.service.score.container.PidLambdaContainer;
|
|
|
import com.tzld.piaoquan.ad.engine.service.score.container.PidLambdaForCpcContainer;
|
|
|
import com.tzld.piaoquan.ad.engine.service.score.container.PidLambdaV2Container;
|
|
|
+import com.tzld.piaoquan.ad.engine.service.score.convert.RequestConvert;
|
|
|
import com.tzld.piaoquan.ad.engine.service.score.dto.AdPlatformCreativeDTO;
|
|
|
import com.tzld.piaoquan.ad.engine.service.score.param.BidRankRecommendRequestParam;
|
|
|
+import com.tzld.piaoquan.ad.engine.service.score.param.RankRecommendRequestParam;
|
|
|
import com.tzld.piaoquan.recommend.feature.domain.ad.base.AdItemFeature;
|
|
|
import com.tzld.piaoquan.recommend.feature.domain.ad.base.AdRankItem;
|
|
|
import com.tzld.piaoquan.recommend.feature.domain.ad.base.UserAdFeature;
|
|
|
-import com.tzld.piaoquan.ad.engine.commons.score.ScoreParam;
|
|
|
-import com.tzld.piaoquan.ad.engine.commons.score.ScorerUtils;
|
|
|
-import com.tzld.piaoquan.ad.engine.service.remote.FeatureRemoteService;
|
|
|
-import com.tzld.piaoquan.ad.engine.service.score.RankService;
|
|
|
-import com.tzld.piaoquan.ad.engine.service.score.convert.RequestConvert;
|
|
|
-import com.tzld.piaoquan.ad.engine.service.score.param.RankRecommendRequestParam;
|
|
|
import org.slf4j.Logger;
|
|
|
import org.slf4j.LoggerFactory;
|
|
|
import org.springframework.beans.BeanUtils;
|
|
@@ -52,52 +52,52 @@ public class RankServiceImpl implements RankService {
|
|
|
@Autowired
|
|
|
AdCreativeFeatureContainer adCreativeFeatureContainer;
|
|
|
@Value("${ad.model.cpm.max:200}")
|
|
|
- Double cpmMax=200d;
|
|
|
+ Double cpmMax = 200d;
|
|
|
@Value("${ad.model.cpm.min:30}")
|
|
|
- Double cpmMin=30d;
|
|
|
+ Double cpmMin = 30d;
|
|
|
@Value("${ad.pid.cpc.exp:30}")
|
|
|
private String cpcPidExpCode;
|
|
|
@Value("${ad.cvr.adjusting.exp:652}")
|
|
|
private String cvrAdjustingExpCode;
|
|
|
|
|
|
- public AdRankItem adItemRank(RankRecommendRequestParam request){
|
|
|
- ScoreParam param= RequestConvert.requestConvert(request);
|
|
|
+ public AdRankItem adItemRank(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().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();
|
|
|
+ UserAdFeature userAdFeature = featureRemoteService.getUserAdFeature(request.getMid());
|
|
|
+ if (userAdFeature == null) {
|
|
|
+ userAdFeature = new UserAdFeature();
|
|
|
}
|
|
|
- Map<Long,List<AdPlatformCreativeDTO>> groupMap=request
|
|
|
+ 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());
|
|
|
+ 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();
|
|
|
+ // 避免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;
|
|
|
- boolean inCvrAdjustingExp=false;
|
|
|
+ boolean inCpcPidExp = false;
|
|
|
+ boolean inCvrAdjustingExp = false;
|
|
|
if (request.getAdAbExpArr() != null && request.getAdAbExpArr().size() != 0) {
|
|
|
- for (Map<String, Object> map : request.getAdAbExpArr() ) {
|
|
|
+ for (Map<String, Object> map : request.getAdAbExpArr()) {
|
|
|
if (map.getOrDefault("abExpCode", "").equals(cpcPidExpCode)) {
|
|
|
inCpcPidExp = true;
|
|
|
}
|
|
@@ -106,39 +106,39 @@ public class RankServiceImpl implements RankService {
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
- double lambda=-1d;
|
|
|
- if(inCpcPidExp){
|
|
|
- for(AdRankItem item:rankItems){
|
|
|
+ double lambda = -1d;
|
|
|
+ if (inCpcPidExp) {
|
|
|
+ for (AdRankItem item : rankItems) {
|
|
|
try {
|
|
|
- AdPlatformCreativeDTO dto=groupMap.get(item.getAdId()).get(0);
|
|
|
+ AdPlatformCreativeDTO dto = groupMap.get(item.getAdId()).get(0);
|
|
|
item.setBid1(dto.getBid1());
|
|
|
item.setBid2(dto.getBid2());
|
|
|
- lambda= PidLambdaForCpcContainer.getPidLambda(item.getAdId());
|
|
|
- if(lambda<0){
|
|
|
+ lambda = PidLambdaForCpcContainer.getPidLambda(item.getAdId());
|
|
|
+ if (lambda < 0) {
|
|
|
item.setCpa(dto.getCpa());
|
|
|
item.setPidLambda(1);
|
|
|
- }else {
|
|
|
- if(dto.getCpa()>1&&lambda<=1){
|
|
|
- lambda=2d;
|
|
|
+ } 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());
|
|
|
+ } catch (Exception e) {
|
|
|
+ log.error("rankItems info error itemId={}", item.getAdId());
|
|
|
e.printStackTrace();
|
|
|
}
|
|
|
}
|
|
|
- }else {
|
|
|
- for(AdRankItem item:rankItems){
|
|
|
+ } else {
|
|
|
+ for (AdRankItem item : rankItems) {
|
|
|
try {
|
|
|
- AdPlatformCreativeDTO dto=groupMap.get(item.getAdId()).get(0);
|
|
|
+ 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());
|
|
|
+ } catch (Exception e) {
|
|
|
+ log.error("rankItems info error itemId={}", item.getAdId());
|
|
|
e.printStackTrace();
|
|
|
}
|
|
|
}
|
|
@@ -153,28 +153,28 @@ public class RankServiceImpl implements RankService {
|
|
|
}
|
|
|
|
|
|
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());
|
|
|
+ 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());
|
|
|
object.put("videoId", request.getVideoId());
|
|
|
object.put("pqtId", request.getPqtId());
|
|
|
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());
|
|
|
- object.put("realECpm",rankResult.get(0).getEcpm1());
|
|
|
+ if (inCpcPidExp) {
|
|
|
+ AdPlatformCreativeDTO dto = groupMap.get(rankResult.get(0).getAdId()).get(0);
|
|
|
+ object.put("cpa", dto.getCpa() * dto.getBid1());
|
|
|
+ object.put("oCpa", dto.getCpa());
|
|
|
+ object.put("realECpm", rankResult.get(0).getEcpm1());
|
|
|
log.info("svc=cpc_pid obj={}", JSONObject.toJSONString(object));
|
|
|
- }else {
|
|
|
+ } else {
|
|
|
log.info("svc=pid_log obj={}", JSONObject.toJSONString(object));
|
|
|
}
|
|
|
|
|
@@ -186,67 +186,27 @@ public class RankServiceImpl implements RankService {
|
|
|
inCvrAdjustingExp ? "cvr_adjusting" : "base_line", "531");
|
|
|
|
|
|
return rankResult.get(0);
|
|
|
- }else {
|
|
|
- //空返回值
|
|
|
+ } else {
|
|
|
+ // 空返回值
|
|
|
return new AdRankItem();
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- public AdRankItem adItemRankWithVideoAdThompson(RankRecommendRequestParam request){
|
|
|
- ScoreParam param= RequestConvert.requestConvert(request);
|
|
|
+ public AdRankItem adItemRankWithVideoAdThompson(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().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<>();
|
|
|
-// for (AdRankItem value : cache.values()) {
|
|
|
-// value.setVideoId(request.getVideoId());
|
|
|
-// rankItems.add(value);
|
|
|
-// }
|
|
|
-// }
|
|
|
-// //避免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());
|
|
|
-// item.setVideoId(request.getVideoId());
|
|
|
-// rankItems.add(item);
|
|
|
-// }
|
|
|
-// }
|
|
|
-// 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();
|
|
|
-// }
|
|
|
-// }
|
|
|
- Set<String> expCodes=new HashSet<>();
|
|
|
+ Set<String> expCodes = new HashSet<>();
|
|
|
if (request.getAdAbExpArr() != null && request.getAdAbExpArr().size() != 0) {
|
|
|
- for (Map<String, Object> map : request.getAdAbExpArr() ) {
|
|
|
- String expCode=map.getOrDefault("abExpCode","").toString();
|
|
|
+ for (Map<String, Object> map : request.getAdAbExpArr()) {
|
|
|
+ String expCode = map.getOrDefault("abExpCode", "").toString();
|
|
|
expCodes.add(expCode);
|
|
|
}
|
|
|
}
|
|
@@ -254,25 +214,25 @@ public class RankServiceImpl implements RankService {
|
|
|
.build();
|
|
|
// 兜底方案
|
|
|
String abCode = "";
|
|
|
- List<AdRankItem> rankResult=null;
|
|
|
- if(expCodes.contains("663")||
|
|
|
- (expCodes.contains(NewExpInfoHelper.flagId)&&NewExpInfoHelper.checkInNewExpGroupAndSetParamIfIn(
|
|
|
- request.getAppType().toString(),request.getNewExpGroup(),"663",modelParam))){
|
|
|
+ List<AdRankItem> rankResult = null;
|
|
|
+ if (expCodes.contains("663") ||
|
|
|
+ (expCodes.contains(NewExpInfoHelper.flagId) && NewExpInfoHelper.checkInNewExpGroupAndSetParamIfIn(
|
|
|
+ request.getAppType().toString(), request.getNewExpGroup(), "663", modelParam))) {
|
|
|
rankResult = videoAdThompsonScorerV2.thompsonScorerByExp663(param, request.getAdIdList());
|
|
|
abCode = "663";
|
|
|
- }else if(expCodes.contains("664")||
|
|
|
- (expCodes.contains(NewExpInfoHelper.flagId)&&NewExpInfoHelper.checkInNewExpGroupAndSetParamIfIn(
|
|
|
- request.getAppType().toString(),request.getNewExpGroup(),"664",modelParam))){
|
|
|
+ } else if (expCodes.contains("664") ||
|
|
|
+ (expCodes.contains(NewExpInfoHelper.flagId) && NewExpInfoHelper.checkInNewExpGroupAndSetParamIfIn(
|
|
|
+ request.getAppType().toString(), request.getNewExpGroup(), "664", modelParam))) {
|
|
|
rankResult = videoAdThompsonScorerV2.thompsonScorerByExp664(param, request.getAdIdList());
|
|
|
abCode = "664";
|
|
|
- }else if(expCodes.contains("665")||
|
|
|
- (expCodes.contains(NewExpInfoHelper.flagId)&&NewExpInfoHelper.checkInNewExpGroupAndSetParamIfIn(
|
|
|
- request.getAppType().toString(),request.getNewExpGroup(),"665",modelParam))){
|
|
|
+ } else if (expCodes.contains("665") ||
|
|
|
+ (expCodes.contains(NewExpInfoHelper.flagId) && NewExpInfoHelper.checkInNewExpGroupAndSetParamIfIn(
|
|
|
+ request.getAppType().toString(), request.getNewExpGroup(), "665", modelParam))) {
|
|
|
rankResult = videoAdThompsonScorerV2.thompsonScorerByExp665(param, request.getAdIdList());
|
|
|
abCode = "665";
|
|
|
- }else if(expCodes.contains("666")||
|
|
|
- (expCodes.contains(NewExpInfoHelper.flagId)&&NewExpInfoHelper.checkInNewExpGroupAndSetParamIfIn(
|
|
|
- request.getAppType().toString(),request.getNewExpGroup(),"666",modelParam))){
|
|
|
+ } else if (expCodes.contains("666") ||
|
|
|
+ (expCodes.contains(NewExpInfoHelper.flagId) && NewExpInfoHelper.checkInNewExpGroupAndSetParamIfIn(
|
|
|
+ request.getAppType().toString(), request.getNewExpGroup(), "666", modelParam))) {
|
|
|
rankResult = videoAdThompsonScorerV2.thompsonScorerByExp666(param, request.getAdIdList());
|
|
|
abCode = "666";
|
|
|
} else if (expCodes.contains("669") ||
|
|
@@ -285,9 +245,14 @@ public class RankServiceImpl implements RankService {
|
|
|
request.getAppType().toString(), request.getNewExpGroup(), "670", modelParam))) {
|
|
|
rankResult = videoAdThompsonScorerV2.thompsonScorerByExp670(param, request.getAdIdList());
|
|
|
abCode = "670";
|
|
|
- }else if (expCodes.contains("672") ||
|
|
|
+ } else if (expCodes.contains("671") ||
|
|
|
(expCodes.contains(NewExpInfoHelper.flagId) && NewExpInfoHelper.checkInNewExpGroupAndSetParamIfIn(
|
|
|
- request.getAppType().toString(), request.getNewExpGroup(), "672", modelParam))){
|
|
|
+ request.getAppType().toString(), request.getNewExpGroup(), "671", modelParam))) {
|
|
|
+ rankResult = videoAdThompsonScorerV2.thompsonScorerByExp671(param, request.getAdIdList());
|
|
|
+ abCode = "671";
|
|
|
+ } else if (expCodes.contains("672") ||
|
|
|
+ (expCodes.contains(NewExpInfoHelper.flagId) && NewExpInfoHelper.checkInNewExpGroupAndSetParamIfIn(
|
|
|
+ request.getAppType().toString(), request.getNewExpGroup(), "672", modelParam))) {
|
|
|
rankResult = videoAdThompsonScorerV2.thompsonScorerByExp672(param, request.getAdIdList());
|
|
|
abCode = "672";
|
|
|
}
|
|
@@ -296,26 +261,26 @@ public class RankServiceImpl implements RankService {
|
|
|
logHubService.scoreLogUpload(param, request.getAdIdList(), rankResult, request, "video_ad_thompson", abCode);
|
|
|
|
|
|
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());
|
|
|
+ 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());
|
|
|
object.put("videoId", rankResult.get(0).getVideoId());
|
|
|
object.put("pqtId", request.getPqtId());
|
|
|
log.info("svc=videoAdThompsonRank_lr_log {}", JSONObject.toJSONString(object));
|
|
|
object.remove("lrsamples");
|
|
|
- object.put("score_500",rankResult.get(0).getTf_ctr());
|
|
|
- object.put("score_1000",rankResult.get(0).getTf_cvr());
|
|
|
+ object.put("score_500", rankResult.get(0).getTf_ctr());
|
|
|
+ object.put("score_1000", rankResult.get(0).getTf_cvr());
|
|
|
log.info("svc=videoAdThompsonRank_log obj={}", JSONObject.toJSONString(object));
|
|
|
return rankResult.get(0);
|
|
|
- }else {
|
|
|
+ } else {
|
|
|
return new AdRankItem();
|
|
|
}
|
|
|
}
|
|
@@ -323,124 +288,124 @@ public class RankServiceImpl implements RankService {
|
|
|
@Override
|
|
|
public AdPlatformCreativeDTO adBidRank(BidRankRecommendRequestParam request) {
|
|
|
|
|
|
- ScoreParam param= RequestConvert.requestConvert(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().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();
|
|
|
+ UserAdFeature userAdFeature = featureRemoteService.getUserAdFeature(request.getMid());
|
|
|
+ if (userAdFeature == null) {
|
|
|
+ userAdFeature = new UserAdFeature();
|
|
|
}
|
|
|
- Map<Long,List<AdPlatformCreativeDTO>> groupMap=request
|
|
|
+ Map<Long, List<AdPlatformCreativeDTO>> groupMap = request
|
|
|
.getCreativeList()
|
|
|
.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());
|
|
|
+ Map<Long, AdRankItem> cache = adCreativeFeatureContainer.getAll(new ArrayList<>(groupMap.keySet()));
|
|
|
+ List<AdRankItem> rankItems = Collections.emptyList();
|
|
|
+ if (!cache.isEmpty()) {
|
|
|
+ rankItems = new LinkedList<>(cache.values());
|
|
|
}
|
|
|
- double lambda=-1d;
|
|
|
- for(AdRankItem item:rankItems){
|
|
|
+ double lambda = -1d;
|
|
|
+ for (AdRankItem item : rankItems) {
|
|
|
try {
|
|
|
- AdPlatformCreativeDTO dto=groupMap.get(item.getAdId()).get(0);
|
|
|
+ AdPlatformCreativeDTO dto = groupMap.get(item.getAdId()).get(0);
|
|
|
item.setBid1(dto.getBid1());
|
|
|
item.setBid2(dto.getBid2());
|
|
|
- lambda=PidLambdaContainer.getPidLambda(item.getAdId());
|
|
|
- if(lambda<0){
|
|
|
+ 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;
|
|
|
+ } 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());
|
|
|
+ } catch (Exception e) {
|
|
|
+ log.error("rankItems info error itemId={}", item.getAdId());
|
|
|
e.printStackTrace();
|
|
|
}
|
|
|
}
|
|
|
List<AdRankItem> rankResult;
|
|
|
- if(rankItems==null|| rankItems.size()==0){
|
|
|
- rankItems=new LinkedList<>();
|
|
|
- for(AdPlatformCreativeDTO dto:request.getCreativeList()){
|
|
|
- AdRankItem item=new AdRankItem();
|
|
|
+ if (rankItems == null || rankItems.size() == 0) {
|
|
|
+ rankItems = new LinkedList<>();
|
|
|
+ for (AdPlatformCreativeDTO dto : request.getCreativeList()) {
|
|
|
+ AdRankItem item = new AdRankItem();
|
|
|
item.setBid1(dto.getBid1());
|
|
|
item.setBid2(dto.getBid2());
|
|
|
item.setAdId(dto.getCreativeId());
|
|
|
item.setItemFeature(new AdItemFeature());
|
|
|
- lambda=PidLambdaContainer.getPidLambda(item.getAdId());
|
|
|
- if(lambda<0){
|
|
|
+ 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;
|
|
|
+ } else {
|
|
|
+ if (dto.getCpa() > 1 && lambda <= 1) {
|
|
|
+ lambda = 2d;
|
|
|
}
|
|
|
item.setCpa(lambda);
|
|
|
item.setPidLambda(1d);
|
|
|
}
|
|
|
rankItems.add(item);
|
|
|
}
|
|
|
- rankResult=rankServiceThompson.rank(param, userAdFeature, rankItems,null);
|
|
|
- }else {
|
|
|
- rankResult=rank(param, userAdFeature, rankItems,ScorerUtils.BASE_CONF);
|
|
|
+ rankResult = rankServiceThompson.rank(param, userAdFeature, rankItems, null);
|
|
|
+ } else {
|
|
|
+ rankResult = rank(param, userAdFeature, rankItems, ScorerUtils.BASE_CONF);
|
|
|
}
|
|
|
|
|
|
- AdRankItem topItem=rankResult.get(0);
|
|
|
+ AdRankItem topItem = rankResult.get(0);
|
|
|
|
|
|
- AdPlatformCreativeDTO result= AdPlatformCreativeDTO
|
|
|
+ AdPlatformCreativeDTO result = AdPlatformCreativeDTO
|
|
|
.builder()
|
|
|
.build();
|
|
|
- BeanUtils.copyProperties(topItem,result);
|
|
|
+ BeanUtils.copyProperties(topItem, result);
|
|
|
result.setCreativeId(topItem.getAdId());
|
|
|
result.setPctr(topItem.getCtr());
|
|
|
result.setPcvr(topItem.getCvr());
|
|
|
// result.setCreativeCode(groupMap.get(topItem.getAdId()+"").get(0).getCreativeCode());
|
|
|
result.setCreativeCode(groupMap.get(topItem.getAdId()).get(0).getCreativeCode());
|
|
|
- double realECpm=0d;
|
|
|
- //经验值 待定
|
|
|
+ double realECpm = 0d;
|
|
|
+ // 经验值 待定
|
|
|
// realECpm=topItem.getEcpm1();
|
|
|
- realECpm=topItem.getEcpm2();
|
|
|
+ realECpm = topItem.getEcpm2();
|
|
|
|
|
|
- if(realECpm>cpmMax/1000d){
|
|
|
- realECpm=cpmMax/1000d;
|
|
|
+ if (realECpm > cpmMax / 1000d) {
|
|
|
+ realECpm = cpmMax / 1000d;
|
|
|
}
|
|
|
- if(realECpm<cpmMin/1000d){
|
|
|
- realECpm=cpmMin/1000d;
|
|
|
+ if (realECpm < cpmMin / 1000d) {
|
|
|
+ realECpm = cpmMin / 1000d;
|
|
|
}
|
|
|
result.setEcpm2(realECpm);
|
|
|
- AdPlatformCreativeDTO dto=groupMap.get(topItem.getAdId()).get(0);
|
|
|
- JSONObject object=new JSONObject();
|
|
|
- object.put("mid",request.getMid());
|
|
|
- object.put("adid",result.getCreativeId());
|
|
|
- object.put("creativeCode",result.getCreativeCode());
|
|
|
- object.put("type",topItem.getScore_type());
|
|
|
- object.put("pctr",topItem.getCtr());
|
|
|
- object.put("pcvr",topItem.getCvr());
|
|
|
- object.put("lrsamples",topItem.getLrSampleString());
|
|
|
- object.put("pidLambda",topItem.getPidLambda());
|
|
|
+ AdPlatformCreativeDTO dto = groupMap.get(topItem.getAdId()).get(0);
|
|
|
+ JSONObject object = new JSONObject();
|
|
|
+ object.put("mid", request.getMid());
|
|
|
+ object.put("adid", result.getCreativeId());
|
|
|
+ object.put("creativeCode", result.getCreativeCode());
|
|
|
+ object.put("type", topItem.getScore_type());
|
|
|
+ object.put("pctr", topItem.getCtr());
|
|
|
+ object.put("pcvr", topItem.getCvr());
|
|
|
+ object.put("lrsamples", topItem.getLrSampleString());
|
|
|
+ object.put("pidLambda", topItem.getPidLambda());
|
|
|
object.put("videoId", request.getVideoId());
|
|
|
|
|
|
- //临时加入供pid v2使用
|
|
|
- object.put("realECpm",realECpm);
|
|
|
- object.put("creativeId",result.getCreativeId());
|
|
|
- //CPA还原
|
|
|
- object.put("cpa",dto.getCpa()*dto.getBid1());
|
|
|
- object.put("oCpa",dto.getCpa());
|
|
|
- object.put("dataTime",currentTime.format(timeFormatter));
|
|
|
+ // 临时加入供pid v2使用
|
|
|
+ object.put("realECpm", realECpm);
|
|
|
+ object.put("creativeId", result.getCreativeId());
|
|
|
+ // CPA还原
|
|
|
+ object.put("cpa", dto.getCpa() * dto.getBid1());
|
|
|
+ object.put("oCpa", dto.getCpa());
|
|
|
+ object.put("dataTime", currentTime.format(timeFormatter));
|
|
|
object.put("pqtId", request.getPqtId());
|
|
|
log.info("svc=adBidRank {}", JSONObject.toJSONString(object));
|
|
|
object.remove("lrsamples");
|
|
@@ -451,128 +416,128 @@ public class RankServiceImpl implements RankService {
|
|
|
@Override
|
|
|
public AdPlatformCreativeDTO adBidRankNewPid(BidRankRecommendRequestParam request) {
|
|
|
|
|
|
- ScoreParam param= RequestConvert.requestConvert(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().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();
|
|
|
+ UserAdFeature userAdFeature = featureRemoteService.getUserAdFeature(request.getMid());
|
|
|
+ if (userAdFeature == null) {
|
|
|
+ userAdFeature = new UserAdFeature();
|
|
|
}
|
|
|
- Map<Long,List<AdPlatformCreativeDTO>> groupMap=request
|
|
|
+ Map<Long, List<AdPlatformCreativeDTO>> groupMap = request
|
|
|
.getCreativeList()
|
|
|
.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());
|
|
|
+ Map<Long, AdRankItem> cache = adCreativeFeatureContainer.getAll(new ArrayList<>(groupMap.keySet()));
|
|
|
+ List<AdRankItem> rankItems = Collections.emptyList();
|
|
|
+ if (!cache.isEmpty()) {
|
|
|
+ rankItems = new LinkedList<>(cache.values());
|
|
|
}
|
|
|
- double lambda=-1d;
|
|
|
- for(AdRankItem item:rankItems){
|
|
|
+ double lambda = -1d;
|
|
|
+ for (AdRankItem item : rankItems) {
|
|
|
try {
|
|
|
|
|
|
- AdPlatformCreativeDTO 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){
|
|
|
+ lambda = PidLambdaV2Container.getPidLambda(item.getAdId());
|
|
|
+ if (lambda < 0) {
|
|
|
item.setCpa(dto.getCpa());
|
|
|
- item.setPidLambda(dto.getCpa()*0.6);
|
|
|
- }else {
|
|
|
- if(dto.getCpa()>1&&lambda<=1){
|
|
|
- lambda=2d;
|
|
|
+ item.setPidLambda(dto.getCpa() * 0.6);
|
|
|
+ } else {
|
|
|
+ if (dto.getCpa() > 1 && lambda <= 1) {
|
|
|
+ lambda = 2d;
|
|
|
}
|
|
|
item.setCpa(dto.getCpa());
|
|
|
item.setPidLambda(lambda);
|
|
|
}
|
|
|
|
|
|
- }catch (Exception e){
|
|
|
- log.error("rankItems info error itemId={}",item.getAdId());
|
|
|
+ } catch (Exception e) {
|
|
|
+ log.error("rankItems info error itemId={}", item.getAdId());
|
|
|
e.printStackTrace();
|
|
|
}
|
|
|
}
|
|
|
List<AdRankItem> rankResult;
|
|
|
- if(rankItems==null|| rankItems.size()==0){
|
|
|
- rankItems=new LinkedList<>();
|
|
|
- for(AdPlatformCreativeDTO dto:request.getCreativeList()){
|
|
|
- AdRankItem item=new AdRankItem();
|
|
|
+ if (rankItems == null || rankItems.size() == 0) {
|
|
|
+ rankItems = new LinkedList<>();
|
|
|
+ for (AdPlatformCreativeDTO dto : request.getCreativeList()) {
|
|
|
+ AdRankItem item = new AdRankItem();
|
|
|
item.setBid1(dto.getBid1());
|
|
|
item.setBid2(dto.getBid2());
|
|
|
item.setAdId(dto.getCreativeId());
|
|
|
item.setItemFeature(new AdItemFeature());
|
|
|
- lambda=PidLambdaV2Container.getPidLambda(item.getAdId());
|
|
|
+ lambda = PidLambdaV2Container.getPidLambda(item.getAdId());
|
|
|
|
|
|
- if(lambda<0){
|
|
|
+ if (lambda < 0) {
|
|
|
item.setCpa(dto.getCpa());
|
|
|
- item.setPidLambda(dto.getCpa()*0.6);
|
|
|
- }else {
|
|
|
- if(dto.getCpa()>1&&lambda<=1){
|
|
|
- lambda=2d;
|
|
|
+ item.setPidLambda(dto.getCpa() * 0.6);
|
|
|
+ } else {
|
|
|
+ if (dto.getCpa() > 1 && lambda <= 1) {
|
|
|
+ lambda = 2d;
|
|
|
}
|
|
|
item.setCpa(dto.getCpa());
|
|
|
item.setPidLambda(lambda);
|
|
|
}
|
|
|
rankItems.add(item);
|
|
|
}
|
|
|
- rankResult=rankServiceThompson.rank(param, userAdFeature, rankItems,null);
|
|
|
- }else {
|
|
|
- rankResult=rank(param, userAdFeature, rankItems,ScorerUtils.BASE_CONF);
|
|
|
+ rankResult = rankServiceThompson.rank(param, userAdFeature, rankItems, null);
|
|
|
+ } else {
|
|
|
+ rankResult = rank(param, userAdFeature, rankItems, ScorerUtils.BASE_CONF);
|
|
|
}
|
|
|
|
|
|
- AdRankItem topItem=rankResult.get(0);
|
|
|
+ AdRankItem topItem = rankResult.get(0);
|
|
|
|
|
|
- AdPlatformCreativeDTO result= AdPlatformCreativeDTO
|
|
|
+ AdPlatformCreativeDTO result = AdPlatformCreativeDTO
|
|
|
.builder()
|
|
|
.build();
|
|
|
- BeanUtils.copyProperties(topItem,result);
|
|
|
+ BeanUtils.copyProperties(topItem, result);
|
|
|
result.setCreativeId(topItem.getAdId());
|
|
|
result.setPctr(topItem.getCtr());
|
|
|
result.setPcvr(topItem.getCvr());
|
|
|
result.setCreativeCode(groupMap.get(topItem.getAdId()).get(0).getCreativeCode());
|
|
|
- double realECpm=0d;
|
|
|
- realECpm=topItem.getEcpm2();
|
|
|
+ double realECpm = 0d;
|
|
|
+ realECpm = topItem.getEcpm2();
|
|
|
|
|
|
- if(realECpm>cpmMax/1000d){
|
|
|
- realECpm=cpmMax/1000d;
|
|
|
+ if (realECpm > cpmMax / 1000d) {
|
|
|
+ realECpm = cpmMax / 1000d;
|
|
|
}
|
|
|
- if(realECpm<cpmMin/1000d){
|
|
|
- realECpm=cpmMin/1000d;
|
|
|
+ if (realECpm < cpmMin / 1000d) {
|
|
|
+ realECpm = cpmMin / 1000d;
|
|
|
}
|
|
|
result.setEcpm2(realECpm);
|
|
|
- AdPlatformCreativeDTO dto=groupMap.get(topItem.getAdId()).get(0);
|
|
|
- JSONObject object=new JSONObject();
|
|
|
- object.put("mid",request.getMid());
|
|
|
- object.put("adid",result.getCreativeId());
|
|
|
- object.put("creativeCode",result.getCreativeCode());
|
|
|
- object.put("type",topItem.getScore_type());
|
|
|
- object.put("pctr",topItem.getCtr());
|
|
|
- object.put("pcvr",topItem.getCvr());
|
|
|
- object.put("lrsamples",topItem.getLrSampleString());
|
|
|
- object.put("pidLambda",topItem.getPidLambda());
|
|
|
- object.put("realECpm",realECpm);
|
|
|
- object.put("creativeId",result.getCreativeId());
|
|
|
+ AdPlatformCreativeDTO dto = groupMap.get(topItem.getAdId()).get(0);
|
|
|
+ JSONObject object = new JSONObject();
|
|
|
+ object.put("mid", request.getMid());
|
|
|
+ object.put("adid", result.getCreativeId());
|
|
|
+ object.put("creativeCode", result.getCreativeCode());
|
|
|
+ object.put("type", topItem.getScore_type());
|
|
|
+ object.put("pctr", topItem.getCtr());
|
|
|
+ object.put("pcvr", topItem.getCvr());
|
|
|
+ object.put("lrsamples", topItem.getLrSampleString());
|
|
|
+ object.put("pidLambda", topItem.getPidLambda());
|
|
|
+ object.put("realECpm", realECpm);
|
|
|
+ object.put("creativeId", result.getCreativeId());
|
|
|
object.put("videoId", request.getVideoId());
|
|
|
- //CPA还原
|
|
|
- object.put("cpa",dto.getCpa()*dto.getBid1());
|
|
|
- object.put("oCpa",dto.getCpa());
|
|
|
+ // CPA还原
|
|
|
+ object.put("cpa", dto.getCpa() * dto.getBid1());
|
|
|
+ object.put("oCpa", dto.getCpa());
|
|
|
object.put("pqtId", request.getPqtId());
|
|
|
- object.put("dataTime",currentTime.format(timeFormatter));
|
|
|
+ object.put("dataTime", currentTime.format(timeFormatter));
|
|
|
log.info("svc=adBidRankNewPid {}", JSONObject.toJSONString(object));
|
|
|
object.remove("lrsamples");
|
|
|
log.info("svc=pid_v2_log obj={}", JSONObject.toJSONString(object));
|
|
|
return result;
|
|
|
}
|
|
|
|
|
|
- public List<AdRankItem> rank (ScoreParam param, UserAdFeature userAdFeature, List<AdRankItem> rankItems,String configFile){
|
|
|
+ public List<AdRankItem> rank(ScoreParam param, UserAdFeature userAdFeature, List<AdRankItem> rankItems, String configFile) {
|
|
|
List<AdRankItem> rankResult = ScorerUtils
|
|
|
.getScorerPipeline(configFile)
|
|
|
.scoring(param, userAdFeature, rankItems);
|