|
@@ -1,216 +0,0 @@
|
|
|
-package com.tzld.piaoquan.ad.engine.commons.score.feature;
|
|
|
-
|
|
|
-import com.tzld.piaoquan.ad.engine.commons.base.AdItemBytesFeature;
|
|
|
-import com.tzld.piaoquan.ad.engine.commons.base.AdRequestContextBytesFeature;
|
|
|
-import com.tzld.piaoquan.ad.engine.commons.base.UserAdBytesFeature;
|
|
|
-import com.tzld.piaoquan.ad.engine.commons.enums.VlogAdFeatureGroup;
|
|
|
-import com.tzld.piaoquan.recommend.server.gen.recommend.FeatureGroup;
|
|
|
-import com.tzld.piaoquan.recommend.server.gen.recommend.GroupedFeature;
|
|
|
-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;
|
|
|
-
|
|
|
-public class VlogAdCtrLRFeatureExtractor extends LRBytesFeatureExtractorBase {
|
|
|
-
|
|
|
- public VlogAdCtrLRFeatureExtractor() {
|
|
|
- super();
|
|
|
- }
|
|
|
-
|
|
|
- // 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_wechatversion());
|
|
|
-
|
|
|
-
|
|
|
- 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) {
|
|
|
-
|
|
|
- // 1day features
|
|
|
- makeFea(VlogAdFeatureGroup.USER_1DAY_EXP, userAdBytesFeature.getDay1_cnt_features().get("view"));
|
|
|
- makeFea(VlogAdFeatureGroup.USER_1DAY_CLICK, userAdBytesFeature.getDay1_cnt_features().get("click"));
|
|
|
- makeFea(VlogAdFeatureGroup.USER_1DAY_CTR, userAdBytesFeature.getDay1_cnt_features().get("ctr"));
|
|
|
- makeFea(VlogAdFeatureGroup.USER_1DAY_CVR, userAdBytesFeature.getDay1_cnt_features().get("cvr"));
|
|
|
-
|
|
|
- // 3day features
|
|
|
- makeFea(VlogAdFeatureGroup.USER_3DAY_EXP, userAdBytesFeature.getDay3_cnt_features().get("view"));
|
|
|
- makeFea(VlogAdFeatureGroup.USER_3DAY_CLICK, userAdBytesFeature.getDay3_cnt_features().get("click"));
|
|
|
- makeFea(VlogAdFeatureGroup.USER_3DAY_CTR, userAdBytesFeature.getDay3_cnt_features().get("ctr"));
|
|
|
- makeFea(VlogAdFeatureGroup.USER_3DAY_CVR, userAdBytesFeature.getDay3_cnt_features().get("cvr"));
|
|
|
-
|
|
|
- // 7day features
|
|
|
- makeFea(VlogAdFeatureGroup.USER_7DAY_EXP, userAdBytesFeature.getDay7_cnt_features().get("view"));
|
|
|
- makeFea(VlogAdFeatureGroup.USER_7DAY_CLICK, userAdBytesFeature.getDay7_cnt_features().get("click"));
|
|
|
- makeFea(VlogAdFeatureGroup.USER_7DAY_CTR, userAdBytesFeature.getDay7_cnt_features().get("ctr"));
|
|
|
- makeFea(VlogAdFeatureGroup.USER_7DAY_CVR, userAdBytesFeature.getDay7_cnt_features().get("cvr"));
|
|
|
-
|
|
|
- // 3month features
|
|
|
- makeFea(VlogAdFeatureGroup.USER_3MONTH_EXP, userAdBytesFeature.getMonth3_cnt_features().get("view"));
|
|
|
- makeFea(VlogAdFeatureGroup.USER_3MONTH_CLICK, userAdBytesFeature.getMonth3_cnt_features().get("click"));
|
|
|
- makeFea(VlogAdFeatureGroup.USER_3MONTH_CTR, userAdBytesFeature.getMonth3_cnt_features().get("ctr"));
|
|
|
- makeFea(VlogAdFeatureGroup.USER_3MONTH_CVR, userAdBytesFeature.getMonth3_cnt_features().get("cvr"));
|
|
|
-
|
|
|
-
|
|
|
- }
|
|
|
-
|
|
|
- public void getItemFeature(AdItemBytesFeature item) {
|
|
|
-
|
|
|
- // Vdieo
|
|
|
- makeFea(VlogAdFeatureGroup.ADID, item.getAdId());
|
|
|
- makeFea(VlogAdFeatureGroup.CREATIVE, item.getCreative());
|
|
|
- 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"));
|
|
|
- makeFea(VlogAdFeatureGroup.ITEM_1DAY_CTR, item.getDay1_cnt_features().get("ctr"));
|
|
|
- makeFea(VlogAdFeatureGroup.ITEM_1DAY_CVR, item.getDay1_cnt_features().get("cvr"));
|
|
|
-
|
|
|
- // 3day features
|
|
|
- makeFea(VlogAdFeatureGroup.ITEM_3DAY_EXP, item.getDay1_cnt_features().get("view"));
|
|
|
- makeFea(VlogAdFeatureGroup.ITEM_3DAY_CLICK, item.getDay1_cnt_features().get("click"));
|
|
|
- makeFea(VlogAdFeatureGroup.ITEM_3DAY_CTR, item.getDay1_cnt_features().get("ctr"));
|
|
|
- makeFea(VlogAdFeatureGroup.ITEM_3DAY_CVR, item.getDay1_cnt_features().get("cvr"));
|
|
|
-
|
|
|
-
|
|
|
- // 7day features
|
|
|
- makeFea(VlogAdFeatureGroup.ITEM_7DAY_EXP, item.getDay1_cnt_features().get("view"));
|
|
|
- makeFea(VlogAdFeatureGroup.ITEM_7DAY_CLICK, item.getDay1_cnt_features().get("click"));
|
|
|
- makeFea(VlogAdFeatureGroup.ITEM_7DAY_CTR, item.getDay1_cnt_features().get("ctr"));
|
|
|
- makeFea(VlogAdFeatureGroup.ITEM_7DAY_CVR, item.getDay1_cnt_features().get("cvr"));
|
|
|
-
|
|
|
-
|
|
|
- // 3month features
|
|
|
- makeFea(VlogAdFeatureGroup.ITEM_3MONTH_EXP, item.getMonth3_cnt_features().get("view"));
|
|
|
- makeFea(VlogAdFeatureGroup.ITEM_3MONTH_CLICK, item.getMonth3_cnt_features().get("click"));
|
|
|
- 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.getAdvertiser_day3_cnt_features().get("view"));
|
|
|
- makeFea(VlogAdFeatureGroup.ADVERID_3DAY_CLICK, item.getAdvertiser_day3_cnt_features().get("click"));
|
|
|
- makeFea(VlogAdFeatureGroup.ADVERID_3DAY_CTR, item.getAdvertiser_day3_cnt_features().get("ctr"));
|
|
|
- makeFea(VlogAdFeatureGroup.ADVERID_3DAY_CVR, item.getAdvertiser_day3_cnt_features().get("cvr"));
|
|
|
-
|
|
|
- // 7day features
|
|
|
- makeFea(VlogAdFeatureGroup.ADVERID_7DAY_EXP, item.getAdvertiser_day7_cnt_features().get("view"));
|
|
|
- makeFea(VlogAdFeatureGroup.ADVERID_7DAY_CLICK, item.getAdvertiser_day7_cnt_features().get("click"));
|
|
|
- makeFea(VlogAdFeatureGroup.ADVERID_7DAY_CTR, item.getAdvertiser_day7_cnt_features().get("ctr"));
|
|
|
- makeFea(VlogAdFeatureGroup.ADVERID_7DAY_CVR, item.getAdvertiser_day7_cnt_features().get("cvr"));
|
|
|
-
|
|
|
- // 3month features
|
|
|
- makeFea(VlogAdFeatureGroup.ADVERID_3MONTH_EXP, item.getAdvertiser_month3_cnt_features().get("view"));
|
|
|
- makeFea(VlogAdFeatureGroup.ADVERID_3MONTH_CLICK, item.getAdvertiser_month3_cnt_features().get("click"));
|
|
|
- makeFea(VlogAdFeatureGroup.ADVERID_3MONTH_CTR, item.getAdvertiser_month3_cnt_features().get("ctr"));
|
|
|
- makeFea(VlogAdFeatureGroup.ADVERID_3MONTH_CVR, item.getAdvertiser_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());
|
|
|
-
|
|
|
- //add city feature
|
|
|
- makeFea(VlogAdFeatureGroup.CREATIVE_AND_CITY, itemBytesFeature.getCreative(), requestContextByte.getCity());
|
|
|
- makeFea(VlogAdFeatureGroup.ADVERID_AND_CITY, itemBytesFeature.getAdvertiserId(), requestContextByte.getCity());
|
|
|
-
|
|
|
- makeFea(VlogAdFeatureGroup.CREATIVE_AND_MACHINEINFO_MODEL, itemBytesFeature.getCreative(), requestContextByte.getMachineinfo_model());
|
|
|
- makeFea(VlogAdFeatureGroup.ADVERID_AND_MACHINEINFO_MODEL, itemBytesFeature.getAdvertiserId(), requestContextByte.getMachineinfo_model());
|
|
|
- makeFea(VlogAdFeatureGroup.CREATIVE_AND_MACHINEINFO_BRAND, itemBytesFeature.getCreative(), requestContextByte.getMachineinfo_brand());
|
|
|
- makeFea(VlogAdFeatureGroup.ADVERID_AND_MACHINEINFO_BRAND, itemBytesFeature.getAdvertiserId(), requestContextByte.getMachineinfo_brand());
|
|
|
-
|
|
|
- makeFea(VlogAdFeatureGroup.CREATIVE_AND_MACHINEINFO_SDK, itemBytesFeature.getCreative(), requestContextByte.getMachineinfo_sdkversion());
|
|
|
- makeFea(VlogAdFeatureGroup.ADVERID_AND_MACHINEINFO_SDK, itemBytesFeature.getAdvertiserId(), requestContextByte.getMachineinfo_sdkversion());
|
|
|
- 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,
|
|
|
- AdRequestContextBytesFeature requestContextBytesFeature) {
|
|
|
- features.clear();
|
|
|
- // extract features
|
|
|
- getUserFeatures(userAdBytesFeature);
|
|
|
- getContextFeatures(requestContextBytesFeature);
|
|
|
- getItemFeature(videoBytesFeature);
|
|
|
- getCrossFeature(videoBytesFeature, requestContextBytesFeature, userAdBytesFeature);
|
|
|
-
|
|
|
- LRSamples.Builder lr = com.tzld.piaoquan.recommend.server.gen.recommend.LRSamples.newBuilder();
|
|
|
- lr.setGroupNum(groupCount);
|
|
|
- List<FeatureGroup> keys = new ArrayList<>(features.keySet());
|
|
|
- int count = 0;
|
|
|
- for (FeatureGroup group : keys) {
|
|
|
- List<BaseFeature> fea = features.get(group);
|
|
|
- GroupedFeature.Builder gf = GroupedFeature.newBuilder();
|
|
|
- gf.setGroup(group);
|
|
|
- gf.setCount(fea.size());
|
|
|
- gf.addAllFeatures(fea);
|
|
|
- count += fea.size();
|
|
|
- lr.addFeatures(gf);
|
|
|
- }
|
|
|
- lr.setCount(count);
|
|
|
- return lr.build();
|
|
|
- }
|
|
|
-
|
|
|
-
|
|
|
-}
|