ringierimu / experiments
SDC 实验包 🧪
Requires
- php: ^7.2|^8.0
- ext-json: *
- illuminate/support: ^6|^7|^8|^9|^10.0
- spatie/laravel-googletagmanager: ^2.5
Requires (Dev)
- mockery/mockery: ^1.5
- orchestra/testbench: ^7.6|^8.0
- phpunit/phpunit: ^9.5
README
关于项目
一个 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 设置了正确的实验组。
检查实验组
在运行实验时,您需要向用户提供特定的体验。要检查用户是否在 test
或 control
群组中,请使用助手函数 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_test
在 control
组中,对于 large_font
在 test
组中,对于 obnoxious_colours
在 control
组中
为此创建的 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
(例如)访问特定实验的值。