写点什么

从第三方数据到第一方数据的技术变革

  • 2016-05-12
  • 本文字数:6227 字

    阅读完需:约 20 分钟

以下内容均为 2016 年 4 月 7 日大数据群分享记录。

大家好,我是诸葛 io 的 CEO 孔淼,今天很高兴能和各位前辈一起交流,我是晚辈,如果我分享的一些内容如果以偏概全,也希望大家能够指正。

诸葛 io 是一款精细化的数据分析产品,以覆盖 Android、iOS、JS/H5、服务端 API 等多种数据采集方式,帮助企业整合分析用户行为,并且提供强大的后台驱动产品、运营、业务等方面的决策,具体可以登录 zhugeio.com 或者关注诸葛 io 公众号进行了解。

言归正传,今天咱们就来闲聊下我过去接触过的数据分析领域,因为我是连续创业者,所以我更多的还是聚焦在解决问题和业务场景上。如果把我在数据分析的经验划分的话,刚好也就是我所经历的两次创业阶段,第一阶段是“第三方数据分析”,第二阶段是“第一方数据分析”。所以今天咱们就来漫谈下第三方到第一方数据分析。

先聊聊“第三方数据分析”,这个主要结缘于我给开复做微博数据挖掘开始。

我之前有段时间给开复做实习生,也是微博刚刚火起来的时候,大家发现开复曾经一段时间内都是微博 top1,很多人会在想,开复每天没事儿做都在刷微博吗?或者开复的微博是不是有个庞大的运营团队?

我可以给你答案,其实基本上都是开复自己处理的,但是有一点的确是痛点,开复每天都很忙,没有时间看那么多微博,所以我们玩了个“trick”,目的就是通过程序自动化微博推荐,“揪出”可能会成为爆点或者有意义的微博。开复提了个算法,就是抓取了开复关注的人,和关注人的关注作为种子,然后首先将这些人的微博转发历史建立一个“历史档案”,每个人理论上都会计算出一个时间与转发量的相关曲线,然后我们会监控这些人发布微博,如果微博在某个时刻超出历史档案一定倍数,我们就会认为这是可被推荐的微博,所以开复每天都是看经过筛选后的微博,在这个过程中,其实赶上微博增长爆发的时候,所以在计算历史档案的效率上,我们用了连续信号的时序抽样相关算法,减少计算复杂度,并且也会去调整倍数的参数,同时我们也每天会手动添加一些新的有价值的种子用户。

刚刚讲了一些故事哈,其实跟开复还做了很多关于微博数据的挖掘,后来其实演变成了一款产品叫“脉搏网”,包括微博转发的可视化监控,找出 KOL(意见领袖)分析爆点原因等等。
“脉搏网”虽然表面是微博工具,但是其实我们是一群爬虫精英。提到第三方数据就不得不说到爬虫了,其实我在做第三方数据分析的时候,所有的用户数据都来自于网络公开数据抓取,比如微博、豆瓣、人人、知乎等等,所有的标签数据来自于垂直网站的抓取,例如汽车品类就是汽车之家,旅游就是旅游网站等等。
所谓第三方数据分析,其实相对于数据使用方而言的,所以对于数据提供方的数据来源也大概分为几种:

1. 类似“脉搏网”这种的爬虫专业户
2. 类似 Admaster 这样的广告监控,cookie 跟踪用户页面访问记录等等
3.talkingdata 这种数据分析平台,用户的应用列表数据等等

所以包括我们上家创业公司(37degree)、Admaster 和 Talkingdata 都做了 DMP,数据源不一样,但是都会基于各种数据进行清洗,然后计算标签,比如网页有不同类型的网站,应用也有不同的分类,当然实际的算法会比这个复杂多了。

我来聊聊我做的第三方数据的一些点。

这个爬虫不是简单的发个请求,解析一下 DOM 就可以了,实战中主要从以下方面去解决:

1. 找到合适的接口,包括移动端抓包、PC 网站、Wap 站,Ajax 异步请求
2. 突破限制和验证,包括模拟请求,绕过验证码,登录验证,网络代理
3. 效率问题

先说说第一个问题:

爬虫的第一点一定是要巧,因为可能节省的就是指数级的时间,很多人希望盲目的就去爬取网页,找到合适的接口是第一步,举个例子,假如要抓取微博用户的 profile,其实有好几种办法:

