|
@@ -206,14 +206,13 @@ public abstract class RankStrategyBasic implements RankStrategy {
|
|
|
Map<String, String> userLayer = getUserLayer(request.getMid());
|
|
|
String layer = userLayer.getOrDefault("layer", "无曝光");
|
|
|
String clazz = userLayer.getOrDefault("class", "近期未出现");
|
|
|
- if (StringUtils.isNotEmpty(layer) && layer.equals("已转化")) {
|
|
|
- layer = "有转化";
|
|
|
- }
|
|
|
if (request.getIsFilterUser()) {
|
|
|
layer = layer + "-炸";
|
|
|
}
|
|
|
String userLayerClass = layer + "-" + clazz;
|
|
|
map.put("user_layer_class", userLayerClass);
|
|
|
+ map.put("layer", layer);
|
|
|
+ map.put("clazz", clazz);
|
|
|
return map;
|
|
|
}
|
|
|
|
|
@@ -270,9 +269,6 @@ public abstract class RankStrategyBasic implements RankStrategy {
|
|
|
Map<String, String> userLayer = this.getUserLayer(request.getMid());
|
|
|
String layer = userLayer.getOrDefault("layer", "无曝光");
|
|
|
String clazz = userLayer.getOrDefault("class", "近期未出现");
|
|
|
- if (StringUtils.isNotEmpty(layer) && layer.equals("已转化")) {
|
|
|
- layer = "有转化";
|
|
|
- }
|
|
|
//有转化中医层,中医和兴趣教育同时存在过滤兴趣教育行业
|
|
|
if (Objects.equals(layer, "有转化") && Objects.equals(clazz, "中医") && scoreParam.getExpCodeSet().contains(excludeExp)) {
|
|
|
List<AdPlatformCreativeDTO> adIdList = request.getAdIdList();
|
|
@@ -396,17 +392,11 @@ public abstract class RankStrategyBasic implements RankStrategy {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- protected Map<Long, CorrectCpaParam> getCorrectCpaParamMap(RankRecommendRequestParam request, ScoreParam scoreParam) {
|
|
|
+ protected Map<Long, CorrectCpaParam> getCorrectCpaParamMap(RankRecommendRequestParam request, ScoreParam scoreParam, Map<String, String> reqFeature) {
|
|
|
Map<String, String> userLayer = this.getUserLayer(request.getMid());
|
|
|
|
|
|
- String layer = userLayer.getOrDefault("layer", "无曝光");
|
|
|
- String clazz = userLayer.getOrDefault("class", "近期未出现");
|
|
|
- if (StringUtils.isNotEmpty(layer) && layer.equals("已转化")) {
|
|
|
- layer = "有转化";
|
|
|
- }
|
|
|
- if (request.getIsFilterUser()) {
|
|
|
- layer = layer + "-炸";
|
|
|
- }
|
|
|
+ String layer = reqFeature.get("layer");
|
|
|
+ String clazz = reqFeature.get("clazz");
|
|
|
Map<Long, CorrectCpaParam> resultMap = new HashMap<>();
|
|
|
try {
|
|
|
if (CollectionUtils.isEmpty(request.getAdIdList())) {
|
|
@@ -526,14 +516,11 @@ public abstract class RankStrategyBasic implements RankStrategy {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- protected void calculateCtcvrScore(List<AdRankItem> items, RankRecommendRequestParam request, ScoreParam scoreParam, String modelName) {
|
|
|
- log.info("calculateCtcvrScore start");
|
|
|
+ protected void calculateCtcvrScore(List<AdRankItem> items, RankRecommendRequestParam request, ScoreParam scoreParam, String modelName, Map<String, String> reqFeature) {
|
|
|
//判断是否走校准试验
|
|
|
- log.info("calibrationCtcvrExp={}", calibrationCtcvrExp);
|
|
|
- log.info("scoreParam.getExpCodeSet={}", scoreParam.getExpCodeSet());
|
|
|
if (scoreParam.getExpCodeSet().contains(calibrationCtcvrExp)) {
|
|
|
try {
|
|
|
- calibrationDnnCtcvrScore(items, request.getMid(), request.getIsFilterUser(), modelName);
|
|
|
+ calibrationDnnCtcvrScore(items, modelName, reqFeature);
|
|
|
} catch (Exception e) {
|
|
|
log.error("calibrationDnnCtcvrScore error", e);
|
|
|
}
|
|
@@ -541,19 +528,15 @@ public abstract class RankStrategyBasic implements RankStrategy {
|
|
|
|
|
|
if (scoreParam.getExpCodeSet().contains(calibrationCoefficientExp)) {
|
|
|
try {
|
|
|
- calibrationCtcvrScore(items, request);
|
|
|
+ calibrationCtcvrScore(items, request, reqFeature);
|
|
|
} catch (Exception e) {
|
|
|
log.error("calibrationCtcvrScore error", e);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- protected void calibrationCtcvrScore(List<AdRankItem> items, RankRecommendRequestParam request) {
|
|
|
- Map<String, String> userLayer = this.getUserLayer(request.getMid());
|
|
|
- String layer = userLayer.getOrDefault("layer", "无曝光");
|
|
|
- String clazz = userLayer.getOrDefault("class", "近期未出现");
|
|
|
- layer = "已转化".equals(layer) ? "有转化" : layer;
|
|
|
- String userLayerClass = buildUserLayerClass(request.getIsFilterUser(), layer, clazz);
|
|
|
+ protected void calibrationCtcvrScore(List<AdRankItem> items, RankRecommendRequestParam request, Map<String, String> reqFeature) {
|
|
|
+ String userLayerClass = reqFeature.get("layer") + "-" + reqFeature.get("clazz");
|
|
|
String cidLayerClassKey = cidLayerKey.replace("{userLayer}", userLayerClass);
|
|
|
|
|
|
// 3. 批量查询Redis
|
|
@@ -610,11 +593,6 @@ public abstract class RankStrategyBasic implements RankStrategy {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- private String buildUserLayerClass(boolean isFilterUser, String layer, String clazz) {
|
|
|
- if (Objects.equals(layer, "已转化")) layer = "有转化";
|
|
|
- return isFilterUser ? layer + "-炸-" + clazz : layer + "-" + clazz;
|
|
|
- }
|
|
|
-
|
|
|
|
|
|
protected AdRankItem creativeCovertRankItem(AdPlatformCreativeDTO dto, RankRecommendRequestParam request, Set<String> noApiAdVerIds) {
|
|
|
AdRankItem adRankItem = new AdRankItem();
|
|
@@ -700,43 +678,34 @@ public abstract class RankStrategyBasic implements RankStrategy {
|
|
|
}
|
|
|
String key = String.format("ad:engine:mid:layer:%s", mid);
|
|
|
String value = algRedisHelper.get(key);
|
|
|
- log.info("getUserLayer value={}", value);
|
|
|
if (StringUtils.isEmpty(value)) {
|
|
|
return new HashMap<>();
|
|
|
}
|
|
|
try {
|
|
|
- return JSON.parseObject(value, new TypeReference<Map<String, String>>() {
|
|
|
+ Map<String, String> map = JSON.parseObject(value, new TypeReference<Map<String, String>>() {
|
|
|
});
|
|
|
+ if (map.containsKey("layer") && Objects.equals(map.get("layer"), "已转化")) {
|
|
|
+ map.put("layer", "有转化");
|
|
|
+ }
|
|
|
+ return map;
|
|
|
} catch (Exception e) {
|
|
|
log.error("getUserLayer error. mid: {}, \n", mid, e);
|
|
|
return new HashMap<>();
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- protected void calibrationDnnCtcvrScore(List<AdRankItem> adRankItems, String mid, boolean isFilterUser, String modelName) {
|
|
|
- log.info("calibrationDnnCtcvrScore start");
|
|
|
- log.info("modelName: {}", modelName);
|
|
|
+ protected void calibrationDnnCtcvrScore(List<AdRankItem> adRankItems, String modelName, Map<String, String> reqFeature) {
|
|
|
if (StringUtils.isEmpty(modelName)) {
|
|
|
return;
|
|
|
}
|
|
|
- // 1. 获取用户分层信息
|
|
|
- Map<String, String> userLayer = getUserLayer(mid);
|
|
|
- String layer = userLayer.getOrDefault("layer", "无曝光");
|
|
|
- String clazz = userLayer.getOrDefault("class", "近期未出现");
|
|
|
- if (Objects.equals(layer, "已转化")) {
|
|
|
- layer = "有转化";
|
|
|
- }
|
|
|
- if (isFilterUser) {
|
|
|
- layer += "-炸";
|
|
|
- }
|
|
|
- // 2. 构建Key模板
|
|
|
+ // 构建Key模板
|
|
|
String layerKeyTemplate = realLayerCtcvrKey
|
|
|
.replace("{model}", modelName)
|
|
|
- .replace("{layer}", layer)
|
|
|
- .replace("{class}", clazz);
|
|
|
- log.info("calibrationDnnCtcvrScore layerKeyTemplate={}", layerKeyTemplate);
|
|
|
+ .replace("{layer}", reqFeature.get("layer"))
|
|
|
+ .replace("{class}", reqFeature.get("clazz"));
|
|
|
+
|
|
|
+
|
|
|
String value = adRedisHelper.get(layerKeyTemplate);
|
|
|
- log.info("calibrationDnnCtcvrScore value={}", value);
|
|
|
JSONObject json = JSONObject.parseObject(value);
|
|
|
Integer view = json.getInteger("view");
|
|
|
Double realCtcvr = json.getDouble("ctcvr");
|