Квоты

9 мин чтения

Что такое квота — на пальцах

Представьте, что вы запускаете опрос среди врачей. Хотите получить мнения 100 врачей — кардиологов и терапевтов поровну. Запускаете опрос, и через сутки приходит 100 ответов. Открываете результаты — а там 92 терапевта и 8 кардиологов. Просто потому, что терапевтов в стране больше, и они быстрее реагируют на рассылку.

Анализировать такой результат бессмысленно: получился опрос терапевтов, а не «врачей в среднем». А клиент, который заказал исследование, ожидал увидеть мнение обеих специальностей.

Квота решает эту проблему. Вы заранее говорите системе: «соберите 50 кардиологов и 50 терапевтов». Когда квота по терапевтам заполнится (придут 50 ответов), следующие терапевты увидят:

Спасибо! По вашей категории мы уже собрали достаточно ответов. Опрос для вас завершён.

А кардиологи продолжат проходить опрос, пока не наберётся их 50.

В итоге вы получаете ровно ту структуру выборки, которая нужна — без post-hoc фильтрации, без выбрасывания данных «по специальностям, которых слишком много».

Когда квоты нужны и когда нет

Нужны:

  • Репрезентативная выборка («хочу 50/50 М/Ж»)
  • Сравнительные исследования («сравнить мнение кардиологов vs терапевтов»)
  • B2B-опросы с заранее известной структурой целевой аудитории
  • Когда сегменты «дорогие» — например, опрос узких специалистов; нужна гарантия, что соберёте хотя бы N

Не нужны:

  • Открытый опрос для общественного мнения (любой ответ важен)
  • Если у вас всего 10–20 ответов всего (квоты — для нормальной выборки 50+)
  • Если у вас один однородный сегмент респондентов (тогда хватит обычного target_count)

Базовый сценарий: одна квота, одна ось (1D)

Пример: «50 кардиологов + 30 терапевтов + 20 эндокринологов».

Шаг 1. Создайте вопрос-скринер

В редакторе опроса добавьте блок типа «Один из N вариантов» в самое начало опроса. Введите вопрос «Какая у вас специальность?» и варианты: «Кардиолог», «Терапевт», «Эндокринолог».

💡 Почему скринер первый. Если квота заполнится в середине опроса, респондент потратит 5–10 минут на бессмысленные ответы — и его «отсечёт». Чтобы не злить респондентов, узнавайте сегмент в начале.

Шаг 2. Включите квоту на блоке

Откройте свойства блока (правая панель в графовом редакторе или раскрытая секция в линейном). Найдите секцию «Квота». Включите тумблер «Использовать как квотный блок».

Появятся три раздела:

1. Поведение при заполнении — что система делает, когда квота по варианту полна:

  • Жёстко отсекать — респондент не сохраняется, видит «Спасибо, мы собрали достаточно». Подходит для скринера: вы не хотите тратить время респондента впустую.
  • Помечать как сверх-квотный — респондент проходит опрос как обычно, но в результатах помечается «over-quota». Подходит, когда хотите подстраховаться: вдруг часть ответов придётся выкинуть из-за плохого качества — лишние из «over-quota» можно потом «допустить» в аналитику вручную.

2. Целевые числа — сколько респондентов хотите по каждому варианту:

Кардиолог       [ 50 ]
Терапевт        [ 30 ]
Эндокринолог    [ 20 ]

3. Кнопка «Создать квоту» — сохраните, и квота начнёт работать сразу после запуска опроса.

Шаг 3. Запустите и наблюдайте

Откройте страницу «Результаты» опроса — в шапке появится секция «Прогресс квот»:

  • Кардиолог: ████████░░ 35/50
  • Терапевт: ██████████ 30/30 ✓
  • Эндокринолог: ███░░░░░░░ 6/20

Зелёный — заполнено. Жёлтый — больше половины. Красный — отстаёт. Если эндокринологи долго не доходят, можно подстегнуть отдельной рассылкой только им.

Продвинутый сценарий: 2D — две оси одновременно

Пример: «50 кардиологов из Москвы + 30 кардиологов из регионов + 25 терапевтов из Москвы + 25 терапевтов из регионов».

