作者:王实
原文来源链接:https://zhuanlan.zhihu.com/p/23787228
Growth Hacking这个词在过去一两年开始迅速从硅谷传播到国内,也诞生了一系列专注于企业数据分析业务的明星初创公司,如GrowingIO,神策数据,诸葛IO等。Growth Hacking简单的来说就是用数据驱动的方式来指导产品的迭代改进,以实现用户的快速增长,可以看看上面几家数据分析公司披露的客户就知道它有多流行了:
- GrowingIO客户:有赞,豆瓣,36Kr等
- 神策数据客户:秒拍,AcFun,爱鲜蜂,pp租车等
- 诸葛IO客户:Enjoy,罗辑思维等
我司的一个主要产品是面向中小诊所的运营SaaS软件,就是诊所可以通过登录网站的方式完成诊所的日常工作,如完成病历,开药以及日常的盘点等。同时产品的推广渠道比较多元化,包括地面销售团队,合作伙伴推广以及常规的搜索引擎推广。作为一个资源相对有限的创业公司,重点关注的就是不同渠道的用户转化以及产品使用情况。
因为自己之前一直在数据算法团队,对于数据收集、处理与应用的流程比较熟悉,加上公司本身规模不大,业务也相对简单,所以在和神策数据沟通后还是觉得自己可以尝试基于阿里云平台快速搭建一个公司自有的数据分析平台。
以阿里云产品体系为例,一个典型的网站架构如下:
图1 基于阿里云的网站典型架构
除了云服务之外,我们还购买了负载均衡SLB,云数据库RDS,云数据库Redis,云监控等服务,主要是考虑是初期没有专业的运维,而这些产品很好的解决了运维需求。
言归正传,主要还是介绍一下数据分析平台的搭建,下面是一个简单的数据流程架构图。
图2 基于阿里云数加的数据分析平台
我们以常规的七日留存率为例,来说明数据分析流程构建。
七日留存率的一个简单计算公式如下:
七日留存率 = 七天前注册的当日活跃用户数 / 七天前注册的用户数
根据不同公司业务的运营策略,有时也直接将登录系统的用户等价为活跃用户,这个例子中允许定义活跃用户的关键行为(以诊所软件为例,活跃用户需要开处方、售药等)。
一、数据收集
通常来说数据包括前端日志和后端结构化数据两部分。
以计算常规的七日留存率为例,活跃用户数(必须满足指定的使用轨迹)来自于前端服务器(Apache或者 Nginx)日志的解析。
步骤一:采用埋点的技术来记录用户的访问行为:
1. URL埋点
最简单的方法就是投放到不同推广渠道的注册页在url上使用特殊的参数来标记渠道,如channel=xxx,这样解析前端访问日志时就可以通过refer字段来区分渠道。
2. 点击埋点
点击埋点是被广泛使用的技术,简单的做法是在前端页面在发送需要记录的行为时额外发送一个后端请求,如请求一个非常小的图片文件1.gif,文件本身没有任何内容,主要是用于在前端日志中产生一个记录,同样的,在这个请求会带上特殊的参数,如spm=xx.xx.xx.xx,而且参数本身可以采用类似于ip的段位来构建埋点体系,如第一段表示业务,第二段表示产品,第三段表示功能,第四段表示位置等等。如图3的淘宝网埋点示例:
最终前端产生的日志(以apache为例)如图4所示:
图4 apache日志示例
通过URL参数和点击埋点,我们可以就可以监控用户在网站上的使用轨迹,以七日留存率指标为例,我们可以定义活跃用户的行为必须包括哪些关键路径,即spm埋点必须符合哪些规则。
步骤二:自动解析并同步集群机器日志到日志数据库
1. 在所有ECS上安装阿里云logtail工具,ECS上几个命令行搞定,如图5所示:
图5 logtail命令行安装
Logtail会自动根据设定的时间间隔提交数据。
2. 创建日志数据库
开通日志服务后,在日志服务控制台创建Project(支持多个LogStore),Project下面创建LogStore(支持多个解析配置),创建配置(即解析规则),如图6所示。
图6 LogStore中的解析配置
这样就完成日志数据的结构化存储,而计算七日留存所需的用户注册数据则已经以结构化的形式存储在RDS Mysql中,下一步需要做的是定时提取LogStore和Mysql中的数据进行运算。
二、数据处理
云端的数据处理就好像Evernote和有道云笔记一样,可以非常方便的实现在线多人协作。阿里大数据计算平台好像也是今年9月份左右开始对外公测,之前的名称叫做ODPS,后来改名叫做大数据计算服务(MaxCompute),虽然对于我来说都一样拗口难懂(后面我就用ODPS来统一代指这个服务)……
现在数据处理这块,阿里云其实是单独开个了产品线,命名为阿里云数加平台,对应的服务入口并没有集成到缺省的阿里云控制台目录菜单,在控制台形形色色的产品命名中并不容易定位,所以,真正用起来只能收藏夹管理入口了……
吐槽结束,数据处理包括数据同步、数据运算和运维两个核心部分, 数据同步将LogStore和RDS Mysql数据同步到ODPS, 数据运算和运维则基于ODPS实现多人协作开发数据处理任务并进行上线管理。
进入阿里云数加控制台后,进入数据开发目录,然后创建Project,创建后通过右边的Project数据开发链接进入了一个在线的IDE(有点像云笔记),就可以开始干活了。
步骤一:同步LogStore和RDS Mysql数据到ODPS数据库表
1. LogStore的数据同步
基本做法就是在IDE的数据管理模块中创建和LogStore相同结构的ODPS表,然后回到日志服务控制台相应的LogStore配置管理中配置一个投递任务,这样就可以自动同步啦。(非常有用的是,在ODPS表中可配置一个时间分区,按天同步日志,这样方便的实现后面的按天调度和计算任务,也可以提升查询效率)。
2. RDS Mysql的数据同步
这个也需要在ODPS中创建一个对应的表(字段可以比原始表少,即可以只同步部分数据),然后再IDE中配置一个同步任务就好了,如图7所示:
图7 数据同步任务开发
步骤二:基于ODPS数据库表的定时任务开发
步骤一基本上完成了数据在ODPS平台上的准备,如每日的用户行为数据和注册数据,下面所需的就是开发定时计算任务了(如计算每天的七日留存指标),图7上可以看出,可以使用SQL或Shell脚本开发简单的任务,也可以开发复杂的MapReduce任务,甚至是机器学习任务,也可以用拖拽的方式配置任务的执行顺序。
我们使用SQL任务就可以计算出每日的活跃用户、注册用户以及留存。图8是开发SQL任务的界面,右边可以配置任务的执行周期和依赖,同时也支持多人编辑同一个任务。
图8 阿里云数加DataIDE中的SQL任务编辑界面
步骤三:数据计算任务的运维
在完成开发和测试后,可以通过IDE将任务发布到线上,如图9所示,比较方便的是,运维工具支持补数据,譬如在搭建这个数据流程之前,我们的日志和数据已经积累了数月,我可以补运行任务,从而得到之前数月的统计指标。
图9 数据计算任务运维界面
个人觉得大数据计算平台是阿里云数加较为独特的产品,可以实现稳定的数据计算和管理。
三、数据应用
理论上经过自行设计的数据计算和运维后,企业可根据自己的业务搭建出高度个性化的应用。这里仍然以初创企业广泛使用的BI报表为例,看如何实现七日留存的数据报表应用。图10 是阿里云数加控制台中的BI报表制作示意图。
图10 阿里云数加Quick BI流程示意图
我们主要使用MaxCompute也就是ODPS计算任务产生的七日留存率数据表作为报表数据源,使用图形化的操作工具即可实现七日流程率的展示,这种乐高积木式的操作比较简单,就不多啰嗦了,下面是一个完成后的报表图表,官网说可以支持以接口方式将制作的报表嵌入到第三方软件(挺酷的,不过没试过)。
图11 阿里云数加QuickBI 七日留存率效果图
基本上,通过基于日志服务的数据采集、基于ODPS的数据计算和运维、基于Quick BI的报表制作,小规模的初创工具可以在2天左右快速的搭建完一个适合业务的、可以扩展的数据分析平台(你也可以基于这个平台搭建出一个商用的推荐系统),当然,这一切的前提是你的BOSS能知道数据分析的价值。
此外,类似于神策数据的专业服务公司其实每年的年费也不贵,对于愿意享受专业服务或相关技术人员比较缺乏的公司直接购买他们的服务也不失为一种较好的选择。