全部產品
Search
文件中心

PolarDB:BST演算法

更新時間:Nov 08, 2024

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

為了避免模型過擬合,您可以指定驗證集。取值如下:

  • 0:表示標記訓練資料。

  • 1:表示標記驗證資料。

說明

通常會和訓練參數配置中的version和val_flag配合使用,配合情況如下:

  • version=1且val_flag=1時,val_row會生效。

  • val_flag=0,如已聲明val_row,則只取val_row=1的資料作為訓練資料。

1

other_feature

可選

INT、FLOAT 、DOUBLE、LONGTEXT

模型的其他特徵,與訓練資料表保持一致。在使用時需要在訓練參數x_value_cols和x_statics_cols的配置中包含所需特徵列名。

說明
  • other_feature為LONGTEXT類型時,文本內支援格式:JSON、列表,或者以,分割的字串。

  • 可以填寫多個other_feature參數,例如:other_feature1、other_feature2等。

2

val_x_cols

可選

LONGTEXT

驗證資料集的event_list列,資料內容類別似event_list列,用於演算法模型調優參數的行為序列,其中資料用INT類型標記每一種行為ID,多個ID使用逗號(,)分隔,並按照ID對應的時間戳記大小升序排序。

說明

該參數僅在version=0時生效。更多資訊,請參見Version

"[183, 238, 153, 152]"

val_y_cols

可選

INT、FLOAT 、DOUBLE

用於調優參數的行為序列。

說明

該參數僅在version=0時生效。更多資訊,請參見Version

1

下表中的參數為建立演算法模型CREATE MODEL文法中model_parameter參數的取值,您可以根據當前需求選擇對應的參數。

參數名稱

參數說明

model_task_type

任務類型。取值如下:

  • classification(預設值):分類任務。

  • regression:迴歸任務。

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

學習任務和對應的學習目標,取值如下:

  • CrossEntropyLoss(預設值):交叉熵,用於二分類問題。

  • mse:均方誤差,用於迴歸任務。

  • mae:平均絕對誤差,用於迴歸任務。

  • msle:均方對數誤差,用於迴歸任務。

val_flag

標記在訓練過程中每一輪迭代後是否進行驗證,取值如下:

  • 0(預設值):不驗證,無需填寫val_metric和訓練表中的val_row,儲存訓練最後一輪演算法模型。

  • 1:訓練時驗證,val_metric和訓練表中的val_row為必選參數,儲存驗證指標最佳的一輪演算法模型。

val_metric

驗證指標,取值如下:

  • loss(預設值):與訓練時loss相同,用於分類及迴歸任務。

  • f1score:精確率和召回率的調和平均數,適用於分類任務。

  • r2_score:決定係數,適用於迴歸任務。

  • mse:均方誤差,適用於迴歸任務。

  • mape:平均絕對百分比誤差,適用於迴歸任務。

  • mape_plus:只衡量正數標籤的mape指標,適用於迴歸任務。

auto_data_statics

是否自動添加統計特徵的開關,取值如下:

  • on:開啟,會對序列的ID進行統計次數,並產生統計特徵。

  • off(預設值):不對序列的ID進行統計。

auto_heads

是否自動進行多注意力頭數量設定,取值如下:

  • 1(預設值):自動。

  • 0:手動。

說明
  • 該參數的值為1時,表示有一定機率出現顯存不足的風險。

  • 原則上該參數的值需要保持不為質數。

num_heads

當auto_heads等於0時,則需要設定該參數,預設值為4。

x_value_cols

用於指定列作為數值類離散特徵。

說明
  • 使用舉例:x_value_cols='num_events, max_level, max_viplevel',表示num_events, max_level, max_viplevel這三列是作為數值類離散特徵。

  • 每一列取實值型別需是整數型或者浮點數型。

x_statics_cols

用於指定列作為統計類特徵。

說明
  • 使用舉例:x_statics_cols='stats_item_list, stats_event_list',表示stats_item_list, stats_event_list這兩列作為統計類特徵。

  • 每一列取實值型別是LONGTEXT,文本內支援格式:JSON、列表,或者以,分割的字串。其中,JSON中的資料,會把Key-Value對中的Value作為統計特徵。JSON的形式可以是{"money":30,"level":21}。如果是清單類型或者以,分割的字串類型,每個Value需要是INT或者FLOAT 。例如:

    • stats_event_list="[1,2,4,23,2]"

    • stats_item_list="232,23123,232,2"

x_seq_cols

用於指定列作為序列特徵。

說明
  • 使用舉例:x_seq_cols='event_list'

  • 每一列取實值型別是LONGTEXT,文本內支援格式:列表,或者以,分割的字串。例如:"[183, 238, 153, 152]"

version

指定模型版本。取值如下:

  • 0(預設值):舊版本,訓練資料表中val_x_cols、val_y_cols生效,val_row不生效。

  • 1:新版本。推薦用新版本。

data_normalization

用於指定x_value_cols的指定列資料是否進行歸一化操作。取值如下:

  • 0(預設值):不進行歸一化操作。

  • 1:進行歸一化操作。

remove_seq_adjacent_duplicates

用於對x_seq_cols的資料進行去重操作,取值如下:

  • off(預設值):不進行去重操作。

  • on:進行去重操作。

演算法模型評估資料表的格式

列名稱

必選/可選

列類型

列描述

樣本

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的配置中包含所需特徵列名。

說明
  • other_feature為LONGTEXT類型時,文本內支援格式:JSON、列表,或者以,分割的字串。

  • 可以填寫多個other_feature參數,例如:other_feature1、other_feature2等。

2

下表中的參數為演算法模型評估EVALUATE文法中metrics參數的取值,您可以根據當前需求選擇對應的評估指標參數。

參數名稱

參數說明

metrics

驗證指標,取值如下:

  • acc:準確率,適用於分類任務。

  • auc:表示ROC曲線與座標軸圍成的面積,適用於分類任務。

  • Fscore:精確率和召回率的調和平均數,適用於分類任務。

  • r2_score:決定係數,適用於迴歸任務。

  • mse:均方誤差,適用於迴歸任務。

  • mape:平均絕對百分比誤差,適用於迴歸任務。

  • mape_plus:只衡量正數標籤的mape指標,適用於迴歸任務。

演算法模型預測資料表的格式

列名稱

必選/可選

列類型

列描述

樣本

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的配置中包含所需特徵列名。

說明
  • other_feature為LONGTEXT類型時,文本內支援格式:JSON、列表,或者以,分割的字串。

  • 可以填寫多個other_feature參數,例如:other_feature1、other_feature2等。

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為模型預測資料表。