すべてのプロダクト
Search
ドキュメントセンター

PolarDB:BSTアルゴリズム

最終更新日:Dec 19, 2024

Behavior Sequence Transformer (BST) アルゴリズムは、強力なTransformerフレームワークを使用して、ユーザーの行動シーケンスから長期の時系列情報をキャプチャします。 BSTアルゴリズムは、行動シーケンスから暗黙の特徴を抽出し、予測を行うことができる。 BSTアルゴリズムは、推奨システムやユーザーライフサイクルバリューマイニングなど、行動シーケンスに関連するビジネスシナリオで大きなメリットをもたらします。

シナリオ

BSTアルゴリズムは、分類および回帰を含む様々な予測タスクをサポートするように設計される。

  • BSTアルゴリズムの入力データは、時系列特徴を有する挙動シーケンスである。 入力データはLONGTEXT形式でデータベースに保存されます。 そのようなデータの例は、過去7日間のユーザのクリック行動である。

  • BSTアルゴリズムは、ユーザーが支払うと予想される金額、ユーザーの解約が発生するかどうか、支払いが行われるかどうかなど、整数または浮動小数点数である予測を出力します。

  • サンプル分類シナリオ:

    新しい有料ユーザーの数と、ゲームシナリオでの通常の支払いと高額のユーザーの潜在的な解約を予測します。 例えば、ゲーム動作シナリオにおける過去14日間の有料ユーザのゲーム内挙動は、BSTアルゴリズムの挙動シーケンス入力に構築される。 BSTアルゴリズムは、行動シーケンスから関連する特徴を抽出して、次の14日間の潜在的なチャーンを予測します。 ユーザーが14日間連続してログオンしない場合、ユーザーは動揺したと見なされます。

  • サンプル回帰シナリオ:

    ゲームシナリオで新しいユーザーの総支出を予測します。 例えば、ゲーム動作シナリオにおける最初の24時間以内の新たなユーザのゲーム内挙動は、BSTアルゴリズムの挙動シーケンス入力に構築される。 BSTアルゴリズムは、行動シーケンスから関連する特徴を抽出して、次の7日間における新規ユーザの総支出を予測する。

制限事項

BSTアルゴリズムは、入力データがクラス分布に関してバランスが取れている場合に効果的に機能します。 多数派クラスのサンプルが少数派クラスの20倍を超える場合など、入力データが不均衡な場合は、PolarDB for AIで提供されるK-meansクラスタリングアルゴリズムを使用して、非支払いグループなどの不均衡なクラスを前処理し、クラス間でバランスの取れた全体的なデータ分布を提供することをお勧めします。 詳細については、「K平均クラスタリングアルゴリズム」をご参照ください。

アルゴリズムモデル作成用データテーブルの形式

必須 / 任意

データ型

説明

uid

VARCHAR

ユーザーIDや製品IDなど、各データエントリのID。

253460731706911258

event_list

LONGTEXT

モデル作成の一連の動作。 シーケンス内の各動作は、一意の整数IDによって表されます。 シーケンス内の動作はコンマ (,) で区切られ、タイムスタンプに基づいて昇順にソートされます。

"[183、238、153、152]"

ターゲット

INT、FLOAT、およびダブル

アルゴリズムモデルのメトリックを測定するラベル。

0

val_row

不可

INT

モデルのオーバーフィットを防ぐために、検証セットを指定できます。 有効な値:

  • 0: 行をモデル作成データとしてラベル付けします。

  • 1: 行をモデル検証データとしてラベル付けします。

説明

ほとんどの場合、このパラメーターは、versionおよびval_flagモデル作成パラメーターと一緒に使用されます。

  • versionパラメーターが1に設定され、val_flagパラメーターが1に設定されている場合、val_rowパラメーターが有効になります。

  • val_flagパラメーターを0に設定し、以前にval_rowパラメーターを定義した場合、val_row=0とマークされたデータのみがモデル作成データとして使用されます。

1

other_feature

不可

INT、FLOAT、DOUBLE、およびLONGTEXT

モデルのその他の機能。 フィーチャーを使用するには、フィーチャーの列名をx_value_colsおよびx_statics_colsモデル作成パラメーターに含めます。

