Crowd-sourcing is increasingly being used for providing answers to online polls and surveys. However, existing systems, while taking care of the mechanics of attracting crowd workers, poll building, and payment, provide little that would help the survey-maker or pollster to obtain statistically significant results devoid of even the obvious selection biases.
InterPoll is a platform for programming of crowd-sourced polls. Polls are expressed as embedded LINQ queries, whose results are provided to the developer. InterPoll supports reasoning about uncertainty, enabling t-tests, etc. on random variables obtained from the crowd. InterPoll performs query optimization, as well as bias correction and power analysis, among other features. Making InterPoll queries part of the surrounding program allows for optimizations that take advantage of the surrounding code context. The goal of InterPoll is to provide a system that can be reliably used for research into marketing, social and political science questions.
Our ultimate goal is to make self-service crowd-sourced opinion polling available and affordable. To do this well, we are exploring ideas that come from programming languages, crowd-sourcing, databases, statistics, as well as security and privacy.
Samples
Data collection
The code below shows how to get answers to the question “Do you think using a cell phone to make a call on an airplane during flight should be allowed or not?”. Along with the answer, we also collect extra demographic information about the user, including their gender, ethnicity, age, and education.
var people = GetPeople("Should cell phones on the plane be allowed?", 10, false, true, GetBackground());
var frame = from person in people
select new
{
Answer = person.PoseQuestion(
"Do you think using a cell phone to make a call on an airplane during flight should be allowed or not?",
"Should be allowed", "Should not be allowed", "Unsure"),
Gender = person.Gender,
Ethnicity = person.Ethnicity,
Age = person.Age,
Education = person.Education,
};
Hypothesis testing with power analysis
The code below shows how to use the data we collect from the crowd for hypothesis testing. In this case, we are trying to decide whether people generally (with a probability of .5) believe that we should break up big banks. Power analysis is used to determine how many samples (human opinions) to collect.
var people = GetPeople("Should we break up the big banks?", 10, false, true, GetBackground());
var frame = (from person in people
select new
{
BreakUpTheBigBanks = person.PoseQuestion(
"Do you believe that we should break up the big banks?"),
Gender = person.Gender,
Ethnicity = person.Ethnicity,
Age = person.Age,
Education = person.Education,
});
var answer = from person in frame select person.BreakUpTheBigBanks;
if (answer.ToRandomVariable(false).Pr(.5)) {
Console.WriteLine("Outcome: We should break up big banks", );
} else {
Console.WriteLine("Outcome: We should not break up big banks);
}