オートML
データ内の目的変数列や説明変数列を指定して、機械学習モデルを構築できます。
オート ML は機械学習におけるデータ前処理、学習アルゴリズムの選択、パラメータチューニングを自動で行います。
また、構築したモデルが何を重視したかなどの解釈を行うための情報も提供します。
入出力定義
定義 | 内容 | 補足 |
---|---|---|
入力 | データ | |
左出力 | 機械学習モデル | |
中出力 | データ | モデルの精度指標を出力 |
右出力 | データ | 説明変数の重要度などの指標を出力 |
ボニートくん | 精度検証結果 | |
ボニートくん | 機械が重視したデータ | |
ボニートくん | 学習プロセス | |
ボニートくん | 精度改善の余地 | |
ボニートくん | モデル詳細情報 |
サンプル
ボニートくん
精度検証結果
機械学習モデル構築後、まず最初に確認すべきは、構築したモデルが良い性能を期待できるか、だと考えます。
処理設定のオプション「最も重視する指標」で設定した指標のゲージが最も大きく表示され、その評価はトップのテキストでも表現されます。
精度指標
ゲージは 3 色に分かれ、針がどこを指しているかで評価を瞬時に把握できます。
色 | 評価 |
---|---|
緑 | Great! |
黄 | まぁまぁ |
赤 | 低い |
閾値の定義
緑、黄、赤を分ける閾値はデータによって異なります。大まかに記載すると下記の通りです。
- 赤と黄の境目: データを無視してランダムに予測した場合の予測精度
- 黄と緑の境目: MAX の精度と上記 1 との中間の値
つまり「低い」評価(赤)を受けたモデルは、わざわざ nehan を使って構築したのにも関わらず、適当に予測した場合より劣っているという屈辱的な評価である点に注意してください。 1 の詳細の定義については下記の通りです。
カテゴリ分類モード
予測値を全て同じカテゴリとした場合、どのくらい当たるか?を算出しています。
例えばデータの目的変数に、“生存”が 90 行、“死亡”が 10 行の場合、適当に全部生存と予測すると 90%正解になります。
ゆえに、90%を下回る精度は「低い」、95%以上が「高い」と評価されます。
数値予測モード
予測値を全て目的変数の平均値とした場合、どのくらいの誤差がでるか?を算出しています。
例えば上記の場合、平均で 10%誤差だとし、それを超えると「何も考えず平均値を予測値としたほうがマシ」という評価になります。
ゆえに、10%誤差を上回る精度は「低い」、5%誤差を下回れば「高い」と評価されます。
カテゴリ分類の精度指標
予測結果と実際の値の混合行列を例に上げ、各指標の定義を記載します。
目的変数 | “1”と予測 | “0”と予測 |
---|---|---|
実際は”1” | ① | ② |
実際は”0” | ③ | ④ |
正解率(Accuracy)
予測がどれだけ正解したか?
(① + ④) / (① + ② + ③ + ④)
再現率(Recall)
実際に正であったもののうち、どれだけ正と予測できたか?
① / (① + ②)
適合率(Precision)
正と予測したものが、どれだけ正しかったか?
① / (① + ③)
F 値(F1)
Recall と Precision を均等に評価した指標
2 * Recall * Precision / (Recall + Precision)
数値予測の精度指標
平均絶対相対誤差(MAPE)
予測が実測に対して何%くらいはずれるか?
各行ごとに|予測値 - 実測値|/実測値
を算出し平均した値です。
平均絶対誤差(MAE)
予測が実測に対してどのくらいはずれるか?
各行ごとに|予測値 - 実測値|
を算出し平均した値です。
二乗平均平方根誤差(RMSE)
各行ごとに(予測値-実測値)^2
を算出して平均をとり、その平均値に対して平方根を取った値です。
この指標は誤差が大きい行があればあるほど、値が大きくなり、誤差を厳しく評価できる指標です。
過学習リスク
過学習とは、予測モデルがデータの細かい規則性を学習しすぎた状態のことを言います。
過学習が起きると、教師あり学習ノードで算出した精度が別のデータ(未知のデータ)で再現しない恐れがあります。
このリスクを 10 段階で評価したものを過学習リスクと呼び、大きくなればなるほど過学習している可能性が高いと言えます。
算出方法
訓練データで構築した予測モデルにて、訓練データ、検証データをそれぞれ予測し、精度の乖離度合いにてリスクを算出します。
乖離が少なければ、過学習リスクは低くなり、逆に乖離が激しいとリスクが高まります。
原因と対策
リスクが高い原因は
- 訓練データが少なすぎる
- 最適な機械学習パラメータなどを探索しすぎている
等が挙げられます。
これらは「処理モード」の”カスタム”設定にてコントロールができ、調整することでリスクが下がる可能性があります。
混合行列
予測の正解状況をより細かく観察できます。
予測を外したケースだと例えば、“x”と予測したけど(横)実際は”y”(縦)のデータの個数 or 何%あるか、が確認できます。
どこで予測が外れているのか、を認識することで、精度改善のヒントを得られる可能性があります。
数値予測の場合
目的変数(実測値)の最小値から最大値までの範囲をデータの数が等しくなるように 5 等分し、各範囲ごとに予測と実測のデータ数を比較できるようにしています。
精度分解
分類であればカテゴリごと、数値予測であれば範囲ごとに、指標を比較できます。
例えば”生存”と”死亡”の 2 値分類を予測する場合、“生存”と予測できないのか?それとも”死亡”と予測できていないのか?を把握することが可能です。
学習曲線
ブースティングタイプの学習アルゴリズム「XGBoost」「LightGBM」のみ表示される補助情報です。
上記の「過学習リスク」と近しい情報を得ることができ「訓練データの精度」と「検証データの精度」が右に行くとどれだけ乖離するかが注目点です。
乖離が激しいと過学習のリスクが高いと言えます。
機械が重視したデータ
モデル構築にあたり、重要な列およびその要素が把握できます。 モデル内部の把握はもちろん、要因分析の視点でも活用できる機能です。
影響度比較
モデル構築にあたり、どの列を重視されたかが把握できます。
上にある列ほど、重要であることを意味します。
なおオート ML の場合、新規生成された列が交じる場合があります。(列 1+列 2、といった演算により生まれた新規列)
列ごとに詳細を観察
下部のフィルタボックスで列名を指定することで、その列内のどの要素が重視されたかが確認できます。
文字列の場合はカテゴリごとに、数値列の場合は数値範囲ごとに、どこに影響したかを表現します。
文字列の例
下記の「性別」列を題材にします。カテゴリ分類モードでモデルを構築しています。
- “1”への分類根拠: “female”
- “0”への分類根拠: “male”
と読み取ることができ、
- 「性別」列の値が”female”であれば”1”に
- “male”であれば”0”に分類されやすい
と解釈できます。
数値列の例
下記の「年齢」列を題材にします。カテゴリ分類モードでモデルを構築しています。
まず、範囲分解のグラフを見ると
- 年齢が低いほど青、つまり”1”への分類傾向が強い
- 年齢が高いほど赤、つまり”0”への分類傾向が強い
と読み取れます。また、数値範囲詳細に着目すると
- 14 歳以下は最も”1”へ分類されやすい範囲
- 33~39 際は最も”0”へ分類されやすい範囲
と解釈することができます。
学習プロセス
入力データがどう前処理され、アルゴリズムを適用し、精度検証をおこなかったか、といったプロセスを把握できます。
全体プロセス
入力データからモデル、および精度検証のプロセスを図示しており、下記が理解できます。
- 最終的に採用された学習アルゴリズム
- 訓練データと学習データの比率(ツールチップで表示)
なお、アンサンブルモデル構築時には下記のようにどのアルゴリズムがアンサンブルされたかも把握できます。
前処理後データ
前処理された後のデータの先頭 10 行を確認できます。
特に、前処理により自動生成された列がある場合、このデータに含まれます。
前処理プロセス
上記「前処理後データ」内の説明変数がどう前処理されたのか、を把握できます。
フィルタボックスで列名を指定することで、プロセスが図示されます。
なお、ツールチップ内にて詳細な情報を得られます。
機械学習パラメータ
採用された学習アルゴリズムの内部のパラメータを表示しています。
精度改善の余地
別のボニートくん「機械が重視したデータ」と見た目は似ていますが、中身は全く違います。
予測と実測を比較し、どの列が原因で予測が外れてしまっているのかを確認できます。
原因比較
どの列のせいで精度が下がっているのか、を把握できます。
上にある列ほど重要、つまり精度悪化の要因になっている列であることを意味します。
列ごとに詳細を観察
下部のフィルタボックスで列名を指定することで、その列内のどの要素が足を引っ張っているかがわかります。
文字列の場合はカテゴリごとに、数値列の場合は数値範囲ごとに、精度プラス or マイナスに影響したかを表現します。
文字列型の例
下記の「性別」列を題材にします。
列の値が”female”の場合、予測が外れている(精度を下げている要因)と解釈できます。
また、混合行列で詳細を確認すると、“0”と予測したが実際は”1”だった、つまり予測が外れているデータ数が 36%と非常に多いことがわかります。
つまり、列の値が”female”の場合、“1”と予測するためのデータが不足していると言え、説明変数の構成を検討する材料となります。
数値型の例
下記の「年齢」列を題材にします。
列の範囲”16 歳〜21 歳”が最も予測が外れている(精度を下げている要因)と解釈できます。
また、混合行列で詳細を確認すると、“0”と予測したが実際は”1”だったつまり予測が外れているデータ数が 34%と非常に多いことがわかります。
つまり、列の値が”16 歳〜21 歳”の場合、“1”と予測する根拠となるデータが不足していると言え、説明変数の構成を検討する材料となります。
モデル詳細情報
教師あり学習ノードはベストの精度を誇る学習モデルを出力しますが、内部的には精度を最大化するためにいくつかのモデルを構築し、精度を比較しています。
この過程で構築されたモデルの情報を一覧化しているのがこの機能です。
なお、アンサンブル ML では「構築モデル一覧」内のモデル ID を指定することで、複数アルゴリズムを組み合わせたモデルを構築可能です。
構築モデル一覧
内部で構築されたモデルの一覧を表示しており、上から精度指標の高いモデルを並べています。
また、一覧下部でモデル ID を指定することで各モデルで行われた前処理、および設定された機械学習パラメータを確認できます。
処理内容補足
実施する前処理
精度が最大になるように、自動的に処理を選択します。
- 欠損値処理(欠損値があれば)
- 数値列の変換(Boxcox 変換など)
- 文字列の変換(One-hot encoding など)
- 数値の外れ値処理
- 特徴量生成(列同士の四則演算による新規列生成)
- 特徴量選択
学習に用いるアルゴリズム
精度が最大になるように、自動的に処理を選択します。
- ランダムフォレスト
- XGBoost
- LightGBM
- CatBoost
- SVM
- 上記の 2 つ以上をブレンディングしたアンサンブルモデル(速度重視モードを除く)
探索
全ての組み合わせについてモデルを構築するのではなく、ベイズ最適化を使用して最適な組み合わせを探索します。
このため、実行時間を大幅に短縮しつつ高い精度を期待できます。
探索回数の上限は処理モードで制御できます。
処理設定補足
処理モード
速度重視
実行時間を優先するモードです。精度重視モードよりも精度が劣る場合があります。
パラメータ | 値 |
---|---|
学習に使うデータの行数比率 | 30% |
特徴量選択の上限探索回数 | 3 |
学習アルゴリズムの上限探索回数 | 3 |
アンサンブルモデルを構築 | する |
精度重視
時間をかけても精度を向上させたい場合に適したモードです。ただし、探索回数が増えるため、過学習のリスクが高まることがあります。
パラメータ | 値 |
---|---|
学習に使うデータの行数比率 | 70% |
特徴量選択の上限探索回数 | 10 |
学習アルゴリズムの上限探索回数 | 10 |
アンサンブルモデルを構築 | しない |
カスタム
パラメータ | 値 |
---|---|
学習に使うデータの行数比率 | 任意設定可能 |
特徴量選択の上限探索回数 | 任意設定可能 |
学習アルゴリズムの上限探索回数 | 任意設定可能 |
アンサンブルモデルを構築 | しない |
最大化する指標(オプション)
カテゴリ分類の場合、以下から最大化する精度を選択できます。
- 正解率[Accuracy]
- F 値[F1]
- 再現率[Recall]
- 適合率[Precision]
数値予測の場合は、以下から選択できます。
- 平均絶対相対誤差[MAPE]
- 平均絶対誤差[MAE]
- 二乗平均平方根誤差[RMSE]
出力内容補足
モデルの精度指標(中出力)
モデルの精度を簡単に確認できるように、以下の情報を出力します。
| 項目 | 説明 | | --------------------- | ---------------------------------------------------- | --- | | 採用モデル | 構築モデルに採用された学習アルゴリズムを表示 | | 精度指標値 | 処理設定「最大化する指標」にて選択した指標の値を表示 | | | 精度評価 | 精度指標値に基準にした評価を表示 | | 過学習リスク(10 段階) | 構築モデルが過学習している可能性を 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 行 | メモリエラー |