1. 网页
2. 客户端,iOS、Android、平板等等
3.wap 网站

同样的业务,这些终端都有,所以我们要找的当然是逻辑最简单的,并且限制最少的,然后就是找接口,对于 PC 网站,很多人之前都会被一些 Javascript 异步加载,也就是需要点击交互才能触发的接口卡住,所以喜欢用模拟浏览器的库去处理,这种做法小打小闹还可以,大规模处理就会遇到性能等各方面的问题,一般来讲,其实用 Chrome 的调试工具,看 network,必要时要点下 preserve log,防止日志在重定向时清掉。对于移动端,可以用 Charles 或者 Fiddler2 设置终端代理,然后抓包网络请求,你就可以看到很多请求数据了,然后找到自己需要的。这种做法是我一般用的最多的,因为移动端的 API 几乎都是结构化的数据,不像网页还需要解析。

然后说说第二个问题,突破限制:

模拟请求肯定是第一步,你要熟知 Http 协议,简单的比如 UA、Referer,又比如 Cookie 在请求头哪儿设置的,还有的就是一些常用的协议,比如 XAuth 协议,OAuth2.0 协议,我们当时对于爬虫的同事都是在原理级需要贯通的。

绕过验证码,简单的用一些 OCR 的库,比如早期的 12306 很简单,复杂的就只能找漏洞了。

登录验证,一般来讲其实最主要的有两个,一个是需要连续请求,中间涉及到添加了一些 cookie 或者参数传递都得完整跟踪模拟,第二个就是弄清楚加密的机制,比如早期新浪微博是二次 SHA1 加密还加 salt,后来是 RSA 加密。对于 PC 网页弄清楚加密原理比较简单,就是要学会阅读 Javascript 的代码。然后就是需要有足够多的账号,然后来伪造身份,有的时候也可以不用模拟登陆,用 OAuth 的一些授权来做,道理也类似,就是要模拟拿到 access_token,中间也有一些很有意思的,就比如说我看了 OAuth2.0 的 RFC 协议,然后找到了授权一个隐藏的漏洞。

网络代理就得看实际情况了。有的请求是 http,有的请求是 https 的,我们当时是抓了大部分网络公开的代理网站,然后结合不同的抓取域名,验证这些代理的有效性,然后定时保证大量可用的代理库,包括 http 和 https 的。

最后一个问题就是效率,爬虫还是一个很大而工程,举个简单的例子,我要抓取微博用户的个人资料、关注关系、微博内容,微博内容和关注关系还需要分页,如果是 3 亿的微博账号,平均一个人 5 个请求,也就是需要 15 亿请求,一天是 86400 秒,所以可想而知抓一遍压力还是很大的。

我们当时的框架主要分为三种,都是自己写的:

1. 基于 Hadoop 的爬虫
2. 基于 Celery 的单网卡
3. 基于 Celery 的多网卡分布式

分布式其实一个很重要的就是消息通信,爬虫框架核心还是 URL 调度,解析的调度,所以本身如果是分布式解析的话,那么爬下来的内容也会占用带宽,所以多网卡的时候,一般内网网卡是千兆,外网带宽是百兆,通信走内网 ip,抓取走外网,影响不大,但是如果是单网卡就不一样了,所以单网卡时,基本上就会减少解析调度,主要信息通信还是 URL 的调度,利用好网络资源,解析是异步的。

爬虫这块儿详细的可以看看我之前写的两篇爬虫入门文章。

接下来说说算法分析这块。抓取数据只是一部分,其实更大的挑战还是算法分析这块,诸如用户画像、标签计算,以及机器学习应用里面的聚类分类等等。

  • 首先说说影响力算法

有个很有意思的就是之前我们对于微博用户影响力的计算,我们用的就是 pagerank 相关的算法,因为用户之前的关注关系很类似网页之间的链接关系,所以我们当时抓去了所有用户的关注关系,用 pagerank 的算法来计算了这些人的影响力排名。

  • 消费能力计算

微博用户有发布微博的设备列表,有加 V 认证的类型,并且还有关注关系,所以我们结合这些维度计算了消费能力。

