【发布时间】:2019-10-24 11:27:49
【问题描述】:
数据来源:https://www.kaggle.com/mlg-ulb/creditcardfraud
我有一个包含大约 280,000 行和 31 列的数据集。该数据集包含信用卡交易记录,并标记了欺诈交易。 99.8% 的数据是合法交易,0.2% 的数据是欺诈性的。由于数据如此不平衡,我使用加权随机森林对 NotFraud 案例与 Fraud 案例进行分类。
目前,我认为我的模型非常适合数据到过度拟合的程度。但是,我不确定它是否过度拟合,因为在 99.8% 的真实交易中数据自然不平衡。这就是我的结果:
#training
> actual <- as.factor(c(0,0,1,1))
> predicted <- as.factor(c(0,1,0,1))
> count <- c(191204,40,98,228)
> df1 <- data.frame(actual,predicted,count)
#testing
> actual <- as.factor(c(0,0,1,1))
> predicted <- as.factor(c(0,1,0,1))
> count <- c(56852,9,26,75)
> df2 <- data.frame(actual,predicted,count)
问题 1:如何使模型更通用并减少过拟合?我要从模型中删除变量吗?如果是这样,我如何识别和删除这些“弱”指标?
问题 2:如何整体改进此模型?我想增加真阳性的数量并减少假阳性和假阴性的数量。
我尝试将 ntree 设置为 100、200 和 500。据我了解,这似乎对我的结果没有太大影响。
> set.seed(123)
> data_set_size <- floor(nrow(df)*0.80)
> index <- sample(1:nrow(df), size = data_set_size)
> training <- df[index,]
> testing <- df[-index,]
> rf <- randomForest(Class ~ ., data = training, ntree = 4, importance = TRUE, classwt = c(0.3,0.7))
> results <- data.frame(testing$Class, predict(rf, testing[,1:30], type = "class"))
【问题讨论】:
标签: r classification random-forest