説明
  • other_feature列のデータ型がLONGTEXTの場合、JSON文字列、リスト、コンマ,で区切られた文字列など、さまざまな形式のテキストデータを列に格納できます。

  • other_feature1やother_feature2など、複数のother_featureパラメーターを指定できます。

2

val_x_cols

不可

LONGTEXT

モデル検証とパラメーター調整の一連の動作。 シーケンス内の各動作は、一意の整数IDによって表されます。 シーケンス内の動作はコンマ (,) で区切られ、タイムスタンプに基づいて昇順にソートされます。

説明

このパラメーターは、versionパラメーターを0に設定した場合にのみ有効になります。 詳細については、このトピックのversionパラメーターの説明をご参照ください。

"[183、238、153、152]"

val_y_cols

不可

INT、FLOAT、およびダブル

パラメーターの調整に使用される動作シーケンスのラベル。

説明

このパラメーターは、versionパラメーターを0に設定した場合にのみ有効になります。 詳細については、このトピックのversionパラメーターの説明をご参照ください。

1

CREATE MODELステートメントを実行して、アルゴリズムモデルを作成できます。 次の表に、CREATE modelステートメントのmodel_parameterパラメーターの設定オプションを示します。

パラメーター

説明

model_task_type

タスクタイプ。 有効な値:

  • 分類 (デフォルト)

  • 回帰

batch_size

バッチサイズ。 バッチサイズが小さいと、モデルのオーバーフィットのリスクが高まる可能性があります。 デフォルト値: 16。

window_size

動作IDの埋め込みエンコードに使用されます。 値は、動作IDの最大値に1を加えた値以上である必要があります。 それ以外の場合、解析エラーが発生します。

sequence_length

アルゴリズムモデルの計算に含まれる動作シーケンスの長さ。 値は3000を超えてはなりません。 window_sizeパラメーターが900より大きい場合は、sequence_lengthパラメーターを大きすぎる値に設定しないでください。

success_id

モデルが予測を行う動作のID。

max_epoch

反復の最大数。 デフォルト値:1

learning_rate

学習率。 デフォルト値: 0.0002

損失

損失関数。 有効な値:

  • CrossEntropyLoss (デフォルト): バイナリ分類の問題に使用されます。

  • mse: 回帰タスクに使用されます。

  • mae: 回帰タスクに使用されます。

  • msle: 回帰タスクに使用されます。

val_flag

各モデルの反復後に検証を実行するかどうかを指定します。 有効な値:

  • 0 (デフォルト): 各モデルの反復後に検証を実行しません。 モデル作成データテーブルでval_metricパラメーターおよびval_rowパラメーターを指定する必要はありません。 最終ラウンドからのアルゴリズムモデルが保存される。

  • 1: 各モデル反復後に検証を実行します。 モデル作成データテーブルでval_metricパラメーターを指定し、val_rowパラメーターを指定する必要があります。 検証メトリックに基づいて最高のパフォーマンスを持つアルゴリズムモデルが保存されます。

val_metric

検証に使用されるメトリック。 有効な値:

  • loss (デフォルト): モデル作成時の損失メトリックと同じメトリック。 このメトリックは、分類および回帰タスクに使用できます。

  • f1score: 精度とリコールの調和平均。 このメトリックは、分類タスクに使用できます。

  • r2_score: 決定係数。 このメトリックは、回帰タスクに使用できます。

  • mse: 平均二乗誤差。 このメトリックは、回帰タスクに使用できます。

  • mape: 平均絶対パーセント誤差。 このメトリックは、回帰タスクに使用できます。

  • mape_plus: 正のラベルのエラーのみを測定するMAPEのバリアント。 このメトリックは、回帰タスクに使用できます。

auto_data_statics

統計フィーチャを自動的に生成するかどうかを指定します。 有効な値:

  • on: シーケンス内のIDの発生をカウントし、統計的特徴を生成します。

  • off (デフォルト): シーケンス内のIDの発生をカウントしません。

auto_heads

マルチアテンションヘッダーの数を自動で指定するかどうかを指定します。 有効な値:

  • 1 (デフォルト): マルチアテンションヘッダーの数を自動的に指定します。

  • 0: マルチアテンションヘッダーの数を手動で指定します。

