基本操作ガイド

Basic Guide

MLボード予測(オンライン)ブロックを使ったいろいろな予測の方法

MLボード予測(オンライン)ブロックを使ったいろいろな予測の方法

MLボード予測(オンライン)」ブロックを使った予測の方法には、「ML ボードの使い方」(数値分類 / 数値回帰 )で解説している「オブジェクト生成 」ブロックを使用する方法以外にもいくつかあります。

ここでは、以下の方法について、解説します。いずれの方法も「ML ボードの使い方(数値分類タイプ)」の「予測 」を例に解説します。

解説の例で使用している名前(ファイル名・バケット名・データセット名・テーブル名など)は、あくまでも例です。自由に名前を付け変えて構いません。ただし、予測因子データの項目名(key 含む)だけは、例のままとしてください。

予測因子データをファイルから与える方法

予測因子データを YAML 形式か JSON 形式のテキストファイルで準備して、それを使って予測する方法です。

MLボード予測(オンライン)」ブロックで予測するためには、予測因子データを変数に設定する必要があります(データは所定の形式で構造化されている必要あり)。

GCSから変数へロード 」ブロック(「GCP」カテゴリー)を使用すると、Google Cloud Storage (GCS) 上にあるファイル内容を変数に設定できます。ファイル形式が YAML か JSON の場合は、その内容を解析し構造化されたデータを変数に設定します。

このため、予測因子データのファイルを GCS 上に準備すれば、「GCSから変数へロード」ブロックと「MLボード予測(オンライン)」ブロックを組み合わせて予測ができます。ファイルは、「MLボード予測(オンライン)」ブロックが期待する形式の構造化されたデータを YAML か JSON の形式で準備します。

予測因子データをファイルから与える方法の解説図

この例では、予測因子データを JSON 形式のテキストファイルで準備し予測します。

まず、以下の JSON 形式のテキストファイルを iris_predict_data.json というファイル名で作成し、GCS(バケット名: magellan-sample)へアップロードしておきます。

{
  "data": [
    {
      "key": "1",
      "sepal_length": 5.9,
      "sepal_width": 3.0,
      "petal_length": 4.2,
      "petal_width": 1.5
    },
    {
      "key": "2",
      "sepal_length": 6.9,
      "sepal_width": 3.1,
      "petal_length": 5.4,
      "petal_width": 2.1
    },
    {
      "key": "3",
      "sepal_length": 5.1,
      "sepal_width": 3.3,
      "petal_length": 1.7,
      "petal_width": 0.5
    }
  ]
}

Big Data ボードのフローは、下図のように作成します。

予測因子データをファイルから与える方法

GCSから変数へロード」ブロックで予測因子データのテキストファイルを読み込み、「MLボード予測(オンライン)」ブロックで予測します。この例では、予測結果を「ログへ出力」ブロックでログへ出力し予測結果を確認します。

各ブロックのプロパティ設定は、以下のとおりです(初期値から変更が必要なプロパティおよび重要なプロパティのみ)。

ブロック プロパティ
GCSから変数へロード 読込データのファイルGCS URL gs://magellan-sample/iris_predict_data.json
ファイル形式 JSON
結果を格納する変数 _
MLボード予測(オンライン) MLボード名 予測で使用する ML ボード名
予測因子データの変数 _.content.data
予測結果変数

_

ここでは、便宜上、予測因子データを格納している変数 _ を再び指定しています。これにより、予測因子データは、予測結果データによって書き換えられます。

ログへ出力 ログへ出力する変数 _

これで準備ができました。Big Data ボードの保存後、「フローの開始」ブロックプロパティの ボタンをクリックして、フローを実行します。

以下は、フローのログ出力結果です(抜粋)。

{
  "predictions": [
    {
      "score": [
        0.017455093562602997,
        0.7145982980728149,
        0.26794660091400146
      ],
      "key": "1",
      "label": 1
    },
    {
      "score": [
        0.0007236730307340622,
        0.40548425912857056,
        0.5937920212745667
      ],
      "key": "2",
      "label": 2
    },
    {
      "score": [
        0.9445222616195679,
        0.05332513898611069,
        0.0021526541095227003
      ],
      "key": "3",
      "label": 0
    }
  ]
}

予測因子データを BigQuery から与える方法

予測因子データを BigQuery のテーブルに準備して、それを使って予測する方法です。

先ほど述べたとおり、「MLボード予測(オンライン)」ブロックで予測するためには、予測因子データを変数に設定する必要があります(データは所定の形式で構造化されている必要あり)。

クエリーの実行」ブロックを使用すると、BigQuery から取得し、構造化されたデータを変数に設定できます。

このため、BigQuery に予測因子データを準備すれば、「クエリーの実行」ブロックと「MLボード予測(オンライン)」ブロックを組み合わせて予測ができます。

予測因子データを BigQuery から与える方法

