予測(Transact-SQL)

適用対象: SQL Server 2017 (14.x) 以降のバージョン Azure SQL Managed InstanceAzure Synapse Analytics

格納されているモデルに基づいて予測値やスコアを生成します。 詳細については、「PREDICT T-SQL 関数を使用したネイティブ スコアリング」をご覧ください。

製品を選択する

次の行で、興味のある製品の名前を選択すると、その製品の情報のみが表示されます。

注

PREDICT は Azure SQL Database では使用できません。

Important

PREDICT構文は製品によって異なります。 製品セレクターを使用して、プラットフォームの正しい構文を表示します。 特に、Azure Synapse Analytics には、SQL Server または Azure SQL Managed Instance では使用されない RUNTIME = ONNX 引数が必要です。

* SQL Server *  

* SQL 管理インスタンス *  

* Azure Synapse
解析学*
 

Tip

Microsoft Fabric Data Warehouse は、将来のアーキテクチャ、組み込みの AI、および新機能を備えた、Data Lake 基盤上のエンタープライズ 規模のリレーショナル ウェアハウスです。 データ ウェアハウスを初めて使用する場合は、Fabric Data Warehouseから始めます。 既存の dedicated SQL プール ワークロードは、Fabric にアップグレードして、データ サイエンス、リアルタイム分析、レポートの新機能にアクセスできます。

構文

PREDICT  
(  
  MODEL = @model | model_literal,  
  DATA = object AS <table_alias>
)  
WITH ( <result_set_definition> )  

<result_set_definition> ::=  
  {  
    { column_name  
      data_type  
      [ COLLATE collation_name ]  
      [ NULL | NOT NULL ]  
    }  
      [,...n ]  
  }  

MODEL = @model | model_literal  
PREDICT  
(  
  MODEL = <model_object>,
  DATA = object AS <table_alias>
  [, RUNTIME = ONNX ]
)  
WITH ( <result_set_definition> )  

<result_set_definition> ::=  
  {  
    { column_name  
      data_type  
      [ COLLATE collation_name ]  
      [ NULL | NOT NULL ]  
    }  
      [,...n ]  
  }  

<model_object> ::=
  {
    model_literal
    | model_variable
    | ( scalar_subquery )
  }

引数

MODEL

MODEL パラメーターを使用して、スコアリングまたは予測のモデルを指定します。 モデルを変数、リテラル、またはスカラー式として指定します。

PREDICT は RevoScaleR と revoscalepy パッケージを使用してトレーニングされたモデルをサポートします。

MODEL パラメーターを使用して、スコアリングまたは予測のモデルを指定します。 モデルを変数、リテラル、またはスカラー式として指定します。

Azure SQL Managed Instance では、 PREDICT は RevoScaleR パッケージと revoscalepy パッケージを使用してトレーニングされたモデル を サポートしています。

MODEL パラメーターを使用して、スコアリングまたは予測のモデルを指定します。 モデルを変数、リテラル、スカラー式、またはスカラー サブクエリとして指定します。

Azure Synapse Analytics では、PREDICT は Open Neural Network Exchange (ONNX) 形式のモデルをサポートしています。 詳細については、 ONNX を参照してください。

データ

DATA パラメーターは、スコア付けまたは予測のデータを指定します。 クエリのテーブル ソースの形式でデータを指定します。 テーブル ソースには、テーブル、テーブルエイリアス、CTE エイリアス、ビュー、またはテーブル値関数を指定できます。

RUNTIME = ONNX

モデルの実行に使用される機械学習エンジンを示します。 RUNTIME パラメーターの値は常に ONNX です。 Azure Synapse Analytics には、 RUNTIME パラメーターが必要です。 RUNTIME = ONNX引数は、Azure Synapse Analytics でのみ使用できます。

( <result_set_definition> )

WITH 句を使用して、 PREDICT 関数によって返される出力のスキーマを指定します。

PREDICT 関数自体から返される列に加え、データ入力の一部であるすべての列がクエリで使用できます。

戻り値

定義済みのスキーマは使用できません。モデルの内容は検証されず、返される列の値も検証されません。

  • PREDICT 関数は入力として列を通過します。
  • PREDICT関数では新しい列も生成されますが、列の数とそのデータ型は、予測に使用されるモデルの種類によって異なります。

データ、モデル、または列形式に関連するすべてのエラー メッセージは、モデルに関連付けられている基になる予測関数から返されます。

解説

PREDICT 関数は、SQL Server 2017 以降のすべてのエディションで、Windows および Linux 上でサポートされています。 を使用するために PREDICT を有効にする必要はありません。

サポートされているアルゴリズム

