Clickhouse(流量分析(二).留存分析案例)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Clickhouse(流量分析(二).留存分析案例)相关的知识,希望对你有一定的参考价值。

参考技术A

神策用户分析模型——留存分析的使用方法

ClickHouse留存分析工具十亿数据秒级查询方案

高效压缩位图RoaringBitmap的原理与应用

留存函数(retention)

一般来说,求留存率的做法就是两天的用户求交集,join的速度会比较慢。假若每一个用户都可以表示成一个32位的无符号整型,用bitmap的形式去存储,S1和S2的求交过程就是直接的一个位比较过程,这样速度会得到巨大的提升。而Roaringbitmap对数据进行了压缩,其求交的速度在绝大部分情况下比bitmap还要快,因此这里我们考虑使用Roaringbitmap的方法来对计算留存的过程进行优化。

这里的bitmap编码相关可以参考一下 (bitmap编码在CDP中的应用 )
https://cloud.tencent.com/developer/news/683175

明细圈人函数

(1).生成用户映射

构建一个映射表 mem_mapping_tf,把各类uid映射为全局唯一的一个32位的无符号整型,这里涉及两个问题,一个是idmapping(全域数据打通)的问题,保证准确性,当然我们映射其他的id,例如是设备id等,在CDP中的多id投放策略,idmapping之后还有一个ONEID,做起来容易,做好还是困难的,idmapping是一个工程(具体参考一下神策数据是怎么做的,之前看过一遍讲的不错),第二个问题,这张映射表怎么实现全局唯一??(id体系的建设)

如何针对亿级用户构建全局连续唯一数字 ID 标识?

(2).数据转换

将原始行为数据中的uid映射为oneid
这一步的转化在spark/hive中完成

(3).导入ck并压缩数据

可能有什么坑??但是我不知道,前段时间用clickhouse导数据丢了..查了一下是主键的问题,其他的问题需要实践一下

(4).查询

ck中bitmap函数的应用

该函数将一组条件作为参数,类型为1到32个UInt8类型的参数,用来表示事件是否满足特定条件。

返回结果的表达式。返回值包括:
1,条件满足。
0,条件不满足。

对比位图函数,还是位图函数方便的...

从数据建模上考虑解决留存分析的问题:拉链表
步骤一: dw.traffic_aggr_session会话表计算今天登录的用户guid

步骤二:昨天的活跃表与今天的日活表full join;计算的规则:

first_dt guid range_start 规则是一致的,只要昨天有那就是昨天的,否则今天的(这种情况是新用户了)

range_end 规则:如果昨天登录了,今天没有登录,那就昨天日期,连续中断要封存,如果昨天没有但是有那就今天的(新用户),其他情况一律是昨天日期(昨天用户今天没有登录的情形,封闭区间保持原样)

步骤三:一种情形没有full jion上:之前存在的用户今天登陆的( max(range_end) != ‘9999-12-31’),所以要union all

从活跃表中获取这种用户的guid和first_dt与日活表left semi join

ClickHouse之BitMap的使用

Clickhouse(流量分析(三).路径分析案例)

参考技术A

神策用户分析模型——路径分析的使用方法

漏斗分析是固化了具体的分析过程或者业务环节,然后分析几个大的业务环节的转化;而路径分析,是固化了用户的路径顺序,在每个路径次序中,都包含了各个主要业务环节,因此在每一步中,出现的业务环节很有可能都是类似的。漏斗分析看重的是业务环节之间的留存关系,而路径分析看重的是用户在不同业务环节中的顺序及流失关系。

路径分析:如何将用户的网站行为轨迹可视化呈现?
BI分析系统——路径分析及产品化 )

pattern支持3中匹配模式:

(?N):表示时间序列中的第N个事件,从1开始,最长支持32个条件输入;如,(?1)对应的是cond1

(?t op secs):插入两个事件之间,表示它们发生时需要满足的时间条件(单位为秒),支持 >=, >, <, <= 。例如上述SQL中,(?1)(?t<=15)(?2)即表示事件1和2发生的时间间隔在15秒以内,期间可能会发生若干次非指定事件。

.*:表示任意的非指定事件。

??看结果链是不允许重叠的,确实要是允许重叠实现起来是真的非常麻烦啊,业务上有需求的话条件限制喽

智能路径分析模型比较复杂,但同时支持的分析需求也会更加复杂,如分析给定期望的路径终点、途经点和最大事件时间间隔,统计出每条路径的用户数,并按照用户数对路径进行倒序排列

???网上给的例子怎么都是一样的,算了吸收一下吧,虽说数组函数非常灵活,但是不怕查询慢吗??具体还得结合业务过滤大部分的数据

1

2

3

4

5

6

7

8

9

10

bug的解决,hasAll这块判断

虽然上面的是可以的,但是例子中SQL太长了,好像没有转换的问题,导致无法匹配上,最好都转成string类型的....

不设置途经点,且仅以用户最后一次到达目标事件作为参考

1. arrayCompact对数组中的数据进行相邻去重,用户重复操作的事件只记录一次(页面去重)

2. arraySort 对数组中的数据按照指定列进行升序排列;降序排列参考arrayReverseSort

3. arrayEnumerate 取数组的下标掩码序列

4. arrayMap 对数组中的每一列进行处理,并返回长度相同的新数组

5. arrayStringConcat将数组元素按照给定分隔符进行拼接,返回拼接后的字符串

6. arraySplit 按照规则对数组进行分割(遇到下标为1时进行分割,分割点为下一个 数组的起始点;注意,首项为1还是0不影响结果)

7. arrayDifference参数必须是数值类型;计算数组中相邻数字的差值,第一个值为0

8. arrayFilter 只保留数组中满足条件的数据

VIVO路径分析模型

通常用户在需要进行路径分析的场景时关注的主要问题:

ClickHouse安装和使用

注意关闭防火墙

clickhouse单节点报错 Code: 210. DB::NetException: Connection refused (localhost:9000)

这个注释千万不能去掉....暂时不知道怎么处理..卸载重装吧

clickhouse卸载重装

以上是关于Clickhouse(流量分析(二).留存分析案例)的主要内容,如果未能解决你的问题,请参考以下文章

Clickhouse(流量分析(一).漏斗分析案例)

用户留存建模实践

重复事件(表现形态:活跃留存复购)建模(生存分析)的案例学习笔记

客户主题分析(tableau)—客户留存

ClickHouse大数据分析技术与实战

ClickHouse大数据分析技术与实战