ブログ - 日本語

アナリティクスに関する聡明な考えに触れ、インサイトとアイデアが得られます。
Alteryx Community Team
Alteryx Community Team

** このブログは元々英語で公開され、@SydneyF  によって作成されました

 

データの収集、クレンジング、調査、および特徴量エンジニアリングの後、モデルのトレーニングを開始する前に、トレーニングに使用するデータを含まないモデルを評価する戦略を立てる必要があります。一般的な戦略としては、「ホールドアウト」データセットの作成やクロスバリデーションの実行があります。その結果、データの一部のみを使用してモデルをトレーニングし、ハイパーパラメーターを調整して、モデルを評価するための最終的な公正で偏りのないデータが得られます。

トレーニングのためには、より多くのデータを使用する方がいいのでは?
トレーニングからデータを外すなんて愚かな行為なのでは?
なぜトレーニングデータを使用してモデルを評価できないのか?
そもそもクロスバリデーションとはどのように機能して、いつ使うものなのか?

データサイエンスのジャーニーの途中でモデルのトレーニングなどのコンセプトに出会った時に、あなたはこんな疑問を持つかもしれません。今回は検証やテストデータセットを作成したり、クロスバリデーションを実行したりすることの重要性について明らかにしたいと思います。このブログを通して成功するモデル評価の取り組みを準備するための知識を身に着けていただけると幸いです。

 

 

テストデータセットを持つことの重要性


データを機械学習アルゴリズムにフィードすると、そのデータを使用してパターンが識別され、ターゲットとなる変数を最適に予測する方法が決定されます。多くのアルゴリズムにはモデルがデータをどの程度「学習」したかを評価するために使用できるパフォーマンスメトリックスがあります。ただし、パフォーマンスを評価するための最良の方法の 1 つはトレーニング済みモデルを介してラベル付きデータを実行し、ターゲット変数の既知の値と比較してそのパフォーマンスを確認することです。

モデルのトレーニングに使用したのと同じデータを使用したり、モデルのトレーニングに関連付けられたメトリックス(r-2乗など)を使用してモデルを評価したりしたくなるのは自然なことです。しかし、全体的にみるとどちらの戦略もよい方法とは言えません。




92cseayip9c01.jpg

 

 




トレーニングデータを使用してモデルを評価すると、モデルはデータを既に確認しており、その処理方法を正確に把握しているため、モデルのパフォーマンスに関するメトリックスは過度に楽観的なものになります。一部のアルゴリズム (ランダムフォレストなど) では、トレーニングされたモデルは、トレーニングデータの値を完全に予測することができます。モデルがトレーニングデータを過学習していることに気付かないリスクも非常に高くなります。トレーニングに使用したデータを使用してテストする場合、モデルがデータの実際のパターンを学習したことを検証する方法が存在しないため、トレーニングデータセットのみに存在するランダムノイズを確認することができません。

また、決定係数(R-squared) のような統計の適合は、実際のパフォーマンスとは無関係のデータやモデルのアーティファクトによって膨らませることができ、過学習のリスクを防ぐことはできません。

そのため、テストデータセットと呼ばれる、モデルに入力されたトレーニングデータには含まれていない個別のデータセットを使用してモデルの最終評価を行うことがベストプラクティスです。


SaoriG_1-1587153289876.png

 


通常、テストデータセットのポイントはトレーニング中にモデルに認識されないため、平均二乗誤差(英語)などのテストデータセットで計算されるメトリックスは、トレーニングデータセットで計算されるメトリックスに比べ劣ります。テストデータセットのレコードはモデルにとってまったく新しいものであるため、テストレコードに対するモデルのパフォーマンスからモデルが未知のデータに対してどのように働き、結論付けるのかを予測することができます。
ある程度までモデルが間違うのは避けられないので、どのような間違いをする可能性があるのか、推定値にどの程度の信頼を置くべきかなどについて、モデルを本番の環境に投入する前に現実的な期待を持つことが重要です。

