摘要
當用戶已有一個推薦/搜索/廣告引擎服務,暫時不想遷移到PAI-REC,但是又想用PAI-REC的AB實驗平臺的時候,可參考本文完成AB test的系統接入,包括實驗的配置、sdk調用、指標設置和計算等工作。我們提供了python和java兩種語言方便用戶把AB服務集成到自己的系統中。
1. 配置資源
1.1. 進入 PAI-REC平臺 首頁
在 全鏈路服務 中,配置工作空間
配置說明:
PAI平臺 & DataWorks平臺 & MaxCompute工作空間的查詢,可通過 阿里云官網的云服務進入對應的平臺。
對象存儲OSS Bucket: 進入OSS平臺之后,可 先創建Bucket,再進行 PAI-REC平臺的配置
1.2. 進入 MaxCompute 服務
在 項目管理中, 搜索 需要使用的項目。
報錯提示:如果沒有搜索到項目,可嘗試 切換到正確的地域,再進行操作。
點擊管理項目,在相關的資源產品 MaxCompute 中,您需要給PAI-REC服務授予直接訪問、寫入這些資源的權限。
具體詳情可參考:PAI-REC授權
2. 創建場景
2.1. 進入 推薦場景 模塊
創建場景 ----> 自定義場景名稱與場景介紹
場景名稱:推薦設置 能夠說明推薦場景的位置的名稱。
場景介紹:對場景名稱進行補充解釋。
流量配置說明:
適用用戶:不完全使用 PAI-REC系統 推薦請求的用戶。
使用場景:當用戶自己已有推薦系統的時候,在剛開始會把這個場景從切10%到20%的推薦流量給PAI-REC系統。當PAI-REC的推薦效果達到預期之后再逐漸增加流量。
配置方式:
假設用戶有自建的推薦流量 或 使用了第三方的推薦平臺,可以自定義 流量編碼 作為標識流量,后期與PAI-REC平臺的實驗效果進行對比。
用戶需要在日志中埋點標記,建議記錄到exp_id字段,與PAI-REC的埋點要求一致。
3. 配置實驗
概述:根據業界常用a/b test方案設計了實驗室、實驗層、實驗組、實驗,實驗室包含了實驗層,實驗層包含實驗組,實驗組中包含了實驗。具體概念解釋可參考文檔:基本概念
注意:在開始進行實驗之前,需要與相關的產品或者項目經理 確認實驗要驗證的改動點。
以下是實驗配置參考。
3.1. 新建實驗室
選擇對應的環境,與推薦場景
點擊新建實驗室
完成實驗室配置 & 配置說明
配置說明:
實驗室類型
Base實驗室:必須有一個base實驗室,可以沒有非base實驗室。
非Base實驗室:優先匹配非 base 實驗室。當base實驗室的模型比較簡單,而非base實驗室的模型比較復雜的時候,可以設置兩個實驗室。base實驗室也可以完全用一個熱門隨機兜底邏輯來實現。
分桶方式
UID HASH :根據 uid 的 hash 值分桶
UID分桶 :根據 uid 的末尾數字分桶
過濾條件分桶 :kv 表達式分桶,如 gender=man
分桶數量:此實驗室分得的桶數,總數為100
流量分配
分得的桶的編號,可以設置為0-99
分層:實驗層一般設置recall(召回)、filter(過濾)、coarse_rank(粗排)、rank(排序)等
調試用戶:調試用戶可以不經過匹配,直接進入此實驗室
手動輸入:可以輸入多個,以逗號分隔
人群 ID:一組 uid 的集合,需要提前在【人群管理】中創建
3.2. 新建實驗組
在每一個分層下,可以設置多個實驗組。在每一個實驗組里,也可以設置多個實驗。
原因:當有多個 算法工程師做召回或者排序實驗的時候,我們可以通過劃分實驗組,讓他們互相不會干涉。
配置說明:
AA實驗:
實際A/B實驗中可能出現抽樣不均的情況,結果可能會產生偏差,為了保證實驗數據的變化僅僅是實驗本身引起的,可以一次性抽取4,5組流量,選擇任意兩組不加策略空跑,監控核心指標數據,選取兩組數據最接近的進行實驗。用戶可根據需求確定。
配置說明:
人群定向:在調試用戶選定的基礎下,再次對用戶進行篩選。用戶的選擇需要具有代表性,可以使用新老用戶交替來使用實驗,才能反饋出較全面的結果。
調試用戶
灰度測試用戶:將本次實驗首先給這部分灰度測試用戶使用,通過這些測試用戶的使用結果和反饋來修改完善實驗。
人群ID:您可以創建多個人群規則,分別用于不同的實驗,讓指定的人群可以進入到指定的實驗流量當中,達成測試或觀察效果的目的。
若顯示無選項,在實驗平臺下的人群管理中,創建人群即可。
其中人群ID可選擇手動輸入或 Excel導入兩種方式,創建完成后,再操作新增實驗組選擇人群ID。
3.3. 新建實驗
配置說明:
流量分配:對于不同的情況,可以選擇不同的分配流量策略。
不影響用戶體驗:例如UI實驗,文案類實驗等,一般可以均勻分配流量,可以快速得到實驗結論。
不確定性較強的實驗:例如新產品上線,新版本一般需要小流量實驗,盡量減少用戶體驗影響,在允許的時間內得到結論
希望收益最大化的實驗:例如運營活動等等,盡可以將效果最大化,一般需要大流量實驗,留出小部分對照組用于評估ROI
根據以下提示,進入新建實驗配置。
首先,首次新增實驗 默認 基準實驗。
基準實驗:一組用戶會被隨機分到實驗組或對照組,基準實驗作為對照組。設置好之后,點擊保存。
基本實驗:一組用戶會被隨機分到實驗組或對照組,基本實驗作為對照組與基準實驗配置一致,設置好之后,點擊保存。
4. 調用SDK 以及數據埋點
4.1. Python 調用
4.1.1. 環境準備
用戶需要配置 Python 環境,安裝 pycharm 軟件工具??蓞⒖家韵挛臋n:Pycharm及python安裝詳細教程
打開 cmd 命令提示窗口,安裝所需的模塊包,使用以下命令。
pip install https://aliyun-pairec-config-sdk.oss-cn-hangzhou.aliyuncs.com/python/aliyun_pairec_config_python_sdk-1.0.0-py2.py3-none-any.whl
注意:
由于所需的模塊包不是開源,所以在 pycharm 的安裝模塊的方式無法達到效果,可能會導致與正確的模塊包沖突報錯。
如果出現 pip 需要更新的情況,先更新,再安裝模塊。
出現 TimeOUT 超時報錯,是由于網絡不好的原因,重新運行命令。
4.1.2. 進入 pycharm
新建一個運行 python SDK 的 py 程序。
參考以下文檔服務初始化,參考步驟獲取到AccessKeyID 和AccessKeySecret
基于用戶數據的保密性,推薦將 賬號和密碼添加到 系統變量中,使用 python 的 函數方法讀取即可。
# 新建兩個變量,用于存儲ID和密碼
ALIBABA_CLOUD_ACCESS_KEY_ID
ALIBABA_CLOUD_ACCESS_KEY_SECRET
將以下代碼,拷貝到 py 程序中 ,按照下一步提示進行內容替換。
from alibabacloud_tea_openapi.models import Config
from api.api_scene import SceneApiService
from api.api_experiment_room import ExperimentRoomApiService
from api.api_layer import api_layer
from api.api_experiment_group import ExperimentGroupApiService
from api.api_experiment import ExperimentApiService
from client.client import ExperimentClient
from model.experiment import ExperimentContext
from api.api_crowd import CrowdApiService
from alibabacloud_pairecservice20221213.client import Client
from common.constants import ENVIRONMENT_PRODUCT_CONFIG_CENTER
from common.constants import ENVIRONMENT_PREPUB_CONFIG_CENTER
from common.constants import ENVIRONMENT_DAILY_CONFIG_CENTER
import os
# 設置相關信息
instance_id = "實例ID" #填寫:實例ID
region = "地域" #填寫:地域
access_id = os.environ['ALIBABA_CLOUD_ACCESS_KEY_ID']
access_key = os.environ['ALIBABA_CLOUD_ACCESS_KEY_SECRET']
if __name__ == '__main__':
# environment 為枚舉值:ENVIRONMENT_PRODUCT_CONFIG_CENTER(生產),ENVIRONMENT_PREPUB_CONFIG_CENTER(預發),ENVIRONMENT_DAILY_CONFIG_CENTER(日常)
experiment = ExperimentClient(instance_id=instance_id, region=region,access_key_id=access_id,access_key_secret=access_key,environment=ENVIRONMENT_PRODUCT_CONFIG_CENTER)
# 構造請求上下文,其中 filter_params 可為空
experiment_context = ExperimentContext(request_id="請求ID",uid="用戶ID",filter_params={})
# 獲取實驗的匹配結果,需傳入場景名和上下文
experiment_result = experiment.match_experiment("場景名稱", experiment_context)
# 打印匹配結果的信息
print('info', experiment_result.info())
# 打印匹配到的 exp_id
print('exp_id', experiment_result.get_exp_id())
# 這里可以獲取實驗中配置的參數
print(experiment_result.get_experiment_params())
print(experiment_result.get_experiment_params().get('url', 'not exist'))
print(experiment_result.get_experiment_params().get('token', 'not exist'))
配置環境變量報錯:
如果訪問的環境變量不存在,將會報錯,引發一個 KeyError, 解決方法:在運行實例的代碼空白處可右擊,查看運行配置中系統變量是否加載進去了,如果沒有,重啟py項目即可
替換以下用戶信息。(代碼中有提示需要注釋)
在 AI-REC平臺中的基本信息中,可以查看到配置信息:實例ID,地域
request_id & uid: request_id 表示請求 id, 用戶通過自定義邏輯,例如:自增加ID,UUID等邏輯,生成請求ID
在推薦場景欄中,可查看到需要使用的場景名稱。
運行替換后的 py 程序,可獲取到 url 與 token.
4.2. java 調用
package com.aliyun.openservices.pairec;
import com.aliyun.openservices.pairec.api.ApiClient;
import com.aliyun.openservices.pairec.api.Configuration;
import com.aliyun.openservices.pairec.common.Constants;
import com.aliyun.openservices.pairec.model.ExperimentContext;
import com.aliyun.openservices.pairec.model.ExperimentResult;
public class ExperimentTest {
static ExperimentClient experimentClient;
public static void main(String[] args) throws Exception {
String regionId = "地域";
String instanceId = System.getenv("實例ID"); // pai-rec instance id
String accessId = System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"); // aliyun accessKeyId
String accessKey = System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"); // aliyun accessKeySecret
Configuration configuration = new Configuration(regionId, accessId, accessKey, instanceId);
// set experiment environment
configuration.setEnvironment(Constants.Environment_Product_Desc);
ApiClient apiClient = new ApiClient(configuration);
experimentClient = new ExperimentClient(apiClient);
// init client
experimentClient.init();
// set expeirment context
ExperimentContext experimentContext = new ExperimentContext();
experimentContext.setUid("用戶ID");
experimentContext.setRequestId("請求ID");
// match experiment, use scence and experimentContext
ExperimentResult experimentResult = experimentClient.matchExperiment("場景名稱", experimentContext);
// exp id
System.out.println(experimentResult.getExpId());
// exp log info
System.out.println(experimentResult.info());
// get experiment param value
System.out.println(experimentResult.getExperimentParams().getString("rank_version", "not exist"));
System.out.println(experimentResult.getExperimentParams().getString("version", "not exist"));
System.out.println(experimentResult.getExperimentParams().getString("recall", "not exist"));
System.out.println(experimentResult.getExperimentParams().getDouble("recall_d", 0.0));
// get experiment param value by pecific layer name
//通過 特定層的名稱 獲取到實驗參數值
System.out.println(experimentResult.getLayerParams("recall").getString("rank_version", "not exist"));
System.out.println(experimentResult.getLayerParams("rank").getString("version", "not exist"));
}
}
5. 設計實驗指標
由 數據分析師 設計實驗中所需要觀測的一些核心指標,例如:點擊率 或者轉化率等等
5.1. 進入指標管理,數據注冊模塊
將maxcompute表 與a/b test實例關聯,其中數據表名稱為自定義名稱,可以起個與業務相關的表名。
選擇包含必填字段的數據表,詳細格式請參考文檔:數據注冊與字段配置
若用戶沒有包含所有必填字段的 MaxCompute 數據表,則需要新建,以下提供新建步驟參考:
注冊好的數據表會自動出現在列表中,您可以點擊查看字段按鈕查看數據表中的字段,對字段和相關信息進行核對或編輯。
5.1.1. MaxCompute 表中沒有必填字段的情況
需要進入 MaxCompute控制臺,新建符合要求的數據表。
通過 DataWorks ,創建 MaxCompute 實驗報表來源表。
5.2. 配置實驗指標
在 AB 測試過程中,通過實驗指標來度量實驗效果。
實驗指標可分為 2 類:
比例型實驗指標 / 人均值實驗指標
比例型實驗指標(點擊轉化率、次日留存率、CTR-點擊率、CVR-轉化率)
人均值實驗指標 (人均點擊次數、人均下單金額)
核心指標 / 必看指標
核心指標(決策勝出的直接指標)
必看指標(每一個 測試需要觀察的指標,雖然測試功能對這個必看指標沒有直接的因果關系,但是不能對必看指標有顯著負向的影響。)
除了以上類型和用途指標之外,偶爾會對比一些絕對值指標。(只有在進入測試組的用戶數相同的情況下,對比這些絕對值指標才是有意義的)
絕對值指標
總點擊用戶數
總下單金額
5.2.1. 指標項
首先,進入指標配置模塊,選擇指標項配置,選定應用的推薦場景與指標時效。
5.2.1.1. 單維指標
根據一些聚合邏輯(計數,去重計數,加和,取平均數等),生成的基礎指標,例如用戶打開 app 的次數。
例如:我們最終結果需要得到某個網站的點擊率。
點擊率 = 每日點擊數 / 每日訪問量 ,則應當在單維指標中新增每日點擊數和每日訪問量,最終通過在衍生指標進行計算,得到結果。
配置說明:
指標定義中, PV 表示某個網頁的頁面訪問量,UV 表示某個頁面的用戶訪問數(只在用戶首次進入時記錄次數)。
選擇字段后,會生成對應的計算字段命令。
5.2.1.2. 衍生指標
對多個單維指標進行比例等類型的計算。
5.2.2. 指標組
您可以圈選選定場景下的多個指標,作為一個指標組,以指標組為單位進行指標計算等任務。
配置指標組,設定指標圈選范圍。
點擊計算。
6. 計算指標以及生產報表
6.1. 計算指標
在指標配置中,在指標組中點擊計算后,選擇指標。
創建計算任務完成后,可在計算任務模塊中,查看具體進度。
當所有的計算任務跑完之后,狀態顯示為成功。
6.2. 生產報表
進入到實驗平臺中的效果報表模塊,配置參數后,點擊開始分析。
用戶可以在明細數據中,查看對比基準實驗與普通實驗的指標差異;在趨勢分析中,可切換不同的實驗指標查看實驗效果。