数値分類モデルを利用した分類

Categorize data with the classification model

数値分類モデルを利用した分類

はじめに

BLOCKS の機械学習のサービスを使うと、数値分類が行えます。数値分類を使うと、いくつかの数値データから似たものどうしをいくつかのグループにまとめて分類します。

  • キャンペーンなどの実施により「会員登録する(0)/会員登録しない(1)」に分類
  • ウェブサイトで表示される広告を「クリックしない(0)/クリックする(1)」に分類
  • ユーザーの趣向性を数値化して「地域特性など数パターン(0 から n)」に分類
  • クレジットカードや ATM の利用特性から「正当利用(0)/不正利用(1)」に分類

このチュートリアルでは、あやめのがく片と花びらの長さや幅の情報から 3 種類のあやめに分類する例を使って、BLOCKS の数値分類の使い方を解説します。

チュートリアル例のイメージ図

数値分類のおおまかな流れ

BLOCKS の機械学習サービスは、「モデルジェネレーター」・「DataEditor」・「フローデザイナー」から利用できます。

このチュートリアルでは、「DataEditor」と「フローデザイナー」を使用して数値分類を行います。下図は、今回の例における数値分類の流れです。

BLOCKS での数値分類の流れ図
  1. DataEditor で CSV ファイルを取り込み(インポート)、トレーニング用データと予測用データに分割
    CSV ファイルには、あやめのがく片の長さ・がく片の幅・花びらの長さ・花びらの幅とあやめの種類がまとめられています。
  2. DataEditor で学習(トレーニング)
    あやめのがく片の長さ・がく片の幅・花びらの長さ・花びらの幅とあやめの種類との因果関係を学ばせます。
    このトレーニングの結果として、モデルと呼ばれる学習成果が得られます。
  3. フローデザイナーであやめの種類を予測
    今回予測するあやめの種類は、以下の 3 種類です。
    • Iris-versicolor(バージカラー)
    • Iris-setosa(セトサ)
    • Iris-virginica(バージニカ)

数値分類を試してみよう

このチュートリアルでは、下図のステップで数値分類の一連の流れを解説します。

チュートリアルの流れ図

機械学習では、まとまったデータが必要不可欠です。機械学習では、まとまったデータを元に学習を行うことで、予測が可能となります。このため、機械学習においてデータの収集と加工が最初の作業となります。

なお、チュートリアルを進めるにあたって、BLOCKS 推奨のウェブブラウザー Google Chrome を準備してください。Firefox でも構いませんが、このチュートリアルでは、Google Chrome の使用を前提にしています。

CSV ファイルを準備しよう

まず、数値分類のトレーニングと予測に必要なデータを準備します。データは、コンマ区切りの CSV ファイル(BOM なし・UTF-8)で用意します。

あやめの情報をまとめた CSV ファイルは、カルフォルニア大学アーバイン校のサイト からダウンロードできます。ダウンロードサイト bezdekIris.data ファイルが最新のものなので、今回はこのデータを利用します。

ファイルをダウンロードする用数

ダウンロードサイトから bezdekIris.data をマウスの右ボタンクリックで、ファイルをダウンロードします。これで、CSV ファイルの準備ができました。

ダウンロードしたファイルは、コンマ区切りの CSV ファイルで、以下の 5 項目で構成されています。

  • あやめのがく片の長さ(単位:cm)
  • あやめのがく片の幅(単位:cm)
  • あやめの花びらの長さ(単位:cm)
  • あやめの花びらの幅(単位:cm)
  • あやめの花の種類(Iris-versicolor・Iris-setosa・Iris-virginica)

DataEditor でデータを分割しよう

このデータを DataEditor に取り込んで、トレーニング用データと予測用データに分割して利用します。

トレーニングでは、あやめのがく片と花びらの情報(長さ・幅)とあやめの種類の間にどのような因果関係があるのかを学習させます。

トレーニング用データの解説図