使用するモデルは、RevoScaleR または revoscalepy パッケージからサポートされているアルゴリズムのいずれかを使用して作成されている必要があります。 現在サポートされているモデルの一覧については、PREDICT T-SQL 関数を使用したネイティブ スコアリングに関するページを参照してください。

ONNX モデル形式に変換できるアルゴリズムがサポートされています。

ONNX モデル形式、および RevoScaleR または revoscalepy パッケージからサポートされているアルゴリズムのいずれかを使用して作成したモデルに変換できるアルゴリズムがサポートされています。 RevoScaleR および revoscalepy で現在サポートされているアルゴリズムの一覧については、PREDICT T-SQL 関数を使用したネイティブ スコアリングに関するページを参照してください。

アクセス許可

PREDICT にはアクセス許可は必要ありませんが、ユーザーは、データベースに対する EXECUTE アクセス許可と、入力として使用される任意のデータをクエリするためのアクセス許可が必要です。 モデルがテーブルに格納されている場合、ユーザーはテーブルからモデルを読み込める必要もあります。

例

次の例は、PREDICT を呼び出す構文を示しています。

FROM 句で PREDICT を使用する

この例では、PREDICT ステートメントの FROM 句内の SELECT 関数を参照します。

SELECT d.*, p.Score
FROM PREDICT(MODEL = @model,
    DATA = dbo.mytable AS d) WITH (Score FLOAT) AS p;
DECLARE @model VARBINARY(max) = (SELECT test_model FROM scoring_model WHERE model_id = 1);

SELECT d.*, p.Score
FROM PREDICT(MODEL = @model,
    DATA = dbo.mytable AS d, RUNTIME = ONNX) WITH (Score FLOAT) AS p;

パラメーターのテーブル ソースに指定されたエイリアス DATA は、dbo.mytableに属する列を参照します。 関数に指定されたエイリアス PREDICT は、PREDICT関数によって返される列を参照します。

  • モデルは、と呼ばれるテーブルに Models 列として格納されます。 モデルを識別するために、ID や description などの追加情報がテーブルに保存されます。
  • パラメーターのテーブル ソースに指定されたエイリアス DATA は、dbo.mytableに属する列を参照します。 入力データ列の名前は、モデルの入力名と一致している必要があります。
  • 関数に指定されたエイリアス PREDICT は、PREDICT関数によって返される予測列を参照します。 列名は、モデルの出力名と同じ名前にする必要があります。
  • SELECT ステートメントでは、すべての入力データ列と予測列を表示できます。

前の例のクエリは、スカラー サブクエリとして MODEL を指定することにより、ビューを作成するように書き換えることができます。

CREATE VIEW predictions
AS
SELECT d.*, p.Score
FROM PREDICT(MODEL = (SELECT test_model FROM scoring_model WHERE model_id = 1),
             DATA = dbo.mytable AS d, RUNTIME = ONNX) WITH (Score FLOAT) AS p;

PREDICTと INSERT 文の組み合わせ

予測の一般的なユース ケースは、入力データ用のスコアを生成してから、予測した値をテーブルに挿入する方法です。 次の例では、呼び出し元のアプリケーションがストアド プロシージャを使用して予測値を含む行をテーブルに挿入することを前提としています。

DECLARE @model VARBINARY(max) = (SELECT model FROM scoring_model WHERE model_name = 'ScoringModelV1');

INSERT INTO loan_applications (c1, c2, c3, c4, score)
SELECT d.c1, d.c2, d.c3, d.c4, p.score
FROM PREDICT(MODEL = @model, DATA = dbo.mytable AS d) WITH(score FLOAT) AS p;
DECLARE @model VARBINARY(max) = (SELECT model FROM scoring_model WHERE model_name = 'ScoringModelV1');

INSERT INTO loan_applications (c1, c2, c3, c4, score)
SELECT d.c1, d.c2, d.c3, d.c4, p.score
FROM PREDICT(MODEL = @model, DATA = dbo.mytable AS d, RUNTIME = ONNX) WITH(score FLOAT) AS p;
  • PREDICT の結果は、PredictionResults という名前のテーブルに格納されます。
  • モデルは、と呼ばれるテーブルに Models 列として格納されます。 モデルを識別するために、ID や説明などの追加情報がテーブルに保存されます。
  • d パラメーターのテーブル ソースに指定されたエイリアス DATAは、dbo.mytable内の列を参照します。 入力データ列の名前は、モデルの入力名と一致している必要があります。
  • p関数に指定PREDICTエイリアスは、PREDICT関数によって返される予測列を参照します。 列名は、モデルの出力名と同じ名前にする必要があります。
  • SELECT ステートメントには、すべての入力列と予測列を表示できます。