标签计算我们是预先标注了一些标签库,然后将用户的微博进行分词词频统计,然后找到对应标签然后统计权重,标签库就是主要来源于垂直网站的抓取训练。
其实计算影响力和消费能力也是很大的挑战,就是这种都是算法应用,还是一样效率有很大的挑战,比如 1 秒计算 100 个人,一天也只能计算 800 多万个用户,算完所有用户也要一个月,所以我们做了很多性能优化,降维,牺牲一定准确性换取效率。另外比如 pagerank 这种算法还是迭代性的,用 hadoop 的话其实不是很适合,后来我们又尝试了 graphlab

除了微博数据的分析,我们其实还有很多数据分析处理,大体其实主要是两种,一种是非结构化数据,一种是结构化的数据。

微博抓下来的大多都是人口属性和 json,都属于结构化数据,但是微博内容又属于非结构化的。

简历和职位要求匹配就是非结构化数据处理,用的主要还是聚类分类的算法。
简历匹配的场景主要是,用于很多公司需要去在茫茫简历中找到和自己职位相关性最高的简历。或者一个应聘者需要快速找到和自己相关度最高的职位,因为即使是 java 工程师,其实也有很多类型,传统通过目录索引方式很难匹配,不同公司取的名称也不一样,也必须要看详细的职位要求。

机器学习其实主要分为两种,无监督和有监督的学习,我们当时运用的就是无监督的 LDA 算法,这个在广告领域应用较多,核心原理你可以认为我们想要聚类分类的就是一些方向,每一个文本行可以是一堆向量,向量有长度和方向,最终我们找到这些向量的相似性。

解释下,比如一个简历认为是一个处理单元,我们预先准备好职位相关的词库,然后这些词可以认为就是方向,我们将简历 TF-IDF 算法处理后,去除无关词汇,其实就是一些词和词频的组合,可以认为是向量和向量的长度,然后再进行聚类,因为是无监督,所以我们需要去预估大概有多少个分类,然后不停去调配参数。
最终得到一些聚类。

用户画像其实就是像上述一样,我们会设计好很多人口特征的维度,也会根据我们的数据源去找到可以潜在推测的维度,那么这些维度就可能构成人物的画像,例如影响力,消费能力,兴趣能力,品牌标签等等,又结合应用领域的不一样,标签往往要从细分领域提取,所以就提到要去抓取垂直网站的语料,然后抽取训练,最后给用户打标签,或者给用户聚类分类。我们建立了庞大的用户数据库,一直服务于广告营销等行业。

但是在做这个过程中,我们深深感受到的是当今企业内分析能力的不足,以及过多的分析需求聚焦于“流量获取”上,总想从外部拿到数据匹配用户的标签,但是自己的业务数据分析处理很薄弱,另外一方面也是不关心用户的 engagement,所以才想到要做第一方数据分析工具,帮助更多企业从内容数据处理优化做起。
接下来来聊聊第一方数据分析。

第一方数据简单来理解就是自有数据,大多数公司的自有数据就是数据库里面的用户产生的业务数据,数据分析意识高一点的公司在此之外,可能会尝试通过日志收集一些用户的行为数据。所谓行为数据就是包括进入产品,浏览等一系列的使用行为,或者收藏,关注,购买搜索等一系列的业务行为。

对于大多数初期小公司而言,都没有自己的数据分析平台,所以大多数时候的第一方数据分析,是依赖于工程写脚本,根据需求查数据库去计算。

很多时候时间都浪费在了沟通,确认需求,写脚本,等待结果运算上,我相信很多公司一定有共鸣。

对于很多有一定能力的互联网公司,公司内部也开始构建自己的数据分析平台,并且已经开始收集用户的行为数据进行分析,但是大多数对于行为的数据利用还是限制于两种:

第一种做法还是传统 BI,基于 Oracle 等关系型数据库或者基于 Hadoop 的统计分析,一般来讲就是设计好数据仓库的模型,包括待分析的一些维度,然后基于维度进行汇总统计,比如在产品领域,就是去统计一些关键行为的发生次数,常见的就是计算页面访问量,独立用户数,留存率等指标,简而言之也就是用于统计结果了。

第二种做法就是利用行为数据进行个性化的数据推荐。这个还是比较 make sense 的,从早期的亚马逊的推荐到 Facebook 的相关推荐,这个是我比较推崇的不做结果,而是优化过程的数据运用。