ここでは、因果関係の原因となる項目(がく片の長さ・がく片の幅・花びらの長さ・花びらの幅)のことを「因子」と呼び、因果関係の結果となる項目(あやめの種類)のことを「結果となる値」と呼びます。

トレーニング用データは、下図のように「因子」→「結果となる値」の順に並べて、ひとまとまりのデータとします(ダウンロードしたデータの形式そのまま)。

トレーニング用データの形式図

データの見出しは、図のように英数字およびアンダースコア(_)で構成します(日本語は不可)。

予測では、モデルを使って未学習の因子から結果となる値を予測します。

予測用データの解説図

予測用データでは、「キー項目」と「因子」を使用します。キー項目は、ひとまとまりの予測用データ(1 行分のデータ)を特定するための値です。キー項目は、予測用データ全体でユニークな値でなければなりません。今回は、ユニークな番号をキー項目として用います。

予測用データは、下図のように「キー項目」と「因子」をひとまとまりのデータとします。

予測用データの形式図

データの見出しは、図のように英数字およびアンダースコア(_)で構成します(日本語は不可)。また、キー項目の見出しは、key でなければなりません

それでは、ダウンロードしたあやめのデータを DataEditor に取り込んで(インポート)、トレーニング用データと予測用データに分割していきます。

DataEditor を使ってダウンロードしたあやめのデータをトレーニング用データと予測用データに分割する様子を解説した図

ダウンロードしたあやめのデータには、不正なデータが混在している可能性があります。DataEditor によるデータの加工では、不正なデータをチェックし不正なデータがあればそれを除去した上で、トレーニング用データと予測用データに分割する手順を踏むことにします。

まず、ウェブブラウザーで、BLOCKS にログインしてください。

以下は、BLOCKS にログイン後の操作解説です。

DataEditor へ切り替える様子
  1. グローバルナビゲーション左端のメニューアイコン()をクリック
  2. DataEditor]をクリック

ダウンロードしたあやめのデータを DataEditor にインポートします。

DataEditor のインポート機能を実行する様子
  1. インポート]ボタンをクリック
ダウンロードしたあやめデータを取り込む様子
  1. インポート元から[Upload]をクリック
  2. GCS URL で -data で終わる項目をクリック
  3. ファイル欄に、bezdekIris.data ファイルをドラッグ・アンド・ドロップ
  4. 読み飛ばし行数を 0 に変更
  5. オプション]をクリック
  6. フィールド数が足りない行を許容する]のチェックボックスをチェック
  7. データセット ID の[]ボタンをクリックし、tutorial と入力
    既に tutorial がある場合はそれを選択
  8. 名前欄に、あやめの基礎データ と入力
  9. インポート]ボタンをクリック

DataEditor は、BigQuery 上のデータを視覚的に操作できるツールです。BigQuery に関する知識は必要ありませんが、BigQuery 上の重要な要素であるデータセットとテーブルは指定する必要があります。Microsoft Excel に例えると、データセットはブックで、テーブルはシートに対応する概念です。

DataEditor に取り込んだデータを開く様子

開く]をクリックします。

DataEditor のデータ操作画面

DataEditor にインポートしたデータを操作する画面が開きます。

データのインポートには成功しましたが、各列の見出しが自動付与されているため、どの列が何のデータが分かりづらくなっています。これを分かりやすい名前に変更します。

列の名前を変更する様子
  1. テーブル]タブをクリック
  2. 列の編集]をクリック
  3. 列の名前変更]をクリック
列の名前を変更する様子
  1. 変更後の列の名前を入力
  2. OK]ボタンをクリック

この操作をすべての列に対して行います。名前は、左から順に以下の名前に変更します。

  1. sepal_length
  2. sepal_width
  3. petal_length
  4. petal_width
  5. class

続いて、不正データの除去を行います。

不正データを含む行は、使い物にならないため、行ごと削除します。

欠損値を削除する様子
  1. sepal_length 列の[列の編集]をクリック
  2. 欠損値]をクリック
  3. 行の削除]をクリック