Это и есть interlocking quota или 2D-квота — пересечение двух измерений. Каждая ячейка матрицы имеет свой потолок.

Прогресс 2D-квоты: heatmap Город × Регион

Откуда брать вторую ось

Два варианта:

Вариант 1 — другой single_choice блок. Добавляете в скринер ещё один вопрос: «В каком городе вы работаете?» с вариантами «Москва», «Регионы». Тогда вторая ось — это ответ на этот вопрос.

Вариант 2 — поле приглашения. Если респондент приходит к вам через индивидуальное приглашение или URL-параметр (?city=Москва) — спрашивать его второй раз не нужно. Город уже известен. Используете поле приглашения со списком значений.

Настройка поля приглашения до запуска

На странице Приглашения опроса (доступна даже в черновике) наверху есть секция «Поля приглашений». Нажмите «+ Поле» и заполните:

  • Название: Город — видно в таблице приглашений и в селекторе осей квот
  • Тип: выберите «Список значений» (для квот работают только такие типы)
  • Значения: Москва, Санкт-Петербург, Регионы (через запятую или Enter)
  • Источники: ✓ Из приглашения (заполняется в таблице на /invites), ✓ Из URL (респондент откроет ?city=Москва)

Сохраните. Поле готово.

💡 Зачем декларировать заранее. Чтобы система знала список валидных значений и могла строить матрицу квот. Если респондент придёт с ?city=Владивосток — это значение не в списке, респондент не попадёт ни в одну квотную ячейку (опрос пройдёт обычно, но в квоте не учтётся).

Настройка 2D квоты на блоке

Откройте блок-скринер «Какая специальность?», в секции «Квота» сначала задайте 1D-цели (по умолчанию). Потом нажмите «+ Скрестить со второй осью (interlocking 2D)». Откроется выбор: можно взять другой блок опроса или одно из объявленных полей приглашений (тип «список значений»).

После выбора система покажет матрицу N×M для целевых чисел в каждой ячейке:

                  Москва      Регионы
Кардиолог         [ 50 ]      [ 30 ]
Терапевт          [ 25 ]      [ 25 ]
Эндокринолог      [ 10 ]      [ 10 ]

Заполните цифры в каждой ячейке. Сохраните.

Что увидит респондент

Респондент-кардиолог приходит по invite-ссылке ?invite=abc123 (где invite уже несёт region: Москва). На экране — обычный опрос. В момент финала система проверит: попадает ли он в ячейку (Кардиолог × Москва)? Если место есть — записывает. Если ячейка полна — отсекает или помечает как over-quota (по вашей настройке).

Если респондент пришёл без invite (по публичной ссылке) — у него нет атрибута region. Он пройдёт опрос как обычно, но в квоту не попадёт (потому что мы не знаем, к какой ячейке его отнести). Чтобы такого не было — используйте только invite-ссылки или добавьте URL-параметр ?region=... в рассылку.

Поведение при заполнении: «отсекать» vs «помечать»

Эта настройка решает, что делать с респондентом, который попал в полную квоту. Различия принципиальные.

«Жёстко отсекать»

Респондент видит:

Спасибо! По вашей категории мы уже собрали достаточно ответов. Опрос для вас завершён.

И всё. Его ответ нигде не сохраняется. Он не появляется в результатах, не учитывается в счётчике ответов.

Когда использовать: в скринере, когда вы точно знаете «больше N кардиологов мне не нужно». Это самый чистый сценарий и самое корректное поведение по отношению к респонденту: он не тратит время.

«Помечать как сверх-квотный»

Респондент проходит опрос полностью, видит обычный финальный экран. Но в БД его ответ сохраняется со специальным флагом «over-quota». В основной аналитике этот ответ не виден — но вы можете посмотреть его отдельно (раздел «Сверх-квотные ответы»).

Когда использовать: когда боитесь, что часть ответов придётся выкинуть (например, из-за плохого качества или подозрений на накрутку), и хотите подстраховаться. Лишние ответы можно потом «допустить» в аналитику вручную.

⚠️ Подводный камень. Если квота на блоке-3 (после 2 длинных вопросов), и вы выбрали «отсекать» — респондент потратит время и расстроится. Используйте «отсекать» только в самом начале опроса. Для квот на середине — выбирайте «помечать».