以下のデータを BigQuery に準備します。

データセット・テーブル情報
項目 内容
データセット名 samples
テーブル名 iris_predict_data
スキーマ
名前 モード
key STRING NULLABLE
sepal_length FLOAT NULLABLE
sepal_width FLOAT NULLABLE
petal_length FLOAT NULLABLE
petal_width FLOAT NULLABLE
データ
key sepal_length sepal_width petal_length petal_width
1 5.9 3.0 4.2 1.5
2 6.9 3.1 5.4 2.1
3 5.1 3.3 1.7 0.5

Big Data ボードのフローは、下図のように作成します。

予測因子データを BigQuery から与える方法

クエリーの実行」ブロックで BigQuery から予測因子データを取り出し、「MLボード予測(オンライン)」ブロックで予測します。この例では、予測結果を「ログへ出力」ブロックでログへ出力し予測結果を確認します。

各ブロックのプロパティ設定は、以下のとおりです(初期値から変更が必要なプロパティおよび重要なプロパティのみ)。

ブロック プロパティ
クエリーの実行 SQL 文法 Legacy SQL
クエリー
SELECT
  key,
  sepal_length,
  sepal_width,
  petal_length,
  petal_width
FROM
  samples.iris_predict_data
結果を格納する変数 _
MLボード予測(オンライン) MLボード名 予測で使用する ML ボード名
予測因子データの変数 _
予測結果変数

_

ここでは、便宜上、予測因子データを格納している変数 _ を再び指定しています。これにより、予測因子データは、予測結果データによって書き換えられます。

ログへ出力 ログへ出力する変数 _

これで準備ができました。Big Data ボードの保存後、「フローの開始」ブロックプロパティの ボタンをクリックして、フローを実行します。

以下は、フローのログ出力結果です(抜粋)。

{
  "predictions": [
    {
      "score": [
        0.017455093562602997,
        0.7145982980728149,
        0.26794660091400146
      ],
      "key": "1",
      "label": 1
    },
    {
      "score": [
        0.0007236730307340622,
        0.40548425912857056,
        0.5937920212745667
      ],
      "key": "2",
      "label": 2
    },
    {
      "score": [
        0.9445222616195679,
        0.05332513898611069,
        0.0021526541095227003
      ],
      "key": "3",
      "label": 0
    }
  ]
}

予測因子データをフローの外部実行時に与える方法(application/json)

予測因子データをフローの外部実行 時に与えて、予測する方法です。

フローの外部実行とは、Web API でフローを実行する方法です。ここで紹介する方法は、HTTP リクエストの Content-Type ヘッダーに application/json と指定して、予測因子データを渡す方法です。

フローの外部実行では、JSON テキストで表現したデータを渡して、BLOCKS の変数にさまざまな値を設定できます。

フローの外部実行時の Content-Type ヘッダーを application/json として、HTTP リクエストのボディに以下のような JSON テキストデータを指定すると、変数 var に数値の 100 が設定できます。

{"var": 100}

以下は、変数 _ に予測因子データを設定する JSON テキストの例です。

{
  "_": [
    {
      "key": "1",
      "sepal_length": 5.9,
      "sepal_width": 3.0,
      "petal_length": 4.2,
      "petal_width": 1.5
    },
    {
      "key": "2",
      "sepal_length": 6.9,
      "sepal_width": 3.1,
      "petal_length": 5.4,
      "petal_width": 2.1
    },
    {
      "key": "3",
      "sepal_length": 5.1,
      "sepal_width": 3.3,
      "petal_length": 1.7,
      "petal_width": 0.5
    }
  ]
}

このときの Big Data ボードのフローは、下図のように作成します。

予測因子データを外部フロー実行時に与える方法(新版)のフロー

フローは至ってシンプルです。「MLボード予測(オンライン)」ブロックで予測するだけです。この例では、予測結果を「ログへ出力」ブロックでログへ出力して、予測結果を確認します。

各ブロックのプロパティ設定は、以下のとおりです(初期値から変更が必要なプロパティおよび重要なプロパティのみ)。

ブロック プロパティ
フローの開始 ID predict_iris
MLボード予測(オンライン) MLボード名 予測で使用する ML ボード名
予測因子データの変数 _
予測結果変数

_

予測因子データを格納している変数 _ を再び指定しています。これにより、予測因子データは、予測結果データによって書き換えられます。

ログへ出力 ログへ出力する変数 _

以下は、Unix 系 curl コマンドでの実行例です。

curl -H 'Authorization: Bearer 951***a16' \
  -H 'Content-Type: application/json' \
  -d '{"_": [{"key": "1", "sepal_length": 5.9, "sepal_width": 3.0, "petal_length": 4.2, "petal_width": 1.5}, {"key": "2", "sepal_length": 6.9, "sepal_width": 3.1, "petal_length": 5.4, "petal_width": 2.1}, {"key": "3", "sepal_length": 5.1, "sepal_width": 3.3, "petal_length": 1.7, "petal_width": 0.5}]}' \
  https://***.magellanic-clouds.net/flows/predict_iris.json