説明
  • このパラメーターを1に設定すると、ビデオメモリのリスクが不十分になる可能性があります。

  • int ( sqrt \{window\_size \}) + int ( sqrt \{sequence\_length\}) + 2の計算結果が素数でないことを確認してください。

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文字列、リスト、文字列など、さまざまな形式のテキストデータをLONGTEXT列に格納できます。 JSON文字列では、キーと値のペアの値が統計的特徴として使用されます。 例: {"money":30,"level":21}。コンマ(,) で区切られたリストまたは文字列の場合、値はINTまたはフロート。例:

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

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

x_seq_cols

特定の列をシーケンス機能として指定します。

説明
  • 例: x_seq_cols='event_list'

  • 各列のデータ型はLONGTEXTです。 コンマ (,) で区切られたリストや文字列など、さまざまな形式のテキストデータを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

モデル作成の一連の動作。 シーケンス内の各動作は、一意の整数IDによって表されます。 シーケンス内の動作はコンマ (,) で区切られ、タイムスタンプに基づいて昇順にソートされます。

"[183、238、153、152]"

ターゲット

INT、FLOAT、およびダブル

アルゴリズムモデルのエラーを計算するために使用されるサンプルのラベル。

0

other_feature

不可

INT、FLOAT、DOUBLE、およびLONGTEXT

モデルのその他の機能は、モデル作成データテーブルと同じです。 フィーチャーを使用するには、フィーチャーの列名をx_value_colsおよびx_statics_colsモデル作成パラメーターに含めます。

説明
  • other_feature列のデータ型がLONGTEXTの場合、JSON文字列、リスト、コンマ,で区切られた文字列など、さまざまな形式のテキストデータを列に格納できます。

  • other_feature1やother_feature2など、複数のother_featureパラメーターを指定できます。

2

EVALUATEステートメントを実行して、アルゴリズムモデルを評価できます。 次の表に、EVALUATEステートメントのmetricsパラメーターの設定オプションを示します。

パラメーター

説明

メトリクス

検証に使用されるメトリック。 有効な値:

  • acc: 精度。 このメトリックは、分類タスクに使用できます。

  • auc: ROC曲線の下の面積。 このメトリックは、分類タスクに使用できます。

  • Fscore: 精度とリコールの調和平均。 このメトリックは、分類タスクに使用できます。

  • r2_score: 決定係数。 このメトリックは、回帰タスクに使用できます。

  • mse: 平均二乗誤差。 このメトリックは、回帰タスクに使用できます。

  • mape: 平均絶対パーセント誤差。 このメトリックは、回帰タスクに使用できます。

  • mape_plus: 正のラベルのエラーのみを測定するMAPEのバリアント。 このメトリックは、回帰タスクに使用できます。

アルゴリズムモデル予測用データテーブルの形式

必須 / 任意

データ型

説明

uid

VARCHAR(255)

ユーザーIDや製品IDなど、各データエントリのID。

123213

event_list

LONGTEXT

モデル作成の一連の動作。 シーケンス内の各動作は、一意の整数IDによって表されます。 シーケンス内の動作はコンマ (,) で区切られ、タイムスタンプに基づいて昇順にソートされます。

"[183、238、153、152]"

other_feature

不可

INT、FLOAT、DOUBLE、およびLONGTEXT

モデルのその他の機能は、モデル作成データテーブルと同じです。 フィーチャーを使用するには、フィーチャーの列名をx_value_colsおよびx_statics_colsモデル作成パラメーターに含めます。

説明
  • other_feature列のデータ型がLONGTEXTの場合、JSON文字列、リスト、コンマ,で区切られた文字列など、さまざまな形式のテキストデータを列に格納できます。

  • other_feature1やother_feature2など、複数のother_featureパラメーターを指定できます。

2

説明

分類タスクは、以下の例で使用される。 タスクの種類の詳細については、このトピックのmodel_task_typeパラメーターの説明をご参照ください。

モデルの作成とオフライン学習の実装

/*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);
説明

sequential_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');
説明

sequential_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は、アルゴリズムモデル予測のサンプルデータテーブル名です。