オートMLで予測を行う
分析プロジェクトにて機械学習を行うためのデータを用意する
- 分析プロジェクトを作成
- サンプルデータ「1985年にアメリカに輸入された車」を配置
- 「ランダムにデータを分割」ノードを接続し、データを2分割する
データ配置後、その構造は把握しておきましょう。
列の構造はもちろん、目的変数として使う”車体金額”の平均値といった数値の規模感は確認しておく必要があります。
操作イメージ
設定補足
データを
- 訓練用(予測モデルを構築する)
- 検証用(作った予測モデルを用いて予測をしてみる)
の2つに分割しています。
ここでは”0.1″、つまり10%の行を検証用とする設定をしています。
また、この分割は完全にランダムに行われますが、以下の内容がお手元の操作結果と一致するように、乱数シードを”777″に設定しランダム性を固定しています。
オートMLを用いて予測モデルを構築する
オートMLノードを接続し、車の金額を車の様々な情報で予測するモデルを構築します。
- 予測モード:「車の金額」は数値なので、“数値予測”モードを選択
- 目的変数:「車の金額」を予測したいので、“車体金額”を選択
- 説明変数:「車の金額」を予測するための材料になる列、ここでは“車体金額”以外を選択
- 処理モード:チュートリアルの事情で予測対象の行数数が少ないため、ここでは“精度重視”を選択
操作イメージ
なお、説明変数の列選択は、削除モードを利用するのが最も効率的です。
オートMLの実行結果を確認する
ノードの出力を確認する
構築した予測モデルの性能概要が出力されます。
オートMLは、内部的に自動で予測モデルの構築と精度検証を行い、その結果を予測モデルの性能として表示します。
まずここで、おおよその予測性能を確認します。
結果を確認すると「期待平均絶対相対誤差[MAPE]」が”0.108…”、つまり約“11%”程度の誤差で”車体金額”が予測できるモデルができたことがわかります。
「精度評価」を見ると”Great!”なので、誤差が小さいという評価がされています。(活用シーンに応じてこの評価は変わると思いますが)
なお、「過学習リスク」が”6″ということでやや高めですが、学習に用いたデータ行数が少ないため致し方なしとしておきます。
ボニートくんで予測モデルの詳細を確認する
一部のノードには、補足情報が確認できる「ボニートくん」の機能が付属しています。
オートMLでは合計5点の補足情報が確認できます。
精度検証結果(ボニートくん)
ノードの出力結果でも予測モデルの性能概要は確認しましたが、より詳細の性能を確認します。
まず、改めてこのモデルは
- “11%”程度の予測誤差が期待できる性能(期待平均絶対相対誤差[MAPE])
- 値にすると“1,280”程度の誤差がでる(平均絶対誤差[MAE])
であることがわかります。
続いて、混合行列を確認します。
表を見ると、”16110.0~”と予測して、実際は”16110.0~”である、つまりこのレンジで予測が正解したデータが7個であることが確認できます。
このように混合行列における対角線上(緑枠を付けたセル)が予測レンジが正解したデータ数及び割合であり、逆にそれ以外は予測が外れています。
また、精度分解を見ると
- “~6793.0″のレンジ、つまり低価格の車の金額は、12.9%程度で誤差が最も大きいレンジ
- “11046.6 ~ 16110.0″のレンジ、つまり高価格寄りの車の金額は、9.1%程度で誤差で最も小さいレンジ
であることがわかります。
機械が重視したデータ(ボニートくん)
予測モデルの解釈を行うために、金額を予測する際に最も重視したデータを確認します。
このモデルは「車体の高さ/ストローク」が最も重視され構築されたことがわかります。
ページ下部に対象列を選択することで、より詳細を確認できます。
これを見ると
- 「車体の高さ/ストローク」の値が大きい=車体金額が安い(赤色)
- 「車体の高さ/ストローク」の値が小さい=車体金額が高い(青色)
という大まかな傾向が見えます。
「車体の高さ/ストローク」の値が大きいということは「車の全高が高い=大衆車寄りの特徴、つまり金額が安い」という直感に反しない解釈ができます。
学習プロセス(ボニートくん)
上記で予測精度の評価などが確認できましたが、内部でどういう処理がされ、性能評価がされたのかを確認できます。
例えば、精度検証については、
- データを内部で2つに分割
- 125行を前処理してランダムフォレストでモデルを構築
- 55行を予測して、精度検証結果を生成
していることがわかります。
実際に学習に用いられたデータも確認でき、39列の説明変数を採用していることがわかります。
なお、オートMLは、説明変数を自動で前処理します。
ページ下部で列名をセットすることで、各説明変数の成り立ちも確認できます。
下記は、最も機械が重視した「車体の高さ/ストローク」の成り立ちを表示しています。
元は「車体の高さ」と「ストローク」で、それぞれに欠損値処理を適用し、割り算して1列にまとめた後、boxcox変換して説明変数として採用したことがわかります。
精度改善の余地(ボニートくん)
構築したモデルの精度を悪化させている要因を観察できます。
精度悪化の最も大きな原因となっているのは「高速時の燃費指標」であることが確認できます。
ページ下部で具体的に「高速時の燃費指標」を観察すると、
- 値が大きい、つまり燃費がいい=精度が悪化(赤色)
- 値が小さい、つまり燃費が悪い=精度が良化(青色)
の傾向がわかります。
また、燃費がいい車はつまり大衆車の傾向であり、
- 燃費が悪くなりがちな比較的高級な車(高級車)は価格が予測しやすい
- 燃費が良くなりがちな比較的安価な車(大衆車)は価格が予測しづらい
と言い換えることができ、燃費の情報だと大衆車の特徴を捉えられず、精度悪化の原因になってしまっていると考えられます。
ゆえに、燃費以外にも大衆車の性能を表すデータを追加することでこのモデルの精度は改善する可能性があります。
構築したモデルで別のデータを予測する
「モデルで予測値算出」ノードを用いて、データ分割した際のもう片方のノード内のデータを予測します。
※本チュートリアルではデータを分割し、片方でモデル構築->片方を予測、という流れで進めていますが、実際の業務では「オートMLで作ったモデルで全く別のデータを予測」する用途を想定しています。
ノード自体に設定項目はありませんが、実行することで、データの最も右に「予測値」列が挿入され、オートMLノードで構築した予測モデルで予測した値が入ります。
操作イメージ
予測結果の精度評価を行う
算出した予測値と、実際の”車体金額”との誤差を観察します。
オートMLでも設定した説明変数をセットし、ここでは「期待平均絶対相対誤差[MAPE]」で精度を評価します。
結果を見ると、約”12%”の誤差で、評価は”Great!”ということで、オートMLにて検証された精度と同程度の性能で別データを予測できたことがわかります。