フローの実行に成功すると、以下のようなレスポンスが返ってきます。"job_id"1 の部分は、フローを実行するごとに変わります。この例と異なっていても問題ありません。

{"result":true,"job_id":1}

以下は、フローのログ出力結果です(抜粋)。

{
  "predictions": [
    {
      "score": [
        0.017606934532523155,
        0.9281915426254272,
        0.05420156940817833
      ],
      "key": "1",
      "label": 1
    },
    {
      "score": [
        0.0002792126906570047,
        0.2558387219905853,
        0.7438820004463196
      ],
      "key": "2",
      "label": 2
    },
    {
      "score": [
        0.9730234146118164,
        0.026976602151989937,
        6.675784813836572e-09
      ],
      "key": "3",
      "label": 0
    }
  ]
}

予測因子データをフローの外部実行時に与える方法(x-www-form-urlencoded)

予測因子データをフローの外部実行 時に与えて、予測する方法です。

フローの外部実行とは、 Web API でフローを実行する方法です。ここで紹介する方法は、HTTP リクエストの Content-Type ヘッダーに x-www-form-urlencoded と指定して、予測因子データを渡す方法です。

フローの外部実行時のパラメーターは、フロー内でパラメーター名と同名の変数名で参照できます。また、「オブジェクト生成 <」ブロックでは、変数 を使ってデータの生成ができます。

オブジェクト生成」ブロックのデータプロパティで以下のように設定したとします。

変数を使ったオブジェクト生成例(フロー作成時)

このとき、フローの外部実行時に、var_x=5.9var_y=3.0 というパラメーターを与えたとすると、以下のように変化します。

変数を使ったオブジェクト生成例(フロー実行時)
  • ${var_x} の部分は、パラメーター名 var_x の値 "5.9"になります。
  • var_y の部分は、パラメーター名 var_y の値 "3.0"になります。
    VariableString 扱いになります。

パラメーターの値は、すべて文字列として扱われます。

このように、パラメーターを使った変数の参照を使うと、フローの実行ごとに生成するデータを変えられます。

予測因子データには、文字列以外にも数値を期待する型(数値型・月・曜日)がありますが、そこに数値を文字列にしたデータ("5.9""0" など)を与えても問題ありません。

MLボード予測(オンライン)」ブロックでは、数値が期待される項目に、文字列のデータがあると数値に変換してくれます。もちろん、"one""abc" などの明らかに数値に変換できない文字列があると予測が失敗します。

Big Data ボードのフローは、下図のように作成します。

予測因子データを外部フロー実行時に与える方法

オブジェクト生成」ブロックで、フローの外部実行時のパラメーターを使って予測データを生成します。この生成されたデータを使って「MLボード予測(オンライン)」ブロックで予測します。この例では、予測結果を「ログへ出力」ブロックでログへ出力し予測結果を確認します。

各ブロックのプロパティ設定は、以下のとおりです(初期値から変更が必要なプロパティおよび重要なプロパティのみ)。

ブロック プロパティ
フローの開始 ID predict_iris
オブジェクト生成 結果を格納する変数 _
データ
キー
key String ${key}
sepal_length String ${sepal_length}
sepal_width String ${sepal_width}
petal_length String ${petal_length}
petal_width String ${petal_width}

値は、変数展開を使って、パラメーター値を設定します。この例では、予測因子データとパラメーターの対応をわかりやすくするために、予測因子データの項目名(キー)とパラメーター名を合わせています。

MLボード予測(オンライン) MLボード名 予測で使用する ML ボード名
予測因子データの変数 _
予測結果変数

_

予測因子データを格納している変数 _ を再び指定しています。これにより、予測因子データは、予測結果データによって書き換えられます。

ログへ出力 ログへ出力する変数 _

以下は、Unix 系 curl コマンドでの実行例です(-d "xxx=#" の部分が予測因子データ用のパラメーター)。

curl -H "Authorization: Bearer 951***a16" \
  -d "key=1"            \
  -d "sepal_length=5.9" \
  -d "sepal_width=3.0"  \
  -d "petal_length=4.2" \
  -d "petal_width=1.5"  \
  https://***.magellanic-clouds.net/flows/predict_iris.json

フローの実行に成功すると、以下のようなレスポンスが返ってきます。"job_id"1 の部分は、フローを実行するごとに変わります。この例と異なっていても問題ありません。

{"result":true,"job_id":1}

以下は、フローのログ出力結果です(抜粋)。

{
  "predictions": [
    {
      "score": [
        0.017455093562602997,
        0.7145982980728149,
        0.26794660091400146
      ],
      "key": "1",
      "label": 1
    }
  ]
}