この操作を他のすべての列に対しても行います。

次に、予測で使用するキー項目をここで仕込んでおきます。これは、あとで予測結果と正誤の突き合わせを行うときに使用します。

列を追加する様子
  1. テーブルの操作]をクリック
  2. 列の追加]をクリック
シーケンシャル値の key 列を追加する様子
  1. 値から[シーケンシャル値]をクリック
  2. 列名に key と入力
  3. OK]をクリック

これで、ユニークな番号(連番)が key 列として追加されます。

更に、key 列の型を STRING(文字列)に変更しておきます。これは、予測時のキー項目は文字列でなければならないからです。

列の型を変更する様子
  1. key 列の[列の編集]をクリック
  2. 列の型変更]をクリック
INTEGER 型から STRING 型に変更する様子
  1. 型から[STRING]をクリック
  2. OK]ボタンをクリック
変更内容を確認する様子
  1. 変更内容]をクリック
  2. 表示される内容を確認

以下の内容が表示されていれば問題ありません。

  • 列の名前を double_field_0 から sepal_length に変更
  • 列の名前を double_field_1 から sepal_width に変更
  • 列の名前を double_field_2 から petal_length に変更
  • 列の名前を double_field_3 から petal_width に変更
  • 列の名前を string_field_4 から class に変更
  • sepal_length 列の欠損値の変更
  • sepal_width 列の欠損値の変更
  • petal_length 列の欠損値の変更
  • petal_width 列の欠損値の変更
  • class 列の欠損値の変更
  • key 列を追加
  • key 列の型を STRING に変更

各項目の右端に表示されている[×]をクリックすると、その変更内容を取り消せます。

変更内容を保存する様子

変更した内容を保存します。

  1. をクリック
  2. 上書き保存]をクリック

これで、あやめの基礎データが仕上がりました。続いて、このデータを元にトレーニング用データと予測用データに分割します。

これからテーブル分割する様子
  1. テーブルの操作]をクリック
  2. テーブル分割]をクリック

トレーニング用データと予測用データは、8:2 の割合でランダムに分割します(DataEditor 分割機能の初期値)。データ分割時に、データ列の取捨選択ができるため、トレーニング用データと予測用データでそれぞれ適切なデータ列の取捨選択を行います。

トレーニング用データと予測用データに分割する様子
  1. トレーニング用データの key 列のチェックを外す
    (トレーニング用データに必要のない「キー項目」を取り除く)
  2. 予測用データの class 列のチェックを外す
    (予測用データに必要のない「結果となる値」を取り除く)
  3. 分割]ボタンをクリック
分割完了の画面
  1. OK]ボタンをクリック

これで、数値分類のトレーニングと予測に必要なデーターの準備ができました。

DataEditor でトレーニングしよう

先ほど準備したトレーニング用データを使い DataEditor でトレーニングを行います。

トレーニング用データの操作画面へ切り替える様子
  1. あやめの基礎データ_train]をクリック
数値分類モデルを作成する様子
  1. モデル作成]タブをクリック
  2. 数値分類]をクリック
  3. Google Cloud Storage(ストレージ)のバケットを選択(初回のみ)
    バケット名の例:-us-central1-data で終わるバケット
  4. フォルダーを作成もしくは選択(初回のみ)
    フォルダー名の例:blocks_ml
  5. モデル作成]ボタンをクリック
トレーニング開始のメッセージ画面を閉じる様子
  1. 閉じる]ボタンをクリック

これで、トレーニングが始まります。トレーニングの所要時間は、4 〜 5 時間ほどです(時間はサーバー側の状況により前後)。しばらくお待ちください。

トレーニングの状況は、モデル一覧画面およびモデルの詳細画面で確認できます。

ホーム画面へ戻る様子
  1. <]をクリック
モデル一覧画面へ切り替える様子
  1. モデル]タブをクリック
トレーニングの状況を確認する様子

