データ型と変換

このページでは、Vertex AI が AutoML モデルのさまざまなタイプの表形式データを処理する方法について説明します。

Vertex AI での変換の概要

モデルのトレーニング

入力の表形式データをモデルのトレーニングに使用する前に、変換を行う必要があります。変換は、特定のデータ特徴に対する機能を示します。

サポートされている変換は次のとおりです。

データソースが Cloud Storage 内の CSV ファイルの場合、区切り文字にカンマ(",")を使用する必要があります。Vertex AI は RFC 4180 CSV 形式を使用します。

データソースが BigQuery であり、分類または回帰を行う場合は、複数のデータ プリミティブで構成されるデータを含めることができます。このような複合データ型は、変換を適用する前に前処理する必要があります。次の複合データ型がサポートされています。

型の値が欠落しているか null になっている場合、Vertex AI は、モデルの目的と特徴に適用された変換に基づいて処理を行います。詳しくは、欠損値や null 値の処理方法をご覧ください。

予測

予測に使用するデータの形式は、トレーニングに使用される形式と同じにする必要があります。詳細については、予測のデータ形式をご覧ください。

Vertex AI の変換

カテゴリ

カテゴリ変換を適用すると、その特徴はカテゴリ内の値を表します。つまり、公称レベルです。各値の違いはそれらの名前にのみ基づいており、順序はありません。数字を使ってカテゴリ値を表すことができますが、各値は互いに数値的な関係を持ちません。つまり、カテゴリ 1 はカテゴリ 0 より「大きい」わけではありません。

カテゴリ値の例を示します。

  • ブール値: truefalse
  • 国: "USA""Canada""China" などです。
  • HTTP ステータス コード: "200""404""500" などです。

カテゴリ値では大文字と小文字が区別されます。スペリングが変わると異なるカテゴリとして扱われます(たとえば、「Color」と「Colour」は結び付けられません)。

カテゴリ変換を使用する特徴でモデルをトレーニングする場合、Vertex AI は次のデータ変換を特徴に適用し、トレーニング用のシグナルを提供するものを使用します。

  • 大文字と小文字、句読点、スペル、時制などの変更がないそのままのカテゴリ文字列。
  • カテゴリ名を辞書ルックアップ インデックスに変換し、インデックスごとに埋め込みを生成します。
  • トレーニング データセットに 5 回未満しか表示されないカテゴリは、「不明」カテゴリとして扱われます。「不明」カテゴリは、固有の特別なルックアップ インデックスと結果の埋め込みを取得します。

カテゴリ変換は、CSV ファイル内の STRING データ、または以下の BigQuery データ型に適用されます。

  • INT64
  • NUMERIC、BIGNUMERIC
  • FLOAT64
  • BOOL
  • STRING
  • DATE
  • DATETIME
  • TIME
  • TIMESTAMP

テキスト

テキスト変換では、特徴が自由形式のテキストとして使用されます。通常はテキスト トークンで構成されます。

テキスト値の例を示します。

  • "The quick brown fox"
  • "This restaurant is the best! The food is delicious"

予測モデルの場合、共変量の特徴に対するテキスト変換はサポートされていません。

テキスト変換を使用する特徴でモデルをトレーニングする場合、Vertex AI は次のデータ変換を特徴に適用し、トレーニング用のシグナルを提供するものを使用します。

  • 大文字と小文字、句読点、スペル、時制などの変更がないそのままのテキスト。
  • テキストを単語にトークン化し、単語から 1 グラムと 2 グラムを生成します。各 n グラムを辞書ルックアップ インデックスに変換し、インデックスごとに埋め込みを生成します。平均を使用して、すべての要素の埋め込みを 1 つの埋め込みに結合します。

    トークン化は、Unicode スクリプトの境界に基づいています。

  • 欠損値は、固有のルックアップ インデックスと結果としての埋め込みを取得します。
  • ストップワードは特別な扱いを受けず、削除されません。

テキスト変換は、CSV ファイル内の STRING データまたは以下の BigQuery データ型に適用されます。

  • STRING
  • DATETIME

数値

数値変換では、列が序数または数量として使用されます。これらの数字は比較ができ、2 つの異なる数は一方が他方より小さいことも大きいこともありえます。

先頭または末尾の空白は削除されます。

次の表は、数値変換に互換性のあるすべての形式を示しています。

形式
数値文字列 "101"、"101.5" ピリオド文字「.」のみが有効な小数区切り文字です。"101,5" と "100,000" は有効な数値文字列ではありません。
科学的記数法 "1.12345E+11"、"1.12345e+11" 小数区切り文字に関する数値文字列の注を参照してください。
数値以外 "NAN"、"nan"、"+NAN" 大文字/小文字は区別されません。先頭のプラス(「+」)またはマイナス(「-」)文字は無視されます。NULL 値として解釈されます。
無限大 "INF"、"+inf" 大文字/小文字は区別されません。先頭のプラス(「+」)またはマイナス(「-」)文字は無視されます。NULL 値として解釈されます。

