Browse Source

add cross features

sunmingze 1 year ago
parent
commit
1eae678fe8

+ 101 - 5
ad-engine-commons/src/main/java/com/tzld/piaoquan/ad/engine/commons/base/AdItemBytesFeature.java

@@ -24,7 +24,7 @@ public class AdItemBytesFeature {
 
     //private final byte[] creativeCode;
 
-
+    // adid 维度,也就是planid
     private Map<String, byte[]> day1_cnt_features;
     // 3天内统计量
     private Map<String, byte[]> day3_cnt_features;
@@ -34,6 +34,28 @@ public class AdItemBytesFeature {
     private Map<String, byte[]> month3_cnt_features;
 
 
+    // creative 维度
+    private Map<String, byte[]> creative_day1_cnt_features;
+    // 3天内统计量
+    private Map<String, byte[]> creative_day3_cnt_features;
+    // 7天内统计量
+    private Map<String, byte[]> creative_day7_cnt_features;
+    // 3个月统计量
+    private Map<String, byte[]> creative_month3_cnt_features;
+
+
+    // advertiserid 维度
+    private Map<String, byte[]> advertiser_day1_cnt_features;
+    // 3天内统计量
+    private Map<String, byte[]> advertiser_day3_cnt_features;
+    // 7天内统计量
+    private Map<String, byte[]> advertiser_day7_cnt_features;
+    // 3个月统计量
+    private Map<String, byte[]> advertiser_month3_cnt_features;
+
+
+
+
     public AdItemBytesFeature(AdItemFeature feature) {
 
         adId = feature.getAdId().getBytes();
@@ -46,7 +68,7 @@ public class AdItemBytesFeature {
         // creativeCode = feature.getCreativeCode().getBytes();
 
 
-
+        // adid 维度  planid
         // 1 day statistic
         day1_cnt_features = new HashMap<String, byte[]>();
         day1_cnt_features.put("view", String.valueOf(feature.getDay1_cnt_features().getAdView()).getBytes());
@@ -55,7 +77,6 @@ public class AdItemBytesFeature {
         day1_cnt_features.put("ctr", String.valueOf(feature.getDay1_cnt_features().getCtr()).getBytes());
         day1_cnt_features.put("cvr", String.valueOf(feature.getDay1_cnt_features().getCvr()).getBytes());
 
-
         // 3 day statistic
         day3_cnt_features = new HashMap<String, byte[]>();
         day3_cnt_features.put("view", String.valueOf(feature.getDay3_cnt_features().getAdView()).getBytes());
@@ -64,7 +85,6 @@ public class AdItemBytesFeature {
         day3_cnt_features.put("ctr", String.valueOf(feature.getDay3_cnt_features().getCtr()).getBytes());
         day3_cnt_features.put("cvr", String.valueOf(feature.getDay3_cnt_features().getCvr()).getBytes());
 
-
         // 7 day statistic
         day7_cnt_features = new HashMap<String, byte[]>();
         day7_cnt_features.put("view", String.valueOf(feature.getDay7_cnt_features().getAdView()).getBytes());
@@ -73,7 +93,6 @@ public class AdItemBytesFeature {
         day7_cnt_features.put("ctr", String.valueOf(feature.getDay7_cnt_features().getCtr()).getBytes());
         day7_cnt_features.put("cvr", String.valueOf(feature.getDay7_cnt_features().getCvr()).getBytes());
 
-
         // 3 month statisic
         month3_cnt_features = new HashMap<String, byte[]>();
         month3_cnt_features.put("view", String.valueOf(feature.getMonth3_cnt_features().getAdView()).getBytes());
@@ -82,6 +101,83 @@ public class AdItemBytesFeature {
         month3_cnt_features.put("ctr", String.valueOf(feature.getMonth3_cnt_features().getCtr()).getBytes());
         month3_cnt_features.put("cvr", String.valueOf(feature.getMonth3_cnt_features().getCvr()).getBytes());
 
+
+        // creative 维度  creativeid
+        // 1 day statistic
+        creative_day1_cnt_features = new HashMap<String, byte[]>();
+        creative_day1_cnt_features.put("view", String.valueOf(feature.getCreative_1day_cnt_features().getAdView()).getBytes());
+        creative_day1_cnt_features.put("click", String.valueOf(feature.getCreative_1day_cnt_features().getAdClick()).getBytes());
+        creative_day1_cnt_features.put("conversion", String.valueOf(feature.getCreative_1day_cnt_features().getAdConversion()).getBytes());
+        creative_day1_cnt_features.put("ctr", String.valueOf(feature.getCreative_1day_cnt_features().getCtr()).getBytes());
+        creative_day1_cnt_features.put("cvr", String.valueOf(feature.getCreative_1day_cnt_features().getCvr()).getBytes());
+
+        // 3 day statistic
+        creative_day3_cnt_features = new HashMap<String, byte[]>();
+        creative_day3_cnt_features.put("view", String.valueOf(feature.getDay3_cnt_features().getAdView()).getBytes());
+        creative_day3_cnt_features.put("click", String.valueOf(feature.getDay3_cnt_features().getAdClick()).getBytes());
+        creative_day3_cnt_features.put("conversion", String.valueOf(feature.getDay3_cnt_features().getAdConversion()).getBytes());
+        creative_day3_cnt_features.put("ctr", String.valueOf(feature.getDay3_cnt_features().getCtr()).getBytes());
+        creative_day3_cnt_features.put("cvr", String.valueOf(feature.getDay3_cnt_features().getCvr()).getBytes());
+
+        // 7 day statistic
+        creative_day7_cnt_features = new HashMap<String, byte[]>();
+        creative_day7_cnt_features.put("view", String.valueOf(feature.getDay7_cnt_features().getAdView()).getBytes());
+        creative_day7_cnt_features.put("click", String.valueOf(feature.getDay7_cnt_features().getAdClick()).getBytes());
+        creative_day7_cnt_features.put("conversion", String.valueOf(feature.getDay7_cnt_features().getAdConversion()).getBytes());
+        creative_day7_cnt_features.put("ctr", String.valueOf(feature.getDay7_cnt_features().getCtr()).getBytes());
+        creative_day7_cnt_features.put("cvr", String.valueOf(feature.getDay7_cnt_features().getCvr()).getBytes());
+
+
+        // 3 month statisic
+        creative_month3_cnt_features = new HashMap<String, byte[]>();
+        creative_month3_cnt_features.put("view", String.valueOf(feature.getMonth3_cnt_features().getAdView()).getBytes());
+        creative_month3_cnt_features.put("click", String.valueOf(feature.getMonth3_cnt_features().getAdClick()).getBytes());
+        creative_month3_cnt_features.put("conversion", String.valueOf(feature.getMonth3_cnt_features().getAdConversion()).getBytes());
+        creative_month3_cnt_features.put("ctr", String.valueOf(feature.getMonth3_cnt_features().getCtr()).getBytes());
+        creative_month3_cnt_features.put("cvr", String.valueOf(feature.getMonth3_cnt_features().getCvr()).getBytes());
+
+
+
+        // advertiser 维度  planid
+        // 1 day statistic
+        advertiser_day1_cnt_features = new HashMap<String, byte[]>();
+        advertiser_day1_cnt_features.put("view", String.valueOf(feature.getAdvertiser_1day_cnt_features().getAdView()).getBytes());
+        advertiser_day1_cnt_features.put("click", String.valueOf(feature.getAdvertiser_1day_cnt_features().getAdClick()).getBytes());
+        advertiser_day1_cnt_features.put("conversion", String.valueOf(feature.getAdvertiser_1day_cnt_features().getAdConversion()).getBytes());
+        advertiser_day1_cnt_features.put("ctr", String.valueOf(feature.getAdvertiser_1day_cnt_features().getCtr()).getBytes());
+        advertiser_day1_cnt_features.put("cvr", String.valueOf(feature.getAdvertiser_1day_cnt_features().getCvr()).getBytes());
+
+
+        // 3 day statistic
+        advertiser_day3_cnt_features = new HashMap<String, byte[]>();
+        advertiser_day3_cnt_features.put("view", String.valueOf(feature.getAdvertiser_3day_cnt_features().getAdView()).getBytes());
+        advertiser_day3_cnt_features.put("click", String.valueOf(feature.getAdvertiser_3day_cnt_features().getAdClick()).getBytes());
+        advertiser_day3_cnt_features.put("conversion", String.valueOf(feature.getAdvertiser_3day_cnt_features().getAdConversion()).getBytes());
+        advertiser_day3_cnt_features.put("ctr", String.valueOf(feature.getAdvertiser_3day_cnt_features().getCtr()).getBytes());
+        advertiser_day3_cnt_features.put("cvr", String.valueOf(feature.getAdvertiser_3day_cnt_features().getCvr()).getBytes());
+
+
+        // 7 day statistic
+        advertiser_day7_cnt_features = new HashMap<String, byte[]>();
+        advertiser_day7_cnt_features.put("view", String.valueOf(feature.getAdvertiser_7day_cnt_features().getAdView()).getBytes());
+        advertiser_day7_cnt_features.put("click", String.valueOf(feature.getAdvertiser_7day_cnt_features().getAdClick()).getBytes());
+        advertiser_day7_cnt_features.put("conversion", String.valueOf(feature.getAdvertiser_7day_cnt_features().getAdConversion()).getBytes());
+        advertiser_day7_cnt_features.put("ctr", String.valueOf(feature.getAdvertiser_7day_cnt_features().getCtr()).getBytes());
+        advertiser_day7_cnt_features.put("cvr", String.valueOf(feature.getAdvertiser_7day_cnt_features().getCvr()).getBytes());
+
+
+        // 3 month statisic
+        advertiser_month3_cnt_features = new HashMap<String, byte[]>();
+        advertiser_month3_cnt_features.put("view", String.valueOf(feature.getAdvertiser_3month_cnt_features().getAdView()).getBytes());
+        advertiser_month3_cnt_features.put("click", String.valueOf(feature.getAdvertiser_3month_cnt_features().getAdClick()).getBytes());
+        advertiser_month3_cnt_features.put("conversion", String.valueOf(feature.getAdvertiser_3month_cnt_features().getAdConversion()).getBytes());
+        advertiser_month3_cnt_features.put("ctr", String.valueOf(feature.getAdvertiser_3month_cnt_features().getCtr()).getBytes());
+        advertiser_month3_cnt_features.put("cvr", String.valueOf(feature.getAdvertiser_3month_cnt_features().getCvr()).getBytes());
+
+
+
+
+
     }
 
 }

+ 57 - 22
ad-engine-commons/src/main/java/com/tzld/piaoquan/ad/engine/commons/base/AdItemFeature.java

@@ -43,20 +43,32 @@ public class AdItemFeature {
     private String creativeCode = "0";
 
 
-
+    // adid 计划维度统计信息
     // 当天统计量信息
-    private AdActionFeature day1_cnt_features=new AdActionFeature();
+    private AdActionFeature day1_cnt_features = new AdActionFeature();
     // 3天内统计量
-    private AdActionFeature day3_cnt_features=new AdActionFeature();
+    private AdActionFeature day3_cnt_features = new AdActionFeature();
     // 7天内统计量
-    private AdActionFeature day7_cnt_features=new AdActionFeature();
+    private AdActionFeature day7_cnt_features = new AdActionFeature();
     // 3个月统计量
-    private AdActionFeature month3_cnt_features=new AdActionFeature();
+    private AdActionFeature month3_cnt_features = new AdActionFeature();
+
 
+    // 创意维度统计信息
+    private AdActionFeature creative_1day_cnt_features = new AdActionFeature();
+    private AdActionFeature creative_3day_cnt_features = new AdActionFeature();
+    private AdActionFeature creative_7day_cnt_features = new AdActionFeature();
+    private AdActionFeature creative_3month_cnt_features = new AdActionFeature();
 
+    // 广告主维度统计信息
+    private AdActionFeature advertiser_1day_cnt_features = new AdActionFeature();
+    private AdActionFeature advertiser_3day_cnt_features = new AdActionFeature();
+    private AdActionFeature advertiser_7day_cnt_features = new AdActionFeature();
+    private AdActionFeature advertiser_3month_cnt_features = new AdActionFeature();
 
-    public void setAdId(String key){
-        if(key == null){
+
+    public void setAdId(String key) {
+        if (key == null) {
             this.adId = "0";
         } else {
             this.adId = key;
@@ -64,16 +76,16 @@ public class AdItemFeature {
     }
 
 
-    public void setAdvertiserId(String key){
-        if(key == null){
+    public void setAdvertiserId(String key) {
+        if (key == null) {
             this.advertiserId = "0";
         } else {
             this.advertiserId = key;
         }
     }
 
-    public void setCampaignId(String key){
-        if(key == null){
+    public void setCampaignId(String key) {
+        if (key == null) {
             this.campaignId = "0";
         } else {
             this.campaignId = key;
@@ -81,8 +93,8 @@ public class AdItemFeature {
     }
 
 
-    public void setCreativeId(String key){
-        if(key == null){
+    public void setCreativeId(String key) {
+        if (key == null) {
             this.creativeId = "0";
         } else {
             this.creativeId = key;
@@ -90,29 +102,52 @@ public class AdItemFeature {
     }
 
 
+    //creative
+    public void setCreative_1day_cnt_features(AdActionFeature feature) {
+        this.creative_1day_cnt_features = feature;
+    }
+
+
+    public void setCreative_3day_cnt_features(AdActionFeature feature) {
+        this.creative_3day_cnt_features = feature;
+
+    }
+
+    public void setCreative_7day_cnt_features(AdActionFeature feature) {
+        this.creative_7day_cnt_features = feature;
+
+    }
+
+    public void setCreative_3month_cnt_features(AdActionFeature feature) {
+        this.creative_3month_cnt_features = feature;
+
+    }
+
 
-    public void setDay1_cnt_features(AdActionFeature feature) {
-        this.day1_cnt_features = feature;
+    // advertiser 维度
+    public void setAdvertiser_1day_cnt_features(AdActionFeature feature) {
+        this.advertiser_1day_cnt_features = feature;
     }
 
 
-    public void setDay3_cnt_features(AdActionFeature feature) {
-        this.day3_cnt_features = feature;
+    public void setAdvertiser_3day_cnt_features(AdActionFeature feature) {
+        this.advertiser_3day_cnt_features = feature;
 
     }
 
-    public void setDay7_cnt_features(AdActionFeature feature) {
-        this.day7_cnt_features = feature;
+    public void setAdvertiser_7day_cnt_features(AdActionFeature feature) {
+        this.advertiser_7day_cnt_features = feature;
 
     }
 
-    public void setMonth3_cnt_features(AdActionFeature feature) {
-        this.month3_cnt_features = feature;
+    public void setAdvertiser_3month_cnt_features(AdActionFeature feature) {
+        this.advertiser_3month_cnt_features = feature;
 
     }
 
+
     public String getKey() {
-        return this.adId;
+        return this.creativeId;
     }
 
     public String getValue() {

+ 10 - 89
ad-engine-commons/src/main/java/com/tzld/piaoquan/ad/engine/commons/base/UserAdBytesFeature.java

@@ -10,47 +10,11 @@ public class UserAdBytesFeature {
 
     private final byte[] mid;
 
-    private final byte[] gender;
-    private final byte[] user_type;
-    private final byte[] gmt_create;
-    private final byte[] tags;
-    private final byte[] category_name;
-    private final byte[] isvip;
-    private final byte[] isreward;
-    private final byte[] isad;
-    private final byte[] isgood;
-
-    private final byte[] first_up_datetime;
-    private final byte[] last_up_datetime;
-    private final byte[] next_to_last_up_datetime;
-    private final byte[] videos; // 上传视频数量
-    private final byte[] idols; // 关注人数
-    private final byte[] fans;  // 粉丝数
-    private final byte[] play_count;  // 播放人数
-    private final byte[] play_count_total;  // 累计播放次数
-
-    private final byte[] total_reward;
-    private final byte[] currentday_reward;
-    private final byte[] reward_person;
-    private final byte[] total_reward_times;
-
-    private final byte[] reward_videos;
-    private final byte[] total_price;
-    private final byte[] currentday_price;
-    private final byte[] total_price_times;
-    private final byte[] total_price_person;
-    private final byte[] total_price_videos;
-    private final byte[] cgrain_user_type;
-    private final byte[] identity_tagname;
-
-
-    private final byte[] operation_tags;
-    private final byte[] identity_tag_id;
-    private final byte[] identity_create_time;
-    private final byte[] country;
-    private final byte[] province;
-    private final byte[] city;
-
+    private final byte[] machineinfo_brand;
+    private final byte[] machineinfo_model;
+    private final byte[] machineinfo_system;
+    private final byte[] machineinfo_wechatversion;
+    private final byte[] machineinfo_platform;
 
     // 当天统计量信息
     private Map<String, byte[]> day1_cnt_features;
@@ -64,49 +28,11 @@ public class UserAdBytesFeature {
 
     public UserAdBytesFeature(UserAdFeature feature) {
         this.mid = feature.getMid().getBytes();
-
-
-        this.gender = feature.getGender().getBytes();
-        this.user_type = feature.getUser_type().getBytes();
-        this.gmt_create = feature.getGmt_create().getBytes();
-        this.tags = feature.getTags().getBytes() ;
-        this.category_name = feature.getCategory_name().getBytes();
-        this.isvip = feature.getIsvip().getBytes();
-        this.isreward = feature.getIsreward().getBytes();
-        this.isad = feature.getIsad().getBytes();
-        this.isgood = feature.getIsgood().getBytes();
-
-        this.first_up_datetime = feature.getFirst_up_datetime().getBytes();
-        this.last_up_datetime = feature.getLast_up_datetime().getBytes();
-        this.next_to_last_up_datetime = feature.getNext_to_last_up_datetime().getBytes();
-        this.videos = feature.getVideos().getBytes(); // 上传视频数量
-        this.idols = feature.getIdols().getBytes(); // 关注人数
-        this.fans = feature.getFans().getBytes();  // 粉丝数
-        this.play_count = feature.getPlay_count().getBytes();  // 播放人数
-        this.play_count_total = feature.getPlay_count_total().getBytes();  // 累计播放次数
-
-        this.total_reward = feature.getTotal_reward().getBytes();
-        this.currentday_reward = feature.getCurrentday_reward().getBytes();
-        this.reward_person = feature.getReward_person().getBytes();
-        this.total_reward_times = feature.getTotal_reward_times().getBytes();
-
-        this.reward_videos = feature.getReward_videos().getBytes();
-        this.total_price = feature.getTotal_price().getBytes();
-        this.currentday_price = feature.getCurrentday_price().getBytes();
-        this.total_price_times = feature.getTotal_price_times().getBytes();
-        this.total_price_person = feature.getTotal_price_person().getBytes();
-        this.total_price_videos = feature.getTotal_price_videos().getBytes();
-        this.cgrain_user_type = feature.getCgrain_user_type().getBytes();
-        this.identity_tagname = feature.getIdentity_tagname().getBytes();
-
-
-        this.operation_tags = feature.getOperation_tags().getBytes();
-        this.identity_tag_id = feature.getIdentity_tag_id().getBytes();
-        this.identity_create_time = feature.getIdentity_create_time().getBytes();
-        this.country = feature.getCountry().getBytes();
-        this.province = feature.getProvince().getBytes();
-        this.city = feature.getCity().getBytes();
-
+        this.machineinfo_brand = feature.getMachineinfo_brand().getBytes();
+        this.machineinfo_system = feature.getMachineinfo_system().getBytes();
+        this.machineinfo_model = feature.getMachineinfo_model().getBytes();
+        this.machineinfo_platform = feature.getMachineinfo_platform().getBytes();
+        this.machineinfo_wechatversion = feature.getMachineinfo_wechatversion().getBytes();
 
 
         // 1 day statistic
@@ -119,7 +45,6 @@ public class UserAdBytesFeature {
 
 
 
-
         // 3 day statistic
         day3_cnt_features = new HashMap<String, byte[]>();
         day3_cnt_features.put("view", String.valueOf(feature.getDay3_cnt_features().getAdView()).getBytes());
@@ -146,9 +71,5 @@ public class UserAdBytesFeature {
         month3_cnt_features.put("ctr", String.valueOf(feature.getMonth3_cnt_features().getCtr()).getBytes());
         month3_cnt_features.put("cvr", String.valueOf(feature.getMonth3_cnt_features().getCvr()).getBytes());
 
-
-
     }
-
-
 }

+ 5 - 48
ad-engine-commons/src/main/java/com/tzld/piaoquan/ad/engine/commons/base/UserAdFeature.java

@@ -16,54 +16,11 @@ public class UserAdFeature {
 
     private String mid = "0";
 
-    private String gender = "0";
-
-    private String user_type = "0";
-
-    private String gmt_create = "0";
-
-    private String tags = "0";
-
-    private String category_name = "0";
-
-    private String isvip = "0";
-
-    private String isreward = "0";
-
-    private String isad = "0";
-
-    private String isgood = "0";
-
-    private String first_up_datetime = "0";
-    private String last_up_datetime = "0";
-    private String next_to_last_up_datetime = "0";
-    private String videos = "0"; // 上传视频数量
-    private String idols = "0"; // 关注人数
-    private String fans = "0";  // 粉丝数
-    private String play_count = "0";  // 播放人数
-    private String play_count_total = "0";  // 累计播放次数
-
-    private String total_reward = "0";
-    private String currentday_reward = "0";
-    private String reward_person = "0";
-    private String total_reward_times = "0";
-
-    private String reward_videos = "0";
-    private String total_price = "0";
-    private String currentday_price = "0";
-    private String total_price_times = "0";
-    private String total_price_person = "0";
-    private String total_price_videos = "0";
-    private String cgrain_user_type = "0";
-    private String identity_tagname = "0";
-
-
-    private String operation_tags = "0";
-    private String identity_tag_id = "0";
-    private String identity_create_time = "0";
-    private String country = "0";
-    private String province = "0";
-    private String city = "0";
+    private String machineinfo_brand = "0";
+    private String machineinfo_model = "0";
+    private String machineinfo_system = "0";
+    private String machineinfo_wechatversion = "0";
+    private String machineinfo_platform = "0";
 
 
     // 当天统计量信息

+ 64 - 2
ad-engine-commons/src/main/java/com/tzld/piaoquan/ad/engine/commons/enums/VlogAdFeatureGroup.java

@@ -23,8 +23,6 @@ public enum VlogAdFeatureGroup {
     CAMPAIGIN,
 
 
-
-
     USER_1DAY_EXP,
     USER_1DAY_CLICK,
     USER_1DAY_CTR,
@@ -67,6 +65,70 @@ public enum VlogAdFeatureGroup {
     ITEM_3MONTH_CVR,
 
 
+    CREATIVE_1DAY_EXP,
+    CREATIVE_1DAY_CLICK,
+    CREATIVE_1DAY_CTR,
+    CREATIVE_1DAY_CVR,
+
+    CREATIVE_3DAY_EXP,
+    CREATIVE_3DAY_CLICK,
+    CREATIVE_3DAY_CTR,
+    CREATIVE_3DAY_CVR,
+
+    CREATIVE_7DAY_EXP,
+    CREATIVE_7DAY_CLICK,
+    CREATIVE_7DAY_CTR,
+    CREATIVE_7DAY_CVR,
+
+    CREATIVE_3MONTH_EXP,
+    CREATIVE_3MONTH_CLICK,
+    CREATIVE_3MONTH_CTR,
+    CREATIVE_3MONTH_CVR,
+
+
+
+    ADVERID_1DAY_EXP,
+    ADVERID_1DAY_CLICK,
+    ADVERID_1DAY_CTR,
+    ADVERID_1DAY_CVR,
+
+    ADVERID_3DAY_EXP,
+    ADVERID_3DAY_CLICK,
+    ADVERID_3DAY_CTR,
+    ADVERID_3DAY_CVR,
+
+    ADVERID_7DAY_EXP,
+    ADVERID_7DAY_CLICK,
+    ADVERID_7DAY_CTR,
+    ADVERID_7DAY_CVR,
+
+    ADVERID_3MONTH_EXP,
+    ADVERID_3MONTH_CLICK,
+    ADVERID_3MONTH_CTR,
+    ADVERID_3MONTH_CVR,
+
+
+    // cross feature
+    CREATIVE_AND_HOUR,
+    ADVERID_AND_HOUR,
+    CREATIVE_AND_REGION,
+    ADVERID_AND_REGION,
+    CREATIVE_AND_MACHINEINFO_MODEL,
+    ADVERID_AND_MACHINEINFO_MODEL,
+
+    CREATIVE_AND_MACHINEINFO_BRAND,
+    ADVERID_AND_MACHINEINFO_BRAND,
+
+    CREATIVE_AND_MACHINEINFO_SYSTEM,
+    ADVERID_AND_MACHINEINFO_SYSTEM,
+
+    CREATIVE_AND_USER_3MONTH_CTR,
+    ADVERID_AND_USER_3MONTH_CTR,
+
+    USER_3MONTH_CTR_AND_ITEM_7DAY_CTR,
+    USER_3MONTH_CTR_AND_ITEM_3DAY_CTR,
+
+
     ;
 
 

+ 9 - 0
ad-engine-commons/src/main/java/com/tzld/piaoquan/ad/engine/commons/score/feature/LRBytesFeatureExtractorBase.java

@@ -55,6 +55,15 @@ public abstract class LRBytesFeatureExtractorBase {
         features.putAll(g, featureList);
     }
 
+    // 增加交叉特征的方法
+    void makeFea(VlogAdFeatureGroup group, final byte[] left, final byte[] right) {
+        FeatureGroup g = makeGroup(group);
+        BaseFeature feature = utils.makeFea(group.ordinal(), left, right);
+        features.put(g, feature);
+    }
+
+
+
     public ListMultimap<FeatureGroup, BaseFeature> getFeatures() {
         return features;
     }

+ 87 - 9
ad-engine-commons/src/main/java/com/tzld/piaoquan/ad/engine/commons/score/feature/VlogAdCtrLRFeatureExtractor.java

@@ -10,7 +10,6 @@ import com.tzld.piaoquan.recommend.server.gen.recommend.LRSamples;
 import com.tzld.piaoquan.recommend.server.gen.recommend.BaseFeature;
 
 
-
 import java.util.ArrayList;
 import java.util.List;
 
@@ -23,19 +22,23 @@ public class VlogAdCtrLRFeatureExtractor extends LRBytesFeatureExtractorBase {
     // TODO
     // 补充待抽取的context feature
     public void getContextFeatures(AdRequestContextBytesFeature requestContextBytes) {
-        makeFea(VlogAdFeatureGroup.MACHINEINFO_BRAND, requestContextBytes.getMachineinfo_brand());
-        makeFea(VlogAdFeatureGroup.MACHINEINFO_MODEL, requestContextBytes.getMachineinfo_model());
-        makeFea(VlogAdFeatureGroup.MACHINEINFO_SDKVERSION, requestContextBytes.getMachineinfo_sdkversion());
-        makeFea(VlogAdFeatureGroup.MACHINEINFO_WECHATVERSION, requestContextBytes.getMachineinfo_brand());
 
         makeFea(VlogAdFeatureGroup.DAY, requestContextBytes.getWeek());
         makeFea(VlogAdFeatureGroup.WEEK, requestContextBytes.getWeek());
         makeFea(VlogAdFeatureGroup.HOUR, requestContextBytes.getHour());
-
+        makeFea(VlogAdFeatureGroup.REGION, requestContextBytes.getRegion());
+        makeFea(VlogAdFeatureGroup.CITY, requestContextBytes.getCity());
     }
 
     //TODO
     public void getUserFeatures(UserAdBytesFeature userAdBytesFeature) {
+        // user group
+        makeFea(VlogAdFeatureGroup.MACHINEINFO_BRAND, userAdBytesFeature.getMachineinfo_brand());
+        makeFea(VlogAdFeatureGroup.MACHINEINFO_PLATFORM, userAdBytesFeature.getMachineinfo_platform());
+        makeFea(VlogAdFeatureGroup.MACHINEINFO_MODEL, userAdBytesFeature.getMachineinfo_model());
+        makeFea(VlogAdFeatureGroup.MACHINEINFO_SYSTEM, userAdBytesFeature.getMachineinfo_system());
+        makeFea(VlogAdFeatureGroup.MACHINEINFO_SDKVERSION, userAdBytesFeature.getMachineinfo_system());
+
 
         // 1day features
         makeFea(VlogAdFeatureGroup.USER_1DAY_EXP, userAdBytesFeature.getDay1_cnt_features().get("view"));
@@ -72,8 +75,6 @@ public class VlogAdCtrLRFeatureExtractor extends LRBytesFeatureExtractorBase {
         makeFea(VlogAdFeatureGroup.CAMPAIGIN, item.getCampaignId());
         makeFea(VlogAdFeatureGroup.ADVERID, item.getAdvertiserId());
 
-
-
         // 1day features
         makeFea(VlogAdFeatureGroup.ITEM_1DAY_EXP, item.getDay1_cnt_features().get("view"));
         makeFea(VlogAdFeatureGroup.ITEM_1DAY_CLICK, item.getDay1_cnt_features().get("click"));
@@ -100,8 +101,85 @@ public class VlogAdCtrLRFeatureExtractor extends LRBytesFeatureExtractorBase {
         makeFea(VlogAdFeatureGroup.ITEM_3MONTH_CTR, item.getMonth3_cnt_features().get("ctr"));
         makeFea(VlogAdFeatureGroup.ITEM_3MONTH_CVR, item.getMonth3_cnt_features().get("cvr"));
 
+
+        // creativeid 维度
+        // 1day features
+        makeFea(VlogAdFeatureGroup.CREATIVE_1DAY_CTR, item.getCreative_day1_cnt_features().get("view"));
+        makeFea(VlogAdFeatureGroup.CREATIVE_1DAY_CLICK, item.getCreative_day1_cnt_features().get("click"));
+        makeFea(VlogAdFeatureGroup.CREATIVE_1DAY_CTR, item.getCreative_day1_cnt_features().get("ctr"));
+        makeFea(VlogAdFeatureGroup.CREATIVE_1DAY_CVR, item.getCreative_day1_cnt_features().get("cvr"));
+
+        // 3day features
+        makeFea(VlogAdFeatureGroup.CREATIVE_3DAY_EXP, item.getCreative_day3_cnt_features().get("view"));
+        makeFea(VlogAdFeatureGroup.CREATIVE_3DAY_CLICK, item.getCreative_day3_cnt_features().get("click"));
+        makeFea(VlogAdFeatureGroup.CREATIVE_3DAY_CTR, item.getCreative_day3_cnt_features().get("ctr"));
+        makeFea(VlogAdFeatureGroup.CREATIVE_3DAY_CVR, item.getCreative_day3_cnt_features().get("cvr"));
+
+        // 7day features
+        makeFea(VlogAdFeatureGroup.CREATIVE_7DAY_EXP, item.getCreative_day7_cnt_features().get("view"));
+        makeFea(VlogAdFeatureGroup.CREATIVE_7DAY_CLICK, item.getCreative_day7_cnt_features().get("click"));
+        makeFea(VlogAdFeatureGroup.CREATIVE_7DAY_CTR, item.getCreative_day7_cnt_features().get("ctr"));
+        makeFea(VlogAdFeatureGroup.CREATIVE_7DAY_CVR, item.getCreative_day7_cnt_features().get("cvr"));
+
+        // 3month features
+        makeFea(VlogAdFeatureGroup.CREATIVE_3MONTH_EXP, item.getCreative_month3_cnt_features().get("view"));
+        makeFea(VlogAdFeatureGroup.CREATIVE_3MONTH_CLICK, item.getCreative_month3_cnt_features().get("click"));
+        makeFea(VlogAdFeatureGroup.CREATIVE_3MONTH_CTR, item.getCreative_month3_cnt_features().get("ctr"));
+        makeFea(VlogAdFeatureGroup.CREATIVE_3MONTH_CVR, item.getCreative_month3_cnt_features().get("cvr"));
+
+
+        // advertiserid 维度
+        // 1day features
+        makeFea(VlogAdFeatureGroup.ADVERID_1DAY_EXP, item.getAdvertiser_day1_cnt_features().get("view"));
+        makeFea(VlogAdFeatureGroup.ADVERID_1DAY_CLICK, item.getAdvertiser_day1_cnt_features().get("click"));
+        makeFea(VlogAdFeatureGroup.ADVERID_1DAY_CTR, item.getAdvertiser_day1_cnt_features().get("ctr"));
+        makeFea(VlogAdFeatureGroup.ADVERID_1DAY_CVR, item.getAdvertiser_day1_cnt_features().get("cvr"));
+
+        // 3day features
+        makeFea(VlogAdFeatureGroup.ADVERID_3DAY_EXP, item.getCreative_day3_cnt_features().get("view"));
+        makeFea(VlogAdFeatureGroup.ADVERID_3DAY_CLICK, item.getCreative_day3_cnt_features().get("click"));
+        makeFea(VlogAdFeatureGroup.ADVERID_3DAY_CTR, item.getCreative_day3_cnt_features().get("ctr"));
+        makeFea(VlogAdFeatureGroup.ADVERID_3DAY_CVR, item.getCreative_day3_cnt_features().get("cvr"));
+
+        // 7day features
+        makeFea(VlogAdFeatureGroup.ADVERID_7DAY_EXP, item.getCreative_day7_cnt_features().get("view"));
+        makeFea(VlogAdFeatureGroup.ADVERID_7DAY_CLICK, item.getCreative_day7_cnt_features().get("click"));
+        makeFea(VlogAdFeatureGroup.ADVERID_7DAY_CTR, item.getCreative_day7_cnt_features().get("ctr"));
+        makeFea(VlogAdFeatureGroup.ADVERID_7DAY_CVR, item.getCreative_day7_cnt_features().get("cvr"));
+
+        // 3month features
+        makeFea(VlogAdFeatureGroup.ADVERID_3MONTH_EXP, item.getCreative_month3_cnt_features().get("view"));
+        makeFea(VlogAdFeatureGroup.ADVERID_3MONTH_CLICK, item.getCreative_month3_cnt_features().get("click"));
+        makeFea(VlogAdFeatureGroup.ADVERID_3MONTH_CTR, item.getCreative_month3_cnt_features().get("ctr"));
+        makeFea(VlogAdFeatureGroup.ADVERID_3MONTH_CVR, item.getCreative_month3_cnt_features().get("cvr"));
+
+
     }
 
+    // 增加广告交叉特征
+    public void getCrossFeature(AdItemBytesFeature itemBytesFeature, AdRequestContextBytesFeature requestContextByte, UserAdBytesFeature userAdBytesFeature) {
+        // creative and hour
+        makeFea(VlogAdFeatureGroup.CREATIVE_AND_HOUR, itemBytesFeature.getCreative(), requestContextByte.getHour());
+        makeFea(VlogAdFeatureGroup.ADVERID_AND_HOUR, itemBytesFeature.getAdvertiserId(), requestContextByte.getHour());
+        makeFea(VlogAdFeatureGroup.CREATIVE_AND_REGION, itemBytesFeature.getCreative(), requestContextByte.getRegion());
+        makeFea(VlogAdFeatureGroup.ADVERID_AND_REGION, itemBytesFeature.getAdvertiserId(), requestContextByte.getRegion());
+        makeFea(VlogAdFeatureGroup.CREATIVE_AND_MACHINEINFO_MODEL, itemBytesFeature.getCreative(), userAdBytesFeature.getMachineinfo_model());
+        makeFea(VlogAdFeatureGroup.ADVERID_AND_MACHINEINFO_MODEL, itemBytesFeature.getAdvertiserId(), userAdBytesFeature.getMachineinfo_model());
+        makeFea(VlogAdFeatureGroup.CREATIVE_AND_MACHINEINFO_BRAND, itemBytesFeature.getCreative(), userAdBytesFeature.getMachineinfo_brand());
+        makeFea(VlogAdFeatureGroup.ADVERID_AND_MACHINEINFO_BRAND, itemBytesFeature.getAdvertiserId(), userAdBytesFeature.getMachineinfo_brand());
+
+        makeFea(VlogAdFeatureGroup.CREATIVE_AND_MACHINEINFO_SYSTEM, itemBytesFeature.getCreative(), userAdBytesFeature.getMachineinfo_system());
+        makeFea(VlogAdFeatureGroup.ADVERID_AND_MACHINEINFO_SYSTEM, itemBytesFeature.getAdvertiserId(), userAdBytesFeature.getMachineinfo_system());
+        makeFea(VlogAdFeatureGroup.CREATIVE_AND_USER_3MONTH_CTR, itemBytesFeature.getCreative(), userAdBytesFeature.getMonth3_cnt_features().get("ctr"));
+        makeFea(VlogAdFeatureGroup.ADVERID_AND_USER_3MONTH_CTR, itemBytesFeature.getAdvertiserId(), userAdBytesFeature.getMonth3_cnt_features().get("ctr"));
+
+        makeFea(VlogAdFeatureGroup.USER_3MONTH_CTR_AND_ITEM_7DAY_CTR, userAdBytesFeature.getMonth3_cnt_features().get("ctr"), itemBytesFeature.getCreative_day7_cnt_features().get("ctr"));
+        makeFea(VlogAdFeatureGroup.USER_3MONTH_CTR_AND_ITEM_3DAY_CTR, userAdBytesFeature.getMonth3_cnt_features().get("ctr"), itemBytesFeature.getCreative_day3_cnt_features().get("ctr"));
+
+
+    }
+
+
     @Override
     public synchronized LRSamples single(UserAdBytesFeature userAdBytesFeature,
                                          AdItemBytesFeature videoBytesFeature,
@@ -116,7 +194,7 @@ public class VlogAdCtrLRFeatureExtractor extends LRBytesFeatureExtractorBase {
         lr.setGroupNum(groupCount);
         List<FeatureGroup> keys = new ArrayList<>(features.keySet());
         int count = 0;
-        for(FeatureGroup group : keys) {
+        for (FeatureGroup group : keys) {
             List<BaseFeature> fea = features.get(group);
             GroupedFeature.Builder gf = GroupedFeature.newBuilder();
             gf.setGroup(group);