自動特徴前処理
BigQuery ML は、トレーニング中に CREATE MODEL
ステートメントを使用して自動前処理を実行します。自動前処理は、欠損値の補完と特徴量の変換で構成されます。
BigQuery ML での特徴の前処理のサポートについては、特徴の前処理の概要をご覧ください。
各モデルタイプでサポートされている SQL ステートメントと関数については、各モデルのエンドツーエンドのユーザー ジャーニーをご覧ください。
欠損データの補完
統計学では、欠損データを代替値で置き換えるために補完を使用します。BigQuery ML でモデルをトレーニングする場合、NULL
値は欠損データとして処理されます。BigQuery ML で結果を予測する場合、BigQuery ML が NULL
値や未知の値に遭遇すると、欠損値が発生する可能性があります。BigQuery ML では、列内のデータの種類に応じて欠損データの処理方法が異なります。
列の型 | 補完方法 |
---|---|
数値 | トレーニングと予測の両方で、数値列の NULL 値は、元の入力データの特徴列によって計算された、指定された列の平均値に置き換えられます。 |
ワンホット / マルチホット エンコード | トレーニングと予測の両方で、エンコード列の NULL 値は、データに追加される追加カテゴリにマッピングされます。未知のデータには、予測時に重み 0 が割り当てられます。 |
TIMESTAMP |
TIMESTAMP 列では、標準化列とワンホット エンコード列の両補完方法が組み合わせて使用されます。生成された Unix 時間列の場合、BigQuery ML は値を元の列全体の平均 Unix 時間で置き換えます。その他の生成された値の場合、BigQuery ML は抽出された各特徴のそれぞれの NULL カテゴリに値を割り当てます。 |
STRUCT |
トレーニングと予測の両方で、STRUCT の各フィールドはタイプに応じて補完されます。 |
特徴変換
デフォルトでは、BigQuery ML は入力の特徴を次のように変換します。
入力データ型 | 変換方法 | 詳細 |
---|---|---|
INT64 NUMERIC BIGNUMERIC FLOAT64 |
標準化 | ほとんどのモデルで、BigQuery ML は数値列を標準化し、0 にセンタリングしてからトレーニングに渡します。例外は、標準化が行われないブーストツリー モデルやランダム フォレスト モデルと、K 平均法モデルです。STANDARDIZE_FEATURES オプションは、数値特徴を標準化するかどうかを制御します。 |
BOOL STRING BYTES DATE DATETIME TIME |
ワンホット エンコード | BigQuery ML は、TIMESTAMP 以外の数値型でも配列でもないすべての列について、ブーストツリー モデルとランダム フォレスト モデル以外のすべてのモデルに対してワンホット エンコーディング変換を行います。この変換により、列内の一意の値ごとに個別の特徴が生成されます。ラベル エンコード変換を適用してブーストツリー モデルとランダム フォレスト モデルをトレーニングし、各一意の値を数値に変換します。 |
ARRAY |
マルチホット エンコード | すべての数値型ではない ARRAY 列の場合、BigQuery ML はマルチホット エンコーディング変換を行います。この変換により、ARRAY 内の一意の要素ごとに個別の特徴が生成されます。 |
TIMESTAMP |
タイムスタンプ変換 | 線形回帰またはロジスティック回帰のモデルは、TIMESTAMP 列を検出すると TIMESTAMP から一連のコンポーネントを抽出し、抽出されたコンポーネントに対して標準化とワンホット エンコーディングの組み合わせを実施します。秒単位の Unix 時間コンポーネントの場合、BigQuery ML は標準化を使用します。他のすべてのコンポーネントでは、ワンホット エンコーディングを使用します。詳細については、後述のタイムスタンプ特徴量の変換テーブルをご覧ください。 |
STRUCT |
構造体の展開 | BigQuery ML は、STRUCT 列を検出すると、STRUCT 内のフィールドを展開して単一の列を作成します。すべての STRUCT フィールドに名前を付ける必要があります。ネストされた STRUCT は使用できません。展開後の列名は、{struct_name}_{field_name} の形式になります。 |
ARRAY of STRUCT |
変換なし | |
ARRAY of NUMERIC |
変換なし |
TIMESTAMP
特徴変換
次の表に、TIMESTAMP
列から抽出されたコンポーネントと、それに対応する変換方法を示します。
TIMESTAMP コンポーネント |
processed_input の結果 |
変換方法 |
---|---|---|
秒単位の Unix 時間 | [COLUMN_NAME] |
標準化 |
日 | _TS_DOM_[COLUMN_NAME] |
ワンホット エンコーディング |
曜日 | _TS_DOW_[COLUMN_NAME] |
ワンホット エンコーディング |
月 | _TS_MOY_[COLUMN_NAME] |
ワンホット エンコーディング |
時間帯 | _TS_HOD_[COLUMN_NAME] |
ワンホット エンコーディング |
分 | _TS_MOH_[COLUMN_NAME] |
ワンホット エンコーディング |
週(週の開始は日曜日) | _TS_WOY_[COLUMN_NAME] |
ワンホット エンコーディング |
年 | _TS_YEAR_[COLUMN_NAME] |
ワンホット エンコーディング |
カテゴリ特徴のエンコード
ワンホット エンコードされた特徴の場合は、モデル オプション CATEGORY_ENCODING_METHOD
を使用して、別のデフォルトのエンコード方法を指定できます。一般化線形モデル(GLM)の場合、CATEGORY_ENCODING_METHOD
は次のいずれかの値に設定できます。
ワンホット エンコーディング
ワンホット エンコーディングでは、特徴の各カテゴリを独自のバイナリ特徴にマッピングします。0
は機能が存在しないこと、1
は機能の存在を表します(ダミー変数)。このマッピングにより、N
個の新しい特徴列が作成されます。ここで、N
はトレーニング テーブル全体で、特徴の一意のカテゴリの数です。
たとえば、トレーニング テーブルに次のようなカテゴリ Apple
、Banana
、Cranberry
の fruit
という特徴列があるとします。
行 | fruit |
---|---|
1 | Apple |
2 | Banana |
3 | Cranberry |
この場合、CATEGORY_ENCODING_METHOD='ONE_HOT_ENCODING'
オプションはテーブルを次の内部表現に変換します。
行 | fruit_Apple | fruit_Banana | fruit_Cranberry |
---|---|---|---|
1 | 1 | 0 | 0 |
2 | 0 | 1 | 0 |
3 | 0 | 0 | 1 |
ワンホット エンコーディングは、線形回帰とロジスティック回帰モデルとブーストツリーモデルでサポートされています。
ダミー エンコード
ダミー エンコードはワンホット エンコーディングに似ています。ここでは、カテゴリ特徴が一連のプレースホルダ変数に変換されます。ダミー エンコードでは、N
プレースホルダ変数ではなく N-1
プレースホルダ変数を使用して、対象物の N
カテゴリを表します。たとえば、上記のワンホット エンコードの例で示したものと同じ fruit
特徴列で CATEGORY_ENCODING_METHOD
を 'DUMMY_ENCODING'
に設定した場合、テーブルは次の内部表現に変換されます。
行 | fruit_Apple | fruit_Banana |
---|---|---|
1 | 1 | 0 |
2 | 0 | 1 |
3 | 0 | 0 |
トレーニング データセットで発生回数が最も多いカテゴリは除外されます。複数のカテゴリが最も発生回数が多い場合、そのセット内のランダムなカテゴリが破棄されます。
ML.WEIGHTS
の重みの最終セットには除外されたカテゴリが引き続き含まれますが、その重みは常に 0.0
です。ML.ADVANCED_WEIGHTS
の場合、ドロップされた変数の標準誤差と p 値は NaN
です。
最初に 'DUMMY_ENCODING'
でトレーニングされたモデルで warm_start
が使用されている場合、同じプレースホルダ変数が最初のトレーニング実行から削除されます。モデルは、トレーニングの実行間でエンコード方式を変更することはできません。
ダミー エンコードは、線形回帰モデルとロジスティック回帰モデルでサポートされています。
ラベル エンコード
ラベル エンコードは、カテゴリ特徴の値を [0, <number of categories>]
の INT64
値に変換します。
たとえば、次のような書籍データセットがあるとします。
タイトル | ジャンル |
---|---|
Book 1 | Fantasy |
Book 2 | Cooking |
Book 3 | History |
Book 4 | Cooking |
ラベルでエンコードされた値は次のようになります。
タイトル | ジャンル(テキスト) | ジャンル(数値) |
---|---|---|
Book 1 | Fantasy | 1 |
Book 2 | Cooking | 2 |
Book 3 | History | 3 |
Book 4 | Cooking | 2 |
エンコードする語彙は、アルファベット順に並べ替えられます。語彙に含まれていない NULL
値とカテゴリは 0
にエンコードされます。
ラベル エンコードは、ブーストツリー モデルでサポートされています。
ターゲット エンコード
ターゲット エンコードでは、分類モデルの場合はターゲットの確率で、回帰モデルの場合はターゲットの期待値で、カテゴリ特徴値を置き換えます。
ターゲット エンコードされた特徴は、次の例のようになります。
# Classification model +------------------------+----------------------+ | original value | target encoded value | +------------------------+----------------------+ | (category_1, target_1) | 0.5 | | (category_1, target_2) | 0.5 | | (category_2, target_1) | 0.0 | +------------------------+----------------------+ # Regression model +------------------------+----------------------+ | original value | target encoded value | +------------------------+----------------------+ | (category_1, 2) | 2.5 | | (category_1, 3) | 2.5 | | (category_2, 1) | 1.5 | | (category_2, 2) | 1.5 | +------------------------+----------------------+
ターゲット エンコードは、ブーストツリー モデルでサポートされています。