数値変換を含む列の値がこれらの形式のいずれかに準拠していない場合、行全体がトレーニングから除外されるか、値が null として扱われます。数値変換を選択する場合は、これらの結果から選択します。

数値変換を使用する特徴でモデルをトレーニングする場合、Vertex AI は次のデータ変換を特徴に適用し、トレーニング用のシグナルを提供するものを使用します。

  • float32 に変換された値。
  • 値の z_score。
  • 分位に基づく値のバケット インデックス。バケットサイズは 100 です。
  • 値が 0 以上の場合は log(value+1)。それ以外の場合、この変換は適用されず、値は欠損値と見なされます。
  • 値が 0 以上の場合は log(value+1) の z_score。それ以外の場合、この変換は適用されず、値は欠損値と見なされます。
  • 値が null かどうかを示すブール値。
  • 無効な数値入力(たとえば、float32 に解析できない文字列)を含む行は、トレーニングと予測に含まれません。
  • 極端な値や外れ値には特別な処理はありません。

数値変換は、CSV ファイル内の STRING データ、または以下の BigQuery データ型に適用されます。

  • INT64
  • NUMERIC、BIGNUMERIC
  • FLOAT64
  • STRING
  • TIMESTAMP

タイムスタンプ

タイムスタンプ変換では、特徴が時点として使用され、タイムゾーンを伴う常用時または Unix タイムスタンプのいずれかで表されます。タイムスタンプ変換を使用する特徴は、時間列でのみ使用できます。

タイムゾーンが常用時で指定されていない場合は、UTC がデフォルトになります。

次の表に、互換性のあるすべてのタイムスタンプ文字列の形式を示します。

形式
%E4Y-%m-%d "2017-01-30" この形式の説明については、Abseil のドキュメントをご覧ください。
%E4Y/%m/%d "2017/01/30"
%Y/%m/%d %H:%M:%E*S "2017/01/30 23:59:58"
%d-%m-%E4Y "30-11-2018"
%d/%m/%E4Y "30/11/2018"
%d-%B-%E4Y "30-November-2018"
%Y-%m-%dT%H:%M:%E*S%Ez "2019-05-17T23:56:09.05+00:00" RFC 3339。タイムゾーン オフセット(z)を ±HH:MM[:SS[.ffffff]] の形式で指定します。
秒単位の UNIX タイムスタンプ文字列 "1541194447" 1990 年 1 月 1 日から 2030 年 1 月 1 日までの期間のみ。
ミリ秒単位の UNIX タイムスタンプ文字列 "1541194447000"
マイクロ秒単位の UNIX タイムスタンプ文字列 "1541194447000000"
ナノ秒単位の UNIX タイムスタンプ文字列 "1541194447000000000"

タイムスタンプ変換を含む列の値がこれらの形式のいずれかに準拠していない場合、行全体がトレーニングから除外されるか、値が null として扱われます。タイムスタンプ変換を選択する場合は、これらの結果から選択します。

タイムスタンプ変換を使用する特徴でモデルをトレーニングする場合、Vertex AI は次のデータ変換を特徴に適用し、トレーニング用のシグナルを提供するものを使用します。

  • 数値列の変換を適用します。
  • 年、月、日、曜日を決定します。タイムスタンプの各値をカテゴリ列として扱います。
  • 無効な数値(たとえば、一般的なタイムスタンプ範囲外の値や極端な値)は特別な扱いを受けず、削除されません。
  • 無効なタイムスタンプ入力(たとえば、無効なタイムスタンプ文字列)を含む行は、トレーニングと予測に含まれません。

タイムスタンプ変換は、CSV ファイル内の STRING データ、または以下の BigQuery データ型に適用されます。

  • INT64
  • STRING
  • DATE
  • DATETIME
  • TIMESTAMP

複合データ型

配列や構造体など、複数のデータ プリミティブから構成されるデータを含める必要がある場合もあります。複合データ型は、データソースとして BigQuery を使用する場合にのみ使用できます。また、予測モデルではサポートされていません。

構造体

構造体を使用して、ラベル付きフィールドのグループを表すことができます。構造体にはフィールド名のリストがあり、各フィールドがデータ型に関連付けられています。フィールドのリストと各フィールドのデータ型は、列内のすべての構造体値で同じでなければなりません。

構造体の例を示します。

  • 血圧: {"timestamp": 1535761416, "systolic": 110, "diastolic": 70}
  • 商品: {"name": "iPhone", price: 1000}

構造体を表すには BigQuery の STRUCT データ型を使用します。

構造体の値は自動的にフィールドにフラット化されます。Vertex AI は、変換タイプに従ってフラット化されたフィールドにデータ変換を適用します。

配列

配列を使用して値のリストを表すことができます。含まれる値は、同じ変換タイプを受け入れる必要があります。配列に構造体を含めることができます。配列内のすべての構造体は同じ構造である必要があります。

