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