---
metadata:
  - name: generator
    content: Diplodoc Platform v5.44.0
alternate:
  - https://yandex.ru/support/tasks-requester/ru/guide/dynamic-overlap.md
---
> **Documentation Index:** Fetch the complete configuration index at https://yandex.ru/support/tasks-requester/ru/llms.txt

# Динамическое перекрытие

<!-- source: ru/_includes/button-text.md -->
Напишите нам, если не нашли ответ в Справке. Вы можете приложить скриншоты или видео, чтобы ускорить помощь:
<!-- endsource: ru/_includes/button-text.md -->

<a class="support_btn msg" target="_blank" href="https://yandex.ru/chat?context=%7B%22entrypoint%22%3A%22%7B%5C%22page_name%5C%22%3A%5C%22guide-dynamic-overlap%5C%22%2C%5C%22a_pageurl%5C%22%3A%5C%22https%3A%2F%2Fyandex.ru%2Fsupport%2Ftasks-requester%2Fru%2Fguide%2Fdynamic-overlap%5C%22%7D%22%7D#/user/bb41c200-08e6-94b4-5c5b-e9694fa7b06e">Написать в чат</a>  <a class="support_btn" target="_blank" href="https://t.me/YandexTasksSupport_Bot">Написать в Telegram</a>

## Теория {#theory}

Динамическое перекрытие позволяет изменять [перекрытие](*overlap) в зависимости от того:

- насколько хорошо исполнители справляются с заданием;
- насколько согласованы ответы исполнителей.

Сначала задание будет выдано с минимальным перекрытием. Когда исполнители размечают задание, их ответам присваивается уверенность. Если она окажется меньше, чем указано в поле **уверенность в агрегированном ответе**, механизм будет повышать перекрытие, пока уверенность не достигнет установленного значения, либо пока перекрытие не достигнет максимального.

В механизме динамического перекрытия используются 5 главных параметров:

1. **Перекрытие** — минимальное количество исполнителей, которые должны выполнить каждое задание пула.

1. **Максимальное перекрытие** — максимальное количество исполнителей, которые должны выполнить каждое задание пула.

1. **Уверенность в агрегированном ответе** — процент уверенности, после которого мы перестаем показывать задание исполнителям.

    Когда **уверенность** достигает необходимого уровня, механизм считает ответ на задание верным и перестает собирать ответы других исполнителей.

1. **Навык** — определяет уровень доверия к ответам исполнителя.

1. **Выходные поля для агрегации** — поля выходных данных, по которым рассчитывается уверенность в ответе.

{% cut "Как это работает" %}

Термины

- $q[i]$ — точность исполнителя;
- $K$ — константа для сглаживания;
- $z[j]$ — наиболее популярный ответ;
- $z[x]$ — вероятность того, что оценка правильная.
- $EPS$ — уверенность в агрегированном ответе.

Точность исполнителя $q[i]$ считаем как:

$q[i] = \frac{K+correct.golden.sets[i]}{2×K+total.golden.sets[i]}$

Где:

$K$ — константа для сглаживания (начиная от 0,5) при недостаточном количестве ответов на контрольные задания.

При наличии нескольких оценок для задания высчитывается наиболее популярный ответ — для каждого варианта ответа суммируем $q[i]$ исполнителей, выбравших его. Ответ с большей суммой считаем более правильным. Назовем эту оценку $z[j]$.