Изменение квот на запущенном опросе

Идёт сбор, и вы понимаете: «По кардиологам набралось 45 из 50, темп замедлился — давайте поднимем до 60». Можно ли менять квоты на лету?

Можно изменить:

  • Целевые числа в любой ячейке
  • Поведение «отсекать ↔ помечать»
  • Текст сообщения для отсечённых

Нельзя изменить:

  • Структуру: добавить/удалить ось
  • Что считается ячейкой (сами варианты)
  • Связку с блоком-владельцем

Для изменения квот на активном опросе вам нужно подтвердить: «Я понимаю, что меняю настройки идущего сбора». Это стандартный механизм безопасного редактирования (как в R3.42).

При снижении целевого числа ниже текущего (например, было current = 45, новое target = 30) — квота сразу становится «полной», следующие респонденты получат отсечение/over-quota. Уже собранные 45 ответов остаются как есть.

Что показывать заказчику: публичный отчёт

Если вы делаете опрос для внешнего заказчика, ему интересно следить за прогрессом сбора. У нас есть публичные отчёты (/reports/[token]) — страница со статистикой, которую можно расшарить ссылкой.

В её настройках (Report-Constructor → вкладка «Основное») появился тумблер «Прогресс квот» — включите его, и заказчик будет видеть тот же прогресс, что и вы.

Прогресс показывает только числа (45/50 кардиологов) — никаких индивидуальных ответов или контактов. Это безопасно расшарить.

Ограничения

  • Максимум 5 квот на один опрос — больше обычно не нужно, и UI становится перегруженным
  • Максимум 8 значений на одну ось — для простых матриц
  • Только single_choice блоки могут быть квотными. Для checkbox / scale / dictionary — нельзя
  • Только 2 оси на квоту (1D или 2D). 3D пока нет
  • Поля приглашений со списком значений работают как ось. Поля «свободный текст» не подходят — потому что список значений должен быть фиксирован заранее

Часто задаваемые вопросы

Что если респондент уже на 5-м вопросе, и в этот момент 4-й респондент заполнил квоту?

Решение происходит атомарно при финальном «Завершить». Респондент, который последним прислал ответ, может попасть в over-quota — даже если в начале опроса место было. Это редкая ситуация на пиковой нагрузке (одновременный submit двумя респондентами на последнем месте).

Можно ли «закрыть» весь опрос, когда все квоты заполнены?

Сейчас — нет, опрос продолжает работать (просто все новые респонденты будут отсекаться). Если нужно жёстко остановить опрос — используйте кнопку «Остановить» в админке.

Можно ли видеть, сколько респондентов было отсечено?

Для screen-out ответы вообще не сохраняются — мы видим только текущее количество принятых. Для over-quota есть отдельный фильтр в результатах — можно посмотреть «сверх-квотные ответы» отдельно от основной выборки.

Можно ли поменять список значений поля приглашения после создания квоты?

Нет. Если хотите изменить список — сначала удалите квоту, которая использует это поле, потом измените список в меню поля, потом пересоздайте квоту. На draft-опросе это безопасно. На active — нельзя (структура заморожена).

Что если респондент выбрал в скринере «Другое» / нет квоты на этот вариант?

Если у конкретного варианта ответа нет ячейки в квоте (например, респондент выбрал «Хирург», а у вас квота только на «Кардиолог/Терапевт/Эндокринолог») — он проходит опрос обычным путём, в квоте не учитывается. Его ответ сохраняется как complete.

Один опрос — несколько квот. Как работает приоритет?

Все квоты проверяются последовательно. Если респондент попадает в полную квоту с поведением «жёстко отсекать» — опрос завершается, остальные квоты уже не проверяются. Если первая квота — «помечать», а вторая — «жёстко отсекать», результирующее действие зависит от какой квоты пришёл сигнал первым (обычно проверяются в порядке создания).

Если есть несколько активных квот, рекомендация: проверьте, не противоречат ли они друг другу. Например, нельзя одновременно требовать «50 кардиологов всего» и «20 кардиологов из Москвы + 40 кардиологов из регионов» — это арифметически противоречиво.


Связанные статьи: Запуск и результаты · Индивидуальные приглашения · Метки в ссылке (UTM)

Похожие статьи