コンテンツにスキップ

オートML

目的変数と説明変数を選ぶだけで、機械学習モデル(AutoML)を作ります。 前処理も、アルゴリズムの選択も、パラメータの調整も、nehan が精度のいい組み合わせを探します。作ったモデルが何を重視したかもボニートくんから読めます。

入出力

ポート内容
入力データ目的変数と説明変数を持つ学習用のデータ
モデル学習済みモデル。モデルで予測値算出につなぎます
構築モデル情報採用されたアルゴリズムと精度の要約
モデル補足情報説明変数ごとの重要度

ボニートくんの口が別にあります。 ノードには出ませんが、学習の結果はここを通って精度検証結果 / 機械が重視したデータ / 学習プロセス / 精度改善の余地 / モデル詳細情報として読めます。

Spark エンジンでは動きません。

設定項目

予測モードを選択必須
カテゴリ分類(既定)か数値予測。これを変えると、下の欄の選べる型も指標の並びも変わります。先に決めてください。
目的変数を選択必須
当てたい列。1 列だけ選びます。カテゴリ分類では数値列と文字列列、数値予測では数値列だけが選べます。
説明変数を選択必須
手がかりにする列。数値列と文字列列を複数選べます。目的変数と同じ列を入れるとエラーになります。
処理モードを選択
速度重視(既定)/ 精度重視 / カスタム。中身は下の表。
学習に使うデータの行数比率(0~1)
カスタムのときだけ出ます。何割を学習に使い、残りを精度の確認に回すか。既定は 0.5。
特徴量選択の上限探索回数(0以上)
カスタムのときだけ出ます。使う列の組み合わせを何回続けて外したら打ち切るかです。既定は 3。「何通り試すか」の上限ではありません(下の節)。
学習アルゴリズムの上限探索回数(0以上)
カスタムのときだけ出ます。アルゴリズムとパラメータの組み合わせを何回続けて外したら打ち切るかです。既定は 3。

オプション

最大化する指標を選択
カテゴリ分類のときだけ出ます。正解率[Accuracy](既定)/ F値[F1] / 再現率[Recall] / 適合率[Precision]。この値がいちばん大きくなるモデルを選びます。
最小化する指標を選択
数値予測のときだけ出ます。平均絶対相対誤差[MAPE](既定)/ 平均絶対誤差[MAE] / 二乗平均平方根誤差[RMSE]。数値予測はずれの小ささを競うので、いちばん小さくなるモデルを選びます。
グループごとにモデルを作成する
チェックを入れると、下に列を選ぶ欄が出ます。店舗ごと・商品ごとに別のモデルを作りたいときに使います。
グルーピングする列を選択
上のチェックを入れたときだけ出ます。この列の値ごとにデータを分け、それぞれでモデルを作ります。
エラーを無視する
探索の途中で学習に失敗した組み合わせがあっても、そこで止めずに次の組み合わせへ進みます。全部失敗したときはエラーになります。

処理モードで何が変わるか

見るところ速度重視(既定)精度重視カスタム
学習に使うデータの行数比率30%70%自分で決める(既定 0.5)
特徴量選択の上限探索回数210自分で決める(既定 3)
学習アルゴリズムの上限探索回数210自分で決める(既定 3)
アンサンブルモデルを作るしないするする

速度重視は、使うデータも探索回数も絞ります。 まず当たりを付けるときに向きます。

精度重視は探索回数が増えるぶん、過学習のリスクが上がります。 精度検証結果の過学習リスクを合わせて確かめてください。

中で試していること

前処理

精度が最大になるように、自動的に組み合わせを選びます。

  • 欠損値の補完(欠損のある列があるときだけ)
  • 数値列の変換(Box-Cox 変換)
  • 文字列の変換(ワンホットエンコーディングなど)
  • 外れ値の除去
  • 列同士の四則演算による新しい列の生成
  • 使う列の絞り込み

学習に使うアルゴリズム

オートMLが試すのは次の 4 つです。

  • ランダムフォレスト
  • XGBoost
  • LightGBM
  • CatBoost

速度重視以外では、上の 2 つ以上を混ぜたアンサンブルモデルも候補に入ります。

手法を自分で決めたいときや、線形回帰・決定木・SVM を使いたいときはマニュアルMLを使ってください。

探索のしかた

全部の組み合わせを試すのではなく、良さそうな方向を推し量りながら次の組み合わせを決めます(ベイズ最適化)。そのぶん短い時間で高い精度に届きます。

何回試すのか

「上限探索回数」は打ち切りの条件で、試す回数の上限ではありません。 探索は次の 3 つのどれかに当たるまで続きます。

止まる条件値
成績がそれ以上良くならないまま続いた回数が「上限探索回数」に達した速度重視 2 / 精度重視 10 / カスタムは入れた値(既定 3)
試した組み合わせの数が上限に達した100 通り(処理モードでは変わりません)
かかった時間が上限に達した1 時間(同上)

「上限探索回数」を大きくするほど、あきらめずに探し続けます。 小さくすると、当たりが出なくなった時点で早めに切り上げます。どちらにしても 100 通り・1 時間を超えて探すことはありません。

出力に何が入るか

構築モデル情報(真ん中のポート)

項目中身
採用モデル選ばれた学習アルゴリズムの名前
期待(指標名)オプションで選んだ指標の値。指標名はそのまま入るので、正解率を選んでいれば 期待正解率[Accuracy] になります
精度評価その値が良いか悪いかの判定
過学習リスク(10 段階)大きいほど過学習している可能性が高い

モデル補足情報(右のポート)

