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
为模型预测数据表。