Have an idea?

Visit Sawtooth Software Feedback to share your ideas on how we can improve our products.

How to set up least fill quota?

After searching documentation and the forum, I've found what I believe to be pieces of how to set up least fill quotas but struggling with how to put them together, particularly around use of quota question type, hidden free format, and/or constructed lists. I have a constructed list that houses which quotas a respondent qualifies for based on an awareness checkbox question. From there I find myself in somewhat of a circular loop (though maybe that's correct?) of needing to set up a quota based on a hidden free format question or new constructed list assigning one cell which uses QUOTACELLCOMPLETES to check how full each cell is within that quota.

Below is what I'm trying to achieve:
- Respondents qualify for cells if they previously stated they are aware of each cell's respective topic (checkbox question)
- Need to assign respondents to just one of the four cells; if qualified for 2+ cells then assign based on least fill
- Each quota needs to be assigned to/seen by exactly N=600 completes


Ultimately what I need is to set up 8 cells - the 4 main cells referenced above X 2 different price points - with each price cell splitting gender and age within the main cell evenly (approximately, doesn't need to be exact). My thinking is that if I can get the main 4 cells set-up then I can replicate the process for assigning a price with the main cell using gender-age fallout within each price cell as the least fill criteria (i.e., if Males18-34Price1 < Males18-34Price2 then Males18-34Price1).
asked Jun 10 by Brianna Boyer (185 points)
Brianna, I had a survey recently where I had 2 O/E's and I had to send half the respondents to one O/E and half to the other O/E. In addition to this, I had to take age and gender into account so that exactly half 18-24 males for example would answer O/E-1 and half O/E-2. I would apply this for all age/gender groups.

It sounds like there are some similarities.

How many quota's in "total" do you need to assign to respondents? You mentioned 4 topics (answered via a checkbox question), 2 price points (how do you allocate a respondent to a price point - via a question?) and then age/gender allocation.

I've conducted various least fill type quota's in the past but to assist, I'd like to gain a better understanding of your problem.

And what version are you using?
Hi Paul, I appreciate any insight you can share since it sounds like you were faced with a similar task. I'm using Lighthouse Studio 9 (Version 9.3.1).

In total there will be 8 quotas. The survey is for a movie product and what they'd like to test this product branded as one of four different movies (which is where awareness comes in as they must have heard of the movie they are assigned to evaluate) at one of two price points which is randomly assigned with the only requirement being that the split of M18-34/F18-34/M35+/F35+ to be equal within each price point. The breakdown of those gender-age quads does not needs to be the same for all 8 quotas, just be the same for the two price points within each movie.

Quota 1 - Movie A at Price Point A (Gender-Age fallout matches Quota 2)
Quota 2 - Movie A at Price Point B (Gender-Age fallout matches Quota 1)

Quota 3 - Movie B at Price Point A (Gender-Age fallout matches Quota 4)
Quota 4 - Movie B at Price Point B (Gender-Age fallout matches Quota 3)

Quota 5 - Movie C at Price Point A (Gender-Age fallout matches Quota 6)
Quota 6 - Movie C at Price Point B (Gender-Age fallout matches Quota 5)

Quota 7 - Movie D at Price Point A (Gender-Age fallout matches Quota 8)
Quota 8 - Movie D at Price Point B (Gender-Age fallout matches Quota 7)

1 Answer

+1 vote
Hi Brianna. I am out for the day but I can whip up an ssi file later today and send it to you. It will be helpful to your problem.

It will ask age, gender, movie.

I can then apply a least fill approach once we determine the type of respondent they are, taking into account the 4 variables: age, gender, movie, price.

I will set each target to 600.

It should provide you with a good idea on how to tackle this problem.

Could you please provide an email to send the ssi file to.
answered Jun 11 by Paul Moon Platinum (55,975 points)
That is above and beyond -  thank you, Paul! My email is brianna@troubadourconsulting.com
Great, thanks Brianna. I'm based in Australia so take into account the time difference. I'll send a solution through this evening.
Brianna, as promised, I sent you the ssi file. Please check your email account.

Here's a summary of the solution ...

I asked "gender" (Q1) and "age" (Q2) on page 1.

I then asked "movies aware of" (Q3) on page 2. If "none of these" is selected, the survey would terminate by skipping to OutroDisqualified which is set to a Termination Status of 4 and a Disposition code of 1.

I created 32 quota's in the following order as such ...

Movie A / Male / 18-34 / Price Point 1
Movie A / Male / 18-34 / Price Point 2
Movie A / Male / 35+ / Price Point 1
Movie A / Male / 35+ / Price Point 2
Movie A / Female / 18-34 / Price Point 1
Movie A / Female / 18-34 / Price Point 2
Movie A / Female / 35+ / Price Point 1
Movie A / Female / 35+ / Price Point 2
Movie B / Male / 18-34 / Price Point 1
Movie B / Male / 18-34 / Price Point 2
Movie B / Male / 35+ / Price Point 1
Movie B / Male / 35+ / Price Point 2
Movie B / Female / 18-34 / Price Point 1
Movie B / Female / 18-34 / Price Point 2
Movie B / Female / 35+ / Price Point 1
Movie B / Female / 35+ / Price Point 2
Movie C / Male / 18-34 / Price Point 1
Movie C / Male / 18-34 / Price Point 2
Movie C / Male / 35+ / Price Point 1
Movie C / Male / 35+ / Price Point 2
Movie C / Female / 18-34 / Price Point 1
Movie C / Female / 18-34 / Price Point 2
Movie C / Female / 35+ / Price Point 1
Movie C / Female / 35+ / Price Point 2
Movie D / Male / 18-34 / Price Point 1
Movie D / Male / 18-34 / Price Point 2
Movie D / Male / 35+ / Price Point 1
Movie D / Male / 35+ / Price Point 2
Movie D / Female / 18-34 / Price Point 1
Movie D / Female / 18-34 / Price Point 2
Movie D / Female / 35+ / Price Point 1
Movie D / Female / 35+ / Price Point 2

I set these all to a target of 150 each. I assumed you require 600 for Movie A Price Point 1, 600 for Movie A Price Point 2, 600 for Movie B Price Point 1, 600 for Movie B Price Point 2, and so on ...

If I have misunderstood the quota targets, feel free to change them accordingly.

I also defined the quota definitions in a parent list called QuotaList.

I then created a constructed list which determines which quotas the respondent fits. I called this QuotaFitList and it looks like this ...
Begin Unverified Perl 

 if (VALUE("Q3_1")==1 && VALUE("Q1")==1 && VALUE("Q2")==1)
  {
   ADD("QuotaList",1,2);
  }
 if (VALUE("Q3_1")==1 && VALUE("Q1")==1 && VALUE("Q2")==2)
  {
   ADD("QuotaList",3,4);
  }
 if (VALUE("Q3_1")==1 && VALUE("Q1")==2 && VALUE("Q2")==1)
  {
   ADD("QuotaList",5,6);
  }
 if (VALUE("Q3_1")==1 && VALUE("Q1")==2 && VALUE("Q2")==2)
  {
   ADD("QuotaList",7,8);
  }

 if (VALUE("Q3_2")==1 && VALUE("Q1")==1 && VALUE("Q2")==1)
  {
   ADD("QuotaList",9,10);
  }
 if (VALUE("Q3_2")==1 && VALUE("Q1")==1 && VALUE("Q2")==2)
  {
   ADD("QuotaList",11,12);
  }
 if (VALUE("Q3_2")==1 && VALUE("Q1")==2 && VALUE("Q2")==1)
  {
   ADD("QuotaList",13,14);
  }
 if (VALUE("Q3_2")==1 && VALUE("Q1")==2 && VALUE("Q2")==2)
  {
   ADD("QuotaList",15,16);
  }
  
 if (VALUE("Q3_3")==1 && VALUE("Q1")==1 && VALUE("Q2")==1)
  {
   ADD("QuotaList",17,18);
  }
 if (VALUE("Q3_3")==1 && VALUE("Q1")==1 && VALUE("Q2")==2)
  {
   ADD("QuotaList",19,20);
  }
 if (VALUE("Q3_3")==1 && VALUE("Q1")==2 && VALUE("Q2")==1)
  {
   ADD("QuotaList",21,22);
  }
 if (VALUE("Q3_3")==1 && VALUE("Q1")==2 && VALUE("Q2")==2)
  {
   ADD("QuotaList",23,24);
  }

  if (VALUE("Q3_4")==1 && VALUE("Q1")==1 && VALUE("Q2")==1)
  {
   ADD("QuotaList",25,26);
  }
 if (VALUE("Q3_4")==1 && VALUE("Q1")==1 && VALUE("Q2")==2)
  {
   ADD("QuotaList",27,28);
  }
 if (VALUE("Q3_4")==1 && VALUE("Q1")==2 && VALUE("Q2")==1)
  {
   ADD("QuotaList",29,30);
  }
 if (VALUE("Q3_4")==1 && VALUE("Q1")==2 && VALUE("Q2")==2)
  {
   ADD("QuotaList",31,32);
  }

 RANDOMIZE();

End Unverified

Next I created a parent list called CompletesList which reads in the 32 counts for completes from the quota question which I called QTMovie ...

[%QuotaCellCompletes(QTMovie,1)%]
[%QuotaCellCompletes(QTMovie,2)%]
[%QuotaCellCompletes(QTMovie,3)%]
[%QuotaCellCompletes(QTMovie,4)%]
[%QuotaCellCompletes(QTMovie,5)%]
[%QuotaCellCompletes(QTMovie,6)%]
[%QuotaCellCompletes(QTMovie,7)%]
[%QuotaCellCompletes(QTMovie,8)%]
[%QuotaCellCompletes(QTMovie,9)%]
[%QuotaCellCompletes(QTMovie,10)%]
[%QuotaCellCompletes(QTMovie,11)%]
[%QuotaCellCompletes(QTMovie,12)%]
[%QuotaCellCompletes(QTMovie,13)%]
[%QuotaCellCompletes(QTMovie,14)%]
[%QuotaCellCompletes(QTMovie,15)%]
[%QuotaCellCompletes(QTMovie,16)%]
[%QuotaCellCompletes(QTMovie,17)%]
[%QuotaCellCompletes(QTMovie,18)%]
[%QuotaCellCompletes(QTMovie,19)%]
[%QuotaCellCompletes(QTMovie,20)%]
[%QuotaCellCompletes(QTMovie,21)%]
[%QuotaCellCompletes(QTMovie,22)%]
[%QuotaCellCompletes(QTMovie,23)%]
[%QuotaCellCompletes(QTMovie,24)%]
[%QuotaCellCompletes(QTMovie,25)%]
[%QuotaCellCompletes(QTMovie,26)%]
[%QuotaCellCompletes(QTMovie,27)%]
[%QuotaCellCompletes(QTMovie,28)%]
[%QuotaCellCompletes(QTMovie,29)%]
[%QuotaCellCompletes(QTMovie,30)%]
[%QuotaCellCompletes(QTMovie,31)%]
[%QuotaCellCompletes(QTMovie,32)%]

Now moving onto a constructed list called CompletesFitList. This constructed list selects the completes counts only for the quotas that the respondent fits. It then sorts them based on the number of completes from lowest to highest. The 1st code that appears in this list is the selected quota.
Mirror(QuotaFitList)
SortByLabel()

Note the quota definitions are based on the list value of CompletesFitList.

Once the quota has been established, I created a whole number variable in the Pass-In Fields called "PricePoint". Using the SetValue function, if any of the odd number quotas are selected, then PricePoint will equal 1, otherwise PricePoint will equal 2.

I then display the quota selected on a text page before filing the survey away as completed.

If the quota is full, the respondent is directed to OutroQuotaFull which is set to a Termination Status of 4 and a Disposition code of 2.

Note 1: this solution will capture age, gender, movies aware of. It will then determine which quotas the respondent fits and apply a least fill approach. It randomises equal lowest counts too. The allocation process will spread the respondents in equal proportions across these variables of age, gender, movies aware of and randomly select the price point too.

Note 2: If the quota targets are all the same, this method works a treat. If they differ in any way, I would have to change the CompletesList parent list to proportions rather than as completes counts.

Let me know how you go. Hope this has been helpful.
This has absolutely been helpful. Thank you so much for the time you spent putting together a sample file and breaking down the components.
Brianna, glad this has assisted you.

Two final points ...

1/ If the quota targets are NOT equal, then we would need to change to proportions. So something like this [%QuotaCellCompletes(QTMovie,1)%] would change to [%QuotaCellCompletes(QTMovie,1)%]*2.5 where a factor is applied to each of the 32 quota codes in CompletesList.

2/ Once you get familiar with this technique, don't be surprised that the next "least fill" survey throws a different type of problem at you requiring a very different solution. I've come across a few varying "least fill" problems in the past.
...