Minimizing number of questions of questionnaire from past binary responses We have data from 600,000 users that describes whether they observe each of 80+ binary features. That is, our data are a 600,000 x 80 binary matrix with user-profile.
We know from inspection that some features are positively and negatively correlated. Some positive/negative features exclude others. Most users have less than 10 positive features in their profiles.
We want to retrieve the profile of new users by asking them the minimum set of questions from the 80+ potential ones given this previous data.
The idea is to give a small set of questions (5-10) to new users. Those should provide  the maximum amount of information in order to "cut" the number of plausible subsequent questions. After a user has answered the first set of questions, we would like to ask a next set that, again, "cut" the number of subsequent questions faster. It seems reasonable to take into account positive and negative responses.
Could you please provide me with some hints to how to implement this model? We would like to have:


*

*A way to measure the distribution of the expected number of questions given to each user.

*Some way to tune the "number of initial questions" provided.

*The model should be preprocessed in order to be able to react fast to user input.

*If possible, visualize the relationship between questions.

*If possible, be able to control the expected number of questions (I guess by discarding low correlations).

*If possible, update the model incrementally using new respondents (not critical)


We plan to prototype in Python and then implement in .Net, but any other hint/code will be welcome.
 A: Sounds a lot like a computerized adaptive testing (CAT) application. This is just one small hint, not an attempt at a comprehensive solution, so I hope others will keep the answers coming. 
I'm assuming that you're hoping to predict responses to the unasked questions from an optimally small subset of questions to such a degree of accuracy that there is effectively no need to actually ask the questions to which the answers can be predicted from previous responses. Specifically, I'm assuming a couple things about your original meaning:


*

*"Some positive/negative features exclude others." = Some features can be used to predict the absence of others very accurately, maybe even without any error at all.

*"In order to 'cut' the number of plausible subsequent questions" = The purpose is to reduce the number of follow-up questions that mostly provide information that is redundant with information collected by already-asked questions.
If I've misinterpreted these parts, my hint may be misleading; otherwise, I think I'm at least pointing in the right general direction. I don't know much more about CAT than this general purpose that it serves, so I expect you'd be better equipped than me to  efficiently study it further.
One other idea concerns a slightly different approach, whereby you'd try to reduce the overall number of questions you care to ask at all of future users. You could begin to do this by analyzing the latent factor structure of your existing data using something like multidimensional item response theory (MIRT; see, for instance, Maydeu-Olivares, 2001; Osteen, 2010). If you find that a lot of your items provide information about the same underlying factors, this could help you understand your total pool of information in terms of a shorter list of broader factors. If you find that list (of the latent factors in your set of questions) contains enough of what you really want to know, you might choose to eliminate some questions that don't predict the latent factors very well and don't provide other important information. You might even consider retaining only one or two of the items that best predict each latent factor, depending on what you ultimately want to do with these data. This tangential idea of mine assumes that some of your questions are disposable. Also, disposing some questions would probably only simplify your problem somewhat, not really solve it.
Also, I think both CAT and MIRT would assume that your binary data are indicators of (an) underlying continuous dimension(s). If that's not the case, both ideas may be misleading, and you might want to say a little more about the nature of your data to help inform future answers (or edits to my own).
