オート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) |
| 特徴量選択の上限探索回数 | 2 | 10 | 自分で決める(既定 3) |
| 学習アルゴリズムの上限探索回数 | 2 | 10 | 自分で決める(既定 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. 一部の組み合わせが失敗して止まる
お題 — 探索の途中でエラーになり、最後まで走らない
入力 — 同上
設定 — オプションの「エラーを無視する」にチェック
出力 — 失敗した組み合わせを飛ばして、残りの中からいちばん良いものを選ぶ