个性化推荐现在常用的就是协同过滤了,基本也是分为两种,一个是基于热度,一个是基于兴趣的,前者是 user-based,后者是 item-based,如果你想打造一个兴趣社区,那么一定要避免根据统计结果,进行热门推荐,而兴趣推荐的一个重点就是要预设一些标签。

综合两类公司的做法来看,其实用户的产品互动行为数据基本上始终被当做一个黑盒子来看,推荐算法虽然对这些数据利用的比较好但是只是一个对单用户纵深的分析做法,而横向的用户分析最终止于高度汇总的报表,并不能探索和验证用户在产品上的行为如何影响了公司的业务指标。一个典型的现象就是很多产品的迭代决策靠的是猜测或者直觉。

所以基于这些考虑,我们就想怎么才能打造一个更加有意义的第一方数据分析平台,而不只是多维交叉汇总结果。

于是就想到了做诸葛 io,那诸葛 io 和过去的第一方数据运用有什么区别呢?我们先从业务来看

两张图,一个核心,就是以用户为中心,所以“流量时代”关注的是用户数量结果,BI 关注的是维度聚合结果,而我们关心的是用户。

我们过去看到一些 dashboard 的图表,上升下降可能很难找到原因,因为一开始分析的基础就是维度汇总的数据。

但是如果所有的数据以独立的用户跟踪为基础就不一样了,假若我们看到新增的这些数字,或者汇总分布的结果,我们可以找到每个 delta 数字背后的人,能还原这些用户的丰富业务标签和维度,亦然可以做更多的比较和深入分析了。

所以用户的行为数据在个性化推荐之外,之前每次业务的交互,也都是这些用户丰富的标签,比如知乎“关注了 XX 话题”、“关注了 XX 用户”、“点赞了 XX 内容”、“分享 XX 文章”,这些行为是非常丰富的标签,组合起来亦然,比之前说的第三方数据计算出标签意义更大,因为后续还以为着你分析的结果是能反馈到这些用户的,例如换回流失,精准推送等等

再从技术上来讲讲,主要其实还是 lambda 架构。

我们以 Kafka 为消息中心,利用多层生产者与消费者的概念,对数据进行多种运用,例如实时计算、打标签、导入数据仓库、备份等等

数据存储,也用了 SQL 和 NoSQL,但即使是 SQL 也是用的列式存储数据库,NoSQL 诸如 Elasticsearch 进行索引,承载一些快速查询的场景,关系型主要用于复杂计算,因为我们不止是用户、事件两个主题,我们还有会话,所以复杂度很高,中间我们也用了一些小 trick,以后有机会和大家分享一下:

问题 1:大数据开发和数据分析师的具体职能和区别

孔淼:大数据开发和数据分析师还是很大不一样的,数据分析其实是一个链条,从数据采集,到数据收集,到数据清洗,到数据建模,到数据分析,大数据开发一般来讲主要是前面四环,负责为数据分析师做好基础,大数据开发一般来讲也有基础数据 ETL,和数据仓库区别,整体而言还是偏技术,而数据分析师还是偏如何利用数据分析出价值来,数据分析师本身也是结合不同行业角色或者场景,洞察数据价值

问题 2:大数据数据质量有哪些保障措施?

孔淼:大数据最重要的是要保证原始数据的全和安全,后面的加工处理出问题,都能够再恢复,质量分为两方面,一个是数据准确性,一个是数据安全。数据准确性一般而言还是要进行测试校验和核对,涉及一些 SQL 或者视图的逻辑等等,数据安全性则要通过可信任的第三方,或者自有托管安全保障,防火墙,传输加密都是必要的

问题 3:基于 hadoop 的爬虫思路是什么??是属于分布式爬虫?

孔淼:对,hadoop 其实核心是 mapreduce 和 HDFS,一套计算,一套存储,本身也是能通过 mapper 和 reducer 进行调度,所以是利用这样的一个特性,另外一方面 HDFS 的存储,也能对接我们后面一些算法分析的 job,也是通过 hadoop 编写的

问题 4:请问,诸葛 IO 分析细化到单用户粒度,最主要的 3 个实际应用场景是什么?

