如何创建内部漏斗分析?

Posted

技术标签:

【中文标题】如何创建内部漏斗分析?【英文标题】:How to create inhouse funnel analytics? 【发布时间】:2014-01-31 09:42:25 【问题描述】:

我想创建内部漏斗分析基础架构。 所有用户活动提要信息都将写入选择的数据库/DW,然后,当我动态定义漏斗时,我希望能够选择漏斗中每个阶段的会话数。

我在任何地方都找不到创建这种东西的示例。有人说我应该为此使用 Hadoop 和 MapReduce,但我在网上找不到任何示例。

【问题讨论】:

【参考方案1】:

您的 MapReduce 非常简单:

Mapper 读取日志文件中的会话行,其输出为 (stag-id, 1)

将 Reducer 的数量设置为等于阶段的数量。

Reducer 对每个阶段的值求和。就像在 wordcount 示例中一样(这是 Hadoop 的“Hello World” - https://hadoop.apache.org/docs/r1.2.1/mapred_tutorial.html#Example%3A+WordCount+v1.0)。

您必须设置 Hadoop 集群(或在 Amazon 上使用 Elastic Map Reduce)。

要动态定义漏斗,您可以使用 Hadoop 的 DistributedCache 功能。要查看结果,您必须等待 MapReduce 完成(最少几十秒;如果是 Amazon 的 Elastic MapReduce,则需要几分钟;时间取决于数据量和集群的大小)。

另一种可以更快地为您提供结果的解决方案 - 使用数据库:从 mylogs 中选择 count(distinct session_id) 分组;

如果您有太多数据无法快速执行该查询(它会进行全表扫描;HDD 传输速率约为 50-150MB/秒 - 数学很简单) - 那么您可以使用运行在HDFS(Hadoop的分布式文件系统)。

在这种情况下,您的选择是(我在此仅列出开源项目):

Apache Hive(基于 Hadoop 的 MapReduce,但如果您将数据转换为 Hive 的 ORC 格式 - 您将更快地获得结果)。

Cloudera 的 Impala - 不基于 MapReduce,可以在几秒钟内返回您的结果。为了获得最快的结果,请将您的数据转换为 Parquet 格式。

Shark/Spark - 内存分布式数据库。

【讨论】:

谢谢!我能否动态定义渠道并立即查看结果,还是必须对其进行硬编码并且需要等待一段时间才能获得结果? 哇,谢谢!还有一个末端松动。每个步骤的总和对我不起作用,因为我也有反向路径的漏斗。例如:a->b->a(a 和 b 是页面的名称)。在这种情况下,使用总和将不起作用,因为在第三阶段它将计算第一步的所有综合浏览量。你知道我该如何解决这个问题吗?再次感谢! 映射器的输出键应该是 StageId - 正如您定义的那样,不一定是 PageId。例如。 “a-3”将阶段定义为在您网站上的其他两个页面之后访问的页面“a”。阶段定义的另一个示例:“c-d-a”可以将阶段定义为在页面“c”和“d”之后访问的页面“a”。选择取决于要求,您认为是一个独特的阶段。当然,您应该能够给定一条数据记录来识别阶段,否则您需要一个“预处理器”MapReduce 来创建此类记录。

以上是关于如何创建内部漏斗分析?的主要内容,如果未能解决你的问题,请参考以下文章

用户行为分析模型实践—— 漏斗分析模型

如何在 Firebase 中使用事件的参数值创建漏斗?

用户行为分析模型实践—— 漏斗分析模型

BigQuery,如何复制“转化次数 | (增强)电子商务 |结账行为漏斗报告

谷歌分析:漏斗在类别标签和操作中添加啥

我可以使用谷歌分析漏斗来跟踪注册过程