BST演算法採用了強大的Transformer架構,用於捕獲使用者行為的資料中的長期時序資訊。BST能夠提取行為序列中的隱式特徵,並對未來的目標結果進行預測,在與行為序列相關的業務情境中(例如推薦、使用者生命週期價值挖掘等)發揮出明顯的優勢。
使用情境
BST演算法能夠支援包括分類、迴歸在內的多種預測情境:
輸入的通常是滿足時序特徵的行為序列,以
LONGTEXT
類型儲存在資料庫,例如使用者最近七天的點擊行為等。輸出的通常是預測的目標,整數型或者浮點型,如付費金額、是否流失、是否付費等。
分類情境樣本:
遊戲情境內新使用者付費預測、一般付費使用者和大額付費使用者流失預測。例如在某遊戲營運情境中,將付費使用者最近14天的所有的遊戲內行為,構建為BST演算法的輸入行為序列,該演算法會提取行為序列中的表現特徵,以此來預測未來14天是否會發生流失現象(連續14天不登入即為流失)。
迴歸情境樣本:
遊戲情境內新使用者付費金額預測。例如在某遊戲營運情境中,將新使用者24小時內所有遊戲行為,構建為BST演算法的輸入行為序列,該演算法會提取行為序列中的表現特徵,以此來預測新使用者未來7天的消費總額。
使用限制
BST演算法模型的輸入資料適用於樣本較為均衡的情況。若樣本比例不均衡,例如多數類比少數類多20倍以上,建議參考PolarDB for AI中K-Means演算法,預先對造成不均衡的類別(例如不付費群體)進行聚類等預先處理,使得資料類別分布更均勻。更多資訊,請參見K均值聚類演算法(K-Means)。
演算法模型訓練資料表的格式
列名稱 | 必選/可選 | 列類型 | 列描述 | 樣本 |
uid | 必選 | VARCHAR | 標記每條待預測資料的ID(使用者ID、商品ID等)。 | 253460731706911258 |
event_list | 必選 | LONGTEXT | 輸入表中用於訓練的行為序列,序列中資料用逗號(,)分隔,序列內資料用INT類型標記每一種行為ID,序列內資料按照其對應的時間戳記大小升序排序。 | "[183, 238, 153, 152]" |
target | 必選 | INT、FLOAT 、DOUBLE | 衡量演算法模型指標的樣本標籤。 | 0 |
val_row | 可選 | INT | 為了避免模型過擬合,您可以指定驗證集。取值如下:
說明 通常會和訓練參數配置中的version和val_flag配合使用,配合情況如下:
| 1 |
other_feature | 可選 | INT、FLOAT 、DOUBLE、LONGTEXT | 模型的其他特徵,與訓練資料表保持一致。在使用時需要在訓練參數x_value_cols和x_statics_cols的配置中包含所需特徵列名。 說明
| 2 |
val_x_cols | 可選 | LONGTEXT | 驗證資料集的event_list列,資料內容類別似event_list列,用於演算法模型調優參數的行為序列,其中資料用INT類型標記每一種行為ID,多個ID使用逗號(,)分隔,並按照ID對應的時間戳記大小升序排序。 說明 該參數僅在 | "[183, 238, 153, 152]" |
val_y_cols | 可選 | INT、FLOAT 、DOUBLE | 用於調優參數的行為序列。 說明 該參數僅在 | 1 |
下表中的參數為建立演算法模型CREATE MODEL
文法中model_parameter
參數的取值,您可以根據當前需求選擇對應的參數。
參數名稱 | 參數說明 |
model_task_type | 任務類型。取值如下:
|
batch_size | batch長度,其值越小表示模型越容易過擬合。預設值為16。 |
window_size | 用於對行為ID進行嵌入編碼,不能小於行為ID最大值加1,否則會解析錯誤。 |
sequence_length | 行為序列在演算法模型中參與運算的長度,不大於3000,如果window_size大於900,則需調低sequence_length取值。 |
success_id | 待預測的行為ID。 |
max_epoch | 最大迭代次數,預設值為1次。 |
learning_rate | 學習率,預設值為0.0002。 |
loss | 學習任務和對應的學習目標,取值如下:
|
val_flag | 標記在訓練過程中每一輪迭代後是否進行驗證,取值如下:
|
val_metric | 驗證指標,取值如下:
|
auto_data_statics | 是否自動添加統計特徵的開關,取值如下:
|
auto_heads | 是否自動進行多注意力頭數量設定,取值如下:
說明
|
num_heads | 當auto_heads等於0時,則需要設定該參數,預設值為4。 |
x_value_cols | 用於指定列作為數值類離散特徵。 說明
|
x_statics_cols | 用於指定列作為統計類特徵。 說明
|
x_seq_cols | 用於指定列作為序列特徵。 說明
|
version | 指定模型版本。取值如下:
|
data_normalization | 用於指定x_value_cols的指定列資料是否進行歸一化操作。取值如下:
|
remove_seq_adjacent_duplicates | 用於對x_seq_cols的資料進行去重操作,取值如下:
|
演算法模型評估資料表的格式
列名稱 | 必選/可選 | 列類型 | 列描述 | 樣本 |
uid | 必選 | VARCHAR(255) | 標記每條待預測資料的ID(使用者ID、商品ID等)。 | 123213 |
event_list | 必選 | LONGTEXT | 輸入表中用於訓練的行為序列,序列中資料用逗號(,)分隔,序列內資料用INT類型標記每一種行為ID,序列內資料按照其對應的時間戳記大小升序排序。 | "[183, 238, 153, 152]" |
target | 必選 | INT、FLOAT 、DOUBLE | 計算當前演算法模型誤差的樣本標籤。 | 0 |
other_feature | 可選 | INT、FLOAT 、DOUBLE、LONGTEXT | 模型的其他特徵,與訓練資料表保持一致。在使用時需要在訓練參數x_value_cols和x_statics_cols的配置中包含所需特徵列名。 說明
| 2 |
下表中的參數為演算法模型評估EVALUATE
文法中metrics
參數的取值,您可以根據當前需求選擇對應的評估指標參數。
參數名稱 | 參數說明 |
metrics | 驗證指標,取值如下:
|
演算法模型預測資料表的格式
列名稱 | 必選/可選 | 列類型 | 列描述 | 樣本 |
uid | 必選 | VARCHAR(255) | 標記每條待預測資料的ID(使用者ID、商品ID等)。 | 123213 |
event_list | 必選 | LONGTEXT | 輸入表中用於訓練的行為序列,序列中資料用逗號(,)分隔,序列內資料用INT類型標記每一種行為ID,序列內資料按照其對應的時間戳記大小升序排序。 | "[183, 238, 153, 152]" |
other_feature | 可選 | INT、FLOAT 、DOUBLE、LONGTEXT | 模型的其他特徵,與訓練資料表保持一致。在使用時需要在訓練參數x_value_cols和x_statics_cols的配置中包含所需特徵列名。 說明
| 2 |
樣本
以下樣本均以分類任務為例。更多任務類型,請參見模型任務類型。
模型建立與模型離線訓練
/*polar4ai*/CREATE MODEL sequential_bst WITH (
model_class = 'bst',
x_cols = 'event_list,other_feature1',
y_cols='target',
model_parameter=(
batch_size=128,
window_size=900,
sequence_length=3000,
success_id=900,
max_epoch=2,
learning_rate=0.0008,
val_flag=1,
x_seq_cols='event_list',
x_value_cols='other_feature1',
val_metric='f1score',
auto_data_statics='on',
data_normalization=1,
remove_seq_adjacent_duplicates='on',
version=1)) AS (SELECT * FROM seqential_train);
其中seqential_train
為模型訓練資料表。
模型評估
/*polar4ai*/SELECT uid,target FROM evaluate(MODEL sequential_bst,
SELECT * FROM seqential_eval) WITH
(x_cols = 'event_list,other_feature1', y_cols='target', metrics='Fscore');
其中seqential_eval
為模型評估資料庫表。
模型預測
/*polar4ai*/SELECT uid,target FROM PREDICT(MODEL sequential_bst, SELECT * FROM seqential_test) WITH
(x_cols= 'event_list,other_feature1',mode='async');
其中seqential_test
為模型預測資料表。