摘要
當使用者已有一個推薦/搜尋/廣告引擎服務,暫時不想遷移到PAI-Rec,但是又想用PAI-Rec的AB實驗平台的時候,可參考本文完成AB test的系統接入,包括實驗的配置、SDK調用、指標設定和計算等工作。我們提供了Python和Java兩種語言方便使用者把AB服務整合到自己的系統中。
1. 配置資源
1.1. 進入 PAI-Rec平台首頁
在全鏈路服務中,配置工作空間。
配置說明:
PAI平台&DataWorks平台&MaxCompute工作空間的查詢,可通過阿里雲官網的雲端服務進入對應的平台。
Object Storage Service Bucket:進入OSS平台之後,可先建立Bucket,再進行PAI-Rec平台的配置。
1.2. 進入 MaxCompute 服務
進入MaxCompute控制台,在專案管理中,搜尋需要使用的專案。
報錯提示:如果沒有搜尋到專案,可嘗試切換到正確的地區,再進行操作。
點擊管理專案,在相關的資源產品 MaxCompute 中,您需要給PAI-Rec服務授予直接存取、寫入這些資源的許可權。
具體詳情可參考:開通及服務初始化
2. 建立情境
建立情境 ----> 自訂情境名稱與情境介紹
情境名稱:推薦設定 能夠說明推薦情境的位置的名稱。
情境介紹:對情境名稱進行補充解釋。
流量配置說明:
適用使用者:不完全使用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 軟體工具。可參考以下文檔: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 資料表,則需要建立,以下提供建立步驟參考:
在MaxCompute表頁簽,單擊新增数据表。
填寫選定的專案、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. 生產報表
進入到實驗平台中的效果報表模組,配置參數後,點擊開始分析。
使用者可以在詳細資料中,查看對比基準實驗與普通實驗的指標差異;在趨勢分析中,可切換不同的實驗指標查看實驗效果。