# アンサンブル学習とは？バギングとブースティングとスタッキングの違いと注意点

> 当サイト【スタビジ】の本記事では、アンサンブル学習についてまとめていきます！加えて学習手法のバギング、ブースティング、スタッキングについても紹介します。アンサンブル学習とは機械学習を学ぶ上で非常に重要な考えであり、いくつかのモデルを組み合わせて汎化能力を上げるもの。有名なランダムフォレストやXgboostなどもアンサンブル学習によって生み出されているんです！

- URL: https://toukei-lab.com/ensemble
- 公開: 2022.11.29 / 更新: 2026.10.28
- サイト: スタビジ（https://toukei-lab.com）

:::talk{who="umatan"}
当サイト【スタビジ】の本記事では、アンサンブル学習についてまとめていきます！加えて学習手法のバギング、ブースティング、スタッキングについても紹介します。アンサンブル学習とは機械学習を学ぶ上で非常に重要な考えであり、いくつかのモデルを組み合わせて汎化能力を上げるもの。有名なランダムフォレストやXgboostなどもアンサンブル学習によって生み出されているんです！
:::

こんにちは！

デジタルマーケター兼データサイエンティストのウマたん([@statistics1012](https://twitter.com/statistics1012?lang=ja))です！

様々な機械学習が登場する中、<mark>地味に存在感を強めているのがアンサンブル学習。</mark>

アンサンブル学習は、<mark>単独では強い手法ではない手法を多数使って精度を上げる</mark>方法。

[Kaggle](/kaggle)などの[データ分析コンペ](/data-competition)で用いられることの多い、[XGboost](/xgboost)や[LightGBM](/light-gbm)もアンサンブル学習の1つであるブースティングを用いています。

この記事では、そんなアンサンブル学習について見ていきます。

以下のYoutube動画でも解説しています！

::youtube{#h0p6RiuhdrE}

## アンサンブル学習とは

![アンサンブル学習](/wp-content/uploads/2019/07/143d73af28f41445d9a865ac0051277e.png)

アンサンブル学習とは、単独では精度の高くない[弱学習器](/weak-learning)（決定木などなど）を多数用いることで高い精度をたたき出す手法群です。

※手法として確立されているのは弱学習器をアンサンブルする方法ですが、KaggleなどのデータコンペではCNNやXgboostなど単体で強力な手法を組み合わせることで予測精度を上げる方法が使われます。

アンサンブル学習に関しては「**バイアス**」と「**バリアンス**」という概念が関係してきます。

バイアスは、**推定値と実測値の差**を表します。

<mark>バイアスが低ければ低いほど上手く予測出来ているということになります。</mark>

一方バリアンスは、**推定値のばらつき**を表します。

複雑なモデルを組んで様々なデータへフィッティングさせようとすると予測値がばらつきバリアンスは高くなります。

バイアスとバリアンスは<mark>トレードオフの関係にあります。</mark>

ばらつきのあるデータに対してそれらを上手く当てることが出来れば<mark>バイアスは小さくなりますがバリアンスは大きくなることが想像できるでしょう。</mark>

一方それほどばらつきのない一定の予測値を返すと、精度は低いのでバイアスは高くなりますがバリアンスは小さくすることが可能です。

ちなみにバイアスが低くてバリアンスが高い状態は[過学習](/over-fitting)に陥っている可能性が高く、未知データに対する予測精度は落ちてしまう可能性があります。

Kaggleなどのコンペでは現状のデータに対する精度で仮順位が決められます。

過学習をしていると仮順位は高いのですが、本番で一気に順位が下がってしまうのです。

<mark>過学習には注意しなくてはいけません。</mark>

アンサンブル学習は、そんなバイアスとバリアンスを上手く調整する手法群です。

上手くバイアスとバリアンスのバランスを取ることが大事（早口言葉みたい笑）！

## アンサンブル学習の種類

![バギングブースティング](/wp-content/uploads/2019/07/faa413b59290838d59916d3b139ec577.jpg)

さて、アンサンブル学習には大きく分けて3つのタイプ「**バギング**」「**ブースティング**」「**スタッキング**」があります。

それぞれの手法について見ていきましょう！

### バギング

バギングは、**並列的**に弱学習器を用いてそれぞれのモデルの総合的な結果を用いるという手法です。

バギングでは、バリアンスをおさえることが可能です。

バギングと[決定木](/%E6%B1%BA%E5%AE%9A%E6%9C%A8)を組み合わせた[ランダムフォレスト](/%e3%83%a9%e3%83%b3%e3%83%80%e3%83%a0%e3%83%95%e3%82%a9%e3%83%ac%e3%82%b9%e3%83%88)は以下のようなイメージ

![](/wp-content/uploads/2018/01/66c19942ab4ba346fdb64ccc04cde373-5.png)

訓練データに対していくつも決定木モデルを作成し、<mark>それぞれの結果を集約して最終結果を出力します。</mark>

回帰だったら**平均値**、分類だったら**多数決**。

ランダムフォレストは非常に簡単に実装できる手法であり、<mark>それなりに高い精度が見込めるのでオススメです！</mark>

より詳しく知りたい場合、「Bagging」を発表した論文を見てみるとよいでしょう！

> Bagging Predictors is a method for generating multiple versions of a predictor and using these to get an aggregated predictor. The aggregation averages over the versions when predicting a numerical outcome and does a plurality vote when predicting a class. The multiple versions are formed by making boostrap replicates of the learining set and using these as new learning sets.\
> （引用元：[Google-”Bagging Predictors”](https://link.springer.com/content/pdf/10.1007/BF00058655.pdf)）

### ブースティング

バギングは並列でしたが、ブースティングは**直列的**に弱学習器を用いていきます。

最初の弱学習器で<mark>上手く推定できなかった部分を推定するために重みを付けて次の弱学習器で学習を行います。</mark>

最終的には、精度の高いモデルに重みを付けて最終的なモデルを作成します。

ブースティングでは、バイアスを低くすることが可能です。

決定木とブースティングを組み合わせた手法が[XGboost](/xgboost)や[LightGBM](/light-gbm)であり、<mark>非常に高い精度をたたき出します。</mark>

![](/wp-content/uploads/2019/07/xgboost.jpg)

一般的にブースティングの方がバギングより高い精度が見込めますが、学習に時間がかかります。

より詳しく知りたい場合、「Boosting」に関する論文を見てみると良いでしょう！

> Boosting is a general method for improving the accuracy of any given learning algorithm. This shoer papaer introduces the boosting algorithm AdaBoost, and explains the underlying theory of boosting, including an explanation of why boosting often does not suffer from overfitting. Some examples of recent applications of boosting are also described.\
> （引用元：[Google-“A Belief Introduction to Boosting”](https://citeseerx.ist.psu.edu/document?repid=rep1\&type=pdf\&doi=fa329f834e834108ccdc536db85ce368fee227ce)）

### スタッキング

スタッキングは、<mark>Kaggle上位者がよく使うテクニックであり、新たな特徴量を作る方法でもあります。</mark>

バギングやブースティングのように確立された手法に取り入れられている方法ではなく、高度な方法になります。

僕自身普段スタッキングは使わないのですが、簡単に説明します。

:::box
Step1\:いくつかのFold（グループ）にデータを分けて、それぞれを各モデルで予測する（いわゆる[クロスバリデーション](/cross-validation)を色んなモデルでやる）

Step2\:それぞれの予測値を新たな特徴量とする

Step3\:何回か繰り返して最終アウトプット算出
:::

ある意味、<mark>新たな特徴量を作るコト</mark>でもあり時間はかかりますが精度向上が見込める可能性は高いです。

より詳しく知りたい場合は、こちらの「Stacked Generalization」を見てみるとよいでしょう！

> This paper introduces stacked generalization, a scheme for minimizing the generalization error rate of one or more generalizers.  Stacked generalization works by deducing the biases of the generalizer(s) with respect to a provided learining set.\
> （引用元：[Google-“Stacked Generalization”](http://www.machine-learning.martinsewell.com/ensembles/stacking/Wolpert1992.pdf)）

ディープラーニングの世界でも、複数の「専門家」のモデルを用意して、入力ごとに使い分ける「MoE（Mixture of Experts）」という仕組みが使われています。くわしくは以下の記事で解説しています。

<https://toukei-lab.com/mixture-of-experts>

## アンサンブル学習の注意点

![Feeling bad](/wp-content/uploads/2020/08/Feeling-Blue-amico-min-e1617972909309-1024x944.png)

アンサンブル学習を行う上での注意点を最後に挙げておきます。

### 何でもかんでもアンサンブル学習すれば精度が上がるわけではない

当たり前ですが、<mark>なんでもかんでもアンサンブル学習をすれば精度が上がるわけではありません。</mark>

基本的には、既に確立されているXgboostやランダムフォレストなどの手法を使えるようになっておけばよいです。

Kaggleでは、複雑なアンサンブル学習を行い多数のモデル構築から最終結果を算出することもありますが、<mark>全てXgboostを使っているわけではなく[k近傍法](/%ef%bd%8b%e8%bf%91%e5%82%8d%e6%b3%95)などの単独の推定精度は低いモデルを投入している例もあります。</mark>

基本的には、**アプローチが違う手法**をアンサンブル学習した方が良く、決定木モデル（XgboostやLightgbmやランダムフォレスト）と深層学習（[CNN](/deep-learning)）などを組み合わせるとよいと言われています。

### 学習に時間がかかる

<mark>複雑なアンサンブル学習は実務ではよっぽどのことがない限り行いません。</mark>

Kaggleでは精度を少しでも上げることが目的なので、多数のモデルでアンサンブル学習を行いますが実務では<mark>精度を上げる労力とそこから得られるビジネスインパクト</mark>を天秤にかけた時にやらないことが多いです。

また、精度を上げる上ではアンサンブル学習にこだわるよりも新たな特徴量を作り出した方が良い可能性が高いです。

<mark>実務での複雑なアンサンブル学習はコストパフォーマンスの観点からやめておいたほうが良いです。</mark>

:::talk{who="robotan"}
確かに、実務では単純なモデルの方が良いってを聞いたことがあるような
:::

:::talk{who="umatan"}
そうだね！単純なモデルの方が実装と解釈が楽だから、実務向きだと言えるね！
:::

### バリアンスとバイアスのバランスに注意

当たり前ですが、いくらXgboostなどを使ったとしてもデータセットを何も考えず使っていると過学習が起きる可能性があります。

[交差検証法（クロスバリデーション）](/cross-validation)などを行い過学習しないように注意しましょう！

## アンサンブル学習手法をPythonで実装してみよう！

![Coding](/wp-content/uploads/2017/11/Coding-amico-e1617441754417-1024x921.png)

それでは最後にアンサンブル学習の手法をPythonで実装してみましょうー！

ここではアンサンブル学習手法の中でも非常に強力なLightGBMを実装していきたいと思います。

データ分析コンペ [DataDojo](https://data-dojo.org/competitions/0aedc9c6-9bb1-45a5-a4b6-a1be3002dbd3)の「**中古マンション価格予測チャレンジ**」というコンペのデータを題材にしていきます。

国産データコンペのNishika（2026年3月にサービス終了）で開催されていたトレーニングコンペで、今はDataDojoで同じコンペに無料で参加できます。

まず [DataDojo](https://data-dojo.org/competitions/0aedc9c6-9bb1-45a5-a4b6-a1be3002dbd3)にGoogleアカウントでログインして、コンペの「データ」タブから学習データ（train.zip）とテストデータ（test.csv）をダウンロードしてください（※ログインしないとデータをダウンロードできません）。

このデータをローカルのどこかのフォルダに格納し、[LightGBM](/light-gbm)での分析に移っていきましょう！

コードは以下になります。

```python title="Light-gbm-mansion.py"
import glob
import pandas as pd
import numpy as np
import lightgbm as lgb
from sklearn.model_selection import train_test_split
from sklearn.metrics import mean_absolute_error as mae

files = glob.glob("train/*.csv")
data_list = []
for file in files:
    data_list.append(pd.read_csv(file, index_col=0))
df = pd.concat(data_list)

def data_pre(df):
    nonnull_list = []
    for col in df.columns:
        nonnull = df[col].count()
        if nonnull == 0:
            nonnull_list.append(col)
    df = df.drop(nonnull_list, axis=1)

    df = df.drop("市区町村名", axis=1)

    df = df.drop("種類", axis=1)

    dis = {
        "30分?60分":45,
        "1H?1H30":75,
        "2H?":120,
        "1H30?2H":105
    }
    df["最寄駅：距離（分）"] = df["最寄駅：距離（分）"].replace(dis).astype(float)

    df["面積（㎡）"] = df["面積（㎡）"].replace("2000㎡以上", 2000).astype(float)


    y_list = {}
    for i in df["建築年"].value_counts().keys():
        if "平成" in i:
            num = float(i.split("平成")[1].split("年")[0])
            year = 33 - num
        if "令和" in i:
            num = float(i.split("令和")[1].split("年")[0])
            year = 3 - num
        if "昭和" in i:
            num = float(i.split("昭和")[1].split("年")[0])
            year = 96 - num
        y_list[i] = year
    y_list["戦前"] = 76
    df["建築年"] = df["建築年"].replace(y_list).astype(float)

    year = {
        "年第１四半期": ".25",
        "年第２四半期": ".50",
        "年第３四半期": ".75",
        "年第４四半期": ".99"
    }
    year_list = {}
    for i in df["取引時点"].value_counts().keys():
        for k, j in year.items():
            if k in i:
                year_rep = i.replace(k, j)
        year_list[i] = year_rep
    df["取引時点"] = df["取引時点"].replace(year_list).astype(float)
    
    for col in ["都道府県名", "地区名", "最寄駅：名称", "間取り", "建物の構造", "用途", "今後の利用目的", "都市計画", "改装", "取引の事情等"]:
                df[col] = df[col].astype("category")
    
    return df
    
df = data_pre(df)

df_train, df_val =train_test_split(df, test_size=0.2)

col = "取引価格（総額）_log"
train_y = df_train[col]
train_x = df_train.drop(col, axis=1)

val_y = df_val[col]
val_x = df_val.drop(col, axis=1)

trains = lgb.Dataset(train_x, train_y)
valids = lgb.Dataset(val_x, val_y)

params = {
    "objective": "regression",
    "metrics": "mae"
}

model = lgb.train(params, trains, valid_sets=valids, num_boost_round=1000, callbacks=[lgb.early_stopping(100)])

df_test = pd.read_csv("test.csv", index_col=0)
df_test = data_pre(df_test)

predict = model.predict(df_test)
df_test["取引価格（総額）_log"] = predict
df_test[["取引価格（総額）_log"]].to_csv("submit_test.csv")
```

globでデータフレームを結合させて、各種カラムのデータを一部前処理しています。

その上でLight gbmを以下の部分で実装しています。

```python
trains = lgb.Dataset(train_x, train_y)
valids = lgb.Dataset(val_x, val_y)

params = {
    "objective": "regression",
    "metrics": "mae"
}

model = lgb.train(params, trains, valid_sets=valids, num_boost_round=1000, callbacks=[lgb.early_stopping(100)])
```

これだけで強力な機械学習手法であるLightGBMを実装することが出来るんです！

LightGBM 4.0から`early_stopping_rounds`の引数はなくなったので、`callbacks`で`lgb.early_stopping(100)`を渡しています。

ここでは評価指標にMAE（平均絶対誤差）を使っていて、検証データでの結果は

**0.0764**となりました！

コードの最後では、テストデータの予測値を`submit_test.csv`に書き出しています。このファイルをコンペの「提出」タブからアップロードすると、自動で採点されてリーダーボードに順位が出ます（DataDojoのこのコンペの評価指標はRMSE（二乗平均平方根誤差）で、提出は1日5回までです）。

以下の記事で詳しく解説していますのでぜひチェックしてみてください！

<https://toukei-lab.com/light-gbm>

## アンサンブル学習　まとめ

本記事では、アンサンブル学習について見てきました。

アンサンブル学習とは、<mark>いわゆる三人寄れば文殊の知恵的な手法です。</mark>

[ランダムフォレスト](/%e3%83%a9%e3%83%b3%e3%83%80%e3%83%a0%e3%83%95%e3%82%a9%e3%83%ac%e3%82%b9%e3%83%88)や[XGboost](/xgboost)や[LightGBM](/light-gbm)は非常に高い精度を出力してくれるので良く使います。

LightGBMを使ったデータ分析については以下のUdemyの講座で詳しく解説していますのでこちらも参考にしてみてください！

**[【初学者向け】データ分析コンペで楽しみながら学べるPython×データ分析講座](https://www.udemy.com/course/python-data/?referralCode=06466D9A805A034B1A97)**

[![Udemy-course](/wp-content/uploads/2020/04/Udemy-me-min-1024x543.jpg)](https://www.udemy.com/course/python-data/?referralCode=06466D9A805A034B1A97)

<table class="table">
<tbody>
<tr>
<th>【オススメ度】</th>
<td><span class="stars" role="img" aria-label="5点中5点" data-value="5"></span></td>
</tr>
<tr>
<th>【講師】</th>
<td><span>僕自身！今なら購入時に「NZWCLGF4BTZENY6E」という講師クーポンコードを入れると90%オフ以上の割引価格になりますのでぜひご受講ください！</span></td>
</tr>
<tr>
<th>【時間】</th>
<td><span>4時間</span></td>
</tr>
<tr>
<th>【レベル】</th>
<td><span>初級～中級</span></td>
</tr>
</tbody>
</table>

僕自身がUdemyの色んなコースを受けてみた中で、<mark>他のコースにはないこんなコースあったらいいなみたいなコースを作ってみました。</mark>

このコースは、**なかなか勉強する時間がないという方に向けてコンパクトに分かりやすく必要最低限の時間で重要なエッセンスを学び取れるように**作成しています。

**アニメーションを使った概要編**と**ハンズオン形式で進む実践編**に分かれており、概要編では体系的にデータ分析・機械学習導入の文脈でまとめています。

データサイエンスの基礎について基本のキから学びつつ、なるべく堅苦しい説明は抜きにしてイメージを掴んでいきます。

統計学・機械学習の基本的な内容を学び各手法の詳細についてもなるべく概念的に分かりやすく理解できるように学んでいきます。

そしてデータ分析の流れについては実務に即した[CRISP-DM](/crisp-dm)というフレームワークに沿って体系的に学んでいきます！

データ分析というと機械学習でモデル構築する部分にスポットがあたりがちですが、それ以外の工程についてもしっかりおさえておきましょう！

続いて実践編ではデータコンペの中古マンションのデータを題材にして、実際に手を動かしながら機械学習手法を実装していきます。

ここでは、探索的にデータを見ていきながらデータを加工し、その上で[Light gbm](/light-gbm) という機械学習手法を使ってモデル構築までおこなっていきます。

是非興味のある方は受講してみてください！

Twitterアカウント([@statistics1012](https://twitter.com/statistics1012?lang=ja))にメンションいただければ2000円以下になる講師クーポンを発行いたします！

::button[このコースを見てみる]{href="https://www.udemy.com/course/python-data/?referralCode=06466D9A805A034B1A97" note="＼30日以内なら返金無料／"}

是非アンサンブル学習を使ってみましょう！

また、当メディアではデータサイエンティストになるための分野を体系的に学ぶスクール[「スタアカ（スタビジアカデミー）」](https://toukei-lab.com/achademy/)を運営して、機械学習やディープラーニングのコースもがっつり用意しているので、是非チェックしてみて下さい！

:::box
**AIデータサイエンス特化スクール「スタアカ」**

![スタアカ（スタビジアカデミー）のトップページ](/wp-content/uploads/2026/10/achademy-top.jpg)
:::

<table class="table">
<tbody>
<tr>
<th>【価格】</th>
<td>ライトプラン：1,280円/月（全コースが受講し放題）<br>
プレミアムプラン：129,800円（通常149,800円・買い切り）</td>
</tr>
<tr>
<th>【オススメ度】</th>
<td><span class="stars" role="img" aria-label="5点中5点" data-value="5"></span></td>
</tr>
<tr>
<th>【サポート体制】</th>
<td><span class="stars" role="img" aria-label="5点中4点" data-value="4"></span></td>
</tr>
<tr>
<th>【受講形式】</th>
<td>オンライン形式</td>
</tr>
<tr>
<th>【学習範囲】</th>
<td>統計学・機械学習・ディープラーニングを網羅的に学ぶ<br>
生成AI（LLM・RAG・プロンプトエンジニアリング）を学ぶ<br>
SQLとPythonを組み合わせて実データを使った様々なワークを行う<br>
実践的なビジネスフレームワークを学ぶ<br>
マーケティングの実行プラン策定</td>
</tr>
</tbody>
</table>

データサイエンティストとしての自分の経験をふまえてエッセンスを詰め込んだのがこちらのスタビジアカデミー、略して「[スタアカ](https://toukei-lab.com/achademy/)」！！

月額1,280円のライトプランで、統計学から機械学習・生成AIまで全コースが受講し放題です！

<mark>プレミアムプランでは、24時間以内の質問対応と現役データサイエンティストとの1on1（30分×4回）を実施します！</mark>

カリキュラム自体は、他のスクールと比較して圧倒的に良い自信があるのでぜひ受講してみてください！

他のスクールのカリキュラムはPythonでの機械学習実装だけに焦点が当たっているものが多く、実務に即した内容になっていないものが多いです。

<mark>そんな課題感に対して、実務で使うことの多いSQLや機械学習のビジネス導入プロセスの理解なども合わせて学べるボリューム満点のコース</mark>になっています！

Pythonが初めての人でも学べるようなカリキュラムにしておりますので是非チェックしてみてください！

ウォルマートのデータを使って商品の予測分析をしたり、実務で使うことの多いGoogleプロダクトのBigQueryを使って投球分析をしたり、データサイエンティストに必要なビジネス・マーケティングの基礎を学んでマーケティングプランを作ってもらったりする盛りだくさんの内容になってます！

:::box
**・BigQuery上でSQL、Google Colab上でPythonを使い野球の投球分析**\
**・世界最大手小売企業のウォルマートの実データを用いた需要予測**\
**・ビジネス・マーケティングの基礎を学んで実際の企業を題材にしたマーケティングプランの策定**\
**・生成AIのAPIを使ってチャットボットやAIエージェントを作る**
:::

::button[スタアカの受講はこちら]{href="https://toukei-lab.com/achademy/" note="＼今すぐ試す／"}

もっと深く理論について学びたい方は以下のはじめてのパターン認識が読むことをオススメします！

::product[はじめてのパターン認識]{url="https://www.amazon.co.jp/dp/4627849710?tag=statistic08-22&linkCode=ogi&th=1&psc=1" image="https://m.media-amazon.com/images/I/51YFB3Y0EYL._SL160_.jpg" amazon="https://www.amazon.co.jp/dp/4627849710?tag=statistic08-22&linkCode=ogi&th=1&psc=1" rakuten="https://af.moshimo.com/af/c/click?a_id=858168&p_id=54&pc_id=54&pl_id=616&url=https%3A%2F%2Fsearch.rakuten.co.jp%2Fsearch%2Fmall%2F%25E3%2581%25AF%25E3%2581%2598%25E3%2582%2581%25E3%2581%25A6%25E3%2581%25AE%25E3%2583%2591%25E3%2582%25BF%25E3%2583%25BC%25E3%2583%25B3%2F%3Ff%3D1%26grp%3Dproduct"}

Kaggleで用いられる上位者テクニックのアンサンブル学習について知りたい方は以下の書籍を読んでみることをオススメします！

::product[Kaggleで勝つデータ分析の技術]{url="https://www.amazon.co.jp/dp/B07YTDBC3Z?tag=statistic08-22&linkCode=ogi&th=1&psc=1" image="https://m.media-amazon.com/images/I/418YjfYRlhL._SL160_.jpg" amazon="https://www.amazon.co.jp/dp/B07YTDBC3Z?tag=statistic08-22&linkCode=ogi&th=1&psc=1" kindle="https://www.amazon.co.jp/dp/B07YTDBC3Z?tag=statistic08-22&linkCode=ogi&th=1&psc=1" rakuten="https://af.moshimo.com/af/c/click?a_id=858168&p_id=54&pc_id=54&pl_id=616&url=https%3A%2F%2Fsearch.rakuten.co.jp%2Fsearch%2Fmall%2FKaggle%2F%3Ff%3D1%26grp%3Dproduct"}

以下の記事で他の機械学習手法についてまとめているのでこちらも合わせてチェックしてみてくださいね！

<https://toukei-lab.com/machine-learning-fresh>

機械学習、データサイエンス、Pythonについて学びたい方は以下の勉強ロードマップをまとめているので是非見てみてください！

<https://toukei-lab.com/machine-learning-study>

<https://toukei-lab.com/data-scientist>

<https://toukei-lab.com/python-learn>