一、背景
偏好类标签一般都是以用户的行为日志进行加工。
比如说:视频类软件(观影日志、评论日志、点赞日志、收藏日志)——内容偏好、类型偏好、明星偏好,电商类(订单日志、浏览日志、收藏日志、加购物日志)——商品偏好、价格偏好、品牌偏好
下面我们以视频类软件为例来详细讲解下偏好类标签的加工逻辑
1.偏好类事实型:主要是根据用户观影数据来计算用户在某个内容或者类型下的观影总时长和最后一次观影时间


上面是一张播放行为表,涵盖了基本的播放行为数据,和一张为tag维度表(一个电视剧或者电影会打上非常多的标签,表中只是罗列了3个)
根据上述两张表可以生成如下用户观影tag表,能看到一个电视剧或者电影能很明显的

select userid,content_tag,sum(play_time) as total_time,max(last_play_time) as last_play_time from dws_user_play_info_tag group by userid,content_tag
注:当我们想看用户最近半年的观影偏好时,就用用户最近半年的观影数据来进行计算即可,这样就能动态产出用户观影偏好
细心的读者发现打在某个tag上有观影总时长和最后一次观影时间,观影总时长能看出这个用户对于这种tag的内容非常感兴趣,而最后一次观影时间说明最近用户在观看这部分内容。
相当于总时长代表的是一个长期兴趣,而最后一次观影代表的是用户的一个短期兴趣。比如说:用户男性经常观看古装或者美女,但是最近有一个毕竟火的热点视频,该用户也在观看,但这种只能代表用户最近一段时间的兴趣偏好,当过了这段时间就应该选用长期兴趣标签了。

INSERT OVERWRITE TABLE dws_user_play_weight_info PARTITION(dt='${current_date}')select userid, id, sum(feature_value) as feature_valuefrom (selectuserid, --用户idid, --电视剧或者电影idexp(-1 * cast(datediff('${current_date}', dt) 7 as int) * 7 (28 * 3 2.0))* 1.0 ( 1.0 + exp(-0.01 * ( playtime - 400 ))) as weightfrom dwd_user_play_infowhere dt between '${current_date-28}' and '${current_date}' ---28天一个周期union all-- 4周之前select userid, id,exp(-1 * 28 / (28 * 3 / 2.0))* weight as weight --衰减from dws_user_play_weight_infowhere dt='${current_date-29}')T2group by userid, idhaving sum(weight) > 0.001distribute by userid;
注:权重公式系数非常有讲究,主要看是关注最后一次观影时间还是更加关注播放时长,如果更关注时长则时长权重更大,如果更加关注最后一次观影时间则此处系数应该更大。

select userid, tag, weightfrom (select userid, id, weight, row_number() over(partition by userid order by weight desc) as rnfrom (selectuserid,id,2 / ( 1 + exp(-0.5 * (sum(s1) + sum(s2)) )) - 1 as weightfrom (-- 2. 近期观影selectA.account_id,B.tag,0 as s1,A.weight * B.weight as s2,1 as s3from (select id, tag, weight ---weight都为1,后续可给标签加上权重代表该标签重要性较强from dim_content_tag_info ---内容标签打平之后的表)Binner join (select * from dws_user_play_weight_info ---用户观影权重表where dt='${current_date}') Aon B.id =A.id)T1group by userid, tag)T2)T3where rn <= 50 and weight > 0.01;
你好,我是诸葛子房,前京东、BAT 程序员,Apache Griffin Contributor,在大数据领域有多年实践经验,喜欢在工作之余写一些文章总结。

文章转载自诸葛子房的博客,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。