また、テストデータセットを使用してモデルを評価した後は、モデルをそれ以上調整したりするべきではありません。テストデータセットのコンテキストで調整を行おうとすると、その途端にデータセットの品質が損なわれます。テストデータセットを使用してモデルのパフォーマンスを向上させようとすると、手動で効果的にモデルを「トレーニング」できるかのように錯覚するかもしれません。しかし、モデルのパフォーマンスが向上するのはテストデータ上だけであり、テストデータから派生したメトリックスは偏ったものになり、真のテストとして機能しなくなります。

 

ハイパーパラメーター調整と 2 番目のテストデータセット


テストデータセットをホールドアウトすることに加えて、検証データセットもホールドアウトする必要があることがよくあります。これはアルゴリズムからでは学習することが不可能なモデル機能の調整と意思決定をする必要があるためです。これをハイパーパラメーターと呼びます。

ハイパーパラメーターは、モデルがトレーニングデータを学習し、モデルを作成する方法に影響を与えるパラメーターです。ハイパーパラメーターはユーザーが決定する必要があります。ハイパーパラメーターを調整するには、トレーニングに使用されなかったデータに対してモデルがどのように実行されるのかを評価し、最適なモデルが見つかるまでハイパーパラメーターをチューニングする必要があります。このプロセスはハイパーパラメーター調整と呼ばれます。

検証データセットを使用してモデルを調整すると、モデルを使用してパフォーマンスの公正な評価を作成することができなくなります。


SaoriG_2-1587153289876.png

 


これがテストデータセットもホールドアウトする必要がある理由です。モデルを実行してテストデータセットをスコアリングしたらモデルの調整は完了です。

 

どれくらいのデータをホールドアウトするべきか?


テストと検証のためにトレーニングから除外するデータ量について厳格なルールはありません。ラベル付けされたデータのサイズによって異なります。一般的な出発点として、トレーニングには少なくともデータの半分を使用する必要があります。

トレーニングデータをそのまま使用してモデルを評価するのに比べ、「ホールドアウト」法で評価用のデータを作成する方法は遥かに優れていてうまく機能しますが、いくつかの欠点もあります。具体的に言うと、すでに限定されたラベル付きデータセットを使用している場合、開始するレコードが 100 件しかない状況では、データを 75%、15%、10% に分割すると、最終的な評価はたった10 件のレコードに基づくことになります。

サンプルが小さければ、そこから派生したメトリックスに過度の重みを付けることは妥当ではありません。トレーニングをたった75個のレコードでしかしていない上に、評価する10 個のレコードがすべてモデルで予測不可能な極端なケースの場合はどうしますか? また逆に、テストするたった10個のレコードにトリッキーなエッジケースが1つも含まれていなかったとしたらどうでしょう?

これは、モデルを検証するためにホールドアウト法を用いる上でよく行き詰ってしまうポイントです。学習したいデータのすべてのバリエーションをアルゴリズムに提供するためにはトレーニングデータセットを最大化するのが理想的です。ただし、計算するメトリックスがモデルのパフォーマンスを表すものであることを確認するために、テストデータセットも最大化するべきです。

単純なホールドアウトは、データサイズの制限に加えて各ホールドアウトビンに含まれる個々のレコードにも多大な影響を受けますーそしてそれは最も堅牢で最良のモデルを作成しようとする場合には理想的とは言えません。

 

クロスバリデーション


ホールドアウト法の限界に対するより洗練されたソリューションは、クロスバリデーション(交差検証)にあります。

データセットを2 つのグループに分割したとします。1 つ目の分割トレーニングと他の分割テストに任意のラベルを付け、モデルのトレーニングと評価を行い、2 つ目のグループに切り替えます。これにより2 組の評価メトリックスが作成され、アルゴリズムとトレーニングデータが未知のデータセットでどのように実行されるかをより現実的に把握できます。