Vertex AI は、相対的な重みを表すものとして配列を処理します。言い換えると、配列の後ろのほうで現れる項目は、先頭のほうで現れる項目より大きく重み付けされます。

配列の例を示します。

  • 商品カテゴリ:

    ["Clothing", "Women", "Dress", ...]

  • 最近の購入:

    ["iPhone", "Laptop", "Suitcase", ...]

  • ユーザー レコード:

    [{"name": "Joelle", ID: 4093}, {"name": "Chloe", ID: 2047}, {"name": "Neko", ID: 3432}, ...]

配列を表すには BigQuery の ARRAY データ型を使用します。

Vertex AI が適用するデータ変換は、配列に適用される変換タイプによって異なります。

配列型 変換
数値配列
  • 最後の N 個(N = {1, 2, 4, 8, all})のアイテムの平均に適用される数値型のすべての変換。そのため、最も重視されるのは、配列の先頭ではなく末尾に近いアイテムです。
  • 空の配列の平均はゼロとして扱われます。
カテゴリ配列
  • 最後の N 個(N = {1, 2, 4, 8, all})のアイテムの配列内の各要素について、カテゴリ名を辞書ルックアップ インデックスに変換し、インデックスごとに埋め込みを生成します。平均を使用して、すべての要素の埋め込みを 1 つの埋め込みに結合します。
  • 空の配列は、ゼロの埋め込みとして扱われます。
テキスト配列
  • スペース(「 」)を区切り文字として使用して、配列内のすべてのテキスト値を単一のテキスト値に連結し、結果を単一のテキスト値として処理します。テキスト列の変換を適用します。
  • 空の配列は、ゼロの埋め込みとして扱われます。
タイムスタンプ配列
  • 数値列の変換を配列の最後の N 個のアイテムの平均に適用します。N = {1, 2, 4, 8, all} です。つまり、最も重視されるのは配列の末尾に近いアイテムです。
構造体配列
  • 配列内の構造体は個々のフィールドにフラット化され、フィールドごとに配列にまとめられます。配列変換(この表を参照)は、その配列のフィールド タイプに応じて適用されます。

欠損値または null 値の処理方法

欠損値の処理方法は、モデルの目的とその特徴に適用される変換によって異なります。

分類と回帰

分類モデルと回帰モデルの場合、カテゴリ変換とテキスト変換に対しては null 値は埋め込みの対象になります。他の変換では、null 値はそのまま残されます。

予測

予測モデルの場合、周辺データで null 値が補完されます(null 値をそのまま残す選択肢はありません)。null 値の補完方法を制御する場合は、明示的に代入できます。最適な値は、データとビジネス上の課題によって異なります。

行の欠落(毎日のデータの粒度が入る特定の日付の行が欠落しているなど)は許容されますが、Vertex AI は欠落したデータを補完しません。行が欠落するとモデルの品質が低下するため、行の欠落は可能な限り生じないようにする必要があります。たとえば、ある日の販売量がゼロだったために行が欠落している場合は、その日の行を追加して、販売データを明示的に 0 に設定します。

null 値として扱われる値

AutoML 表形式モデルをトレーニングする場合、Vertex AI は次の値を null 値として扱います。

  • BigQuery NULL 値

  • NaN または無限数値。

  • 空の文字列。Vertex AI は文字列からスペースを削除しません。つまり、「 」は null 値と見なされません。

  • NaN または無限数値に変換できる文字列。

    • 「NAN」の場合: 大文字と小文字を区別せず、オプションのプラスまたはマイナス記号を先頭に付けます。
    • 「INF」の場合: 大文字と小文字を区別せず、オプションのプラスまたはマイナス記号を先頭に付けます。
  • 欠損値

  • 数値またはタイムスタンプに変換された列の値が、有効な変換形式ではありません。この場合、無効な値の行がトレーニングで使用されると、無効な値が null とみなされます。

予測のデータ形式

予測に使用するデータの形式は、トレーニングに使用される形式と同じにする必要があります。

Cloud Storage の CSV ファイルのデータでモデルをトレーニングした場合、データは STRING 型になります。JSON オブジェクトを使用して予測リクエストを送信する場合は、Key-Value ペアのすべての値が STRING 型であることを確認してください。

BigQuery に保存されたデータでモデルをトレーニングし、JSON オブジェクトを使用して予測リクエストを送信する場合、JSON の Key-Value ペアの値のデータ型は下の表のマッピングに対応している必要があります。

BigQuery のデータ型 JSON データ型
INT64 文字列
NUMERIC、BIGNUMERIC 数値
FLOAT64 数値
BOOL ブール値
STRING 文字列
DATE 文字列
DATETIME 文字列
TIME 文字列
TIMESTAMP 文字列
Array 配列
STRUCT オブジェクト

たとえば、トレーニング データに FLOAT64 型の length 特徴が含まれている場合、次の JSON Key-Value が正しいペアです。

"length":3.6,

逆に、次の JSON の Key-Value ペアはエラーをスローします。

"length":"3.6",

次のステップ