• 用户画像系列——推荐相关核心标签(偏好类)


    一、背景

    我们经常在逛购物网站或者刷抖音、听网易云音乐的时候,会有猜你喜欢或者为你推荐这样一个功能,而这依赖的就是用户画像的偏好类标签:比如说明星偏好(喜欢某个明星或者歌手的作品)、类型偏好(比如说:喜欢美妆类、喜欢美食类)

    二、偏好标签加工的核心逻辑

    偏好类标签一般都是以用户的行为日志进行加工。

    比如说:视频类软件(观影日志、评论日志、点赞日志、收藏日志)——内容偏好、类型偏好、明星偏好,电商类(订单日志、浏览日志、收藏日志、加购物日志)——商品偏好、价格偏好、品牌偏好

    下面我们以视频类软件为例来详细讲解下偏好类标签的加工逻辑

    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的内容非常感兴趣,而最后一次观影时间说明最近用户在观看这部分内容。

    相当于总时长代表的是一个长期兴趣,而最后一次观影代表的是用户的一个短期兴趣。比如说:用户男性经常观看古装或者美女,但是最近有一个毕竟火的热点视频,该用户也在观看,但这种只能代表用户最近一段时间的兴趣偏好,当过了这段时间就应该选用长期兴趣标签了。

    2.偏好类权重型:主要是根据用户观影数据来计算用户在某个内容或者类型下的观影权重,比如说权重越高说明用户对于某个内容更感兴

    用户观影权重表

    1. INSERT OVERWRITE TABLE dws_user_play_weight_info PARTITION(dt='${current_date}')
    2. select userid, id, sum(feature_value) as feature_value
    3. from (
    4. select
    5. userid, --用户id
    6. id, --电视剧或者电影id
    7. exp(-1 * cast(datediff('${current_date}', dt) / 7 as int) * 7 / (28 * 3 / 2.0))
    8. * 1.0 / ( 1.0 + exp(-0.01 * ( playtime - 400 ))) as weight
    9. from dwd_user_play_info
    10. where dt between '${current_date-28}' and '${current_date}' ---28天一个周期
    11. union all
    12. -- 4周之前
    13. select userid, id,
    14. exp(-1 * 28 / (28 * 3 / 2.0))* weight as weight --衰减
    15. from dws_user_play_weight_info
    16. where dt='${current_date-29}'
    17. )T2
    18. group by userid, id
    19. having sum(weight) > 0.001
    20. distribute by userid;

    注:权重公式系数非常有讲究,主要看是关注最后一次观影时间还是更加关注播放时长,如果更关注时长则时长权重更大,如果更加关注最后一次观音时间则此处系数应该更大。

     归一化:直接按照视频id打上标签然后相加权重值明显会超过1,因此需要归一化处理

    1. select userid, tag, weight
    2. from (
    3. select userid, id, weight, row_number() over(partition by userid order by weight desc) as rn
    4. from (
    5. select
    6. userid,
    7. id,
    8. 2 / ( 1 + exp(-0.5 * (sum(s1) + sum(s2)) )) - 1 as weight
    9. from (
    10. -- 2. 近期观影
    11. select
    12. A.account_id,
    13. B.tag,
    14. 0 as s1,
    15. A.weight * B.weight as s2,
    16. 1 as s3
    17. from (
    18. select id, tag, weight ---weight都为1,后续可给标签加上权重代表该标签重要性较强
    19. from dim_content_tag_info ---内容标签打平之后的表
    20. )B
    21. inner join (select * from dws_user_play_weight_info ---用户观影权重表
    22. where dt='${current_date}') A
    23. on B.id =A.id
    24. )T1
    25. group by userid, tag
    26. )T2
    27. )T3
    28. where rn <= 50 and weight > 0.01;

    三、总结

    至此即完成了偏好类标签的处理和加工,应用的话,可以在广告、推荐等多个场景进行应用。比如说:某个用户经常看搞笑视频可以给它推荐搞笑的玩具或者视频等等

  • 相关阅读:
    【VUE复习·8】v-if;v-show高级
    文献学习-10-微创手术机器人的运动学设计考虑因素:综述
    容器内存相关知识
    ubuntu_24.04 Noble LTS安装docker desktop启动无窗口及引擎启动失败的解决方法
    Anolis 8.6 安装 Drawio
    基于模型的聚类和R语言中的高斯混合模型
    Excel技巧之【锁定工作簿】
    ATA-M4功率放大器都有哪些具体特点及优势
    MS做题记录
    高薪程序员&面试题精讲系列131之Eureka如何实现高可用?自我保护机制是怎么回事?
  • 原文地址:https://blog.csdn.net/weixin_43291055/article/details/127382394