全自动采集最新行业文章(思路分析标准数据集纳米镜的功能和背后的分析算法)
优采云 发布时间: 2021-12-24 02:02全自动采集最新行业文章(思路分析标准数据集纳米镜的功能和背后的分析算法)
背景
在前面的文章中,我们介绍了Nanomirror的功能及其背后的分析算法,而闲鱼目前业务线众多且复杂,如何搭建一个可扩展的系统,让每条业务线都能方便的接入成为首要任务关心。
思维分析标准数据集
Nanomirror的分析算法,输入输出是固定的,要求输入是固定的标准ODPS数据集。字段包括userid/bucket id/crowd section 1/crowd section 2/indicator 1/indicator 2等,但是在实际的业务场景中,每个业务关注的截面和数据指标有很大的不同。为了在约束中找到灵活性,我们必须对 Nanomirrors 的标准数据集进行一些更改。
由于纳米镜对数据集的依赖性,如预测算法和方面显着性算法,需要依赖特定的表做二次计算。更好的解决方案是让业务方按照数据集规范,在标准数据集中间表插入数据。
自动数据集生成
各商家只要按照标准数据集的规范,将自己的数据插入到nanomirror中间表中,就可以开始使用nanomirror功能了。但是在实际场景中,业务输出数据集的开发成本非常高,这种方式对用户的开放权限很大。如果用户不按照规范插入数据,就会污染源数据,使其无法插入。控制。能否自动生成数据集,让用户无需关注数据采集过程?
可以看到,在通常的业务开发过程中,生成ODPS数据源的工作流程是:
这整个过程一般至少需要2天时间(1天埋点整理开发,1天写SQL生成报表),很多时候会出现埋点漏点的问题,需要通过再次开发和发布过程。,造成大量人力浪费。
方案设计标准数据源开发
数据集中的数据类型是固定的,数据类型下的字段名和值可以灵活变化。
在数据集上,我设计了这种数据格式,参考:
用户 ID:用户用户 ID
bucket_id:bucket_A
索引:index_visit=1,index_ipv=2
标签: tag_sex=F,tag_age=19
业务数据集自动生成成熟的行业解决方案及不足
自动数据生成是指直接删除上述常规的数据开发过程。无需关注嵌入式点开发,跨专业领域无需编写SQL。只要页面在线,活动数据就会自动存储在Nanomirror中。标准数据源。为了实现无埋点,业界有一个类似的方案,也叫“全埋点”,自动采集坑位曝光点击,但是这个方案的缺点很明显:
1、 上传的数据是dom节点的位置信息,清理起来比较麻烦,也摆脱不了写SQL的工作
2、增加带宽和服务器压力(无论是否需要都会上传每个坑位的曝光点击)
3、业务侵入性太强(weex需要监控坑暴露事件,模块开发时需要引入自定义组件)
4、不能携带trackparam信息(实际业务场景也会关注更多的业务信息比如product id/bucket/red封装金额)
提取用户行为的最大公约数
本质上,业务关注的是用户行为。我对历史埋点开发的数据进行了统计,梳理了商家关注的用户行为类型,包括点击跳转页面、红包曝光、红包收款、红包金额、桶id ,渠道等。并且发现所有这些用户行为,底层都经历了页面跳转/HTTP接口请求/url参数传递的API调用。如果把API调用的输入输出都固化了,那么理解用户行为的业务语义和采集Report,就有可能!
最终计划
做出一个适用于所有商家(闲鱼/首淘/天猫)的用户行为采集解决方案,在技术上是不可能的。原因是每个企业自身的工程实施方案完全不同,不能保持一致。但是对于闲鱼来说,工程基础设施已经基本成熟稳定,并且已经固化了具有业务语义的用户行为的API输入输出,使得实现一套只适用于闲鱼的自动化用户行为成为可能采集@ > 技术解决方案。. 总体技术方案如下:
图中下半部分虚线部分:本文产品展示端没有做太多扩展,本文主要讲上半部分,从端侧用户行为采集到产生纳米镜标准数据源。
与全埋点相比,其特点是:
1、 灵活配置
2、降低带宽和服务器计算压力
3、无业务入侵
4、可以携带trackparam信息
登陆钩子API
闲鱼前端封装了一个util,将页面跳转(navigator)和http请求(mtop)暴露给开发。具体调用方法是navigator.push()和mtop.request()。使用 Proxy 钩住这两个 API。这里以导航器为例。
navigator['push'] = new Proxy(navigator['push'], {
get(target, propKey) {
return target[propKey];
},
set(target, propKey, value) {
target[propKey] = value;
return target[propKey];
},
apply(target, thisArg, args) {
// 先执行原逻辑
const result = target.apply(this, args);
// 是否指定忽略纳米镜分析
const ignoreNanoAnaly = args && args[0] && args[0].api && args[0].ignoreNanoAnaly;
if (ignoreNanoAnaly) {
return result;
}
if (result instanceof Promise && result.then) {
result.then(d => {
// 这里写入*敏*感*词*逻辑
// ...
return Promise.resolve(d);
}).catch(e => {
// 这里写入*敏*感*词*逻辑
// ...
return Promise.reject(e);
});
}
return result;
}
});
用户行为采集 通用配置和可定制配置
闲鱼积累了一套成熟的用户行为采集通用配置,满足了业务端数据分析中各种数据指标的需求,同时我们也支持针对性的扩展,可以针对具体情况定制自己的个性page spmId 自定义用户行为指标,具体配置参数及含义请参考以下demo。
{
"spms": [{
"spm": "common", // 用户行为通用配置 会对所有页面产生的用户行为进行匹配
"tasks": [{
"indexType": 0, // 0代表指标 1代表bucket_id 2代表infos 3代表扩展信息 默认0 这里主要是需要与纳米镜的标准数据源建立映射关系
"index": "index__ipv", // 指标名称 IPV
"behavior": [
{
"type": 0, // 用户行为类型 0代表navigator 1代表mtop 2代表location.href
"condition": "fleamarket://item", // 正则匹配是否目标行为 type=navigator匹配下跳url;type=mtop匹配接口返回值 不校验填true
"valueType": "1" // 指标数值类型 0代表boolean 1代表count 字符串属性链代表对应取对应值
}
]
}]
}, {
"spm": "spma.spmb",
"match_uv": true, // 是否采集页面uv 默认指标名称是 index__visit
"tasks": [{
"indexType": 0,
"index": "index__gold_copper", // 金宝箱是否打开
"behavior": [{
"type": 1, // mtop接口请求的行为类型
"api": "mtop.api.lottery.draw", // 抽奖接口api名称
"condition": "d.data.status===5", // mtop返回值符合该正则匹配 则认为符合采集记录条件 status==5代表用户成功打开了金宝箱
"valueType": "0" // 是否领取成功 0/1
}]
}]
}]
}
行为聚合和报告
为了减少带宽和服务器计算压力,采集 到达的每个用户行为不会立即上报,而是会聚合整个页面实例生命周期的用户行为,直到页面被销毁或应用切换从前台到后台 15 秒统一报告。
在上面的demo中,假设用户点击spmId为spma.spmb的页面跳转到商品详情页10次,打开金宝箱,最后上报到服务器日志的数据是这样的:
{
"page": "spma.spmb",
"indexes": "index__visit=1,index__ipv=10,index__gold_copper=1"
}
影响
目前,已经有很多企业通过这种方式灵活方便地接入Nanomirrors,例如。购物赚钱,谈刀,报价,322免费鱼促销等,从原来的开发至少需要2个人天只要活动上线,就可以入手纳米镜查看活动的智能分析结论。整体的纳米镜体验和使用效率有了很大的提升。
未来
目前Nanomirror设计的服务接入模式已经能够满足服务的零成本接入。如果有更多的自定义数据索引需求,还可以支持低成本的动态配置。
未来,纳米镜将在数据科学的道路上深挖。在这个阶段,我们更多的是了解人,我们也在尝试从浩瀚的历史活动中抽象出知识库,开始尝试去理解商品,理解人与商品的关系。偏好关系,建立人与货的匹配关系。