説明変数ごとの重要度です。数値が大きいほど、機械が重視した列です。読み方は機械が重視したデータにあります。

実行時間のめやす

下は旧版のマニュアルから引き継いだ参考値で、測定条件は確かめられていません。 同じ設定でも、列の数と行数で大きく変わります。目安としてだけ見てください。

処理モード=速度重視

予測モード説明変数の数行数実行時間
カテゴリ分類8約 2,000 行30 秒
数値予測10約 5,000 行50 秒
カテゴリ分類20約 41,000 行5 分 30 秒
カテゴリ分類30約 120,000 行5 分 10 秒
数値予測25約 840,000 行31 分 40 秒

処理モード=精度重視

予測モード説明変数の数行数実行時間
カテゴリ分類8約 2,000 行6 分 50 秒
数値予測10約 5,000 行6 分 30 秒
カテゴリ分類20約 41,000 行8 分 30 秒
カテゴリ分類30約 120,000 行33 分 40 秒
数値予測25約 840,000 行メモリエラー

エラーと対処

どのエラーも、設定を直して実行し直せば消えます。 学習は途中の状態を残さないので、やり直しても前の結果は壊れません。

目的変数が説明変数にも入っている

(列名)が説明変数の列にも選択されているので実行できません。説明変数から取り除くか、目的変数の列を変更してください。

直し方 — 説明変数の選択からその列を外します

目的変数に欠損がある

目的変数に欠損値が含まれています。

直し方 — 欠損値処理で埋めるか、条件で行をフィルタで欠損のある行を外します

目的変数が 1 種類しかない

目的変数が1種類しかないためモデルの推定ができません。

直し方 — 目的変数に 2 種類以上の値があるデータを使います。絞り込みで片方が消えていないか確かめてください

学習データが足りない

学習データが不足しているため推定できません。入力データを増やすか、学習モードを変更してください。

直し方 — 行を増やすか、処理モードをカスタムにして「学習に使うデータの行数比率」を上げます

データが少なくて学習できない

データが少ないためモデルの学習に失敗しました。

直し方 — 行を増やすか、説明変数を減らします

検証用のデータにだけある値がある

訓練データに存在しない目的変数が検証データに存在します。処理モード設定でデータ分割方法を調整してください。

直し方 — 処理モードをカスタムにして「学習に使うデータの行数比率」を上げるか、件数の極端に少ないカテゴリをまとめます

文字列列の種類が多すぎる

列: (列名) のユニーク数が多すぎるためOneHotEncodeに失敗しました。LabelEncodeをお試しください。

直し方 — その列を説明変数から外すか、文字の置換でまとめて種類を減らします

目的変数のカテゴリが多すぎる

目的変数のカテゴリが多すぎるためモデルの推定に失敗しました。数値予測をお試しください。

直し方 — 予測モードを数値予測に変えるか、カテゴリをまとめます

カテゴリ分類で使えない精度指標

カテゴリ予測の場合は精度指標を正解率、F値、再現率、適合率から選択してください。

直し方 — 正解率・F値・再現率・適合率から選びます

数値予測で使えない精度指標

数値予測の場合は精度指標を平均絶対誤差、二乗平均平方根誤差、平均絶対相対誤差から選択してください。

直し方 — 平均絶対誤差・二乗平均平方根誤差・平均絶対相対誤差から選びます

メモリが足りない

データが大きいとき、学習の途中で止まります。上の実行時間のめやすで「メモリエラー」になっている組み合わせがこれです。 使っているエンジンで文言が変わります。

リソース不足のため処理を停止しました。契約プランアップをご検討ください。

Spark エンジンのときはこちらです。

計算リソースが不足しています。nehanへお問い合わせください。

直し方 — 処理モードを速度重視に変えるか、説明変数を減らすか、シンプルなサンプリングで行数を減らしてから学習します。特徴量選択で効く列だけに絞るのも手です。

よく使う例

1. どの手法がよいか分からないとき

お題 — 予測したい列はあるが、使うアルゴリズムが決められない

入力 — 目的変数と説明変数がそろった学習用データ

設定 — 予測モードを選び、目的変数と説明変数を指定。処理モードは既定の速度重視

出力 — 4 つのアルゴリズムが試され、精度のいいモデルが 1 つ出る

2. まず当たりを付けてから作り込む

お題 — 本番用のモデルを作る前に見込みを知りたい

入力 — 同上

設定 — 速度重視で実行し、精度検証結果を見る

出力 — 精度が足りそうなら処理モードを精度重視に上げるか、マニュアルMLで設定を詰める

3. 外す側を減らしたい

お題 — 見逃しを減らしたいのに、正解率だけ見ていても足りない

入力 — 当たり外れの偏ったデータ(例: 解約が 1 割)

設定 — 予測モードはカテゴリ分類、オプションの「最大化する指標を選択」に 再現率[Recall]

出力 — 当たりを拾う方向に寄せたモデルになる

4. 店舗ごとに別のモデルを作る

お題 — 店によって売れ方の傾向が違う

入力 — 店舗コードの列を持つ学習用データ

設定 — オプションの「グループごとにモデルを作成する」にチェックし、グルーピングする列に店舗コード

出力 — 店舗ごとのモデルが 1 つにまとまって出る。モデルで予測値算出に渡すと、予測側でも同じ列で振り分けます

5. 一部の組み合わせが失敗して止まる

お題 — 探索の途中でエラーになり、最後まで走らない

入力 — 同上

設定 — オプションの「エラーを無視する」にチェック

出力 — 失敗した組み合わせを飛ばして、残りの中からいちばん良いものを選ぶ

関連