|
@@ -7,7 +7,6 @@ import com.tzld.piaoquan.ad.engine.service.score.dto.AdPlatformCreativeDTO;
|
|
|
import com.tzld.piaoquan.recommend.feature.domain.ad.base.AdRankItem;
|
|
|
import org.apache.commons.lang3.StringUtils;
|
|
|
import org.apache.commons.math3.distribution.BetaDistribution;
|
|
|
-import org.checkerframework.checker.units.qual.C;
|
|
|
import org.slf4j.Logger;
|
|
|
import org.slf4j.LoggerFactory;
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
@@ -222,7 +221,7 @@ public class VideoAdThompsonScorerV2 {
|
|
|
Double videoCreativeExpSum = this.sumCreativeStatisticExp(videoCreativeStatisticsMap.values());
|
|
|
|
|
|
List<AdRankItem> result = new ArrayList<>(adIdList.size());
|
|
|
- this.calcScore(result, adIdList, creativeExpSum, videoCreativeExpSum, creativeStatisticsMap, videoCreativeStatisticsMap);
|
|
|
+ this.calcScore(result, adIdList,1d, creativeExpSum, videoCreativeExpSum, creativeStatisticsMap, videoCreativeStatisticsMap, exp669Param);
|
|
|
result.sort(equalsRandomComparator());
|
|
|
|
|
|
return result;
|
|
@@ -232,24 +231,31 @@ public class VideoAdThompsonScorerV2 {
|
|
|
Map<Long, CreativeStatistic> creativeStatisticsMap = this.batchFindCreativeRedisCache(redisCreativeStatisticsPrefix, adIdList);
|
|
|
Map<Long, CreativeStatistic> videoCreativeStatisticsMap = this.batchFindCreativeRedisCache(redisVideoCreativeStatisticsPrefix + param.getVideoId() + "_", adIdList);
|
|
|
|
|
|
- Double cidBeta = exp670Param.getOrDefault("cidBeta", 0.0);
|
|
|
- Double vidCidBeta = exp670Param.getOrDefault("vidCidBeta", 0.0);
|
|
|
-
|
|
|
List<AdRankItem> result = new ArrayList<>(adIdList.size());
|
|
|
- this.calcScore(result, adIdList, cidBeta, vidCidBeta, creativeStatisticsMap, videoCreativeStatisticsMap);
|
|
|
+ this.calcScore(result, adIdList, 0.0, 0.0, 0.0, creativeStatisticsMap, videoCreativeStatisticsMap, exp670Param);
|
|
|
result.sort(equalsRandomComparator());
|
|
|
|
|
|
- return result; }
|
|
|
+ return result;
|
|
|
+ }
|
|
|
|
|
|
- private void calcScore(List<AdRankItem> result, List<AdPlatformCreativeDTO> adIdList, Double cidBeta, Double vidCidBeta, Map<Long, CreativeStatistic> cidMap, Map<Long, CreativeStatistic> vidCidMap) {
|
|
|
+ private void calcScore(List<AdRankItem> result, List<AdPlatformCreativeDTO> adIdList,Double alpha, Double cidBeta, Double vidCidBeta, Map<Long, CreativeStatistic> cidMap, Map<Long, CreativeStatistic> vidCidMap, Map<String, Double> expParam) {
|
|
|
for (AdPlatformCreativeDTO dto : adIdList) {
|
|
|
+
|
|
|
+ CreativeStatistic cidStatistic = cidMap.getOrDefault(dto.getCreativeId(), new CreativeStatistic());
|
|
|
+ CreativeStatistic vidCidStatistic = vidCidMap.getOrDefault(dto.getCreativeId(), new CreativeStatistic());
|
|
|
+
|
|
|
+ double cidScore = this.calcThompsonScore(expParam, cidStatistic, alpha, cidBeta);
|
|
|
+ double vidCidScore = this.calcThompsonScore(expParam, vidCidStatistic, alpha, vidCidBeta);
|
|
|
+ double w1 = expParam.getOrDefault("w1", 1d);
|
|
|
+ double w2 = expParam.getOrDefault("w2", 2d);
|
|
|
+ double score = w1 * vidCidScore + w2 * cidScore;
|
|
|
+
|
|
|
AdRankItem item = new AdRankItem();
|
|
|
item.setCpa(dto.getCpa());
|
|
|
item.setAdId(dto.getCreativeId());
|
|
|
- CreativeStatistic cidStatistic = cidMap.getOrDefault(dto.getCreativeId(), new CreativeStatistic());
|
|
|
- CreativeStatistic vidCidStatistic = vidCidMap.getOrDefault(dto.getCreativeId(), new CreativeStatistic());
|
|
|
- Double score = this.calcThompsonScore(cidStatistic.getDoubleOrder(), cidStatistic.getDoubleExp() + cidBeta, vidCidStatistic.getDoubleOrder(), vidCidStatistic.getDoubleExp() + vidCidBeta, exp669Param);
|
|
|
item.setScore(score);
|
|
|
+
|
|
|
+ result.add(item);
|
|
|
}
|
|
|
}
|
|
|
|
|
@@ -266,17 +272,18 @@ public class VideoAdThompsonScorerV2 {
|
|
|
return resultMap;
|
|
|
}
|
|
|
|
|
|
- private Double calcThompsonScore(Double cidAlpha, Double cidBeta, Double vidCidAlpha, Double vidCidBeta, Map<String, Double> expParam) {
|
|
|
- if (cidAlpha == 0 || cidBeta == 0 || vidCidBeta == 0 | vidCidBeta == 0) {
|
|
|
+ private double calcThompsonScore(Map<String, Double> expParam, CreativeStatistic creativeStatistic, Double defaultAlpha, Double defaultBeta) {
|
|
|
+ Double alpha = expParam.getOrDefault("alpha", defaultAlpha);
|
|
|
+ Double beta = expParam.getOrDefault("beta", defaultBeta);
|
|
|
+
|
|
|
+ double order = creativeStatistic.getDoubleOrder() + alpha;
|
|
|
+ double exp = creativeStatistic.getDoubleExp() + beta;
|
|
|
+
|
|
|
+ if (order == 0 || exp == 0) {
|
|
|
return 0.0;
|
|
|
}
|
|
|
|
|
|
- double cidThompson = this.betaSampler(cidAlpha, cidBeta);
|
|
|
- double vidCidThompson = this.betaSampler(vidCidAlpha, vidCidBeta);
|
|
|
- double w1 = expParam.getOrDefault("w1", 1d);
|
|
|
- double w2 = expParam.getOrDefault("w1", 1d);
|
|
|
-
|
|
|
- return w1 * vidCidThompson + w2 * cidThompson;
|
|
|
+ return this.betaSampler(order, exp);
|
|
|
}
|
|
|
|
|
|
private Double sumCreativeStatisticExp(Collection<CreativeStatistic> creativeStatistics) {
|