総合情報サイト / マニュアル / サービス管理 / APIの返り値について(数値の分類)

推論APIの返り値について(数値の分類)

数値の分類AIを推論サービスで実行した際に得られる値について解説します。
文章や単語などを含むテキスト(自然言語)を解析して分類するAIにcsvファイルを投入した場合も同様の出力が得られます。

APIの返り値について(分類)_1.jpg

外部アプリケーションやプログラムからMatrixFlowの推論サービスを実行する方法はいろいろありますが、Windows標準機能のコマンドプロンプトを利用して数値データを用いた推論を行うと、上のような出力がされます。
サービス機能を使った推論を行う手順については「サービスを使って推論を行う」をご覧ください。

この出力値は[推論サービスの詳細画面]の[Responses]タブに指定されている内容に沿っており、学習や予測に使うアルゴリズムによって出力される項目が異なります。
なお、項目の出力は順不同です。
※Responsesの内容は変更できません。

返り値のフォーマットは次の通りです。

形式 :JSON
MIMEタイプ :application/json
文字コード :unicode(UTF-8)
APIの返り値について(分類)_2.jpg

実際にはすべての値は改行されずに出力されますが、ここでは分かりやすくするため
改行して図示します。

APIの返り値について(分類)_3.jpg

1. “action”: “finishInferring”,
  推論の終了を意味します。

2. “inferenceType”: “推論の形式”,
  予測するデータがcsvファイルの場合、”classficationStructuredData”です。

3. “id”: “推論のID”,
  MatrixFlow内部で自動で付与する実行時の識別IDです。

4. “inputColumns”: [“学習に使用した列”],
  AIを作成する際に「学習に使用した列名」をカンマ区切りで出力します。
  ※全角文字の場合、Unicodeで出力されます。(以降同様)

5. “predictionColumn”: “予測する列”,
  AIを作成する際に指定した「予測する列名」を出力します。

6. “classes”: [“予測する列のクラス”],
  データを複数のクラス(グループ)に分類するときの各グループを示す値を
  カンマ区切りで出力します。
  例)0, 1, 2 の3クラスに分類する場合 [0, 1, 2]

7. “probability”: true / false,
  次項8.で各クラスの信頼度(”クラス名_probability”)が算出されるかを出力します。
  信頼度とは「〇と△のデータがある場合、どれだけ〇のデータらしいか」を示す情報で、
  そのデータが〇のクラスに属する確率を表します。

APIの返り値について(分類)_4.jpg

8. “list”: 推論データセットの行ごとに次の情報が出力されます。
  ”列名”: 入力した値,
     カンマ区切りで列数分(列が3列あれば、3列分の列名とその値)を出力します。
     MatrixFlowで推論を行ったときの、推論結果画面の右側に該当します。
     推論結果画面は[学習に使用した列]と[その値]のみですが、
     ここには投入したすべての列を出力します。

  ”予測する列名”: 予測結果,
     予測結果は、6. “classes” のどれかです。
     行ごとの推論結果詳細画面の上部、[推論結果]に該当します。

  ”クラス名_probability”: 各クラスの信頼度,
     予測結果がそのクラスにどれだけ当てはまるかを表し、
     1.0に近いほど当てはまりが良いことを意味します。
     推論結果詳細画面の[信頼度詳細]に該当します。

  ”列名_importance”: 列の重要度,
     後述する 10. “shap_values” の小数第四位を四捨五入した値です。
     推論結果詳細画面の[推論結果に与えた影響度]に該当します。

APIの返り値について(分類)_5.jpg

9. “total”: 予測した行数,
  推論データセットの行数です。

10. “feature_importance”: {“shap_values”: [[行ごとの学習に使用した列の重要度]]},
  shap_valuesは、各行の予測値が学習に使用したそれぞれの列からどのくらい影響を受けているか
  を表します。影響度なのでマイナス値もあり得ます。
  8. listの “列名_importance” と重複しますが、投入したすべての行の四捨五入する前の値を
  カンマ区切りで出力します。
  AIモデルが列の値をどう使って予測をしたのか、列の値は予測結果にどのくらい影響を与えている
  のかなど、予測結果の解釈に用います。

考え方例)タイタニック号のデータを使い、生存を1、死亡を0として生死を予測します

予測結果:0(死亡)
⇒「性別」の絶対値が「チケットクラス」よりも大きいため、性別の値が予測に大きく寄与し、
かつ、マイナス値は予測値が小さくなる方向に影響を及ぼすため、
死亡0と予測したと説明できます。

APIの返り値について(分類)_7.png

予測結果:1(生存)
⇒ 「性別」の絶対値が「チケットクラス」よりも大きいため、性別の値が予測に大きく寄与し、
かつ、プラス値は予測値が大きくなる方向に影響を及ぼすため、
生存1と予測したと説明できます。

APIの返り値について(分類)_8.png
APIの返り値について(分類)_6.jpg

11. “x_test”: [[行ごとの学習に使用した列の重要度の分布]],
  推論に使用した列の値を行ごとにカンマ区切りで出力します。

12. “input_columns”: [“学習に使用した列名”],
  学習に使用した列名をカンマ区切りですべて出力します。

13. “mean_shap”: {“列名”: 推論結果全体における列の重要度},
  推論結果全体に対する学習に使用した列の重要度をカンマ区切りで出力します。
  推論結果画面の右上[重要度を表示]で確認できる値に該当します。

※全角文字の文字コードはUnicodeです。