Forráskód Böngészése

feat:汤姆森实验

zhaohaipeng 11 hónapja
szülő
commit
3de23b366c

+ 26 - 19
ad-engine-service/src/main/java/com/tzld/piaoquan/ad/engine/service/score/VideoAdThompsonScorerV2.java

@@ -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 com.tzld.piaoquan.recommend.feature.domain.ad.base.AdRankItem;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.commons.math3.distribution.BetaDistribution;
 import org.apache.commons.math3.distribution.BetaDistribution;
-import org.checkerframework.checker.units.qual.C;
 import org.slf4j.Logger;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -222,7 +221,7 @@ public class VideoAdThompsonScorerV2 {
         Double videoCreativeExpSum = this.sumCreativeStatisticExp(videoCreativeStatisticsMap.values());
         Double videoCreativeExpSum = this.sumCreativeStatisticExp(videoCreativeStatisticsMap.values());
 
 
         List<AdRankItem> result = new ArrayList<>(adIdList.size());
         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());
         result.sort(equalsRandomComparator());
 
 
         return result;
         return result;
@@ -232,24 +231,31 @@ public class VideoAdThompsonScorerV2 {
         Map<Long, CreativeStatistic> creativeStatisticsMap = this.batchFindCreativeRedisCache(redisCreativeStatisticsPrefix, adIdList);
         Map<Long, CreativeStatistic> creativeStatisticsMap = this.batchFindCreativeRedisCache(redisCreativeStatisticsPrefix, adIdList);
         Map<Long, CreativeStatistic> videoCreativeStatisticsMap = this.batchFindCreativeRedisCache(redisVideoCreativeStatisticsPrefix + param.getVideoId() + "_", 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());
         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());
         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) {
         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();
             AdRankItem item = new AdRankItem();
             item.setCpa(dto.getCpa());
             item.setCpa(dto.getCpa());
             item.setAdId(dto.getCreativeId());
             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);
             item.setScore(score);
+
+            result.add(item);
         }
         }
     }
     }
 
 
@@ -266,17 +272,18 @@ public class VideoAdThompsonScorerV2 {
         return resultMap;
         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;
             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) {
     private Double sumCreativeStatisticExp(Collection<CreativeStatistic> creativeStatistics) {