Bagikan melalui


Menilai data baru (tutorial SQL Server dan RevoScaleR)

Berlaku untuk: SQL Server 2016 (13.x) dan versi yang lebih baru

Ini adalah tutorial 8 dari seri tutorial RevoScaleR tentang cara menggunakan fungsi RevoScaleR dengan SQL Server.

Dalam tutorial ini, Anda akan menggunakan model regresi logistik yang Anda buat di tutorial sebelumnya untuk menilai himpunan data lain yang menggunakan variabel independen yang sama dengan input.

  • Menilai data baru
  • Membuat histogram skor

Catatan

Anda memerlukan hak istimewa admin DDL untuk beberapa langkah ini.

Membuat dan menyimpan skor

  1. Perbarui sumber data sqlScoreDS (dibuat dalam tutorial dua) untuk menggunakan informasi kolom yang dibuat dalam tutorial sebelumnya.

    sqlScoreDS <- RxSqlServerData(
        connectionString = sqlConnString,
        table = sqlScoreTable,
        colInfo = ccColInfo,
        rowsPerRead = sqlRowsPerRead)
    
  2. Untuk memastikan Anda tidak kehilangan hasilnya, buat objek sumber data baru. Kemudian, gunakan objek sumber data baru untuk mengisi tabel baru di database RevoDeepDive.

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

    Pada titik ini, tabel belum dibuat. Pernyataan ini hanya mendefinisikan kontainer untuk data.

  3. Periksa konteks komputasi saat ini menggunakan rxGetComputeContext(), dan atur konteks komputasi ke server jika diperlukan.

    rxSetComputeContext(sqlCompute)
    
  4. Sebagai tindakan pencegahan, periksa keberadaan tabel output. Jika sudah ada dengan nama yang sama, Anda akan mendapatkan kesalahan saat mencoba menulis tabel baru.

    Untuk melakukan ini, lakukan panggilan ke fungsi rxSqlServerTableExists dan rxSqlServerDropTable, meneruskan nama tabel sebagai input.

    if (rxSqlServerTableExists("ccScoreOutput"))     rxSqlServerDropTable("ccScoreOutput")
    
    • rxSqlServerTableExists meminta driver ODBC dan mengembalikan TRUE jika tabel ada, FALSE jika tidak.
    • rxSqlServerDropTable menjalankan DDL dan mengembalikan TRUE jika tabel berhasil dihilangkan, FALSE jika tidak.
  5. Jalankan rxPredict untuk membuat skor, dan simpan dalam tabel baru yang ditentukan dalam sumber data sqlScoreDS.

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

    Fungsi rxPredict adalah fungsi lain yang mendukung berjalan dalam konteks komputasi jarak jauh. Anda dapat menggunakan fungsi rxPredict untuk membuat skor dari model berdasarkan rxLinMod, rxLogit, atau rxGlm.

    • Parameter writeModelVars diatur ke TRUE di sini. Ini berarti bahwa variabel yang digunakan untuk estimasi akan disertakan dalam tabel baru.

    • Parameter predVarNames menentukan variabel tempat hasil akan disimpan. Di sini Anda meneruskan variabel baru, ccFraudLogitScore.

    • Parameter jenis untuk rxPredict menentukan bagaimana Anda ingin prediksi dihitung. Tentukan respons kata kunci untuk menghasilkan skor berdasarkan skala variabel respons. Atau, gunakan tautan kata kunci untuk menghasilkan skor berdasarkan fungsi tautan yang mendasar, dalam hal ini prediksi dibuat menggunakan skala logistik.

  6. Setelah beberapa saat, Anda dapat me-refresh daftar tabel di Management Studio untuk melihat tabel baru dan datanya.

  7. Untuk menambahkan variabel tambahan ke prediksi output, gunakan argumen extraVarsToWrite . Misalnya, dalam kode berikut, custID variabel ditambahkan dari tabel data penilaian ke dalam tabel prediksi output.

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

Menampilkan skor dalam histogram

Setelah tabel baru dibuat, komputasi dan tampilkan histogram dari 10.000 skor yang diprediksi. Komputasi lebih cepat jika Anda menentukan nilai rendah dan tinggi, jadi dapatkan nilai tersebut dari database dan tambahkan ke data kerja Anda.

  1. Buat sumber data baru, sqlMinMax, yang meminta database untuk mendapatkan nilai rendah dan tinggi.

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

    Dari contoh ini, Anda dapat melihat betapa mudahnya menggunakan objek sumber data RxSqlServerData untuk menentukan himpunan data arbitrer berdasarkan kueri SQL, fungsi, atau prosedur tersimpan, lalu menggunakannya dalam kode R Anda. Variabel tidak menyimpan nilai aktual, hanya definisi sumber data; kueri dijalankan untuk menghasilkan nilai hanya saat Anda menggunakannya dalam fungsi seperti rxImport.

  2. Panggil fungsi rxImport untuk menempatkan nilai dalam bingkai data yang dapat dibagikan di seluruh konteks komputasi.

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

    Hasil

    > minMaxVals
    
    [1] -23.970256   9.786345
    
  3. Sekarang setelah nilai maksimum dan minimum tersedia, gunakan nilai untuk membuat sumber data lain untuk skor yang dihasilkan.

    sqlOutScoreDS <- RxSqlServerData(sqlQuery = "SELECT ccFraudLogitScore FROM ccScoreOutput",
        connectionString = sqlConnString,
        rowsPerRead = sqlRowsPerRead,
            colInfo = list(ccFraudLogitScore = list(
                low = floor(minMaxVals[1]),
                        high = ceiling(minMaxVals[2]) ) ) )
    
  4. Gunakan objek sumber data sqlOutScoreDS untuk mendapatkan skor, dan menghitung dan menampilkan histogram. Tambahkan kode untuk mengatur konteks komputasi jika diperlukan.

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

    Hasil

    histogram kompleks yang dibuat oleh R

Langkah berikutnya