2014-05-13 3 views
1

예측 결과가 실제 결과에 근접하지 않지만 영업 성과 예측을위한 모델을 만들었습니다. 모든 예측 자들은 범주 적이기 때문에 그것이 문제인지 궁금해합니다. 아래 내 코드를 사용하고 있습니다.범주 형 예측자를 사용한 R의 로지스틱 회귀

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은 진짜이기도하므로 대략 예상되는 결과가 무엇인지 알아야합니다. 열차 데이터에서 판매 된 시간은 약 1 %입니다. 테스트 데이터에서 예측 결과는 sold = "1"로 0 번 나타납니다. 이 문제를 개선하는 방법에 대한 도움이나 방향이 있으면 감사하겠습니다.

+0

'test.column.types' 및'train.column.types' 변수는 무엇을 사용하고 있습니까? –

+2

이것은 로지스틱 회귀 모델의 예상 확률이 모든 관측치에서 50 % 미만임을 의미합니다. 이는 긍정적 인 관측치보다 훨씬 많은 부정적인 데이터 세트가있는 로지스틱 회귀의 전형입니다. 'hist (p.hats)'를 사용하여 예측 된 확률 분포를 볼 수 있습니다. – josliber

+0

감사합니다. @josilber. 히스토그램을보고 결과가 떨어진 곳을 확인하는 것이 도움이되었습니다. –

답변

1

glm을 사용할 때 요인 변수를 다른 것으로 변환해야하는 경우 대답은 아니오입니다. 변수가 진정으로 범주 형 변수를 나타내는 경우이를 변수로 유지하는 것이 올바른 일입니다. R은 기본적으로 참조 수준 코딩을 사용하여 요청에 따라 통계 분석을 수행합니다.

기대하는 결과를 얻지 못하면 변수 클래스가 문제가되지 않습니다. @josiber가 지적했듯이 불균형 데이터의 경우 단순히 로지스틱 회귀의 단점 일 수 있습니다. 그러나 예제를 재생산하기에 충분한 데이터를 생성하지 않았으므로 절대적으로 확신 할 수 없습니다.

+0

Thanks @MrFlick. 균형이 잡히지 않은 열차 데이터의 균형을 유지할 수있는 방법이 있습니까 (저는 문제가 열차와 관련이 있고 테스트 데이터가 아닌 것으로 추정합니다). 도움이 될만한 샘플 데이터를 제공 할 수 있습니다. –

+0

@ user3630656 어쨌든 질문을 올리면 항상 테스트 데이터를 제공해야합니다. 실제로 코드를 실행하고 출력을 볼 수 없으면 디버깅하기가 매우 어렵습니다. 귀하의 교육 자료가 유익하지 않을 수도 있습니다. p-hat 값> .5 인 커팅 값이 너무 높을 수 있습니다. ROC 유형 커브를 플롯하여 다양한 절단으로 얻은 응답을 "수정"하는 방법을 확인할 수 있습니다. 덕분에 – MrFlick

+0

. 나는 곧 테스트 데이터를 게시 할 것이다. pHat 값을 잘라내는 것이 너무 낮은 하한선이 있습니까? 예를 들어, .15에서 결과를 잘라 내면 결과는 예상과 비슷합니다.하지만 너무 낮아져서 그것이 중요하지 않게되었다고 우려했습니다. 당신의 생각은 높이 평가됩니다. –