Is it right to build a logistic model for population with 2% of yes and 98% no population with 800k obs and 200 variables I have a dataset which has has some 800,000 observations data at member level with some 200 features and it has a response flag of 1/0. The proportion of response 1 flag is 2% of entire member population and rest is 0.
My question is: Is it appropriate to build logistic model with such lower population of 1? Do we need to consider any such proportion before building a logistic model?
 A: This is a typical rate for loan defaults. For instance, AAA corporate default rates are 0.1% in a year. You have sizeable data set. You don't have to use all 200 features. If your data is good and you have a reasonable model, then estimation can be done. Logistic models are often fit to this kind data.
On the surface I don't see an issue with the data set size and response rate. You may want to read a little about stratified sampling, just in case.
A: From my understanding of Logistic regression, you want to check that each category of yes/no's or 1/0's has a count    >10*(p-1), where p is the number of covariates + 1 (for the intercept).  If this holds true, you should be good.
A: A classification model built on data of this type may not observe enough of the rare class to be able to distinguish the characteristics of the two classes. In my view, an SVM will work better in such situations.
In SVM a parameter called class.weights- a named vector of weights for the different classes, used for asymmetric class sizes might solve the problem you are facing.
Sample code:
library(e1071)
# weights: (example not particularly sensible)
i2 <- iris
levels(i2$Species)[3] <- "versicolor"
# Converting the dependent variable to binary(0-1) format
levels(i2$Species)[levels(i2$Species)=="versicolor"]<-1
levels(i2$Species)[levels(i2$Species)!=1]<-0
summary(i2$Species)   # Summary of dependent
weights <- 100 / table(i2$Species)   # Creating a named vector of weights
weights       # a named vector which contains weights for each class
model <- svm(Species ~ ., data = i2, class.weights = weights)

In your dataset there are close to 2% observations of class 1 and 98% of class 0, so you should be passing a named vector of weights with 98 for class 1 and 2 for class 0(assuming that you want to give equal importance to each class).
