[SQL Server][R Language]資料科學用戶端(三)使用RxLogit函數 vs Glm函數

Glm是Open source R羅吉斯迴歸分析函數,RxLogit則是Revolution R羅吉斯迴歸分析函數,第一次用RxLogit想求證看看,我們來驗證看看兩個Library的測試結果是否相符。

 

上一篇匯入的信用卡詐欺交易中,是否為詐欺交易:Y(因變數)為二元型別,不太像一般數值型別的迴歸分析,這時後羅吉斯迴歸分析是很常使用的演算法。

 

比較的面向:

  1. 效能
  2. 預測結果

 

訓練資料與測試資料

1.從資料庫中取得上一篇匯入的信用卡詐欺交易訓練資料及前100筆測試資料

#CRAN-R RODBC
#install.packages("RODBC")
library(RODBC)

sqlConnString = "driver={SQL Server};server=資料庫ip\\MSSQLSERVER;database=RDB;uid=帳號;pwd=密碼!"
conn <- odbcDriverConnect(sqlConnString)
#訓練資料
q <- paste(" SELECT * FROM ccFraudSmall")
sqlFraudDS <- sqlQuery(conn, q)
#測試資料
q <- paste(" SELECT top 100 * FROM ccFraudScoreSmall")
sqlFraudScoreDS <- sqlQuery(conn, q)

 

2.訓練模型並且記錄產生模型的花費時間


glmformula <- "fraudRisk ~ state + gender + cardholder + balance + numTrans + numIntlTrans + creditLine"
#Scale R 羅傑斯迴歸模型
st <- Sys.time();
rxLogitObj <- rxLogit(glmformula, data = sqlFraudDS)
ed <- Sys.time();
#計算執行時間
timeRx = ed - st


#CRAN-R 羅傑斯迴歸模型
st <- Sys.time();
logitObj <- glm(glmformula, data = sqlFraudDS, family = binomial(link = "logit"))
ed <- Sys.time();
#計算執行時間
timeCran = ed - st

 

效能

3.比較時間

cbind(timeRx, timeCran)

從效能來看,RxLogit略勝一籌,但可能因為資料量不夠(只有1萬筆)、環境在R Client執行(只能用2條thread),沒有拉開差距,單把語法移到R Server執行,可以差到5~6倍時間。

 

 

我們下一篇來試遠程運算。

 

預測詐欺交易的差異

4.第二個面向是比較預測結果

sqlFraudScoreDS$cranRank <- predict(logitObj, newdata = sqlFraudScoreDS, type = "response")

sqlFraudScoreDS$fraudRisk <- 0
sqlFraudScoreDS <- rxPredict(rxLogitObj, data = sqlFraudScoreDS, outData = sqlFraudScoreDS, computeResiduals = FALSE)

執行完成後,我們可以透過visual studio variable explorer用Excel開啟輸出的dataframe

可以發現cranRank 和 fraudRisk的預測可能詐欺比例都相同!

 

小結:

  • 預測結果相符,RxLogit效能較佳!
  • 另外一份Azure ML參考的偽冒交易明細的訓練資料:

http://azuremlsamples.azureml.net/templatedata/Online%20Fraud-%20Fraud%20Transactions.csv

 

 

參考:

Fitting Logistic Regression Models

分析結果上可能的差異