これはまさに K-分割クロスバリデーションの仕組みであり、k はデータを分割する分割の数です。各イテレーションで、テストデータとしてサブセットの 1 つを選択し、残りはトレーニングデータとして使用します。このプロセスは、すべてのサブセットが順番でテストデータになるまで繰り返され、データセット内のすべてのレコードが順番でテストレコードとなることを確認します。各サブセットについて計算された検証メトリックスは、モデルのパフォーマンスの全体的な推定値を示すために結合されます。これはメトリックスの変動性を減らす効果があります - 実際に楽観的なテストデータセットや外れ値でいっぱいのテストデータセットを誤って取得するリスクを冒す代わりに、組み合わせたメトリックスを使用できます。


SaoriG_3-1587153289877.png

 


その他の一般的なバリエーションとしては、リーブワンアウト法と呼ばれる検証方法があります。K-分割交差と同様に機能しますが、サブセットを作成する代わりに、1 つのデータポイントをテストデータとしてとり、残りのデータでモデルをトレーニングします。そして、各トライアルポイントの組み合わせでメトリックスを計算します。この戦略の利点は、各イテレーションでトレーニングデータを最大化できることです。

統計分野のコンテキストでのクロスバリデーションについては、KD Nuggets(英語)にクロスバリデーションの洞察を説明する優れた記事として公開されています。またRob Hyndman (英語)による優れたブログ投稿 “Why every statistician should know about cross-validation(英語)” でも説明されています。

 

いつホールドアウトデータセットまたはクロスバリデーションを使用するべきか


一般的にクロスバリデーションはホールドアウト法よりも優れているとされています。より堅牢であると考えられており、トレーニング、テスト、および検証データ間の考えられるより多くの差異が考慮されています。


モデルはトレーニングに使用されるデータにとても影響を受けます。トレーニングデータセットに小さな変更を加えることにより、結果となるモデルに大きな違いが生じる場合があります。クロスバリデーションではデータを分割し複数のイテレーションを実行し、パフォーマンスを平均化することによりこれを緩和することができます。最終的なモデルでは利用可能なすべてのトレーニングデータが使用されます。これもクロスバリデーションの利点です。

クロスバリデーションの欠点は単純なホールドアウト法よりも時間がかかるということです。クロスバリデーションでは、各イテレーションに対してモデルのトレーニングとテストのプロセスを効果的に繰り返す必要があります。


データセットの各ターゲット変数が適切に表現されている場合、ホールドアウト法はテストデータセットに適切に機能し、処理時間を大幅に節約できるでしょう。しかし、正しく適用されている限り、クロスバリデーションはモデル評価においてホールドアウト法に比べより優れた、より堅牢なアプローチであると広く考えられています。

ただし、クロスバリデーションを使うとき(またはホールドアウト法を使う場合においても) 、データセット内に重複レコードが存在し、複数の行 (観測値) が互いに同じ予測変数とターゲット変数値を持つ場合は注意が必要です。重複したレコードがテストデータセットに残っている場合、モデルは非現実的な精度でそのレコードを予測することができるため、クロスバリデーション (またはテストデータセット) は無効となります。これはデータセットにオーバーサンプリング(英語)を実行して、ターゲット変数の不均衡なクラスを修正しようとした場合に発生しがちです。

 

Alteryx のホールドアウトデータとクロスバリデーション


Alteryx では[サンプル作成] ツールを使用して、検証とテストデータセットを作成することができます。設定はとても簡単で、作成したいデータの新しい分割ごとにパーセンテージを指定し、データをフィードするだけです。ツールには、トレーニング (E)、検証 (V)、テスト (H) の 3 つの出力アンカーがあります。[サンプル作成] ツールは、1 つ以上のモデルオブジェクト (予測ツールの "O" 出力) を取り込む R ベースのマクロであるモデル比較ツール (Alteryx Gallery からダウンロード可能) と組み合わせて使用することができます。また、予測ツールパレットに含まれているモデルアルゴリズムで使用できるメトリックス、例えばF1 スコア(英語)平均絶対誤差(英語)などを計算するためのテストデータセットと組み合わせて使用することもできます。

Alteryxには、Rプログラミング言語で記述されたクロスバリデーションツールもあります。クロスバリデーションツールは、Alteryx Gallery からダウンロードできます。