
- ホールドアウト法ってなに?
- どんなメリットがあるの?
とお悩みではないですか?
本記事では、モデルの評価を行うためのデータ分割手法『交差検証法』について、メリット・デメリットやPythonでの実装を解説していきます。
ホールドアウト法とはデータを訓練データとテストデータに分割する手法です。
モデルを評価する上でテストデータが必要になることから、ホールドアウト法は実務でも重宝されています。
本記事の信頼性

こんな悩みがある方読んで欲しい
- ホールドアウト法ってなに?
- ホールドアウト法のメリットは?
- ホールドアウト法のデメリットは?
- どうやってPythonで実装するの?
月額980円で学べる!

データサイエンスを学べるスク―ルって全部高くない?
確かに、データサイエンスのスクールは数十万円かかるものばかりで、うんざりですよね。
そんなあなたにおすすめなのが、たった月額980円で学べる『スタアカ』です!

もうデータサイエンスを学ぶために高額なお金を払う必要はありません。
サブスクなのでいつでも解約OK。手軽に始めてみませんか?
\月額980円/
講座が毎月追加されるので今後値上がりする可能性大、今が買いどき!
ホールドアウト法とは

ホールドアウト法はデータを訓練データとテストデータに分割する手法の1つです。

データを分割する意味は?
データを分割することで、モデルを作るためのデータとそのモデルを評価するデータの2つのデータを作れます。
そのため、モデルの評価までを用意したデータで行えるのです。
もし、データを分割せずすべて学習に使ってしまえば、モデルを評価できなくなってしまいます。

どうやってデータを分割するの?
ホールドアウト法はランダムにデータを訓練データとテストデータに分割します。
例えば、訓練データとテストデータを8:2に分割しようとすると以下のようなイメージです。

このようにランダムでデータを分割するのがホールドアウト法の特徴です。
また、他の分割手法として交差検証法があります。
ホールドアウト法との違いについても解説しているので、ご興味のある方は『交差検証法とは?種類やPythonの実装・ホールドアウト法との違いまでわかりやすく解説』の記事をご参照ください。
モデルを作成する上で、モデルの評価が必ず必要です。
そのため、モデルの評価用にテストデータを作らなくてはなりません。
ホールドアウト法はデータを分割する手法であることから、必ず押さえるべき手法になります。
ホールドアウト法のメリット
ホールドアウト法には大きく2つのメリットがあります。
メリットは以下の通りです。
- 簡単に行える
- 計算コストが低い
ホールドアウト法はシンプルな分割手法です。
そのため、簡単に行えることがメリットになります。
実際、Pythonの実行は1行で可能です。
また、ホールドアウト法は計算コストが低いことがメリットになります。
ホールドアウト法は、データをランダムに抽出して定めた割合に振り分けるアルゴリズムです。
そのため、計算量はO(N)程度(※N個のデータの場合)に収まるのです。
交差検証法と比較しても計算コストが低いことが分かっています。
詳しくは交差検証法の記事をご参照ください
ホールドアウト法の3つのデメリット

