A/B テストの統合

-
図中の「クライアント」は、お客様のクライアント側のサービスを指します。PAI-Rec コンソールで実験を設定できます。
-
PAI-Rec エンジンを統合すると、サービスは起動時に実験設定を自動的に取得します。推薦リクエストを受信すると、SDK はリクエストを実験にマッチングさせ、対応する実験パラメーターを取得します。エンジンはこれらのパラメーターを使用して、異なるリコール戦略の使用や、異なるランキングモデルの呼び出しなど、動作を変更します。
-
PAI-Rec は、設定用に事前定義された実験パラメーターを提供します。指定されたとおりの正確なパラメーター名を使用してください。そうしないと、実験がマッチした場合でも、エンジンはパラメーターを見つけることができません。
|
パラメーター |
タイプ |
説明 |
例 |
|
default.RecallNames |
JSON 配列 |
使用するすべてのリコール戦略のリスト。 |
{"default.RecallNames":[ "HomepageEtrecRecall", "HomepageDssmRecall"]} |
|
recall.[特定のリコール名] |
JSON オブジェクト |
新しいリコールの設定。 |
{"recall.MyRecall":{"version":"v2"}} |
|
filterNames |
JSON 配列 |
フィルタープロセスのリスト。 |
{"filterNames":["UniqueFilter", "UserExposureFilter"]} |
|
default.SortNames |
JSON 配列 |
再ランキングプロセスのリスト。 |
{"default.SortNames":["ItemRankScore"]} |
|
rankconf |
recconf.RankConfig |
ランキングアルゴリズムの設定。 |
{"rankconf":{"RankAlgoList":["pai_homepage_fm"],"RankScore":"${pai_homepage_fm}"}} |
|
features.scene.name |
string |
特徴量を読み込むための推薦シナリオ名。 |
"homepagetf" |
|
generalRankConf |
recconf.GeneralRankConfig |
粗いランキングの設定。ユーザー特徴量の取得と RankConf アルゴリズムの設定が含まれます。詳細については、「粗いランキングの設定」をご参照ください。 |
{"generalRankConf":{"FeatureLoadConfs":[{"FeatureDaoConf":{}}],"RankConf":{},"ActionConfs":[]}} |
|
coldStartGeneralRankConf |
recconf.ColdStartGeneralRankConfig |
コールドスタート時の粗いランキングの設定。詳細については、「粗いランキングの設定」をご参照ください。 |
{"coldStartGeneralRankConf":{"FeatureLoadConfs":[{"FeatureDaoConf":{}}],"RankConf":{},"ActionConfs":[]}} |
|
coldStartRankConf |
recconf.ColdStartRankConfig |
コールドスタートシナリオのランキング段階で用いるランキングアルゴリズムを指定します。 |
{"coldStartRankConf":{"RecallName":"ColdStartRecall", "AlgoName":"linucb"}} |
func (c *HomeFeedController) makeRecommendContext() {
c.context = context.NewRecommendContext()
c.context.Size = c.param.Limit
c.context.Param = &c.param
c.context.RecommendId = c.RequestId
c.context.Config = recconf.Config
c.context.Debug = c.param.Debug
abcontext := model.ExperimentContext{
Uid: c.param.DistinctId,
RequestId: c.RequestId,
FilterParams: map[string]interface{}{},
}
if abtest.GetExperimentClient() != nil {
c.context.ExperimentResult = abtest.GetExperimentClient().MatchExperiment(c.param.SceneId, &abcontext)
log.Info(c.context.ExperimentResult.Info())
}
}
-
コード内で実験パラメーターを調整するには、
RecommendContextオブジェクト内のcontext.ExperimentResultオブジェクトからパラメーターを取得します。
count := r.recallCount
if context.ExperimentResult != nil {
count = context.ExperimentResult.GetLayerParams("").GetInt("recall.base.count", count)
}
fmt.Println("test count", count)
GetLayerParams メソッドは、特定のレイヤーから実験パラメーターを取得します。その後、Get、GetInt、GetFloat、または GetInt64 などのメソッドを使用して、特定のパラメーターにアクセスできます。これらのメソッドでは、最初の引数にパラメーター名を、2番目の引数にパラメーターが見つからない場合に返されるデフォルト値を指定します。
動的パラメーターの使用
実験パラメーターと同様に、カスタムパラメーターを使用して、実行時にエンジンの動作を変更することができます。これにより、サービスを再起動することなく、動的にサービスを変更できます。
左側のナビゲーションペインで、[system configuration] > [parameter management] をクリックします。現在の開発環境 (例: [Daily]) と推薦シナリオ (例: [HomePage]) を選択します。次に、[Create Parameter] をクリックしてカスタムパラメーターを追加します。たとえば、名前が custom_param で値が custom のパラメーターを作成します。
// 推薦シナリオ名を取得します。
scene := context.GetParameter("scene").(string)
// シナリオのパラメーターリストを取得し、Get* 関数で特定のパラメーター値を取得します。
count := abtest.GetParams(scene).GetInt("count", 100)
fmt.Println("recall count:", count)