このモデル一覧画面で、各モデルのトレーニング状況が[誤差 / 正確率]欄で確認できます。

モデル名(❶)をクリックすると、そのモデルの更に詳細な情報が確認できます。❷のアイコンをクリックすると、[誤差 / 正確率]のトレーニング状況が更新できます。

トレーニング終了時の画面

トレーニングが成功で終わると、[誤差 / 正確率]の欄に正確率が表示され、以降フローデザイナーを使っての予測が可能です。

フローデザイナーで予測しよう

ここでは、フローデザイナーを使った予測方法を紹介します。

DataEditor では、リアルタイムな予測が可能ですが、予測のバッチ処理や予測の定期的な実行はできません。このチュートリアルでは、予測のバッチ処理や予測の定期的な実行が可能な、フローデザイナーによる予測方法を紹介します。

DataEditor による予測方法については、「DataEditor によるモデルの作成と予測」を参照願います。

フローデザイナーを準備しよう

予測は、フローデザイナーで行います。フローデザイナーのフローテンプレート作成機能を活用すると、簡単に画像分類を予測するためのフローが作成できます。このチュートリアルでは、このフローテンプレートを使った方法を解説します。

フローデザイナーへ切り替える様子
  1. グローバルナビゲーション左端のメニューアイコン()をクリック
  2. フローデザイナー]をクリック
フローデザイナーとはの画面
  1. 利用開始]ボタンをクリック

既にフローデザイナーを作成している場合は、「フローデザイナーとは」の画面は表示されません。後で述べるフローデザイナーの一覧画面が表示されます。その場合は、既存のフローデザイナーの名前をクリックして、以降の作業を進めてください。もし無料トライアル以外をお使いで、新たにフローデザイナーを作成できるライセンス枠がある場合は、フローデザイナー一覧画面の左上にある[追加]ボタンをクリックしてください。

ライセンス不足の場合は、その旨のメッセージが表示されます(管理者の場合は、ライセンス購入画面を表示)。メッセージが表示された場合は、組織の管理者に問い合わせてください(管理者の場合は、ラインセンスを購入してください)。

フローデザイナーを作成する様子
  1. フローデザイナーの名前を入力(例:チュートリアル
  2. 作成]ボタンをクリック
作成したフローデザイナーを開く様子
  1. チュートリアル]をクリック
予測フローを作成しよう

新しいタブでフローデザイナーが開きます。引き続き、フローテンプレート作成機能を使って、数値分類の予測を行うフローを生成します。

フローテンプレート機能を実行する様子

フローデザイナーのヘッダーから[フローテンプレート作成]ボタンをクリックします。

数値分類予測のフローテンプレートを作成する様子

作成するフローの種類を設定します。

  1. 数値分類予測]をクリック
  2. 次へ]ボタンをクリック
フロー名を入力する様子

作成するフローのフロー名を設定します。

  1. あやめの分類 と入力
  2. 次へ]ボタンをクリック
予測ブロックを設定する様子

ここでは、フローで使用する予測ブロックの設定を行います。

  1. モデル選択で[あやめの基礎データ_train_model(数値分類タイプ)]をクリック
  2. 予測形式選択で[オンライン予測]をクリック
  3. 次へ]ボタンをクリック
予測用データを設定する様子

ここでは、DataEditor で準備した予測用データを設定します。

  1. ストレージの選択で[DataEditor]をクリック
  2. データの名前で[あやめの基礎データ_test]をクリック
  3. 次へ]をクリック
予測結果の出力先を設定する様子

ここでは、予測結果をどこに出力するかを設定します。今回は、もっとも手軽に結果の確認ができる DataEditor を出力先とします。

  1. 保存先で[DataEditor]をクリック
  2. 次へ]ボタンをクリック

これで予測結果は、DataEditor の「あやめの基礎データ_test_result」に出力されます。

フローを配置する様子

