次の方法で共有


新しいデータのスコア付け (SQL Server と RevoScaleR のチュートリアル)

適用対象: SQL Server 2016 (13.x) 以降のバージョン

これは、SQL Server で RevoScaleR 関数を使用する方法についての RevoScaleR チュートリアル シリーズのチュートリアル 8 です。

このチュートリアルでは、前のチュートリアルで作成したロジスティック回帰モデルを使用して、同じ独立変数を入力として使用する別のデータセットをスコア付けします。

  • 新しいデータのスコア付け
  • スコアのヒストグラムを作成する

注意

手順の一部には、DDL 管理者特権が必要です。

スコアの生成と保存

  1. 前のチュートリアルで作成した列情報を使用するには、sqlScoreDS データソース (チュートリアル 2 で作成) を更新します。

    sqlScoreDS <- RxSqlServerData(
        connectionString = sqlConnString,
        table = sqlScoreTable,
        colInfo = ccColInfo,
        rowsPerRead = sqlRowsPerRead)
    
  2. 結果が失われないようにするには、新しいデータソースオブジェクトを作成します。 次に、新しいデータ ソース オブジェクトを使用して、RevoDeepDive データベースに新しいテーブルを作成します。

    sqlServerOutDS <- RxSqlServerData(table = "ccScoreOutput",
        connectionString = sqlConnString,
        rowsPerRead = sqlRowsPerRead )
    

    この時点では、テーブルは作成されていません。 これはデータのコンテナーを定義するためだけのステートメントです。

  3. 現在のコンピューティング コンテキストを rxGetComputeContext() 使用して確認し、必要に応じてコンピューティング コンテキストをサーバーに設定します。

    rxSetComputeContext(sqlCompute)
    
  4. 念のため、出力テーブルが存在するかどうかを確認してください。 同じ名前のものが既に存在する場合は、新しいテーブルを書き込もうとしたときにエラーが表示されます。

    この処理を実行するには、入力としてテーブル名を渡して、関数 rxSqlServerTableExistsrxSqlServerDropTableを呼び出します。

    if (rxSqlServerTableExists("ccScoreOutput"))     rxSqlServerDropTable("ccScoreOutput")
    
    • rxSqlServerTableExists は ODBC ドライバーに対してクエリを行い、テーブルが存在する場合は TRUE、それ以外の場合は FALSE を返します。
    • rxSqlServerDropTable は DDL を実行し、テーブルが正常にドロップされた場合は TRUE、それ以外の場合は FALSE を返します。
  5. rxPredict を実行してスコアを作成し、データ ソース sqlScoreDS で定義されている新しいテーブルに保存します。

    rxPredict(modelObject = logitObj,
        data = sqlScoreDS,
        outData = sqlServerOutDS,
        predVarNames = "ccFraudLogitScore",
          type = "link",
        writeModelVars = TRUE,
        overwrite = TRUE)
    

    rxPredict 関数も、リモート計算コンテキストでの実行をサポートする関数です。 rxPredict 関数を使用すると、rxLinModrxLogit、または rxGlm に基づくモデルからスコアを作成できます。

    • ここで writeModelVars パラメーターは TRUE に設定されます。 これは見積もりに使用された変数が新しいテーブルに追加されることを意味します。

    • predVarNames パラメーターにより、結果が保存される変数が指定されます。 ここで、新しい変数の ccFraudLogitScore を渡します。

    • rxPredicttype パラメーターで、予測の計算方法を定義します。 応答変数のスケールに基づいてスコアを生成するには、キーワード 応答 を指定します。 または、キーワード リンクを使用して、基になるリンク関数に基づいてスコアを生成します。この場合、予測はロジスティック スケールを使用して作成されます。

  6. 少し時間をおいて Management Studio でテーブルの一覧を更新すると、新しいテーブルとそのデータを確認することができます。

  7. 出力予測に変数を追加するには、extraVarsToWrite 引数を使用します。 たとえば、次のコードの変数 custID は、スコアリング データ テーブルから予測の出力テーブルに追加されています。

    rxPredict(modelObject = logitObj,
            data = sqlScoreDS,
            outData = sqlServerOutDS,
            predVarNames = "ccFraudLogitScore",
              type = "link",
            writeModelVars = TRUE,
            extraVarsToWrite = "custID",
            overwrite = TRUE)
    

ヒストグラムでスコアを表示する

新しいテーブルが作成されたら、10,000 件の予測スコアのヒストグラムを計算し、表示します。 下限値と上限値を指定すると、計算が高速になります。そのため、これらの値をデータベースから取得し、作業中のデータに追加します。

  1. 新しいデータソース sqlMinMax を作成します。このデータ ソースに対してクエリを行い、上限値と下限値を取得します。

    sqlMinMax <- RxSqlServerData(
        sqlQuery = paste("SELECT MIN(ccFraudLogitScore) AS minVal,",
        "MAX(ccFraudLogitScore) AS maxVal FROM ccScoreOutput"),
        connectionString = sqlConnString)
    

    この例を見ると、 RxSqlServerData データ ソース オブジェクトを使用して SQL クエリ、関数、またはストアド プロシージャに基づいて任意のデータセットを定義し、それを R コードで使用するのが簡単だということがわかります。 この変数には実際の値は格納されず、データ ソースの定義のみが格納されます。 rxImportなど関数で使用する場合にのみ、このクエリを実行して値を生成します。

  2. rxImport 関数を呼び出して、コンピューティング コンテキスト全体で共有できるデータ フレームに値を配置します。

    minMaxVals <- rxImport(sqlMinMax)
    minMaxVals <- as.vector(unlist(minMaxVals))
    

    結果

    > minMaxVals
    
    [1] -23.970256   9.786345
    
  3. 最大値と最小値を使用できるようになったので、値を使用して、生成されたスコアに対して別のデータ ソースを作成します。

    sqlOutScoreDS <- RxSqlServerData(sqlQuery = "SELECT ccFraudLogitScore FROM ccScoreOutput",
        connectionString = sqlConnString,
        rowsPerRead = sqlRowsPerRead,
            colInfo = list(ccFraudLogitScore = list(
                low = floor(minMaxVals[1]),
                        high = ceiling(minMaxVals[2]) ) ) )
    
  4. データ ソース オブジェクト sqlOutScoreDS を使用してスコアを取得し、ヒストグラムを計算して表示します。 必要に応じて、計算コンテキストを設定するコードを追加してください。

    # rxSetComputeContext(sqlCompute)
    rxHistogram(~ccFraudLogitScore, data = sqlOutScoreDS)
    

    結果

    R で作成された複雑なヒストグラム

次のステップ