トレーニング データ セットとテスト データ セット

適用対象:SQL Server 2019 以前の Analysis Services Azure Analysis Services Fabric/Power BI Premium

重要

データ マイニングは SQL Server 2017 Analysis Services で非推奨となり、SQL Server 2022 Analysis Services で停止されました。 非推奨および停止された機能については、ドキュメントの更新は行われません。 詳細については、「Analysis Services 下位互換性」を参照してください。

トレーニング セットとテスト セットにデータを分割することは、データ マイニング モデルの評価における重要な部分です。 通常、データセットをトレーニング セットとテスト セットに分割すると、ほとんどのデータはトレーニングに使用され、テストに使用されるデータは少量になります。 SQL Server Analysis Servicesデータをランダムにサンプリングして、テスト セットとトレーニング セットが類似していることを確認します。 トレーニングとテストに類似データを使用すると、データの差異による影響を最小限に抑えることができ、モデルの特性をよりよく理解できます。

トレーニング セットを使用してモデルが処理された後、テスト セットに対する予測を実行してモデルをテストします。 テスト セット内のデータには予測対象の属性の既知の値が既に含まれているため、モデルの推測が正しいかどうかを簡単に判断できます。

データ マイニング構造のテストとトレーニング セットの作成

SQL Server 2017 では、元のデータ セットをマイニング構造のレベルで分離します。 トレーニングとテストのデータセットのサイズ、どの行がどのセットに属するかなどに関する情報は、構造に格納され、その構造に基づくすべてのモデルで、これらのセットを使用してトレーニングとテストを行うことができます。

マイニング構造のテスト データセットは、次の方法で定義できます。

  • マイニング構造は、その作成時にデータ マイニング ウィザードを使用して分割します。

  • データ マイニング デザイナーの [マイニング構造] タブで、構造のプロパティを変更します。

  • 分析管理オブジェクト (AMO) または XML データ定義言語 (DDL) を使用し、プログラムによって構造を作成および変更します。

データ マイニング ウィザードを使用したマイニング構造の分割

既定では、マイニング構造のデータ ソースを定義した後、データ マイニング ウィザードによって、ソース データの 70% がモデルのトレーニング用、30% がモデルのテスト用に分割されます。 この既定値は、70 から 30 の比率がデータ マイニングでよく使用されるために選択されましたが、SQL Server Analysis Servicesでは、要件に合わせてこの比率を変更できます。

また、トレーニング ケースの最大数を設定するようにウィザードを構成したり、指定したケースの最大数まで最大割合を許可するように制限を組み合わせたりすることもできます。 ケースの最大割合とケースの最大数の両方を指定した場合、SQL Server Analysis Servicesでは、テスト セットのサイズとして 2 つの制限のうち小さい方が使用されます。 たとえば、テスト ケースに 30% の提示データを指定し、テスト ケースの最大数を 1000 に指定した場合、テスト セットのサイズが 1000 ケースを超えることはありません。 これを利用すると、モデルにトレーニング データが追加されてもテスト セットのサイズが一定に保たれるようにすることができます。

複数のマイニング構造に同じデータ ソース ビューを使用する場合、すべてのマイニング構造とそのモデルでほぼ同じようにデータが分割されるようにするには、ランダム サンプリングの初期化に使用するシードを指定します。 HoldoutSeed の値を指定すると、SQL Server Analysis Servicesはその値を使用してサンプリングを開始します。 指定しないと、サンプリング時に、マイニング構造の名前に対してハッシュ アルゴリズムを使用してシード値が作成されます。

注意

EXPORT ステートメントおよび IMPORT ステートメントを使用してマイニング構造のコピーを作成すると、新しいマイニング構造でも同じトレーニング データセットとテスト データセットが使用されます。エクスポート プロセスでは新しい ID が作成されますが、同じ名前が使用されるためです。 一方、2 つのマイニング構造の基になるデータ ソースが同じでも、名前が異なる場合は、それぞれのマイニング構造に作成されるセットも異なります。

テスト データセットの作成のための構造のプロパティの変更

マイニング構造を作成および処理した後にテスト データセットを確保する場合は、マイニング構造のプロパティを変更できます。 データのパーティション分割方法を変更するには、次のプロパティを編集します。

プロパティ 説明
HoldoutMaxCases テスト セットに含めるケースの最大数を指定します。
HoldoutMaxPercent テスト セットに含めるケースの数を、データセット全体に対する割合で指定します。 データセットを含めないようにするには、0 を指定します。
HoldoutSeed パーティションのデータをランダムに選択するときにシードとして使用する整数値を指定します。 この値は、トレーニング セット内のケース数には影響を与えずに、パーティションを反復可能にします。

