ringierimu/experiments

v0.8.2 2023-05-31 08:40 UTC

README

Tests Lint Code Base

关于项目

一个 Laravel 扩展包,用于确定用户的实验组并在 Google Tag Manager 中跟踪该用户组

先决条件

  • Laravel 7+

安装

在项目路由中运行以下命令

composer require ringierimu/experiments

所有依赖项都已下载后,通过运行以下命令安装实验包

php artisan experiments:install

这将导入 config/experiments.php 文件到您的应用程序中

更新您的配置 config/experiments.php 以包括您的运行实验。例如,对于 recommend 实验,您的配置将如下所示

<?php

return [
    'recommend' => [
        'control' => 'personalize',
        'test' => 'alice',
    ],
];

数组键是您的运行实验,数组值是 varaints(可选)。如果您想将特定的用户组映射到一个键,例如在推荐引擎的情况下,您可以映射用户组到引擎变体。如果您不需要变体,只需保留一个空数组即可

return [
    'recommend' => [],
]

用法

添加中间件

将此添加到您的 web Http Kernel 中间件组。

 protected $middlewareGroups = [
        'web' => [
            Ringierimu\Experiments\Http\Middleware\SetExperiment::class

这将确保用户的 cookie 设置了正确的实验组。

检查实验组

在运行实验时,您需要向用户提供特定的体验。要检查用户是否在 testcontrol 群组中,请使用助手函数 SdcExperiments::getOrStartExperiment

if (SdcExperiments::getOrStartExperiment('my-experiment') == 'test') {
    // the test experience
} else {
    // the control experience OR the experiment is not running
}

跟踪用户的组

在您的跟踪数据层中,您需要发送一个额外的维度来表示用户的实验组。为此,请使用 track_experiments 助手。

SdcExperiments::googleTagManagerSetTrackingVars();

这将发送实验数据到 GTM 进行报告。

可选:设置 Google Optimize 服务器端跟踪

作为额外的功能,您还可以通过 Google Optimize 的服务器端跟踪配置跟踪您的实验。有关所需的实验设置的更多信息,请参阅官方 Google Optimize 文档

假设您已遵循步骤并设置了实验并准备运行,现在您可以定义您设置的 A/B 测试应该如何分组和报告。

目前每个 A/B 测试仅支持 2 个桶,0=控制,1=测试

场景 - A/B 测试

config/experiments.php 中定义一个新的组,并使用可读的键(这可以与您用于 A/B 测试本身的键相同)

[
    'tests' => [
        'ab_test' => [],
    ],
    'groups' => [
        'ab_test_nice_group_name' => [
            'id' => 'GOOGLE_OPTIMIZE_EXPERIMENT_ID',
            'variations' => [
                'ab_test',
            ],
        ],
    ],
]

假设用户在控制组中,为此创建的 GTM 跟踪变量将如下所示(其他变量省略以保持清晰)

window.dataLayer = [
    {
        "experiments": {
            "ab_test": "control"
        },
        "ga_optimize_exp": "GOOGLE_OPTIMIZE_EXPERIMENT_ID.0",
        "experiments_running": "ab_test_nice_group_name.0"
    }
];

场景 - 多变体测试

在之前的示例基础上,假设我们想要运行一个多变量测试(同时运行多个具有类似或相关更改的 A/B 测试)

[
    'tests' => [
        'ab_test' => [],
        'large_font' => [],
        'obnoxious_colours' => [],
    ],
    'groups' => [
        'ab_test_nice_group_name' => [
            'id' => 'GOOGLE_OPTIMIZE_EXPERIMENT_ID',
            'variations' => [
                'ab_test',
            ],
        ],
        'style_test' => [
            'id' => 'MULTIVARIANT_GOOGLE_OPTIMIZE_EXPERIMENT_ID',
            'variations' => [
                'large_font',
                'obnoxious_colours',
            ],
        ],
    ],
]

假设用户对于 ab_testcontrol 组中,对于 large_fonttest 组中,对于 obnoxious_colourscontrol 组中
为此创建的 GTM 跟踪变量将如下所示(其他变量省略以保持清晰)

window.dataLayer = [
    {
        "experiments": {
            "ab_test": "control",
            "large_font": "test",
            "obnoxious_colours": "control"
        },
        "ga_optimize_exp": "GOOGLE_OPTIMIZE_EXPERIMENT_ID.0!MULTIVARIANT_GOOGLE_OPTIMIZE_EXPERIMENT_ID.1-0",
        "experiments_running": "ab_test_nice_group_name.0!style_test.1-0"
    }
];

GTM 设置

GA 需要设置数据层中的 ga_optimize_exp 的值到 exp 字段。直接运行 GA 将看起来像这样 ga('set', 'exp', 'GOOGLE_OPTIMIZE_EXPERIMENT_ID.0!MULTIVARIANT_GOOGLE_OPTIMIZE_EXPERIMENT_ID.1-0'); 通过 GTM,在 Google Analytics 设置变量中,在 Fields to Set 下,将字段名 exp 设置为数据层变量 ga_optimize_exp 的值
推送到dataLayer的其他变量是方便变量,您可以使用它们来细分用户流量、调用额外的GTM脚本等。通过experiments.obnoxious_colours(例如)访问特定实验的值。