在过去的一年半里,我们与我们的 10 人团队一起在一个名为Objectiv的开源项目上努力工作,以:

  1. 以超结构化格式收集产品分析数据,具有出色的开发人员工具;和

  2. 在常规笔记本中快速分析非常结构化的数据,方法是采用预先构建的数据模型或构建您自己的数据模型,并可选择在其他工具(如 BI)中共享分析。

我们使用具有类似 Pandas 接口(称为 Bach)的库为建模部分提供动力,并将所有操作转换为直接在任何 SQL 数据存储上运行的 SQL。

为什么我们开始这个项目

我们在产品分析的两个方面都做了很多工作;作为开发人员和数据科学家。我们总是遇到同样的问题:

  • 作为前端开发人员,跟踪检测工具对收集正确的数据没有帮助。每个数据点都是自定义实现,IDE 中没有文档或 linting 来帮助跟踪正确的属性和类型。也许在大型 Excel 电子表格中有一个跟踪计划,但它可能不完整且已过时。一旦数据团队开始处理生成的数据,他们就会不断地为他们事先没有想到的用例请求更改/添加,这意味着您一直在来回进行实施。

  • 作为数据科学家,您必须首先将大部分时间花在清理、准备和转换数据上,然后才能进行实际建模。你必须为每个应用程序和建模用例重复这个循环,因为每个人都重新发明了自己的数据格式。这意味着您也不能与他人共享和重用数据模型。完成后,您仍然需要将模型转换为生产就绪版本。

谁喜欢这些?

谁喜欢这些?

这里的关键问题是,有很多很棒的工具可以进行数据收集或建模,但实际上并没有将两者联系起来。

数据采集和建模断开

数据采集和建模脱节

我们为解决这个问题而构建的

一组紧密集成的工具,用于弥合数据收集和建模之间的脱节:

  1. 适合任何产品 UI 和分析建模用例的开放数据格式

  2. Tracker SDKs 适用于现代框架,具有出色的开发支持。

3.一个**'开放模型中心'**:一个带有预建数据模型集合的python库。

  1. Bach:直接在任何数据存储上运行模型和操作的 python 库。

下面是关于这些的更多细节。

1) 适合任何产品 UI 和建模用例的开放数据格式

我们称之为开放分析分类,我们邀请任何人为它做出贡献。

这是为分析数据创建通用的通用结构的尝试。到目前为止,我们使用了 50 多家公司的数据和分析用例来定义它,并确保它涵盖了所有内容。当然,它也可以针对任何自定义用例进行扩展。

我们还用分类法解决了一件事情,就是知道事件在 UI 中的确切位置,因为几乎每个数据问题都是从这个开始的。我们称之为 'UI 意识'。例如,假设您有一个带有主要部分的网站,其中包含一个按钮;当您按下按钮时,会在所谓的 LocationContext 中捕获确切的 UI 层次结构。这样,数据科学家总是可以将事件与它们在 UI 中发生的位置联系起来,即使它随着时间而变化。

在下面的屏幕截图中查看一小部分分类:

开放分析分类法:一些事件

开放分析分类法:一些事件

对于建模,使用此分类法使您能够重用模型并与他人共享它们,甚至跨不同的数据集,以及在不同公司的外部共享,因为每个人都使用相同的格式。但稍后会详细介绍。

2) 适用于现代框架的 Tracker SDK,具有出色的开发支持

我们试图让前端开发人员的生活尽可能轻松。

我们目前有SDKs用于 React、React Native、Angular 和纯 JavaScript。完整的 Vue 和 Next.js SDK 即将推出,我们的列表中还有更多。我们的目标是为每个流行的框架/平台提供一个 SDK,以便为每个框架/平台完美定制工具。

对于仪器,分类法明确规定了要跟踪的内容和方式,因此您不需要跟踪计划。您可以将应用程序中的任何组件或 HTML 元素与 SDK 附带的 Objectiv 对应项(例如,用于按钮的 TrackedButton )交换,或者如果您有自己的组件,则可以包装它们。这将自动跟踪所有内容,包括所有必需的数据和 UI 位置。

单击时跟踪的链接示例,自动添加了所有必需的数据和 UI 位置

单击时跟踪的链接示例,自动添加所有必需的数据和 UI 位置

添加了跟踪功能的您自己的组件也可以在应用程序的任何位置轻松重用。 SDK 将应用 UI 位置并自动跟踪它。

除此之外,还有一些工具可以帮助在分类](https://objectiv.io/docs/tracking/core-concepts/validation)最终进入数据库之前对[进行验证,见下文。

验证:在IDE中

所有 SDK 组件都带有 TypeScript 定义,因此您将获得有关每个组件的内联文档。您还可以针对任何问题进行 linting,例如确保您为组件使用正确的字段和正确的数据类型。

在 IDE 中检查验证问题

在 IDE 中检查验证问题

Validation:在应用中,保证UI感知

假设您在屏幕上添加了两个具有相同文本和链接的按钮,但没有对它们所在的部分进行任何跟踪。这意味着它们实际上不会被数据科学家在数据中唯一区分(这他们以后可能会追你:))。

所以:当页面加载时(在注册组件时),我们会在浏览器控制台中预先警告您这一点。

在浏览器控制台中验证“UI 感知”

在浏览器控制台中验证“UI 感知”

为了解决这个问题,SDK 可以轻松跟踪按钮所在的部分,因此它们是独一无二的。