最後に、フローを配置する場所を指定します。初期設定値の[現在のタブに表示する]を採用するため、そのまま[配置]ボタン(❶)をクリックします。

作成されたフローが下図の赤枠部分に配置されます。

フローを保存する様子

ここで、一旦[保存]ボタン(❶)をクリックして、フローを保存しておきます。

予測フローを実行して予測をしよう

これで、予測の準備ができました。早速、予測を試してみます。

フローを実行する様子

フロー先頭の「電力の需要予測」ブロック右端の アイコン(❶)をクリックします。表示されるメニュー中程の[フローの実行](❷)をクリックします。これで、電力の需要予測が実行されます。

ログを見る様子

予測の実行状況を確認するために、フローの実行ログを確認します。表示中のメニューから[ログを見る](❶)をクリックします。

ログのステータスが実行中であることをを確認する様子

画面下部に、ログパネルが表示されます。ログパネル左側のログリストのステータスでフローの実行状況が確認できます。フローの実行には、少々時間がかかるので、[実行中](❶)の表示になっているはずです。実行が終わるまで、しばらく待ちます。

ログのステータスが成功であることをを確認する様子

フローの実行が正常に終了すると、ログリストのステータスが[成功](❶)に変わります。これで予測は完了です。

DataEditor で予測結果を確認しよう

予測結果は、DataEditor のデータとして出力しているので、DataEditor で確認します。別タブにある BLOCKS の画面(フローデザイナーの一覧画面)に切り替えます。

DataEditor へ切り替える様子
  1. グローバルナビゲーション左端のメニューアイコン()をクリック
  2. DataEditor]をクリック
予測結果を開く様子
  1. リロードアイコンをクリック
  2. 名前が[あやめの基礎データ_test_result]をクリック
データを表示する様子
  1. テーブル]タブをクリック
  2. データを表示]をクリック
結果が表示された様子

各列のそれぞれの意味は、以下のとおりです。

名前 説明
key

予測用データで指定したキー項目です。

今回の例では、ユニークな数字です。

label

キーに対応した因子を元に予測した結果です。

今回の例では、あやめのがく片と花びらの長さや幅の情報を元に予測したあやめの種類です。

score

予測した結果の確からしさです。数値は、0 から 1 の範囲で、1 が 100% を示します。

score_Irissetosa
score_Irisvirginica
score_Irisversicolor

各分類ごとに、どのくらいの可能性があるかを示した数値のリストです。数値は、0 から 1 の範囲で、1 が 100% を示します。

予測結果が確認できたところで、予測値と実際の値を比較してみます。

実際の値は、「あやめの基礎データ」の中にあります。DataEditor の「テーブル結合」機能を使って、「あやめの基礎データ」の実際の値と「あやめの基礎データ_test_result」の予測結果(label)をひとつにまとめます。

テーブルの操作からテーブルの結合を選択する様子
  1. テーブルの操作]をクリック
  2. テーブル結合]をクリック
まとめる実績値のデータを指定する様子

まとめたい実際の値を含む「あやめの基礎データ」を指定します。

  1. 結合するテーブルを選択]をクリック
  2. あやめの基礎データ]をクリック

key 値が一致するデータをまとめる指定をします。

予測値と実際の値をまとめる様子
  1. key 列と label 列のチェックボックスをクリック
  2. class 列のチェックボックスをクリック
  3. 追加]ボタンをクリック
  4. key をクリック
  5. key をクリック
  6. 結合]ボタンをクリック

まとめたデータを格納する先を指定します。

まとめたデータの格納先を指定する様子
  1. 名前にあやめの分類の予実比較と入力
  2. データセット ID で tutorial をクリック
  3. テーブル ID に bezdekIris_compare と入力
  4. OK]ボタンをクリック
テーブル結合の確認画面

OK]ボタン(❶)をクリックします。これで予実績の確認準備が整いました。

電力の需要予測の予実比較を開く様子

名前が「あやめの分類の予実比較」をクリックします。

