マニュアルML
使うアルゴリズムと前処理を自分で決めて、機械学習モデル(ManualML)を作ります。 オートMLが全部おまかせなのに対して、こちらは候補を絞り込めます。候補を複数入れておけば、その中でいちばん精度の高い組み合わせを探します。
モデル作りだけでなく、回帰分析・決定木分析・要因分析にも使えます。作ったモデルが何を重視したかはボニートくんから読めます。
入出力
| ポート | 内容 |
|---|---|
| 入力データ | 目的変数と説明変数を持つ学習用のデータ |
| モデル | 学習済みモデル。モデルで予測値算出につなぎます |
| 構築モデル情報 | 採用されたアルゴリズムと精度の要約 |
| モデル補足情報 | 回帰系なら説明変数ごとの係数など、それ以外なら重要度 |
ボニートくんの口が別にあります。 ノードには出ませんが、学習の結果はここを通って精度検証結果 / 機械が重視したデータ / 学習プロセス / 精度改善の余地 / モデル詳細情報として読めます。
Spark エンジンでは動きません。
設定項目
- 予測モードを選択必須
- カテゴリ分類(既定)か数値予測。これを変えると、選べるアルゴリズムも指標も入れ替わりますので、先に決めてください。
- 目的変数を選択必須
- 当てたい列。1 列だけ選びます。カテゴリ分類では数値列と文字列列、数値予測では数値列だけが選べます。
- 説明変数を選択必須
- 手がかりにする列。複数選べます。目的変数と同じ列を入れるとエラーになります。
- 機械学習の設定必須
- 試すアルゴリズム。複数選べます。選べる顔ぶれは予測モードで変わります(下の表)。
- 変量効果グループ変数を選択
- 線形混合効果モデルを選んだときだけ出ます。グループを表す列を 1 つ選びます。欄が出ているあいだは空のままにできません。
- 変量効果の説明変数を選択
- 線形混合効果モデルを選んだときだけ出ます。グループごとに効き方が変わる数値列を選びます。欄が出ているあいだは空のままにできません。
- パラメータ設定
- アルゴリズムを 1 つ以上選ぶと出るボタン。押すとダイアログが開き、アルゴリズムごとのパラメータを決められます。ボタンの左のバッジが、何も変えていなければ既定のまま、変えてあれば
n モデルになり、下にアルゴリズムが 1 件 1 行で並びます。 - モデル構築前に前処理を行う
- 既定でON。ON のときだけ下に前処理設定ボタンが出ます。OFF にすると前処理をまったくしないので、欠損や文字列が残っていると学習が止まります。
- 前処理設定
- 押すとダイアログが開き、どの前処理をどの列に当てるかを決められます。ボタンの左のバッジが
n 処理になり、下に入れた前処理が 1 件 1 行で並びます。 - 処理モードを選択
- 速度重視(既定)/ 精度重視 / カスタム。中身は下の表。
- 学習に使うデータの行数比率(0~1)
- カスタムのときだけ出ます。何割を学習に使い、残りを精度の確認に回すか。既定は
0.5。 - 特徴量選択の上限探索回数(0以上)
- カスタムのときだけ出ます。使う列の組み合わせを何回続けて外したら打ち切るかです。既定は
3。「何通り試すか」の上限ではありません(下の節)。 - 学習アルゴリズムの上限探索回数(0以上)
- カスタムのときだけ出ます。アルゴリズムとパラメータの組み合わせを何回続けて外したら打ち切るかです。既定は
3。
オプション
- 最大化する指標を選択
- カテゴリ分類のときだけ出ます。正解率[Accuracy](既定)/ F値[F1] / 再現率[Recall] / 適合率[Precision]。この値がいちばん大きくなるモデルを選びます。
- 最小化する指標を選択
- 数値予測のときだけ出ます。平均絶対相対誤差[MAPE](既定)/ 平均絶対誤差[MAE] / 二乗平均平方根誤差[RMSE]。数値予測はずれの小ささを競うので、いちばん小さくなるモデルを選びます。
- グループごとにモデルを作成する
- チェックを入れると、下に列を選ぶ欄が出ます。店舗ごと・商品ごとに別のモデルを作りたいときに使います。
- グルーピングする列を選択
- 上のチェックを入れたときだけ出ます。この列の値ごとにデータを分け、それぞれでモデルを作ります。
- エラーを無視する
- 探索の途中で学習に失敗した組み合わせがあっても、そこで止めずに次へ進みます。全部失敗したときはエラーになります。
選べるアルゴリズム
予測モードで顔ぶれが変わります。
| アルゴリズム | カテゴリ分類 | 数値予測 |
|---|---|---|
| ランダムフォレスト | ○ | ○ |
| LightGBM | ○ | ○ |
| XGBoost | ○ | ○ |
| CatBoost | ○ | ○ |
| SVM | ○ | ○ |
| 決定木 | ○ | ○ |
| 線形回帰 | × | ○ |
| 一般化線形モデル | × | ○ |
| 線形混合効果モデル | × | ○ |
| ロジスティック回帰 | × | ○ |
複数選ぶと、その中で最も精度の高いものが採用されます。 1 つだけ選べば、その手法だけで作ります。
乱数シード
共通の欄ではなく、パラメータ設定ダイアログの中にあります。 ランダムさを持つアルゴリズム(ランダムフォレスト・XGBoost・LightGBM・CatBoost・SVM・決定木)を選んだときに、そのアルゴリズムの設定として 乱数シード の欄が出ます。整数を入れると毎回同じモデルになります。複数の値を入れると、その中から精度のいいものを探します。
線形回帰・一般化線形モデル・線形混合効果モデル・ロジスティック回帰にはこの欄がありません。これらは同じデータなら毎回同じ結果になるためです。考え方は乱数シードを参照してください。
パラメータ設定ダイアログ
左にアルゴリズムの一覧、右に選んだアルゴリズムのパラメータが並びます。左の一覧でアルゴリズムを選ぶと、右の中身が切り替わります。
値は複数入れられます。 入れた値の組み合わせを探索し、最も精度の高いものを採用します。
アルゴリズムごとのパラメータ
| アルゴリズム | 決められるもの |
|---|---|
| ランダムフォレスト | 作成する木の数 / criterion / 決定木作成の際に使用する説明変数の数 / 乱数シード |
| XGBoost | モデルの種類 / 作成する木の数 / 学習率(eta) / 重みの合計値の最小値 / 木の深さの最大値 / 枝の分割の際の損失関数の閾値(gamma) / 各木においてランダムに抽出される標本の割合 / 各木においてランダムに抽出される列の割合 / 重みに関するL1正則化項(alpha) / 重みに関するL2正則化項(lambda) / 乱数シード |
| LightGBM | 枝葉の数の最大値 / 木の深さの最大値 / 学習率 / 作成する木の数 / 乱数シード |
| CatBoost | 作成する木の数 / 木の深さの最大値 / 学習率 / ランダムストレングス / バギングテンパーチャー / 過学習検出器の種類 / 乱数シード |
| SVM | カーネルの種類 / 次元の値 / 乱数シード |
| 決定木 | 木の深さの最大値 / 枝葉のサンプル数の最小値 / 枝分割の際のサンプル数の最小値 / 乱数シード |
| 線形回帰 | 切片項を除外 |
| ロジスティック回帰 | 切片項を除外 |
| 一般化線形モデル | 分布族 / 切片項を除外 |
| 線形混合効果モデル | 切片項を除外 |
前処理設定ダイアログ
モデル構築前に行う前処理を、種類ごとに決めるダイアログです。 入れた手法の組み合わせを探索し、最も精度の高いモデルを作ります。
左に前処理の種類が縦に並び、選んだ種類の設定が右に出ます。種類ごとに、設定が入っているか・設定に問題があるかが印で分かります。
印は 2 種類です。 緑のチェックは設定が入っていること、印がないのは何も入れていないことを表します。印がなくても実行はできます(その前処理を当てないだけです)。
決められる前処理と手法
| 前処理の種類 | 選べる手法 |
|---|---|
| 欠損値処理(数値) | 欠損値を予測して補完 / 平均値補完 / 中央値補完 / 最頻値補完 / 固定値補完 |
| 欠損値処理(文字列) | 最頻値補完 / 固定値補完 |
| 文字列変換 | LabelEncode / OneHotEncode |
| 数値列変換 | 標準化 / MinMax正規化 / ロバストZscore正規化 / boxcox変換 / 対数変換 |
| 外れ値処理 | IsolationForest / LocalOutlierFactor |
| 特徴量選択 | 特徴量選択を行わない / 影響度上位1列、2列、3列…と全列試す / 影響度上位から何列選択するかを自分で設定する |
固定値補完を選んだときは、補完する値を入れる欄が出ます。 複数入れると、その中から精度のいいものを探します。
対象列とルール
各前処理では、当てる列を選べます。はじめは全部の列が対象になっているので、外したい列のチェックを外します。
ルールを足すと、列ごとに別の手法を試せます。 たとえばこんな組み合わせになります。
- 列 A と列 B には、平均値補完か中央値補完のどちらか良いほう
- 列 C には、中央値補完か最頻値補完のどちらか良いほう
ルールを全部消すと、その前処理自体を当てません。
「処理を行わない場合とも比較する」 を入れると、その前処理を当てない場合も候補に加えて比べます。
処理モードで何が変わるか
| 見るところ | 速度重視(既定) | 精度重視 | カスタム |
|---|---|---|---|
| 学習に使うデータの行数比率 | 30% | 70% | 自分で決める(既定 0.5) |
| 特徴量選択の上限探索回数 | 2 | 10 | 自分で決める(既定 3) |
| 学習アルゴリズムの上限探索回数 | 2 | 10 | 自分で決める(既定 3) |
| アンサンブルモデルを作る | しない | する | する |
探索はベイズ最適化です。 全部の組み合わせを試すのではなく、良さそうな方向を推し量りながら次を決めるので、短い時間で高い精度に届きます。
何回試すのか
「上限探索回数」は打ち切りの条件で、試す回数の上限ではありません。 探索は次の 3 つのどれかに当たるまで続きます。
| 止まる条件 | 値 |
|---|---|
| 成績がそれ以上良くならないまま続いた回数が「上限探索回数」に達した | 速度重視 2 / 精度重視 10 / カスタムは入れた値(既定 3) |
| 試した組み合わせの数が上限に達した | 100 通り(処理モードでは変わりません) |
| かかった時間が上限に達した | 1 時間(同上) |
「上限探索回数」を大きくするほど、あきらめずに探し続けます。 小さくすると、当たりが出なくなった時点で早めに切り上げます。どちらにしても 100 通り・1 時間を超えて探すことはありません。
出力に何が入るか
構築モデル情報(真ん中のポート)
項目と値の 2 列で、4 行出ます。
| 項目 | 中身 |
|---|---|
| 採用モデル | 選ばれた学習アルゴリズムの名前 |
| 期待(指標名) | オプションで選んだ指標の値。指標名はそのまま入るので、正解率を選んでいれば 期待正解率[Accuracy] になります |
| 精度評価 | その値が良いか悪いかの判定 |
| 過学習リスク(10段階) | 大きいほど過学習している可能性が高い |
モデル補足情報(右のポート)
採用されたアルゴリズムによって中身が変わります。
| 採用モデル | 出る列 |
|---|---|
| 線形回帰 / 一般化線形モデル | 説明変数 / 係数 / 標準偏差 / t値 / Pr(>|t|) / 目的変数との相関係数 |
| ロジスティック回帰 / 線形混合効果モデル | 上の 6 列のうち、目的変数との相関係数 を除いた 5 列 |
| それ以外(ランダムフォレスト / LightGBM / XGBoost / CatBoost / SVM / 決定木) | 特徴量名 / 重要度。大きいほど機械が重視した列 |
線形混合効果モデルで出るのは固定効果のぶんだけです。 グループごとの変量効果はこの表には出ません。
「切片項を除外」を off にしていると、説明変数ではない行が 1 行増えます。 線形回帰・一般化線形モデル・ロジスティック回帰では const、線形混合効果モデルでは __intercept__ という名前で、どちらも切片です。
エラーと対処
どのエラーも、設定を直して実行し直せば消えます。 学習は途中の状態を残さないので、やり直しても前の結果は壊れません。
説明変数に文字列が混ざっている
説明変数に文字列型が含まれる場合は前処理設定で文字列変換を設定をしてください。
直し方 — 前処理設定の 文字列変換 に手法を入れます。「モデル構築前に前処理を行う」が OFF になっていないかも確かめてください
説明変数の数値列に欠損がある
説明変数の数値列型が欠損している場合は前処理設定で欠損値処理(数値)を設定をしてください。
直し方 — 前処理設定の 欠損値処理(数値) に手法を入れます
説明変数の文字列列に欠損がある
説明変数の文字列型が欠損している場合は前処理設定で欠損値処理(文字列)を設定をしてください。
直し方 — 前処理設定の 欠損値処理(文字列) に手法を入れます
アルゴリズムが未選択
アルゴリズムを選択してください。
直し方 — 「機械学習の設定」で 1 つ以上選びます
変量効果グループ変数が未選択
線形混合モデルを学習する場合はグループ変数を指定してください
直し方 — 「変量効果グループ変数を選択」で列を 1 つ選びます。線形混合効果モデルを使わないなら、「機械学習の設定」から外します
変量効果の説明変数が未選択
線形混合モデルを学習する場合は変量効果の説明変数を指定してください
直し方 — 「変量効果の説明変数を選択」で数値列を選びます
目的変数が説明変数にも入っている
(列名)が説明変数の列にも選択されているので実行できません。説明変数から取り除くか、目的変数の列を変更してください。
直し方 — 説明変数の選択からその列を外します
目的変数に欠損がある
目的変数に欠損値が含まれています。
直し方 — 欠損値処理で埋めるか、条件で行をフィルタで欠損のある行を外します
目的変数が 1 種類しかない
目的変数が1種類しかないためモデルの推定ができません。
直し方 — 目的変数に 2 種類以上の値があるデータを使います
学習データが足りない
学習データが不足しているため推定できません。入力データを増やすか、学習モードを変更してください。
直し方 — 行を増やすか、処理モードをカスタムにして「学習に使うデータの行数比率」を上げます
前処理で行が足りなくなった
データが少ないためモデルの学習に失敗しました。
直し方 — 前処理の途中で使える行がなくなっています。外れ値処理を外すか、行を増やします
目的変数の値がすべて同じ
目的変数の値が一意なためモデルの推定ができません。
直し方 — 数値予測で回帰系(線形回帰・一般化線形モデル・ロジスティック回帰)を選んだときに出ます。目的変数に幅のあるデータを使います
検証側にしかない値がある
訓練データに存在しない目的変数が検証データに存在します。処理モード設定でデータ分割方法を調整してください。
直し方 — 分け方のゆらぎで起きます。処理モードをカスタムにして「学習に使うデータの行数比率」を上げるか、まれな値の行を増やします
説明変数どうしが似すぎている
説明変数間で独立でないものが存在します。相関の高い説明変数の組み合わせのうち片方を除去してください。
直し方 — 回帰系のアルゴリズムで出ます。似た動きをする説明変数のどちらかを外します
逆行列が計算できない
逆行列が存在しないため計算できません。説明変数を再選択してください。
直し方 — 線形混合効果モデルで出ます。説明変数か変量効果の説明変数を選び直します
文字列列の種類が多すぎる
列: (列名) のユニーク数が多すぎるためOneHotEncodeに失敗しました。LabelEncodeをお試しください。
直し方 — 前処理設定の 文字列変換 を LabelEncode にするか、文字の置換で種類を減らします
目的変数のカテゴリが多すぎる
目的変数のカテゴリが多すぎるためモデルの推定に失敗しました。数値予測をお試しください。
直し方 — 予測モードを数値予測に変えるか、カテゴリをまとめます
カテゴリ分類で使えない精度指標
カテゴリ予測の場合は精度指標を正解率、F値、再現率、適合率から選択してください。
直し方 — 正解率・F値・再現率・適合率から選びます
数値予測で使えない精度指標
数値予測の場合は精度指標を平均絶対誤差、二乗平均平方根誤差、平均絶対相対誤差から選択してください。
直し方 — 平均絶対誤差・二乗平均平方根誤差・平均絶対相対誤差から選びます
よく使う例
1. 使う手法を 1 つに決めて作る
お題 — 社内で決まっている手法で作りたい
入力 — 目的変数と説明変数がそろった学習用データ
設定 — 機械学習の設定に LightGBM だけを選ぶ
出力 — LightGBM のモデルが 1 つ。パラメータだけが探索される
2. 欠損や文字列が混ざったまま学習する
お題 — 前のノードで整えずに、そのまま学習に入れたい
入力 — 欠損のある数値列と、文字列の列を含むデータ
設定 — 前処理設定で 欠損値処理(数値) に中央値補完、文字列変換 に LabelEncode を入れる
出力 — 学習時と予測時で同じ前処理が掛かるモデル。モデルで予測値算出でも同じ処理が再現されます
3. なぜその予測になったかを説明したい
お題 — モデルの中身を人に説明する必要がある
入力 — 数値予測のデータ
設定 — 予測モードを数値予測、機械学習の設定に 線形回帰
出力 — モデル補足情報に説明変数ごとの係数が出て、どの列がどちら向きに効いたかが読める
4. 木の深さを変えて比べる
お題 — 過学習しているので、モデルを単純にしたい
入力 — 同上
設定 — 決定木を選び、パラメータ設定で「木の深さの最大値」に 3、5、7 を入れる
出力 — 3 つの深さが試され、精度のいいものが採用される。精度検証結果の過学習リスクで効き目を確かめます
5. グループごとに別のモデルを作る
お題 — 店によって傾向が違う
入力 — 店舗コードの列を持つ学習用データ
設定 — オプションの「グループごとにモデルを作成する」にチェックし、グルーピングする列に店舗コード
出力 — 店舗ごとのモデルが 1 つにまとまって出る