DEVELOPER’s BLOG

技術ブログ

機械学習におけるアンサンブル手法のスタッキングを図説

2019.12.23 土井 健
機械学習
機械学習におけるアンサンブル手法のスタッキングを図説

本記事では、スタッキングの仕組みについて解説します。

この記事を読めば、スタッキングの理解、実装が円滑になると思います。

この記事の対象者

スタッキングの仕組みが分からないけど実装してみたい人

記事の目的

スタッキングのシンプルな仕組みを知り、実装しやすくする。
どういうときにスタッキングが有効なのか、どのようなモデルを組み合わせればよいのかを知る。

※コード実装部分は書いていません!

スタッキングとは

スタッキングとはアンサンブルの手法の一つであり、モデルを積み上げていく方法です。

・クロスバリデーションを用いる
・目的変数の予測結果を特徴量として用いる
・アンサンブル手法でもあり特徴エンジニアリング手法でもある

といった特徴があり、trainデータとtestデータの分布が似ているとき、特に良い精度が出せます。

スタッキングの手順解説

以下がスタッキングの手順です。

  1. クロスバリデーションでtrainデータとtestデータの目的変数を予測する
  2. 1の予測をそれぞれの特徴量に追加する
  3. 1,2を色々なモデルで行う
  4. 1~2で追加した特徴量も含めて、testデータの目的変数の予測を行う

それでは手順について細かく見ていきましょう。

1. クロスバリデーションでtrainデータとtestデータの目的変数を予測する

クロスバリデーションでtrainデータとtestデータの目的変数をそれぞれ予測します。

①,trainデータを分割(fold1~4)し、分割の内の1つ(青の丸部分)を、それ以外の残りのデータ(オレンジの丸部分)を用いて予測する
②,オレンジ丸部分を用いてtestデータの目的変数(青の長丸)を予測する。
③,①と②を全ての組み合わせで行う

下の図は、①〜③を図にしたもので、クロスバリデーションのやり方です。
※trainデータの方ではtrainデータの目的変数の一部(分割の少数側)を予測するのに対し、testデータの方ではtestデータの目的変数の全体を予測していることに注意してください。
※trainデータの説明変数をtrainX、目的変数をtrainY。testデータの説明変数をtestX、目的変数をtestYとしています。

1枚目:fold2~4を用いて学習させたモデルでfold1のtrainYとtestデータ全体の目的変数を予測
スクリーンショット 2019-12-23 9.50.00.png

2枚目:fold1,3,4を用いて学習させたモデルでfold2のtrainYとtestデータ全体の目的変数を予測
スクリーンショット 2019-12-23 9.53.12.png

3枚目:fold1,2,4を用いて学習させたモデルでfold3のtrainYとtestデータ全体の目的変数を予測
スクリーンショット 2019-12-23 9.54.28.png

4枚目:fold1~3を用いて学習させたモデルでfold4のtrainYとtestデータ全体の目的変数を予測
スクリーンショット 2019-12-23 9.55.24.png

以上が全ての分割の組み合わせで各目的変数を予測するイメージです。
これでtrainデータとtestデータの目的変数の全体を予測することができました。(下図)

1枚目:クロスバリデーションでtrainデータの目的変数を予測したもの
スクリーンショット 2019-12-23 10.15.10.png2枚目:クロスバリデーションでtestデータの目的変数を予測し、4つの予測結果を平均します。
スクリーンショット 2019-12-23 10.15.19.png

2. 1で行った目的変数の予測結果をそれぞれの特徴量に追加する

見出しの通りですが、下図のように追加します。
スクリーンショット 2019-12-23 11.02.05.png

3. 1,2を色々なモデルで行う

1,2の作業、つまり、「クロスバリデーション→trainデータ、testデータの目的変数の予測→特徴量に追加」を色々なモデルで行いましょう。
複数のモデル(今回は3つ)で行ってみました。その結果、このような感じで特徴量が増えていきます。

スクリーンショット 2019-12-23 11.50.42.png

4. 1~3で追加した特徴量を含めて、testデータの目的変数の予測を行う

スクリーンショット 2019-12-23 11.50.03.png

スタッキングのコツ

ところで、
「どのようなモデルを組み合わせれば良いのだろう?」とか「最後の予測では全ての特徴量を含めたほうがいいの?」とか、疑問に思いませんでしたか?自分が社内のインターン生で勉強会を行った時、これらのような質問が飛んできました。

Q,どのモデルを組み合わせれば良いのですか?

A,ごめんなさいわかりません!後日調べます!

ということで、Kaggle本や様々なネット記事を検索して調べてみました。
結局、確立した方法はみつかりませんでした。色々な組み合わせを試してみて、精度の上がったものを選択するようです。
ただ、スタッキングはアンサンブル手法ですので、汎化性能があがるようにモデルを組み合わせるのが良いです。
例えば、相関の近いモデルどうしを組み合わせても汎化性能は上がりません。モデル同士の相関を調べてみて、組み合わせて実験するのが良いのではないでしょうか。