データ分析をクリックする様子
  1. テーブル]タブをクリック
  2. データを表示]をクリック
グラフ化対象の列と行を指定する様子

これで予測結果と実際の値を比較する表が表示されました。正誤を確認してみると、この例では 30 件中 29 件が正解していました。精度は約 97% という結果でした。

数値分類の評価について詳しくは、弊社ブログ記事「精度の評価と評価指標について(分類編)」を参考にしてください。

DataEditor のデータは、CSV ファイルに書き出せます(エクスポート)。CSV ファイルに書き出すことで、表計算ツールや分析ツールなどで様々な分析が可能です。

最後に、予実比較のデータを CSV ファイルにエクスポートしてみます。

  1. テーブルの操作]をクリック
  2. テーブルエクスポート]をクリック
  1. エクスポート先から[Google Cloud Storage]をクリック
  2. 出力先フォルダー(GCS)から末尾が -data の項目をクリック
  3. エクスポート]ボタンをクリック
ファイルをダウンロードする様子
  1. ファイル名をクリックして PC に CSV ファイルを保存
  2. OK]ボタンをクリック

エクスポート機能は、データを Google Cloud Storage にファイルを保存する機能ですが、エクスポート完了の画面で表示されるリンクをクリックすることで PC にもファイルが保存できます。

以上で、BLOCKS の数値分類のサービスをひととおり試したことになります。いかがだったでしょうか。意外と簡単だったのではないでしょうか。

操作中にエラーとなったら

DataEditor のモデル作成時のエラー内容は、モデル詳細画面の「エラーログ」で確認できます。以下に、そのエラー内容の確認方法を紹介します。

モデル一覧で失敗したトレーニングをクリックする様子
  1. モデル一覧の[誤差 / 正確率]の欄が[失敗]と表示されている名前をクリック
トレーニング詳細で失敗したトレーニングをクリックする様子
  1. エラーログ]をクリック
エラー内容を確認する様子
  1. コピー]ボタンをクリック
    エラーの内容がクリップボードにコピーされます。

フローデザイナーの場合は、先に紹介したログパネルで確認できます。

フローデザイナーのログパネルでのエラー内容の確認

エラー部分が赤字で表示されます。

エラーの原因を特定するには、エラー部分を中心に前後のメッセージも含めて読み解くと良いです(フローデザイナーは、[エラーログの詳細を表示]チェックボックスをチェック)。

エラーが発生し、何度リトライしても失敗するようであれば、グローバルナビゲーション右端のユーザーアイコンをクリックして表示される[お問い合わせ]からエラー内容をテキストファイル化したファイルを添付してお問い合わせください。エラー内容をテキストファイル化する場合は、赤字のエラー部分だけではなく、すべてのエラーメッセージを含めてください(フローデザイナーは、[エラーログの詳細を表示]チェックボックスをチェック)。

フローデザイナーでエラーが発生する場合は、フローをエクスポートした JSON ファイルも添付してください。

お問い合わせについて詳しくは、基本操作ガイドの「お問い合わせ」を参考にしてください。

まとめ

このように BLOCKS を使うと、データを準備するだけで、機械学習の専門的な知識は必要なく簡単に数値分類が利用できます。

ただし、データの準備に際し、留意点があります。準備するコンマ区切りの CSV ファイルは、BOM なし・UTF-8 にしてください。これ以外だと、BLOCKS で扱うことができません。

BOM なし・UTF-8 について詳しくは、弊社ブログの「MAGELLAN BLOCKSを利用する上で文字コードのお話し」を参考にしてください。

機械学習を使ってビジネスの課題を解決するには、チュートリアル同様にまずデータ収集から始めます。社内にある既存のデータを集めたり、新たにアンケートを採ってデータを集めたり、データを購入することもあります。更にそれらデータを精査し、データを選別したり、不正なデータを除去するなどのデータ加工の作業も必要です。このデータ収集と加工作業が、機械学習のステップの大半を占めると言っても過言ではありません。