我已经创建了一个预测销售业绩的模型,但预测结果与实际结果并不接近。所有的预测因子都是绝对的,所以我想知道这是不是问题呢?以下是我正在使用的代码。
setwd("c:/Users/xxxxx/Desktop/SalesPredict/")
trainData <- read.csv("train3.csv", header = TRUE)
testData <- read.csv("test3.csv", header = TRUE)
train.column.types <- c('character', # Prospect
'factor', # Sls_Office
'factor', # Month
'factor', # Sls_Rep
'factor', # Fin_Type
'factor', # Competitor
'integer', # Prospect_Size
'factor' , # Prospect_Segment
'factor' # Sold
)
test.column.types <- train.column.types[-9]
train.glm <- glm(Sold ~ Competitor + Prospect_Segment + Sls_Office + Month + Fin_Type , family = binomial(link=logit), data = trainData)
summary(train.glm)
p.hats <- predict.glm(train.glm, newdata = testData, type = "response")
Sold <- vector()
for(i in 1:length(p.hats)) {
if(p.hats[i] > .5) {
Sold[i] <- 1
} else {
Sold[i] <- 0
}
}
Enrolled_Segment = testData[8]
Month = testData[3]
Enrolled_EE = testData[7]
predict.sub <- cbind(Prospect_Segment, Sold, Month,Prospect_Size)
colnames(predict.sub) <- c("Segment","Predicted Disposition","Month","Size")
write.csv(predict.sub, file = "SalesPredictions.csv", row.names = FALSE)
我是否需要将分类变量转换为其他变量?列车数据集大约有1650行 - 这是实际的实际结果,而我试图预测结果的测试大约有540行。这540也是真实的,所以我知道应该是什么样的预期结果。在列车数据中,大约11%的时间出售= 1。在测试数据中,预测结果在售出=“1”0次。如何改进这一点的任何帮助或指示将不胜感激。
答案 0 :(得分:1)
如果您的问题是,我需要在使用glm
时将因子变量转换为其他变量,答案是否定的。如果变量真正代表一个分类变量,那么将它们作为一个因素是正确的事情。默认情况下,R将使用参考级编码来按要求执行统计分析。
如果你没有得到你期望的结果,变量类不是问题。正如@josiber所指出的,在数据不平衡的情况下,它可能只是逻辑回归的一个缺点。但是,由于您没有生成足够的数据来使您的示例可重现,因此很难确定这一点。