暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

【推荐系统工程】之数据采集

尼萌工作室 2020-03-01
821

 这是尼萌工作室的第【10篇文章。本文正文1359字,阅读完成约5分钟。


每个业务系统有其特殊性,推荐系统的数据采集方案依赖于业务数据,我们需要根据具体的业务场景适当裁剪,设计合理的数据采集方案



巧妇难为无米之炊。garbage in garbage out,数据是算法基石。 在App应用商店推荐系统中,数据分为基础业务数据,埋点日志数据和第三方数据。

  • 基础业务数据容易理解,包括用户,物料App数据。

  • 埋点日志数据根据来源分为客户端埋点和后端埋点。

  • 第三方数据如用户画像可以作为数据的补充。

图1. 算法数据分类示意图


因此不同的数据来源我们采取特定的数据采集方案。

图2. 数据采集方案图



01 基础业务数据 

基础业务数据一般存放业务系统的关系型数据库(如MySql)中,主要包括用户的数据, App的数据等基础信息。

用户基础数据:用户id,姓名,出生日期,性别,邮箱,电话,国家,省市区,设备移动识别码,网络码,手机品牌型号,激活时间

App基础数据:Appid,App名字,版本号,内容,安装包,安装包大小,是否收费,所属专题,目录(可分多级),标签,国家,语言,上下架时间,更新时间


特别注意的是推荐系统本质锦上添花。在生产环境中,为了防止主库被Sqoop抽崩,避免直接连接业务数据库,我们从备库同步一份数据到集群中方便进行数据分析操作防止对业务造成干扰

保证实时推荐效果,满足小时级别同步的要求。采用Sqoop工具对基础业务数据进行增量同步。👉可参阅大数据组件之Sqoop

 

根据业务场景,我们采用 lastmodified模式的增量导入方式

一般Mysql数据库中更新数据会同时修改update_time字段 , 我们选择update_time或其他时间字段,按照用户id/Appid合并避免导入重复的数据。

--incemental lastmodified
--check-column update_time
--merge-key id
--last-value '2020-01-01 10:00:00'

 

如何设置并发导入参数?

我们知道通过 -m 参数能够设置导入数据的 map 任务数量,即指定了 -m 即表示导入方式为并发导入,这时我们必须同时设置 --split-by 参数指定根据哪一列来实现哈希分片,从而将不同分片的数据分发到不同 map 任务上去跑,避免数据倾斜

 

02 埋点日志数据 

埋点日志是应用中特定的流程收集一些信息,用来跟踪应用使用的状况,后续用来进一步优化产品或是提供运营的数据支撑。

埋点数据对推荐系统十分重要,模型训练和效果数据统计都基于埋点数据,需保证埋点数据的正确无误。

一般用户有很多日志,当前推荐场景统一到用户行为日志中,还有其它业务场景如(下发日志、支付日志) 。

 

  • 客户端埋点日志

用户在客户端对每一个APP行为可分为曝光,点击,下载,安装,分享,评分/论等

而用户的搜索行为,需要采集搜索词,搜索结果点击,搜索结果下载等信息,适用于搜索热词推荐 ,搜索热门推荐,搜索无结果时App列表推荐等推荐场景。

关于数据采集和埋点,神策有一套成熟的解决方案,可参阅文末的链接。

 

图3. 客户端埋点日志数据采集方案图



  • 服务端埋点日志

服务端日志根据业务场景而定,常见的有请求,响应日志,下发日志,支付日志,分享链接点击进入,广告投放等。一般存放在业务的 ES。

同样的,服务端日志数据抽取需要保证业务正常,我们可选取必要的日志推送至Kafka, 用来补充做离线画像或者实时计算。

图4. 服务端埋点日志数据采集方案图

 

03 第三方数据 

第三方数据可用作用户画像的补充,要注意探测和本业务的用户重合率,否则事倍功半。


reference 

  • 神策数据采集与埋点 https://www.sensorsdata.cn/blog/shu-ju-jie-ru-yu-mai-dian/



- END -



谁怕,一蓑烟雨任平生




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

评论