Glm是Open source R羅吉斯迴歸分析函數,RxLogit則是Revolution R羅吉斯迴歸分析函數,第一次用RxLogit想求證看看,我們來驗證看看兩個Library的測試結果是否相符。
上一篇匯入的信用卡詐欺交易中,是否為詐欺交易:Y(因變數)為二元型別,不太像一般數值型別的迴歸分析,這時後羅吉斯迴歸分析是很常使用的演算法。
比較的面向:
- 效能
- 預測結果
訓練資料與測試資料
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