Pontuar dados novos (tutorial do SQL Server e RevoScaleR)
Aplica-se a: SQL Server 2016 (13.x) e versões posteriores
Este é o tutorial 8 da série de tutoriais do RevoScaleR sobre como usar as funções do RevoScaleR com o SQL Server.
Nesse tutorial, você usará o modelo de regressão logística que criou no tutorial anterior para pontuar outro conjunto de dados que usa as mesmas variáveis independentes como entradas.
- Pontuar novos dados
- Criar um histograma das pontuações
Observação
Você precisa de privilégios de administrador DDL para algumas dessas etapas.
Gerar e salvar pontuações
Atualize a fonte de dados sqlScoreDS (criada no tutorial dois) para usar as informações de coluna criadas no tutorial anterior.
sqlScoreDS <- RxSqlServerData( connectionString = sqlConnString, table = sqlScoreTable, colInfo = ccColInfo, rowsPerRead = sqlRowsPerRead)
Para não perder os resultados, crie um novo objeto de fonte de dados. Em seguida, use o novo objeto de fonte de dados para popular uma nova tabela no banco de dados RevoDeepDive.
sqlServerOutDS <- RxSqlServerData(table = "ccScoreOutput", connectionString = sqlConnString, rowsPerRead = sqlRowsPerRead )
Neste ponto, a tabela não foi criada. Essa instrução define apenas um contêiner para os dados.
Verifique o contexto de computação atual usando rxGetComputeContext() e defina o contexto de computação como o servidor, se necessário.
rxSetComputeContext(sqlCompute)
Como precaução, verifique a existência da tabela de saída. Se já existir uma com o mesmo nome, você obterá um erro ao tentar gravar na nova tabela.
Para fazer isso, faça uma chamada para as funções rxSqlServerTableExists e rxSqlServerDropTable, passando o nome da tabela como entrada.
if (rxSqlServerTableExists("ccScoreOutput")) rxSqlServerDropTable("ccScoreOutput")
- rxSqlServerTableExists consulta o driver ODBC e retorna TRUE se a tabela existir ou FALSE, caso contrário.
- rxSqlServerDropTable executa a DDL e retornará TRUE se a tabela for removida com êxito; se não, retornará FALSE.
Execute rxPredict para criar as pontuações e salvá-las na nova tabela definida na fonte de dados sqlScoreDS.
rxPredict(modelObject = logitObj, data = sqlScoreDS, outData = sqlServerOutDS, predVarNames = "ccFraudLogitScore", type = "link", writeModelVars = TRUE, overwrite = TRUE)
A função rxPredict é outra função que dá suporte à execução em contextos de computação remota. Você pode usar a função rxPredict para criar pontuações de modelos baseados em rxLinMod, rxLogit ou rxGlm.
O parâmetro writeModelVars é definido como TRUE aqui. Isso significa que as variáveis usadas para a estimativa serão incluídas na nova tabela.
O parâmetro predVarNames especifica a variável em que os resultados serão armazenados. Aqui você está passando uma nova variável, a
ccFraudLogitScore
.O parâmetro type de rxPredict define como você quer que as previsões sejam calculadas. Especifique a palavra-chave response para gerar pontuações com base na escala da variável de resposta. Ou use a palavra-chave link para gerar pontuações com base na função de link subjacente; nesse caso, as previsões serão criadas usando uma escala logística.
Após alguns instantes, você pode atualizar a lista de tabelas no Management Studio para ver a nova tabela e seus dados.
Para adicionar mais variáveis às previsões de saída, use o argumento extraVarsToWrite. Por exemplo, no código a seguir, a variável custID é adicionada da tabela de dados de pontuação à tabela de saída de previsões.
rxPredict(modelObject = logitObj, data = sqlScoreDS, outData = sqlServerOutDS, predVarNames = "ccFraudLogitScore", type = "link", writeModelVars = TRUE, extraVarsToWrite = "custID", overwrite = TRUE)
Exibir pontuações em um histograma
Depois que a nova tabela foi criada, calcule e exiba um histograma das 10 mil pontuações previstas. Os cálculos serão mais rápidos se você especificar valores altos e baixos, portanto obtenha-os no banco de dados e os adicione aos dados de trabalho.
Crie uma nova fonte de dados, sqlMinMax, que consulta o banco de dados para obter valores altos e baixos.
sqlMinMax <- RxSqlServerData( sqlQuery = paste("SELECT MIN(ccFraudLogitScore) AS minVal,", "MAX(ccFraudLogitScore) AS maxVal FROM ccScoreOutput"), connectionString = sqlConnString)
Neste exemplo, você também pode ver como é fácil usar objetos de fonte de dados RxSqlServerData para definir conjuntos de dados arbitrários com base em consultas SQL, funções ou procedimentos armazenados de fonte de dados e, em seguida, usá-los no seu código R. A variável não armazena os valores reais, apenas a definição de fonte de dados. A consulta é executada para gerar os valores somente quando você usá-los em uma função, como rxImport.
Chame a função rxImport para colocar os valores em um quadro de dados que pode ser compartilhado entre contextos de computação.
minMaxVals <- rxImport(sqlMinMax) minMaxVals <- as.vector(unlist(minMaxVals))
Resultados
> minMaxVals [1] -23.970256 9.786345
Agora que os valores máximo e mínimo estão disponíveis, use os valores para criar outra fonte de dados para as pontuações geradas.
sqlOutScoreDS <- RxSqlServerData(sqlQuery = "SELECT ccFraudLogitScore FROM ccScoreOutput", connectionString = sqlConnString, rowsPerRead = sqlRowsPerRead, colInfo = list(ccFraudLogitScore = list( low = floor(minMaxVals[1]), high = ceiling(minMaxVals[2]) ) ) )
Use o objeto de fonte de dados sqlOutScoreDS para obter as pontuações e computar e exibir um histograma. Adicione o código para definir o contexto de computação, se necessário.
# rxSetComputeContext(sqlCompute) rxHistogram(~ccFraudLogitScore, data = sqlOutScoreDS)
Resultados