ホールドアウト法には以下の3つのデメリットがあります。
- データの偏りに弱い
- テストデータを訓練に使えない
- 安定性に欠ける
簡単な手法である反面、デメリットもあります。
それぞれ解説していきます。
データの偏りに弱い
ホールドアウト法では訓練データやテストデータに偏りが生じる可能性があります。
なぜなら、データをランダムに分割して一部のデータが偏ってしまうためです。
具体例をもとに解説していきます。
りんご,いちご,りんご,いちご,りんご,いちご,りんご,いちご
のようなデータが並んでいるとします。
このデータを訓練データ:テストデータ=8:2に分割してみます。
もし、綺麗に訓練データとテストデータに分割できれば、
りんご,いちご,りんご,いちご,りんご,いちご|りんご,いちご
となり、訓練データとテストデータ共に、りんご:いちご=1:1の割合になります。
しかし、ホールドアウト法では最悪の場合、
りんご,いちご,りんご,いちご,りんご,りんご|いちご,いちご
となり、テストデータにりんごがなくなってしまいます。
このように、偏ったデータの分割となることで正しいモデルの評価が行えなくなってしまうのです。
テストデータを訓練に使えない
ホールドアウト法ではテストデータをモデルの評価に用いるため、テストデータは訓練に使えません。
そのため、データ数が十分でない場合、モデルを十分に学習できない可能性があります。
もし、テストデータに特徴的なデータがあった場合、その特徴もモデルに取り入れたいですよね。
そのため、実務では交差検証法を用いて、テストデータも訓練データに使用できるようにしています。
もし、データ数が十分に確保できている場合はホールドアウト法も視野に入れて、分析方法を考えましょう。
安定性に欠ける
データの分割がランダムであるため、ホールドアウト法による評価は安定しません。
データの偏りの所でも説明したように、分割によっては評価が悪くなってしまうのです。
そのため、何回かホールドアウト法を行うと、まったく違う結果になる可能性があります。
複数回のホールドアウト法でデータを分割し、それぞれの評価の平均を取ることでおおよそのモデルの精度を予測する対策が考えられます。
また、交差検証法では安定性を確保できることもあわせて覚えておきましょう。
ホールドアウト法はPythonで簡単に行える
ホールドアウト法はPythonを用いて簡単に行えます。
Pythonに用意されているライブラリを利用して、データを分割していきます。
ホールドアウト法はtrain_test_split
によって1行で行えます。
from sklearn.model_selection import train_test_split
#訓練データ:テストデータ=8:2に分割
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0)
trainは訓練データ、testはテストデータです。
Xはモデルの説明変数、yはモデルの目的変数の関係性にあります。
test_sizeが0.2というのは、テストデータが2割であると意味です。
そのため、今回は訓練データ:テストデータ=8:2に分割しています。
このように、1行でホールドアウト法は実装できます。
まとめ
ホールドアウト法はモデルを評価するデータを作るためにデータを分割する手法です。
ホールドアウト法は他の分割法と異なり、シンプルな手法で実装が容易であるという特徴があります。
また、シンプルな手法であることから、計算コストも低いことがメリットです。
シンプルである一方、注意点も存在します。
- データの偏りに弱い
- テストデータを訓練に使えない
- 安定性に欠ける
これらの注意点に気づかずホールドアウト法を用いてモデルを作成すると、良いモデルが作れない可能性があります。
十分なデータ数がある場合には、データの偏りが起きにくく訓練データだけでモデルを十分に学習できます。
また、一定の安定性も確保できるため、十分なデータが確保できればホールドアウト法を用いましょう。
しかし、十分なデータ数を確保できない場合もあります。
そのようなケースでは『交差検証法』を用いて、テストデータも訓練データとして使用できるようにすることをおすすめします。
ホールドアウト法は、Pythonを用いて1行で実装できます。
実務でホールドアウト法をPythonで実施し、モデルの評価を行えるようにしましょう。
「機械学習の勉強がなかなか上手く進まない...」
「勉強しても全体像が見えてこない...」
「本当にデータサイエンティストになれるのかな...」
と不安に感じてはいませんか?
僕も勉強しながら同じような悩みを常に持っていました。
ですが、そんな僕の悩みをまるっと解決してくれるサービスをついに見つけました。

データサイエンスを学べるサービスなんて高額でしょ?
データサイエンスを学ぶために高額なお金を払う必要はありません。
僕が利用している『スタアカ』のライトプランは月額980円で動画見放題のコスパ最強サブスクです。

たった月1000円で、もう二度と独学で悩まずに済みます。
正直、「就職・転職までサポートしてほしい」という方にはおすすめできません。
ですが、「勉強の道しるべが欲しい!」「学習を効率的に進めたい」という方にはこの上ないサブスクです。
データサイエンスを学びたい方に最強のサブスク『スタアカ』を気軽に始めてみませんか?
\月額たった980円!/
講座が毎月追加されるので今後値上がりする可能性大、今が買いどき!