このトピックでは、PolarDB for AI の BST アルゴリズムを使用して、ゲームにおけるユーザーの行動を予測する方法について説明します。
準備
PolarDB for AI 機能を使用するには、クラスターエンドポイントを使用してクラスターに接続します。詳細については、「クラスターエンドポイントを使用してクラスターに接続して PolarDB for AI 機能を使用する」をご参照ください。
概要
CPU のみの計算ノードは比較的低速でタスクを処理するため、GU100 を含むノード仕様を選択することをお勧めします。
ゲームユーザーの行動分析用に設計されたモデルは、通常、起動時に次の手順を実行します。
データ処理:生のユーザー行動データは、アルゴリズムモデルで使用できるデータに処理されます。
モデルの開発と起動:
モデル構築:PolarDB for AI のモデリング機能(特に BST)とユーザーデータを使用して、カスタマーシナリオの要件を満たす高精度のアルゴリズムモデルをトレーニングします。
モデルの微調整:データサイズ、正と負のサンプル比率を調整し、PolarDB for AI のモデルパラメーターを使用して、モデルを最適化します。
モデル評価:ビジネス要件に基づいてモデルの効果を評価します。モデルのパフォーマンスが良くない場合は、起動要件を満たすまでモデルを最適化します。
モデル推論:最適化されたモデルを使用して新しいデータを予測し、データ結果を取得します。
必要な入力データ形式
ユーザー行動分析の本質は、PolarDB for AI BST アルゴリズムを使用してユーザーデータをモデル化し、結果を取得することです。生のデータソースに対して必須の要件は設定されていません。たとえば、OSS と AnalyticDB の両方がサポートされています。ただし、入力要件を満たすようにデータを処理およびフォーマットする必要があります。
3 つのタイプのデータを構築する必要があります。
トレーニングデータ:このようなデータは、使用方法によって 2 つのタイプに分けられます。モデルがトレーニングに直接使用するデータと、モデルの品質を判断し、最適なパラメーターを選択するために使用される検証データです。通常、期間の前半のデータはトレーニングに使用され、期間の後半のデータは検証に使用されます。最終データにはユーザーラベルを含める必要があります。
評価データ:このようなデータはトレーニングデータと同様の構築方法を使用しますが、トレーニングに使用されるか検証に使用されるかは区別しません。最終データには、ユーザーラベル(支払うかどうか、または離脱するかどうか)を含める必要があります。
推論データ:このようなデータはトレーニングデータと同様の構築方法を使用しますが、ユーザーの行動が不明であるため、最終データのユーザーラベルは不明です。
BST アルゴリズムで必要なモデル構築(トレーニングデータ)のデータテーブル形式
列 | 必須 | データの型 | 説明 | 例 |
uid | はい | VARCHAR(255) | 各データ入力の ID(ユーザー ID や製品 ID など)。 | 123213 |
event_list | はい | TEXT | モデルトレーニングの動作シーケンス。シーケンス内の各動作は、一意の整数 ID で表されます。シーケンス内の動作はコンマ( | 例:「[183, 238, 153, 152]」 |
target | いいえ | INT、FLOAT、および DOUBLE | アルゴリズムモデルのエラーを計算するために使用されるサンプルのラベル。モジュール構築で必要です。 | 0 |
val_row | いいえ | INT | モデルの過剰適合を防ぐために、検証セットを指定できます。 | 0 |
other_feature | いいえ | LONGTEXT |
| other_feature1 |
生のログデータはこのようなデータに処理する必要があります。
モデル評価のデータテーブル形式
列 | 必須 | データの型 | 説明 | 例 |
uid | はい | VARCHAR(255) | 各データ入力の ID(ユーザー ID や製品 ID など)。 | 123213 |
event_list | はい | LONGTEXT | モデル構築の動作シーケンス。シーケンス内の各動作は、一意の整数 ID で表されます。シーケンス内の動作はコンマ( | 「[183, 238, 153, 152]」 |
target | はい | INT、FLOAT、および DOUBLE | アルゴリズムモデルのエラーを計算するために使用されるサンプルのラベル。 | 0 |
other_feature | いいえ | INT、FLOAT、DOUBLE、および LONGTEXT | モデルのその他の機能。モデル構築のものと一致します。機能を使用するには、モデル構築の | 2 |
モデル推論のデータテーブル形式
列 | 必須 | データの型 | 説明 | 例 |
uid | はい | VARCHAR(255) | 各データ入力の ID(ユーザー ID や製品 ID など)。 | 123213 |
event_list | はい | LONGTEXT | モデル構築の動作シーケンス。シーケンス内の各動作は、一意の | 「[183, 238, 153, 152]」 |
other_feature | いいえ | INT、FLOAT、DOUBLE、および LONGTEXT | モデルのその他の機能。モデル構築のものと一致します。機能を使用するには、モデル構築の | 2 |
データ処理
ユーザー行動分析モデルは基本的なユーザーログを使用します。一般に、基本的なユーザーログはデータウェアハウスなどのメディアに既に存在します。ログデータをモデルに必要なトレーニングデータに変換する必要があります。データ処理には複数の方法を使用できます。ニーズに合った方法を選択できます。次の例では、基本的なユーザーログを BST アルゴリズムで必要なデータ形式に処理する方法について詳しく説明します。これは企業と共同で行われます。
PolarDB には、user_event_log テーブルが含まれています。これは、一定期間のユーザー行動ログを格納する基本的なユーザーログテーブルです。OSS の形式はこのテーブルと一致している必要があります。OSS エンドポイントは実際のエンドポイントである必要があります。
-- user_event_log テーブルを作成します。OSS エンドポイントは実際のエンドポイントである必要があります。この操作は、1 つのデータベースに対して 1 回だけ実行できます。
CREATE TABLE `user_event_log` (
`user_id` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '一意の ID', /* Unique ID */
`event_time` bigint(20) NOT NULL COMMENT 'ユーザーイベントの 10 桁のタイムスタンプ', /* Ten-digit timestamp for the user event */
`event_name` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT 'ユーザーイベントの名前(ユーザーの支払い行動を反映するなど。支払うかどうか、金額など)', /* Name of the user event, such as reflecting the user payment behavior (whether to pay and amount) */
`part_date` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '日付と時刻。YYYY-MM-dd の形式', /* Date and time, in the format of YYYY-MM-dd */
`event_info` text CHARACTER SET utf8mb4 COLLATE utf8mb4_bin COMMENT 'ユーザーイベントに関するその他の情報(支払い行動と金額のサブタイプ)。JSON タイプ', /* Other information about the user event (subtype of payment behavior and amount), in the JSON type */
PRIMARY KEY (`event_time`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='columnar=1' CONNECTION='OSS://xxxx:dxxx@oss-cn-shanghai-internal.aliyuncs.com/xx/xxxx/'user_event_log のサンプルデータ
user_id | event_time | event_name | part_date | event_info |
example001 | 1724513952 | Money | 2024/7/30 | {"money_value":50,"money_type":001,"reduce":0} |
example002 | 1724513951 | Money | 2024/7/30 | {"money_value":300,"money_type":002,"reduce":0} |
example003 | 1724513956 | Money | 2024/7/30 | {"money_value":100,"money_type":058,"reduce":0} |
example001 | 1724513951 | Money | 2024/7/30 | {"money_value":30,"money_type":005,"reduce":1} |
example001 | 1724513959 | Money | 2024/7/30 | {"money_value":150,"money_type":005,"reduce":0} |
example004 | 1724513962 | Money | 2024/7/30 | {"money_value":950,"money_type":028,"reduce":1} |
example002 | 1724513967 | Money | 2024/7/30 | {"money_value":300,"money_type":002,"reduce":0} |
example002 | 1724513967 | Money | 2024/7/30 | {"money_value":1,"money_type":011,"reduce":0} |
example003 | 1724513962 | Money | 2024/7/30 | {"money_value":3,"money_type":033,"reduce":0} |
example004 | 1724513970 | Money | 2024/7/30 | {"money_value":15,"money_type":005,"reduce":1} |
同じ user_id に複数のレコードが対応する場合があります。
PolarDB for AI は、課金ユーザーとユーザー解約を予測するための 2 セットの手順(合計 6 つ)を提供します。これらの手順はこの顧客のみに適しています。これらの手順を参照して、独自のデータ処理ロジックを構築できます。
シナリオ | 関数 | 説明 | 出力テーブル |
課金ユーザーシナリオ | gen_user_label_charge(seq_time_start,seq_time_end,label_time_start,label_time_end) | ユーザーが支払うかどうかに関するラベルデータを生成します。
| user_label_charge:2 つのタイプのデータが生成されます。user_id とターゲットラベル。 |
gen_sequential_output_charge(seq_time_start,seq_time_end,label_time_start,label_time_end) | 課金シナリオのユーザー行動シーケンスと、タイムスタンプの時系列を生成します。
| sequential_output_charge:3 つのタイプのデータが生成されます。ユーザー ID、機能データ、および支払うかどうかの | |
gen_user_label_money(seq_time_start,seq_time_end,label_time_start,label_time_end) | ユーザー金額のラベルデータを生成します。
| user_label_money:2 つのタイプのデータが生成されます。 | |
gen_sequential_output_money(seq_time_start,seq_time_end,label_time_start,label_time_end) | 課金シナリオのユーザー行動シーケンスと、タイムスタンプの時系列を生成します。
| sequential_output_charge:3 つのタイプのデータが生成されます。ユーザー ID、機能データ、および金額の | |
ユーザー解約シナリオ | gen_user_label_lose(seq_time_start,seq_time_end,label_time_start,label_time_end) | ユーザーが離脱するかどうかを示すラベルデータを生成します。
| user_label_lose:2 つのタイプのデータが生成されます。 |
gen_sequential_output_lose(seq_time_start,seq_time_end,label_time_start,label_time_end) | ユーザー解約シナリオのユーザー行動シーケンスと、タイムスタンプの時系列を生成します。
| sequential_output_charge:3 つのタイプのデータが生成されます。ユーザー ID、機能データ、および離脱するかどうかを示す |
sequential_output_charge には、1 日のユーザーシーケンスのトレーニングデータが格納されます。時間パラメーターを変更して、別の日のトレーニングデータを取得できます。
課金ユーザーの予測(7 で 7 を予測)
トレーニングデータは 2 つの手順で構築されます。gen_user_label_charge 関数を呼び出してユーザーラベルデータ(ユーザーが支払うかどうかをマークする)を構築し、gen_sequential_output_charge 関数を呼び出してユーザー行動シーケンスをラベルデータに関連付けます。これらの 2 つのコマンドを実行すると、sequential_output_charge テーブルを生成できます。
1 日のデータはトレーニングデータとしては不十分であり、データが変動する可能性があるため、複数日のデータをトレーニングデータとして使用する必要があります。これらの 2 つの手順を繰り返し呼び出すことで、複数日のデータを生成できます。たとえば、最初に 2024 年 7 月 20 日のデータを生成し、次に 2024 年 7 月 21 日のデータ、2024 年 7 月 22 日のデータなどを生成します。
以下は、最終的なトレーニングデータのサンプルテーブルです。
train_start_date | train_end_date | test_start_date | test_end_date | user_id | is_prepay | target | part_date | event_list | stats_item_list | stats_event_list | num_event | max_level | max_viplevel | val_row |
2024/7/20 | 2024/7/26 | 2024/7/27 | 2024/8/2 | example001 | 1 | 0 | 2024/7/20 | [1, 12, 44, 334] | 0, 12, 22, 21, 231, 1 | 1, 1, 3, 21, 12 | 4 | 43 | 600 | 0 |
2024/7/21 | 2024/7/27 | 2024/7/28 | 2024/8/3 | example002 | 0 | 1 | 2024/7/21 | [1, 12, 44, 334, 234, 22] | 2, 34, 12, 12, 2, 90 | 23, 0, 2, 1, 1 | 6 | 3 | 600 | 0 |
2024/7/20 | 2024/7/26 | 2024/7/27 | 2024/8/2 | example007 | 0 | 0 | 2024/7/20 | [1, 12, 2, 334] | 0, 12, 2, 21, 231, 1 | 0, 1, 3, 21, 12 | 4 | 2 | 1200 | 1 |
2024/7/21 | 2024/7/27 | 2024/7/28 | 2024/8/3 | example008 | 1 | 1 | 2024/7/21 | [1, 12, 44, 1, 234, 22, 2, 32] | 2, 34, 2, 12, 2, 90 | 9, 0, 2, 1, 1 | 8 | 19 | 1200 | 1 |
train_start_date:N を予測するテスト M メソッドにおける M の開始日。
train_end_date:N を予測するテスト M メソッドにおける M の終了日。
test_start_date:N を予測するテスト M メソッドにおける N の開始日。
test_end_date:N を予測するテスト M メソッドにおける N の終了日。
user_id:ユーザーの ID。
is_prepay:M 日以内に支払いが行われたかどうかを示します。1 ははいを、0 はいいえを表します。
target:N 日以内に支払いが行われるかどうかを示します。1 ははいを、0 はいいえを表します。
part_date:データが処理される日。通常は
train_start_dateと一致します。event_list:ゲーム行動の時系列。イベントでソートされます。
stats_item_list:ゲームアイテムの出現リスト。ゲームアイテム ID でソートされます。
stats_event_list:ゲーム行動の出現リスト。ゲーム行動 ID でソートされます。
num_event:イベントの総数。
max_level:最高レベル。
max_viplevel:最高の VIP レベル。
推論データの場合、将来ユーザーが支払うかどうかを予測する必要があるため、ユーザーラベルを知ることはできません。推論データを生成するには、ユーザーラベルデータを構築するだけで済みます。
以下は、最終的な推論データのサンプルテーブルです。
train_start_date | train_end_date | test_start_date | test_end_date | user_id | is_prepay | target | part_date | event_list | stats_item_list | stats_event_list | num_event | max_level | max_viplevel |
2024/7/20 | 2024/7/26 | 2024/7/27 | 2024/8/2 | example001 | 1 | 0 | 2024/7/20 | [1, 12, 44, 334] | 0, 12, 22, 21, 231, 1 | 1, 1, 3, 21, 12 | 4 | 43 | 600 |
2024/7/21 | 2024/7/27 | 2024/7/28 | 2024/8/3 | example002 | 0 | 0 | 2024/7/21 | [1, 12, 44, 334, 234, 22] | 2, 34, 12, 12, 2, 90 | 23, 0, 2, 1, 1 | 6 | 3 | 600 |
2024/7/20 | 2024/7/26 | 2024/7/27 | 2024/8/2 | example007 | 0 | 0 | 2024/7/20 | [1, 12, 2, 334] | 0, 12, 2, 21, 231, 1 | 0, 1, 3, 21, 12 | 4 | 2 | 1200 |
2024/7/21 | 2024/7/27 | 2024/7/28 | 2024/8/3 | example008 | 1 | 0 | 2024/7/21 | [1, 12, 44, 1, 234, 22, 2, 32] | 2, 34, 2, 12, 2, 90 | 9, 0, 2, 1, 1 | 8 | 19 | 1200 |
target 範囲が不明なため、デフォルトで 0 に設定されています。
ユーザー解約の予測(7 で 14 を予測)
課金ユーザーの予測と同様に、トレーニングデータは 2 つの手順で構築されます。最初に gen_user_label_lose 関数を呼び出してユーザーラベルデータ(ユーザーが離脱するかどうかをマークする)を構築します。次に、gen_sequential_output_lose 関数を呼び出してユーザー行動シーケンスをラベルデータに関連付けます。次の点が異なります。ユーザーが離脱するかどうかは、将来の期間におけるユーザー行動の発生に依存します。理論的には、解約したユーザーにはユーザー行動がありません。したがって、UID をキーとして使用して、前の期間のユーザー行動レコードと将来の期間のユーザー行動データを LEFT JOIN できます。空のデータは、ユーザーが離脱したことを意味します。1 日のデータはトレーニングデータとしては不十分であり、データが変動する可能性があるため、これらの 2 つの手順を繰り返し呼び出すことで、複数日のデータを生成できます。
モデルの開発と起動
分類モデル
分類アルゴリズムは、入力データを離散クラスラベルに割り当てるために使用されます。ターゲット変数は、分類における有限クラスまたはラベルです。
スパム検出(2 つのカテゴリ:スパムとスパム以外)、画像分類(複数のカテゴリ:犬、猫、鳥)など、さまざまなタイプのタスクを識別または区別するためによく使用されます。
モデル構築
一般的な分類モデルには、ユーザー解約を予測するための 7 で 7 を予測するテストと 14 で 14 を予測するテスト、および課金ユーザーを予測するための 7 で 7 を予測するテストと 14 で 7 を予測するテストが含まれます。行動の特徴との相関関係があるため、このようなモデルは課金ユーザーの予測よりもユーザー解約の予測で優れたパフォーマンスを発揮します。ここでは、ユーザー解約を予測するためのモデルを作成する方法について説明します。
トレーニングデータテーブル:GameName_train_val_lose_7_to_14_2024_07_20_2024_07_26。以下はサンプルテーブルです。
train_start_date
train_end_date
test_start_date
test_end_date
user_id
is_prepay
target
part_date
event_list
stats_item_list
stats_event_list
num_event
max_level
max_viplevel
val_row
2024/7/20
2024/7/26
2024/7/27
2024/8/9
example001
1
0
2024/7/20
[1, 12, 2, 1]
0, 1, 1
1, 2, 32
4
43
600
0
2024/7/21
2024/7/27
2024/7/28
2024/8/10
example002
1
0
2024/7/21
[1, 12, 2, 134, 23]
3, 1, 5
8, 90, 3
5
3
600
0
2024/7/26
2024/8/1
2024/8/2
2024/8/15
example007
1
0
2024/7/26
[1, 12, 2, 134, 23, 2, 12]
1, 2, 3
3, 4, 5
7
2
1200
1
説明トレーニングデータテーブルでは、必要なパーティション期間のデータが同じテーブルにマージされます。キー列についてここで説明します。
event_list:ゲーム行動の時系列。イベントでソートされます。
stats_item_list:ゲームアイテムの出現リスト。ゲームアイテム ID でソートされます。
stats_event_list:ゲーム行動の出現リスト。ゲーム行動 ID でソートされます。
num_event:イベントの総数。
max_level:最高レベル。
max_viplevel:最高の VIP レベル。
val_row:トレーニングセットか検証セットかを示します。0 はトレーニングセットを、1 は検証セットを示します。
target:ユーザーが離脱するかどうかを示します。1 ははいを、0 はいいえを表します。
その他の列はオプションであり、無視できます。
トレーニング SQL ステートメント:
-- このステートメントを実行する前に、同じ名前の元のモデルが削除されていることを確認してください。 /*polar4ai*/ CREATE MODEL GameName_7to14_train_val_lose_20240720_20240726 WITH (model_class='bst', x_cols='event_list,max_level,max_viplevel,num_event,stats_item_list,stats_event_list', y_cols='target', model_parameter=(model_task_type='classification', /* classification */ window_size=100, success_id=2, sequence_length=3000, batch_size=128, learning_rate=0.002, max_epoch=5, val_flag=1, val_metric='f1score', auto_data_statics='on', auto_heads=0, num_heads=8, version=1, data_normalization=1, x_seq_cols='event_list', x_value_cols='max_level,max_viplevel,num_event', x_statics_cols='stats_item_list,stats_event_list', remove_seq_adjacent_duplicates = 'on' )) AS (SELECT * FROM GameName_train_val_lose_7_to_14_2024_07_20_2024_07_26);説明success_id:課金ユーザー行動の ID。解約したユーザーの場合は、このパラメーターを空のままにすることができます。
生成されたモデル名:GameName_7to14_train_val_lose_20240720_20240726。
モデルの微調整
深層学習モデルには多くのパラメーターが含まれます。ネイティブの調整プロセスは複雑で、多くのパラメーターが関係します。モデルの調整を次のパラメーターにカプセル化しようとしました。
window_size:行動 ID を埋め込み、エンコードします。このパラメーターの値は、行動 ID の最大値に 1 を加えた値以上にすることはできません。埋め込みプロセスが正しければ、値を設定する必要はありません。
sequence_length:アルゴリズムモデルに含まれる行動シーケンスの長さ。値が高いほど、大量の情報が含まれていることを示します。ただし、データセットの数が少ない場合(たとえば、データが 100,000 行未満の場合)、
sequence_lengthパラメーターが増加すると、モデルパラメーターを完全にトレーニングできなくなります。sequence_length値が小さすぎると情報が不十分になるため、適切なsequence_length値は 100 ~ 3000 です。データ量に応じて調整できます。batch_size:1 回の反復でモデルのトレーニングに使用されるサンプルの数。GPU またはメモリの容量内で、非常に小さい値(2、4、または 8)を設定しないでください。モデルの反復速度を向上させるには、
batch_size値を増やします。値は通常、2 の指数(16、32、64、または 128)です。非常に高いbatch_size値を設定すると、メモリまたは GPU が不足する可能性があります。learning_rate:反復中にモデルの重みを更新するために、最適化アルゴリズムのステップサイズを制御します。具体的には、学習率は、損失関数の勾配に沿って各パラメーターの更新の移動速度を決定します。学習率が非常に小さいと収束が遅くなり、モデルがより良い結果を達成するために多くの反復が必要になる場合があります。これにより、多くの場合、グローバルに最適なソリューションではなく、局所的に最適なソリューションが得られます。学習率が非常に大きいと不安定になり、損失関数の変動、さらには収束の失敗を引き起こすことがよくあります。モデルは損失関数の高さで爆発し、学習が失敗する可能性があります。0.1 ~ 0.0001 の間で徐々に調整し、結果を観察および検証して最適な値を選択できます。
auto_data_statics:BST モデルの組み込みデータ統計プロセスを使用し、各行動の発生などの統計データを特徴に追加した結果。
auto_heads または num_heads:マルチアテンションヘッダーの数を自動的に指定するかどうかを指定します。このパラメーターを 1 に設定すると、値は
window_sizeとsequence_lengthに基づいて自動的に計算されます。これにより、メモリが不足する可能性があります。このパラメーターを 0 に設定すると、マルチアテンションヘッダーの数(num_heads)を指定できます。マルチアテンションヘッダーは、Transformer モデルの重要な部分です。複数の注意ヘッドを並列に使用して入力データの異なる部分空間情報をキャプチャするため、モデルは入力シーケンスの複雑な特徴をより適切に学習および表現できます。注意ヘッドの数を増やすと、より多くの関係と特徴を学習できますが、過剰適合につながる可能性があります。注意ヘッドの数を減らすと、入力データの重要な情報をキャプチャしない単純化されたモデルになる可能性があります。注意ヘッドの最適な数を見つけるには、多くの場合、実験が必要です。小さい値(2 や 4 など)から始めて徐々に増やし、検証セットでのパフォーマンスを観察できます。data_normalization:
x_value_colsおよびx_statics_colsパラメーターで指定された列のデータを正規化するかどうかを指定します。この正規化は BST によって自動的に行われるため、データは整数または浮動小数点型である必要がありますが、エラーが発生します。BST を使用する前に、手動でデータを正規化することをお勧めします。remove_seq_adjacent_duplicates:
x_seq_colsデータに対して重複排除操作を実行します。たとえば、'[1,1,2,2,3,3,1,2,3]'は'[1,2,3,1,2,3]'として重複排除されます。これにより、冗長データが削除され、ベクトル計算の精度が向上します。x_seq_cols:通常は、各アイテムの出現などの統計シーケンス機能。
x_value_cols:通常は、最高レベルや行動の出現などの離散数値機能。
モデル評価
PolarDB for AI では、Evaluate 演算子を直接呼び出してモデルの結果を評価できます。予測データセットが生成された後、予測ステップをスキップして、予測データセットを評価の入力として直接使用できます。この演算子は、予測結果と評価メトリックの OSS ダウンロードリンクを出力します。
以下は、評価されるサンプルデータテーブルです。
train_start_date
train_end_date
test_start_date
test_end_date
user_id
is_prepay
target
part_date
event_list
stats_item_list
stats_event_list
num_event
max_level
max_viplevel
2024/7/20
2024/7/26
2024/7/27
2024/8/9
example001
1
0
2024/7/20
[1, 12, 2, 1]
0, 1, 1
1, 2, 32
4
43
600
2024/7/21
2024/7/27
2024/7/28
2024/8/10
example002
1
0
2024/7/21
[1, 12, 2, 134, 23]
3, 1, 5
8, 90, 3
5
3
600
2024/7/26
2024/8/1
2024/8/2
2024/8/15
example007
1
1
2024/7/26
[1, 12, 2, 134, 23, 2, 12]
1, 2, 3
3, 4, 5
7
2
1200
説明パーティション期間は 2024 年 7 月 28 日で、
targetは既知です。データテーブルのモデル評価を実行します。
/*polar4ai*/SELECT user_id,target FROM EVALUATE (MODEL GameName_7to14_train_val_lose_20240720_20240726, SELECT * FROM GameName_predict_lose_7_to_14_2024_07_28_2024_07_28) WITH (x_cols = 'event_list,max_level,max_viplevel,num_event,stats_item_list,stats_event_list',y_cols='target',s_cols='user_id,target',metrics='Fscore');説明MODEL GameName_7to14_train_val_lose_20240720_20240726:モデル名が GameName_7to14_train_val_lose_20240720_20240726 であることを示します。これは、前のモデル構築スクリプトで指定されたモデル名です。
x_cols:必要な機能列。通常は、モデルの作成に使用される xcols と同じです。
y_cols:ラベル列。ユーザーが離脱するかどうかをマークします。
s_cols:最終結果に含める列。一般に、後続のデータ分析を容易にするために user_id が含まれます。
metrics:評価の標準メトリック。分類アルゴリズムには、Fscore または AUC をお勧めします。
前のステートメントを実行すると、タスクが生成されます。
taskid値を記録します。
次の SQL ステートメントを実行します。
/*polar4ai*/ SHOW TASK <taskid>;評価結果を取得できます。一般に、結果は Fscore 値です。Fscore 値が高いほど優れています。
説明結果メトリック:
精度:ユーザー解約を予測するモデルでは、精度は、モデルによって解約済みとして識別された課金ユーザーの数を、モデルによって識別された解約ユーザーの総数で割った比率です。
再現率:ユーザー解約を予測するモデルでは、再現率は、モデルによって識別された解約ユーザーの数を課金ユーザーの総数で割った比率です。
FScore:精度と再現率の調和平均を指し、モデルの精度と再現率を包括的に判断できます。FScore = 2 ×(精度 × 再現率)/(精度 + 再現率)。
例:
合計サンプルサイズ:100 ユーザー。モデルによって予測された課金ユーザー:80(実際には 70 が支払い、10 は支払わない)。モデルによって予測された非課金ユーザー:20(実際には 5 が支払い、15 は支払わない)。
精度 = 70/80 = 87.5%。再現率 = 70/(70 + 5)= 93.3%。Fscore = 2 ×(0.875 × 0.933)/(0.875 + 0.933)= 90.3%。
モデル推論
入力テーブル:GameName_predict_lose_7_to_14_2024_07_28_2024_07_28
出力テーブル:res_GameName_predict_lose_7_to_14_2024_07_28_2024_07_28
モデル名:GameName_7to14_train_val_lose_20240720_20240726
以下はサンプルデータテーブルです。
train_start_date
train_end_date
test_start_date
test_end_date
user_id
is_prepay
target
part_date
event_list
stats_item_list
stats_event_list
num_event
max_level
max_viplevel
2024/7/28
2024/8/3
2024/8/4
2024/8/17
example001
1
0
2024/7/28
[1, 2, 3, 3, 3]
0, 1, 2
1, 2, 3
5
43
600
2024/7/28
2024/8/3
2024/8/4
2024/8/17
example002
1
0
2024/7/28
[2, 23, 4]
4, 5, 2
3, 4, 5
3
3
600
2024/7/28
2024/8/3
2024/8/4
2024/8/17
example003
0
0
2024/7/28
[9, 1, 2, 3]
1, 3, 2
1, 2, 45
4
39
1200
説明target範囲が不明なため、デフォルトで 0 に設定されています。オフライン予測
オフライン予測の結果データを取得するには、次の 3 つの方法がサポートされています。
オフライン予測でテーブルにデータを書き込まない:予測結果は OSS ファイルに格納されます。OSS エンドポイントを使用して、手動でファイルをダウンロードできます。この方法は、結果データを既存のシステムに埋め込む場合に適しています。
/*polar4ai*/SELECT user_id,target FROM PREDICT (MODEL GameName_7to14_train_val_lose_20240720_20240726, SELECT * FROM GameName_predict_lose_7_to_14_2024_07_28_2024_07_28) WITH (x_cols= 'event_list,max_level,max_viplevel,num_event,stats_item_list,stats_event_list', s_cols='user_id,target', mode='async');説明前のステートメントを実行すると、タスクが生成されます。
taskid値を記録します。次のコマンドを実行します。タスクが完了すると、OSS エンドポイントが取得されます。OSS ファイルには結果データが格納されます。
/*polar4ai*/ SHOW TASK <taskid>;オフライン予測でテーブルにデータを書き込む:予測結果は、polar4ai データベースの指定されたデータテーブルに格納されます。
-- 結果データは polar4ai データベースに格納されます。 /*polar4ai*/SELECT user_id,target FROM PREDICT (MODEL GameName_7to7_train_val_charge_sum_20240720_20240730,SELECT * FROM GameName_predict_lose_7_to_14_2024_07_28_2024_07_28) WITH (x_cols= 'event_list,max_level,max_viplevel,num_event,stats_item_list,stats_event_list',s_cols='user_id,target', mode='async', into_type='regular',primary_key='user_id') into res_GameName_predict_lose_7_to_14_2024_07_28_2024_07_28;polar4ai.res_GameName_predict_lose_7_to_14_2024_07_28_2024_07_28 は結果データテーブルです。
/*polar4ai*/show task `your-task-id`; SELECT COUNT(*) FROM polar4ai.res_GameName_predict_lose_7_to_14_2024_07_28_2024_07_28; SELECT * FROM polar4ai.res_GameName_predict_lose_7_to_14_2024_07_28_2024_07_28;重要コンソールで
polar4aiという名前のデータベースを作成し、polar4aiデータベースに対する読み取りおよび書き込み権限を現在のアカウントと AI ノードアカウントに付与する必要があります。予測結果データの場合、最初に OSS ダウンロードリンクが生成され、次にテーブルが更新されます。更新に失敗した場合、特定のデータ行を表示せずにエラーメッセージが返されます。入力テーブルにダーティデータが含まれていないか確認することがよくあります。
SELECTステートメントで選択した列とプライマリキーを指定する必要があります。SELECT *を使用したり、非常に長い列を書き込んだりしないでください(たとえば、event_list列の 1,000 行のデータは 3 MB 以上である必要があります)。そうしないと、書き込み操作は失敗します。非同期書き込みロジックとは、テーブルへの書き込みの終了条件が返されないことを意味します。すべての行が書き込まれているかどうかを確認するには、
SELECT COUNT(*) FROM polar4ai.your_table_name;ステートメントを実行する必要があります。テーブルにデータが書き込まれている間、AI ノードは占有されるため、トレーニングと予測を同時に行うことはできません。
オフライン予測でコールドデータテーブルにデータを書き込む:予測結果は、
polar4aiデータベースのコールドデータテーブルに格納されます。ストレージ価格は比較的低いですが、クエリのパフォーマンスは高くありません。詳細については、「AI モデルベースの推論結果をデータベースに書き戻す」をご参照ください。-- 結果データは polar4ai データベースに格納されます。 /*polar4ai*/SELECT user_id,target FROM PREDICT (MODEL GameName_7to7_train_val_charge_sum_20240720_20240730, SELECT * FROM GameName_predict_lose_7_to_14_202024_07_28_2024_07_28) WITH (x_cols= 'event_list,max_level,max_viplevel,num_event,stats_item_list,stats_event_list',s_cols='user_id,target', mode='async', into_type='db') into res_GameName_predict_lose_7_to_14_2024_07_28_2024_07_28;次のコマンドを実行します。タスクが完了すると、結果データがコールドデータテーブルに書き込まれます。
/*polar4ai*/ SHOW TASK `94xxxxxx-xxxx-xxxx-xxxx-xxxxxxd0e18`;
オンライン予測
/*polar4ai*/SELECT user_id,target FROM PREDICT (MODEL GameName_7to14_train_val_lose_20240720_20240726, SELECT * FROM GameName_predict_lose_7_to_14_2024_07_28_2024_07_28) WITH (x_cols= 'event_list,max_level,max_viplevel,num_event,stats_item_list,stats_event_list',s_cols='user_id,target');説明s_cols:最終結果に含める列。
結果は直接返されます。オンライン予測では、出力テーブルには最大 100 行のデータを含めることができます。それ以外の場合は、テーブルが自動的に切り捨てられます。多数のデータ行が予想される場合は、オフライン予測を使用してください。
回帰モデル
回帰アルゴリズムは、連続数値変数を予測するために使用されます。ターゲット変数は、回帰における実数です。
住宅価格、株価、気温の予測など、数値を予測するタスクによく使用されます。
モデル構築
一般的な回帰モデルには、ユーザー金額を予測するための 7 で 7 を予測するテスト、7 で 14 を予測するテスト、および 14 で 7 を予測するテストが含まれます。ここでは、ユーザー金額を予測するためのモデルを作成する方法について説明します。
トレーニングデータテーブル:GameName_train_val_money_7_to_14_2024_07_20_2024_07_26。
以下はサンプルテーブルです。
train_start_date
train_end_date
test_start_date
test_end_date
user_id
is_prepay
target
part_date
event_list
stats_item_list
stats_event_list
num_event
max_level
max_viplevel
val_row
2024/7/20
2024/7/26
2024/7/27
2024/8/9
example001
1
1.9
2024/7/20
[1, 12, 2, 1]
0, 1, 1
1, 2, 32
4
43
600
0
2024/7/21
2024/7/27
2024/7/28
2024/8/10
example002
1
20
2024/7/21
[1, 12, 2, 134, 23]
3, 1, 5
8, 90, 3
5
3
600
0
2024/7/26
2024/8/1
2024/8/2
2024/8/15
example007
1
99
2024/7/26
[1, 12, 2, 134, 23, 2, 12]
1, 2, 3
3, 4, 5
7
2
1200
1
説明トレーニングデータテーブルでは、必要なパーティション期間のデータが同じテーブルにマージされます。したがって、複数のパーティション期間が含まれます。
event_list列は行動シーケンスとして処理されます。target列は、予測期間内のターゲット結果(金額)として処理されます。トレーニング SQL ステートメント:
/*polar4ai*/ CREATE MODEL GameName_7to14_train_val_money_20240720_20240726 WITH (model_class='bst', x_cols='event_list,max_level,max_viplevel,num_event,stats_item_list,stats_event_list', y_cols='target', model_parameter=(model_task_type='regression', /* regression */ window_size=100, success_id=2, sequence_length=3000, batch_size=128, learning_rate=0.002, max_epoch=5, val_flag=1, val_metric='mse', auto_data_statics='on', auto_heads=0, num_heads=8, version=1, data_normalization=1, x_seq_cols='event_list', x_value_cols='max_level,max_viplevel,num_event', x_statics_cols='stats_item_list,stats_event_list', remove_seq_adjacent_duplicates = 'on' )) AS (SELECT * FROM GameName_train_val_money_7_to_14_2024_07_20_2024_07_26);説明生成されたモデル名:GameName_7to14_train_val_money_20240720_20240726。
モデルの微調整
深層学習モデルには多くのパラメーターが含まれます。ネイティブの調整プロセスは複雑で、多くのパラメーターが関係します。モデルの調整を次のパラメーターにカプセル化しようとしました。
window_size:行動 ID を埋め込み、エンコードします。このパラメーターの値は、行動 ID の最大値に 1 を加えた値以上にすることはできません。
embeddingプロセスが正しければ、値を設定する必要はありません。sequence_length:アルゴリズムモデルに含まれる行動シーケンスの長さ。値が高いほど、大量の情報が含まれていることを示します。ただし、データセットの数が少ない場合(たとえば、データが 100,000 行未満の場合)、
sequence_lengthパラメーターが増加すると、モデルパラメーターを完全にトレーニングできなくなります。sequence_length値が小さすぎると情報が不十分になるため、適切なsequence_length値は 100 ~ 3000 です。データ量に応じて調整できます。batch_size:1 回の反復でモデルのトレーニングに使用されるサンプルの数。GPU またはメモリの容量内で、非常に小さい値(2、4、または 8)を設定しないでください。モデルの反復速度を向上させるには、
batch_size値を増やします。値は通常、2 の指数(16、32、64、または 128)です。非常に高い batch_size 値を設定すると、メモリまたは GPU が不足する可能性があります。learning_rate:反復中にモデルの重みを更新するために、最適化アルゴリズムのステップサイズを制御します。具体的には、学習率は、損失関数の勾配に沿って各パラメーターの更新の移動速度を決定します。学習率が非常に小さいと収束が遅くなり、モデルがより良い結果を達成するために多くの反復が必要になる場合があります。これにより、多くの場合、グローバルに最適なソリューションではなく、局所的に最適なソリューションが得られます。学習率が非常に大きいと不安定になり、損失関数の変動、さらには収束の失敗を引き起こすことがよくあります。モデルは損失関数の高さで爆発し、学習が失敗する可能性があります。0.1 ~ 0.0001 の間で徐々に調整し、結果を観察および検証して最適な値を選択できます。
auto_data_statics:BST モデルの組み込みデータ統計プロセスを使用し、各行動の発生などの統計データを特徴に追加した結果。
auto_heads または num_heads:マルチアテンションヘッダーの数を自動的に指定するかどうかを指定します。このパラメーターを 1 に設定すると、値は
window_sizeとsequence_lengthに基づいて自動的に計算されます。これにより、メモリが不足する可能性があります。このパラメーターを 0 に設定すると、マルチアテンションヘッダーの数(num_heads)を指定できます。マルチアテンションヘッダーは、Transformer モデルの重要な部分です。複数の注意ヘッドを並列に使用して入力データの異なる部分空間情報をキャプチャするため、モデルは入力シーケンスの複雑な特徴をより適切に学習および表現できます。注意ヘッドの数を増やすと、より多くの関係と特徴を学習できますが、過剰適合につながる可能性があります。注意ヘッドの数を減らすと、入力データの重要な情報をキャプチャしない単純化されたモデルになる可能性があります。注意ヘッドの最適な数を見つけるには、多くの場合、実験が必要です。小さい値(2 や 4 など)から始めて徐々に増やし、検証セットでのパフォーマンスを観察できます。data_normalization:
x_value_colsおよびx_statics_colsパラメーターで指定された列のデータを正規化するかどうかを指定します。この正規化は BST によって自動的に行われるため、データは整数または浮動小数点型である必要がありますが、エラーが発生します。remove_seq_adjacent_duplicates:
x_seq_colsデータに対して重複排除操作を実行します。'[1,1,2,2,3,3,1,2,3]'は'[1,2,3,1,2,3]'として重複排除されます。これにより、冗長データが削除され、ベクトル計算の精度が向上します。x_seq_cols:通常は、各アイテムの出現などの統計シーケンス機能。
x_value_cols:通常は、最高レベルや行動の出現などの離散数値機能。
モデル評価
PolarDB for AI では、Evaluate 演算子を直接呼び出してモデルの結果を評価できます。予測データセットが生成された後、予測ステップをスキップして、予測データセットを評価の入力として直接使用できます。
以下は、評価されるサンプルデータテーブルです。
train_start_date
train_end_date
test_start_date
test_end_date
user_id
is_prepay
target
part_date
event_list
stats_item_list
stats_event_list
num_event
max_level
max_viplevel
2024/7/20
2024/7/26
2024/7/27
2024/8/9
example001
1
123.32
2024/7/20
[1, 12, 2, 1]
0, 1, 1
1, 2, 32
4
43
600
2024/7/21
2024/7/27
2024/7/28
2024/8/10
example002
1
9
2024/7/21
[1, 12, 2, 134, 23]
3, 1, 5
8, 90, 3
5
3
600
2024/7/26
2024/8/1
2024/8/2
2024/8/15
example007
1
2.1
2024/7/26
[1, 12, 2, 134, 23, 2, 12]
1, 2, 3
3, 4, 5
7
2
1200
説明パーティション期間は 2024 年 7 月 28 日で、
targetは既知です。データテーブルのモデル評価を実行します。
/*polar4ai*/SELECT user_id,target FROM EVALUATE (MODEL GameName_7to14_train_val_money_20240720_20240726, SELECT * FROM GameName_predict_money_7_to_14_2024_07_28_2024_07_28) WITH (x_cols = 'event_list,max_level,max_viplevel,num_event,stats_item_list,stats_event_list',y_cols='target',s_cols='user_id,target',metrics='mse');説明GameName_7to14_train_val_money_20240720_20240726:モデル名。これは、前のモデル構築スクリプトで指定されたモデル名です。
x_cols:必要な機能列。通常は、モデルの作成に使用される xcols と同じです。
y_cols:ラベル列。ユーザーが支払った金額を示します。
s_cols:最終結果に含める列。一般に、後続のデータ分析を容易にするために user_id が含まれます。
metrics:評価の標準メトリック。回帰アルゴリズムには、mse または r2_score をお勧めします。
前のステートメントを実行すると、タスクが生成されます。taskid 値を記録します。
次のステートメントを実行します。
/*polar4ai*/ SHOW TASK <taskid>;評価結果を取得できます。
説明結果メトリック:
平均二乗誤差(MSE):MSE 値が低いほど優れています。これは、予測値が実際の値に近いことを意味するためです。
r2_score:従属変数の変化を説明できる説明変数の比率。値の範囲は 0 ~ 1 です。r2_score 値が高いほど優れています。
モデル推論
入力テーブル:GameName_predict_money_7_to_14_2024_07_28_2024_07_28
出力テーブル:res_GameName_predict_money_7_to_14_2024_07_28_2024_07_28
モデル名:GameName_7to14_train_val_money_20240720_20240726
以下はサンプルデータテーブルです。
train_start_date
train_end_date
test_start_date
test_end_date
user_id
is_prepay
target
part_date
event_list
stats_item_list
stats_event_list
num_event
max_level
max_viplevel
2024/7/28
2024/8/3
2024/8/4
2024/8/17
example001
1
9.2
2024/7/28
[1, 2, 3, 3, 3]
0, 1, 2
1, 2, 3
5
43
600
2024/7/28
2024/8/3
2024/8/4
2024/8/17
example002
1
8.1
2024/7/28
[2, 23, 4]
4, 5, 2
3, 4, 5
3
3
600
2024/7/28
2024/8/3
2024/8/4
2024/8/17
example003
0
2.2
2024/7/28
[9, 1, 2, 3]
1, 3, 2
1, 2, 45
4
39
1200
説明target 範囲が不明なため、デフォルトで 0 に設定されています。
オフライン予測
オフライン予測の結果データを取得するには、次の 3 つの方法がサポートされています。
オフライン予測でテーブルにデータを書き込まない:予測結果は OSS ファイルに格納されます。OSS エンドポイントを使用して、手動でファイルをダウンロードできます。この方法は、結果データを既存のシステムに埋め込む場合に適しています。
/*polar4ai*/SELECT user_id,target FROM PREDICT (MODEL GameName_7to14_train_val_money_20240720_20240726, SELECT * FROM GameName_predict_money_7_to_14_2024_07_28_2024_07_28) WITH (x_cols= 'event_list,max_level,max_viplevel,num_event,stats_item_list,stats_event_list',s_cols='user_id,target', mode='async');説明前のステートメントを実行すると、タスクが生成されます。
taskid値を記録します。次のコマンドを実行します。タスクが完了すると、OSS エンドポイントが取得されます。OSS ファイルには結果データが格納されます。
/*polar4ai*/ SHOW TASK <taskid>;オフライン予測でテーブルにデータを書き込む:予測結果は、
polar4aiデータベースの指定されたデータテーブルに格納されます。-- 結果データは polar4ai データベースに格納されます。 /*polar4ai*/SELECT user_id,target FROM PREDICT (MODEL GameName_7to7_train_val_charge_sum_20240720_20240730, SELECT * FROM GameName_predict_money_7_to_14_2024_07_28_2024_07_28) WITH (x_cols= 'event_list,max_level,max_viplevel,num_event,stats_item_list,stats_event_list',s_cols='user_id,target', mode='async', into_type='regular',primary_key='user_id' ) into res_GameName_predict_money_7_to_14_2024_07_28_2024_07_28;polar4ai.res_GameName_predict_money_7_to_14_2024_07_28_2024_07_28 は結果データテーブルです。
/*polar4ai*/SHOW TASK `your-task-id`; SELECT COUNT(*) FROM polar4ai.res_GameName_predict_money_7_to_14_2024_07_28_2024_07_28; SELECT * FROM polar4ai.res_GameName_predict_money_7_to_14_2024_07_28_2024_07_28;説明コンソールで
polar4aiという名前のデータベースを作成し、polar4aiデータベースに対する読み取りおよび書き込み権限を現在のアカウントと AI ノードアカウントに付与する必要があります。予測結果データの場合、最初に OSS ダウンロードリンクが生成され、次にテーブルが更新されます。更新に失敗した場合、特定のデータ行を表示せずにエラーメッセージが返されます。入力テーブルにダーティデータが含まれていないか確認することがよくあります。
SELECTステートメントで選択した列とプライマリキーを指定する必要があります。SELECT *を使用したり、非常に長い列を書き込んだりしないでください(たとえば、event_list列の 1,000 行のデータは 3 MB 以上である必要があります)。そうしないと、書き込み操作は失敗します。非同期書き込みロジックとは、テーブルへの書き込みの終了条件が返されないことを意味します。すべての行が書き込まれているかどうかを確認するには、
SELECT COUNT(*) FROM polar4ai.your_table_name;ステートメントを実行する必要があります。テーブルにデータが書き込まれている間、AI ノードは占有されるため、トレーニングと予測を同時に行うことはできません。
オフライン予測でコールドデータテーブルにデータを書き込む:予測結果は、
polar4aiデータベースのコールドデータテーブルに格納されます。ストレージ価格は比較的低いですが、クエリのパフォーマンスは高くありません。詳細については、「AI モデルベースの推論結果をデータベースに書き戻す」をご参照ください。-- 結果データは polar4ai データベースに格納されます。 /*polar4ai*/SELECT user_id,target FROM PREDICT (MODEL GameName_7to7_train_val_charge_sum_20240720_20240730, SELECT * FROM GameName_predict_money_7_to_14_2024_07_28_2024_07_28) WITH (x_cols= 'event_list,max_level,max_viplevel,num_event,stats_item_list,stats_event_list',s_cols='user_id,target', mode='async', into_type='db') into res_GameName_predict_money_7_to_14_2024_07_28_2024_07_28;次のコマンドを実行します。タスクが完了すると、結果データがコールドデータテーブルに書き込まれます。
/*polar4ai*/ SHOW TASK `94xxxxxx-xxxx-xxxx-xxxx-xxxxxxd0e18`;
オンライン予測
/*polar4ai*/SELECT user_id,target FROM PREDICT (MODEL GameName_7to14_train_val_money_20240720_20240726, SELECT * FROM GameName_predict_money_7_to_14_2024_07_28_2024_07_28) WITH (x_cols= 'event_list,max_level,max_viplevel,num_event,stats_item_list,stats_event_list',s_cols='user_id,target');説明s_cols:最終結果に含める列。
結果は直接返されます。オンライン予測では、出力テーブルには最大 100 行のデータを含めることができます。それ以外の場合は、テーブルが自動的に切り捨てられます。多数のデータ行が予想される場合は、オフライン予測を使用してください。
FAQ
データ処理
トレーニングデータと検証データの一般的な比率は?
トレーニングデータと検証データの比率は 7:3 または 8:2 です。
入力データ型
データを挿入するときに注意する必要があることは?
event_list、x_seq_cols、および x_statics_cols 列は LONGTEXT 型である必要があります。データテーブルは、'male' や 'female' などのテキスト型をサポートしていません。整数または浮動小数点数にマップします。
タスクの最適化
ゲームでは、正のサンプル(課金ユーザー/解約ユーザー)の数は負のサンプル(非課金ユーザー/維持ユーザー)の数に比べて比較的少なく、正と負のサンプルは不均衡です(正と負のサンプルの比率は 1:3 未満です)。より良い結果を得るために何ができますか?
この場合、2 つの方法を使用できます。
1 つ目は、ユーザーを分割(たとえば、支払いの確率が高い場合と低い場合に分割)し、異なるユーザータイプごとに個別にモデルをトレーニングすることです。たとえば、N を予測するテスト M メソッドを使用する場合、ユーザーが M 日以内に支払いを済ませていると、次の N 日以内に支払う可能性が高くなります。M 日以内のユーザーを課金ユーザーと非課金ユーザーに分割できます。2 つのユーザータイプ(正と負のサンプルの比率)のデータ分布は異なります。特定のタイプのユーザー間で正と負のサンプルの分布が均衡している場合は、トレーニングのデータサンプル比率を調整する必要はありません。2 つ目は、データをダウンサンプリングすることです。
サンプルを直接ダウンサンプリングします。たとえば、正と負のサンプルの比率を約 1:3 に制御します。この方法は通常、正と負のサンプルの差があまり大きくない場合(たとえば、比率が 1:100 以内の場合)に適しています。
モデルの特徴
ゲームでは、モデルの結果を向上させるためにどの機能が効果的ですか?
予測ターゲットに関連する機能を追加してみてください。たとえば、ユーザー解約を予測する場合は、ギルドの貢献活動やインスタンスダンジョンタスクなどのゲーム内行動を追加します。ユーザー金額を予測する場合は、ブレークスルー行動と支払いに関連する統計情報を追加します。一般的な機能には、最高レベル、最高の VIP(支払いレベル)、行動の出現、1 日の金額、支払い行動の 1 日の出現、異なるアイテムの出現、統計レベル、ギルド値、ギフトクリック行動などがあります。