По [теореме Байеса](https://en.wikipedia.org/wiki/Bayes%27_theorem) считаем апостериорную вероятность того, что оценка $z[j]$ — правильная.

В качестве априорного распределения оценок будет считать равномерное. Для оценки $z[x]$ априорная вероятность — $P(z[x]) = \frac{1}{Y}$

где:

$Y$ — количество вариантов ответов.

Далее считаем вероятность того, что, оценка $z[j]$ — правильная.

Если исполнитель ответил $z[j]$, то вероятность этого равна точности исполнителя $q[i]$ . Если ответил иначе, то вероятность этого равна:

$\frac{1-q[i]}{Y-1}$

Где:

$(1-q[i])$ — оставшаяся вероятность;

$(Y-1)$ — количество оставшихся ответов.

Таким образом рассчитывается то, что вероятности ошибок равномерно распределены по оставшимся оценкам.

Взяв все ответы исполнителей и, например, вариант $z[x]$ , мы считаем вероятность того, что исполнители ответят таким образом, при условии, что правильным ответом был $z[x]$ :

```javascript
func z_prob(x int) : float {
    d = 1,0
    for w[i]: workers
         if answers[w[i]] == z[x]
            d *= q[i]
         else
            d *= (1 - q[i]) / (Y - 1)
    return d
}
```

Затем по теореме Байеса считаем вероятность того, что ответ $z[j]$ — правильный:

```javascript
r = 0
for z[i]: answer_options
    r += z_prob(i) * (1 / Y)

eps = z_prob(j) * (1 / Y) / r
```

Далее смотрим на показатель $EPS$. Если ожидаемый результат меньше значения $EPS$, то мы поднимаем перекрытие до тех пор, пока результат не сравняется с уверенностью в агрегированном ответе или перекрытие не достигнет максимального.

{% endcut %}

## Практика {#practice}

Перед тем как настроить динамическое перекрытие вам нужно подготовить поля выходных данных.

{% cut "Какие поля можно использовать" %}

- Строки и числа с допустимыми значениями.

    Допустимое значение должно совпадать с параметром `value` в нужном элементе интерфейса.

- Логический тип.

- Целые числа с минимальным и максимальным значениями. Разница между ними не должна превышать 32.

    Если в выходном поле слишком много возможных вариантов ответа, механизм динамического перекрытия не сможет агрегировать данные.

{% endcut %}

{% cut "Поля, которые нельзя использовать" %}

- Массив.
- Файл.
- Географические координаты.
- Объекты JSON.

{% endcut %}

#### Настройка перекрытия

1. [Создайте пул](https://yandex.ru/support/tasks-requester/ru/guide/pool-main.md) и заполните [параметры](https://yandex.ru/support/tasks-requester/ru/guide/pool-poolparams.md).

1. Установите минимальное перекрытие в поле **Перекрытие**.

1. В расширенных настройках включите опцию **Использовать динамическое перекрытие**.

1. Установите **Максимальное перекрытие**.

1. Укажите **Уверенность в агрегированном ответе**. Чем выше значение, тем более согласованным будет агрегированный ответ. Не устанавливайте значение меньше 70.

1. Выберите **Навык для взвешивания ответов исполнителей**.

1. Отметьте **Выходные данные для агрегации**.

1. Сохраните пул.

1. Загрузите задания через [умное смешивание](https://yandex.ru/support/tasks-requester/ru/guide/distribute-tasks-by-pages.md#smart-mixing).

1. После завершения пула запустите [Агрегацию результатов по навыку](https://yandex.ru/support/tasks-requester/ru/guide/result-aggregation.md#aggr-by-skill).

{% note info %}

**Приблизительный бюджет** в [статистике пула](https://yandex.ru/support/tasks-requester/ru/guide/pool-statistic-pool.md) будет рассчитан на основе минимального перекрытия.

{% endnote %}

{% cut "Пример" %}

Настройка динамического перекрытия для [простой классификации](https://yandex.ru/support/tasks-requester/ru/tutorials/categorization.md).

![](_images/location-job/dynamic-overlap/example.png)

Поле `result` имеет 3 допустимых значения — `OK`, `BAD` и `404`.

#### Задание 1

Исполнитель _А_ со значением навыка 70 ответил `OK`.

Исполнитель _Б_ со значением навыка 90 тоже ответил `OK`.

Уверенность в агрегированном ответе `OK` — 97,7. Задание считается завершенным.

#### Задание 2

Исполнитель _А_ со значением навыка 70 ответил `OK`.

Исполнитель _Б_ со значением навыка 90 ответил `BAD`.

Уверенность в агрегированном ответе `BAD` — 76,1. Перекрытие увеличивается на 1.

Исполнитель _В_ со значением навыка 80 ответил `BAD`.

Уверенность в агрегированном ответе `BAD` — 96,2. Задание считается завершенным.

{% endcut %}

## Советы и рекомендации {#help}

- Вместе с динамическим перекрытием не используйте правило контроля качества [Повторное выполнение заданий после блокировки исполнителя](https://yandex.ru/support/tasks-requester/ru/guide/restore-task-overlap.md). Это увеличит значение максимального перекрытия.

- Устанавливайте уверенность в агрегированном ответе на уровне от 70 до 95 процентов.

    - При значении `< 70%` средняя точность агрегированного ответа будет недостаточна, чтобы доверять ответам исполнителей.

    - При значении `> 90%` средняя точность агрегированного ответа не будет расти, а стоимость разметки увеличится.

    Оптимальная уверенность находится на уровне 80%. При такой настройке соотношение «цена-качество» будет наиболее приемлемым.

- Загружайте задания через **умное смешивание**, иначе задания пула будут выданы с минимальным перекрытием.

    Это нужно для того, чтобы механизм мог повышать перекрытие, так как [контрольные](*control_task) и [обучающие](*training_task) задания, загруженные через **умное смешивание** имеют бесконечное перекрытие.

- Используйте навык, рассчитываемый как [доля правильных ответов на контрольные задания](https://yandex.ru/support/tasks-requester/ru/guide/goldenset.md). В этом случае результаты будут наиболее точные.

- Если вы редактируете обязательные поля, изменения применятся только к новым пулам. Существующие пулы будут работать в соответствии со старой версией проекта.

## Что дальше {#what-next}

- [Добавления заданий в пул](https://yandex.ru/support/tasks-requester/ru/guide/pool.md).

- Узнайте больше про настройку перекрытия:

    - [Выборочная проверка мнением большинства](https://yandex.ru/support/tasks-requester/ru/guide/selective-mvote.md).

## Решение проблем {#troubleshooting}

<!-- source: ru/guide/_includes/troubleshooting/pool/overlap-change.md -->
{% cut "Можно ли изменить перекрытие после запуска пула?" %}

Да. Установите новое значение перекрытия [в настройках пула](https://yandex.ru/support/tasks-requester/ru/guide/pool-edit.md). Перезапускать пул не требуется. Обновление настроек обычно происходит быстро, но если заданий много, то может занять несколько минут.

{% endcut %}
<!-- endsource: ru/guide/_includes/troubleshooting/pool/overlap-change.md -->

<!-- source: ru/guide/_includes/troubleshooting/pool/overlap-close.md -->
{% cut "Может ли быть такое, что при динамическом перекрытии пул закрывается раньше времени, когда закончились задания для минимального перекрытия? Перекрытие увеличилось, а пул закрылся, и надо его запускать вручную." %}

Да, такое может произойти. Необходимо установить достаточный интервал закрытия пула.

{% endcut %}
<!-- endsource: ru/guide/_includes/troubleshooting/pool/overlap-close.md -->

<!-- source: ru/guide/_includes/contact-support.md -->
<!-- source: ru/_includes/btn-style.md -->

<!-- endsource: ru/_includes/btn-style.md -->

[Написать в службу поддержки](https://yandex.ru/support/tasks-requester/ru/guide/troubleshooting/support.md){.support_btn}
<!-- endsource: ru/guide/_includes/contact-support.md -->

<!-- source: ru/_includes/image-styles-internal.md -->

<!-- endsource: ru/_includes/image-styles-internal.md -->

[*training_task]: <!-- source: ru/guide/_includes/glossary/training-task/term.md -->
Задание, которое содержит правильный ответ и подсказку. Если исполнитель ответит неправильно, он увидит подсказку и не сможет перейти к следующей [странице заданий](https://yandex.ru/support/tasks-requester/ru/glossary.md#task-suite), пока не ответит правильно на все задания. В [контроле качества](https://yandex.ru/support/tasks-requester/ru/glossary.md#quality-control) и при расчете [навыков](https://yandex.ru/support/tasks-requester/ru/glossary.md#skill) учитывается только первый ответ на задание.
<!-- endsource: ru/guide/_includes/glossary/training-task/term.md -->

[Подробнее](https://yandex.ru/support/tasks-requester/ru/glossary.md#training-task)

[*control_task]: <!-- source: ru/guide/_includes/glossary/control-task/term.md -->
Задание, которое содержит правильный ответ. Контрольные задания нужны, чтобы следить за качеством ответов исполнителя.
<!-- endsource: ru/guide/_includes/glossary/control-task/term.md -->

[*overlap]: <!-- source: ru/guide/_includes/glossary/overlap/term.md -->
Количество исполнителей, которые должны выполнить каждое задание [пула](https://yandex.ru/support/tasks-requester/ru/glossary.md#pool). Перекрытие используется для того, чтобы убедиться, что результатам можно доверять.
<!-- endsource: ru/guide/_includes/glossary/overlap/term.md -->