验证:在应用程序中,确保跟踪正确的数据

即使您有自定义跟踪案例,您仍然不是靠自己:您可以获得与常规 SDK 相同的验证工具。例如,如果您没有应用正确的数据,您会在浏览器控制台中收到如下警告。

在浏览器控制台中验证跟踪数据

在浏览器控制台中验证跟踪数据

这些消息非常具有描述性。这里是说 RootLocationContext 从这个 PressEvent 的位置堆栈中丢失,并带有指向背景文档的链接。这实际上是关键数据点之一,捕获发生此事件的顶级 UI 位置,例如主页。除此之外,还有指向特定于您的平台(在本例中为 React)的文档的链接,这些链接实际上会告诉您如何解决此问题。

任何丢失、重复或冗余的数据都会触发这些类型的消息。

验证:带快照的端到端测试

完成跟踪后,您需要确保在开发应用程序时它不会中断。为此,我们的 SDK 支持使用您已有的任何使用快照的 CI 框架进行测试。例如,我们的网站使用赛普拉斯,下面的屏幕截图显示了我们的一项测试。

使用快照进行端到端测试的验证

使用快照进行端到端测试验证

要添加跟踪仪器的测试,我们只需要添加突出显示的一行。它将生成的跟踪输出与快照中的内容进行比较,快照是在您第一次运行测试时生成的。因此,现在如果您的跟踪发生变化,并且您运行此测试,它将在任何跟踪回归以及您可能引入的任何新问题(例如新碰撞)上失败。

您可以在开发时在本地运行它,也可以在 CI 中运行。例如,我们在每次推送时都使用 GitHub Action 运行我们的测试。

对于后端:使用 Snowplow 或 Postgres

我们也考虑过 Ops :-)。有一个后端 'Collector' 将数据存储在 Postgres 中,例如在本地开发时使用,或者如果您想快速设置。但也与Snowplow完全集成,它也可以与现有的 Snowplow 设置无缝协作。

3) 一个“开放模型中心”:一个带有预建数据模型集合的 python 库

对于每个产品或项目,我们通常会运行许多相同的分析,我们必须从头开始构建:用户数、留存率、会话持续时间等。为了让这件事变得更容易,我们构建了一个 Python 库,其中包含一系列预构建的数据模型,您可以直接下架,例如保留矩阵、漏斗发现、逻辑回归等。查看当前 (并且不断增长)这里的模型列表。

我们将其称为“开放模型中心”,就像分类法一样,我们邀请任何人为其做出贡献,因此它可以涵盖每个人的分析用例。

# show a retention matrix, monthly, with percentages
retention_matrix = modelhub.aggregate.retention_matrix(
    df, 
    time_period='monthly',
    percentage=True, 
    display=True)
retention_matrix.head()

进入全屏模式 退出全屏模式

来自开放模型中心的示例模型,在 Jupyter 笔记本中运行

来自开放模型中心的示例模型,在 Jupyter 笔记本中运行

通过根据开放分析分类法收集数据,您可以重复使用您的模型并与他人共享;您甚至可以在不同的数据集之间共享模型,并在外部跨不同的公司共享模型。

4) Bach:一个 python 库,可以直接在任何数据存储上运行模型和操作

最后一部分是一个名为 Bach 的 python 库,它可以让您在任何数据集上构建数据模型,就像使用 Pandas 一样。不同之处在于,在后台,每个操作都被转换为直接在数据存储上运行的 SQL,因此您可以处理完整的数据集(尽管您也可以使用一个命令在该数据集和示例之间切换)。

# generate descriptive statistics of a DataFrame
# directly queries the database
df.describe(include='all').head()

进入全屏模式 退出全屏模式

我们保持其界面与 Pandas 几乎相同,因此几乎没有学习曲线。除此之外,它还添加了一些操作,可以轻松处理根据开放分析分类法收集的数据,例如从数据库创建一个特定的 DataFrame。

因为它将所有内容都转换为 SQL,所以一旦您完成构建模型,将其投入生产只需将生成的 SQL 导出到任何解决方案,例如 dbt、像 Metabase 这样的 BI 工具等。随着模型的构建直接在完整的数据集上,您可以确保它在生产中也运行相同。

来自模型的 SQL 输出直接在像元数据库这样的 BI 工具中运行

模型的 SQL 输出直接在元数据库等 BI 工具中运行

Bach 的目标是 100% 与数据存储无关,因此您可以将已构建的任何模型无缝切换到另一个数据库。目前我们支持 PostgreSQL、Google BigQuery 和(很快)Amazon Athena。接下来是 Databricks、RedShift、Clickhouse 等。

我们想和项目一起去哪里

我们的梦想是在项目周围拥有一个由开发人员和数据科学家组成的社区,他们为开放分析分类和模型做出贡献,因此它涵盖了任何产品分析用例——从产品分析到 a/b 测试、支付、个性化、等等

最终,我们希望让开发人员和数据科学家的生活(以及我们自己的生活 :))更轻松,并能够将更多时间花在他们喜欢的事情上。

查看并给我们一颗星 :)

希望你喜欢。在 GitHub 上查看该项目,请给我们一颗星,以便其他人也能找到我们https://github.com/objectiv/objectiv-analytics

Logo

华为、百度、京东云现已入驻,来创建你的专属开发者社区吧!

更多推荐