孔淼:

  1. 运营或者广告领域的渠道评估
  2. 产品下的功能模块衡量,或者产品体验优化
  3. 对业务的多维分析

以上内容均为 2016 年 4 月 7 日大数据群分享记录。 还想获得这些干到不能再干的分享内容?赶快关注我们“大数据杂谈”公众号,点击“加群学习”,更多纯技术分享等着你!

2016-05-12 03:553123

评论

发布
暂无评论
发现更多内容

Spring事件监听机制使用和原理解析

不在线第一只蜗牛

spring springboot

关于项目初期,数据量小的内容推荐的实现方法

北桥苏

推荐算法 个性化推荐 协同过滤 内容推荐

详解数据库中的索引和视图

华为云开发者联盟

数据库 后端 华为云 华为云开发者联盟 企业号 6 月 PK 榜

小程序技术分享| 小程序集成 pixi 渲染引擎

anyRTC开发者

小程序 音视频 canvas pixi 渲染

版本动态 | SolidUI 0.1.0 版本发布

李孟聊AI

Web 2D 3D AIGC ChatGPT

嘉为蓝鲸入选《信息技术服务运维工具名录》及《IT服务工具图谱》

嘉为蓝鲸

运维 信息技术 ITSS

消息中间件最强笔记大全:MQ+Kafka+体系图+笔记

小小怪下士

Java 消息队列 消息中间件

这场世界级的攻坚考验,华为云GaussDB稳过

华为云开发者联盟

数据库 后端 华为云 华为云开发者联盟 企业号 6 月 PK 榜

华为云低代码来啦,好奇心满满的开发者们快来体验!

华为云PaaS服务小智

低代码 华为云 华为开发者大会2023

「学习笔记」记忆化搜索

互联网工科生

学习笔记

Python开发中自动化构建项目结构样式

华为云开发者联盟

Python 开发 华为云 华为云开发者联盟 企业号 6 月 PK 榜

V8是如何执行JavaScript代码的?

快乐非自愿限量之名

Java 编程语言

联合打造!嘉为蓝鲸携手麒麟软件共建智能运维解决方案

嘉为蓝鲸

运维 AIOPS

HTML5 游戏开发实战 | 五子棋

TiAmo

html html5 游戏 6 月 优质更文活动

一种读取亿级doris数据库的方法 | 京东云技术团队

京东科技开发者

MySQL 数据库 Doris 企业号 6 月 PK 榜

精选Golang高频面试题和答案汇总

王中阳Go

golang 面试八股文 go面试题 Go面试宝典

掌握Python文件操作:从基础到高阶的全方位探索

快乐非自愿限量之名

Python 教程

数字化转型与架构-规划篇|满足用户期望和用户需求说:“不”

数字随行

数字化转型

如何加强数据资产管理?专家共话分级分类实战宝典

说山水

中国高校最大云上科研智算平台上线!

新云力量

智能 计算 复旦大学

618技术揭秘:探究竞速榜页面核心前端技术 | 京东云技术团队

京东科技开发者

前端 H5页面 海报生成 动画特效 企业号 6 月 PK 榜

软件测试/测试开发丨Python常用数据结构学习笔记

测试人

Python 数据结构 软件测试 集合 列表

和鲸助力中国大学生计算机设计大赛国赛作品评审标准落实研讨会召开,专家平台首发布

ModelWhale

人工智能 专家 数据科学 研讨会 中国计算机设计大赛

低代码平台对程序员友好吗?

互联网工科生

低代码 可视化 JNPF

华为云能力中心开业暨项目签约活动圆满举办!

新消费日报

低代码开发平台选型教程

高端章鱼哥

低代码 技术选型 可视化开发 JNPF

一种接口依赖关系分层方案 | 京东云技术团队

京东科技开发者

依赖关系 接口优化 API 接口 企业号 6 月 PK 榜 接口分层

这样做,轻松拿捏阻焊桥!

华秋PCB

工具 电路 PCB PCB设计 阻焊

实践讲解强化学习之梯度策略、添加基线、优势函数

华为云开发者联盟

人工智能 华为云 华为云开发者联盟 企业号 6 月 PK 榜

从第三方数据到第一方数据的技术变革_大数据_孔淼_InfoQ精选文章