既存の構造でテスト データセットを追加または変更した場合、構造および関連するすべてのモデルを再処理する必要があります。 また、ソース データを分割すると、異なるデータ サブセットでモデルがトレーニングされるようになるため、モデルの結果が変化する場合があります。

プログラムによる HOLDOUT の指定

DMX ステートメント、AMO、または XML DDL を使用すると、データ マイニング構造でテスト データセットおよびトレーニング データセットを定義できます。 ALTER MINING STRUCTURE ステートメントは、提示パラメーターの使用をサポートしていません。

  • DMX データ マイニング拡張機能 (DMX) 言語では CREATE MINING STRUCTURE ステートメントが拡張されており、WITH HOLDOUT 句を使用できます。

  • AsslSQL Server Analysis Services スクリプト言語 (ASSL) を使用して、新しいマイニング構造を作成するか、既存のマイニング構造にテスト データ セットを追加できます。

  • Amo AMO を使用して、ホールドアウト データ セットを表示および変更することもできます。

データ マイニング スキーマ行セットに対してクエリを実行すると、既存のマイニング構造内の予約データセットに関する情報を表示できます。 これを行うには、DISCOVER ROWSET を呼び出すか、DMX クエリを使用できます。

予約データに関する情報の取得

既定では、トレーニング データセットとテスト データセットに関する情報はすべてキャッシュされるので、既存のデータを使用して新しいモデルをトレーニングし、テストできます。 データのサブセットに対してモデルを評価できるように、キャッシュ済みの予約データに適用するフィルターをユーザーが定義することもできます。

ケースがどのようにトレーニング データセットおよびテスト データセットに分割されるかは、予約データの構成方法、および指定したデータによって異なります。 トレーニングまたはテストに使用されるケース数を確認する場合、またはトレーニング セットとテスト セットに含まれているケースの詳細を調べる場合は、DMX クエリを作成してモデル構造でクエリを実行します。 たとえば、次のクエリでは、モデルのトレーニング セットで使用されたケースが返されます。

SELECT * from <structure>.CASES WHERE IsTrainingCase()  

テスト ケースのみを取得し、さらにマイニング構造内のいずれかの列でテスト ケースをフィルター処理するには、次の構文を使用します。

SELECT * from <structure>.CASES WHERE IsTestCase() AND <structure column name> = '<value>'  

予約データの使用に関する制限事項

  • 提示データを使用するには、マイニング構造の MiningStructureCacheMode プロパティが既定値の KeepTrainingCasesに設定されている必要があります。 CacheMode プロパティを ClearAfterProcessingに変更してマイニング構造を再処理すると、パーティションが失われます。

  • タイム シリーズ モデルからデータを削除することはできません。したがって、ソース データをトレーニング セットとテスト セットに分割することはできません。 マイニング構造とモデルの作成を開始し、Microsoft Time Series アルゴリズムを選択すると、ホールドアウト データ セットを作成するオプションは無効になります。 また、ケース テーブル レベルまたは入れ子になったテーブル レベルで、マイニング構造に KEY TIME 列が含まれている場合も、予約データの使用が無効になります。

  • データセット全体がテストに使用され、トレーニング用のデータが残らなくなるように予約データセットが誤って構成されることもあります。 ただし、その場合、SQL Server Analysis Servicesはエラーを発生させ、問題を修正できるようにします。 SQL Server Analysis Servicesでは、データの 50% を超えるデータがテストのために保留されている場合に、構造体が処理されるときにも警告が表示されます。

  • 多くの場合、提示データの既定値である 30 を使用すると、トレーニング データとテスト データのバランスがとれます。 十分なトレーニングのためにデータセットをどの程度大きくするか、また、オーバーフィットを回避するためにトレーニング セットをどの程度小さくするかを、単純に算出する方法はありません。 ただし、モデルを作成した後、クロス検証を使用して、特定のモデルについてデータセットを評価できます。

  • AMO と XML DDL には、前の表に示したプロパティに加えて、読み取り専用プロパティ HoldoutActualSizeが用意されています。 ただし、構造が処理されるまではパーティションの実際のサイズを正確に知ることができないため、 HoldoutActualSize プロパティの値を取得する前に、モデルが処理済みであるかどうかを確認する必要があります。

参照

データ マイニング ツール
データ マイニングの概念
データ マイニング ソリューション
テストおよび検証 (データ マイニング)