次の質問です。

Q,最後の予測では元々合った特徴量含めるべき?

A,場合によるのではないでしょうか...?(わかってない)

ということで、同じように調べて考えてみました。

・元々の特徴量を加えた場合
過学習しやすい。同じデータの使われる回数が増え過学習しやすくなります。
その代わり、元々合った特徴量と予測値の関係性を分析することができます。

・加えなかった場合
過学習しづらい。学習時間が短く済む。アンサンブルの目的として、汎化性能を高めることがあるので過学習しづらい点は評価できます。

加えた場合も加えなかった場合も一長一短あるようなので、時間があればどちらも試すのが良いのではないでしょうか。

最後の質問です。

Q,どういうときにスタッキングは使えるの?

A, trainデータとtestデータの分布が似ていれば精度が上がりやすいです。

なので、時系列データの場合は分布が異なる場合が多いので、注意が必要です。
分布が似ているかどうかは、"Adversarial Validation"を使えば判断できます。

まとめ

本記事では、スタッキングの仕組みを図を用いて簡潔に解説しました。

  1. クロスバリデーションでtrainデータとtestデータの目的変数を予測する
  2. 1の予測をそれぞれの特徴量に追加する
  3. 1,2を色々なモデルで行う
  4. 1~2で追加した特徴量も含めて、testデータの目的変数の予測を行う

以上の手順で実装することができました。

スタッキングの実装は、仕組みを知ってしまえば難しいことではないと思います。
ただし、スタッキングが良い影響をでるかどうか、どのモデルを混ぜるか、など扱うのが難しい手法です。

テクニカルな利用方法はKaggleのnotebookや技術本などで研究する必要がありそうです。

参考文献

門脇大輔・阪田隆司・保坂桂佑・平松雄司(2019)『Kaggleで勝つデータ分析の技術』 技術評論社

関連記事

生成AIで架空飲食チェーン店のVOC分析やってみた

ご挨拶 AWS全冠エンジニアの小澤です。 今年の目標はテニスで初中級の草トーナメントに優勝することです。よろしくお願いいたします。 本記事の目的 本記事では、生成AIでVOC分析を行うことで得られた知見を共有したいと思います。 昨今、生成AIの登場など機械学習の進歩は目覚ましいものがあります。一方、足元では自社データの利活用が進まず、世の中のトレンドと乖離していくことに課題感を持たれている方も多いかと思います。また、ガートナーの調査(2024年1月)による

記事詳細
生成AIで架空飲食チェーン店のVOC分析やってみた
AWS SRE 機械学習
SVMで必要な双対問題の解説

なぜ機械学習で双対問題を学ぶのか 結果から述べるのであれば、SVM(サポートベクトルマシーン)の原理で双対問題を使いたいからです。 これから実際どのように双対問題が使われているのか、また、双対問題の簡単な具体例を交えて説明していきたいと思います。 まずSVMについて簡単に説明したいと思います。 予測には過去のデータを使います。 しかし、外れ値のような余計なデータまで使ってしまうと、予測精度が下がるかもしれません。 そこで「本当に予測に必要となる一部のデータ

記事詳細
SVMで必要な双対問題の解説
機械学習
機械学習で採用予定人数を予測する。狙い目企業はどこ?

2022年卒大学生の皆さん! コロナウイルスが流行していることで就活にどういう影響があるのか、とても不安ですよね。 今回は業界ごとに採用人数を予測し、「どの業界が狙い目なのか」機械学習を使った分析手順を紹介します! 目次 概要 手順 今後の課題 1.概要 データセットの内容 分析対象の7業界・各4企業 化粧品 電子機器 商社 不動産 金融 サービス IT・情報 説明変数と目的変数 特徴量 年初の株価、決算報告書提出翌日の株価、一株あたりの純資産額、従業員数

記事詳細
機械学習で採用予定人数を予測する。狙い目企業はどこ?
利用事例 機械学習
機械翻訳の歴史と今後の可能性

目次 機械翻訳とは 機械翻訳の手法 現在の機械翻訳の欠点 欠点が改善されると 今後の展望 機械翻訳とは 機械翻訳という言葉を理解するために2つ言葉を定義する。 系列 : 記号の列のことで自然言語処理の世界だと文を構成する単語の列になる。 系列変換モデル : 系列を受け取り、それを別の系列に変換する際の確率をモデル化したもの。系列変換モデルはseq2-seqモデルとも呼ばれている。 この2つの言葉から機械翻訳は、ある言語の文章(系列)を別の言語の文章(系列)

記事詳細
機械翻訳の歴史と今後の可能性
利用事例 機械学習 自然言語処理

お問い合わせはこちらから