# Инструкции для LLM-агента

Вы — независимый аудитор прогноза населения Беларуси 2026–2075 (v2026.4,
пакет v1.3.0, уровни 0–3, стартовые ряды official/adjusted, вероятностный
веер). Пакет содержит данные, код, сценарии и проверки.

## Контекст

Главные результаты: базовый сценарий — 7,53 млн к 2050 (80% интервал
7,04–8,04) и 5,97 млн к 2075 (5,04–7,04); вилка сценариев на 2075 —
4,33…7,11 млн. Веер — вероятностный слой (Монте-Карло СКР/ОПЖ,
калиброван по 80% PI WPP): P(убыль к 2050) = 100%, P(<6 млн к 2075) ≈ 50%.
Внутри страны — поляризация: Минский район растёт до ~655 тыс. к 2075,
Хойникский падает до 7,7 тыс. Ряд adjusted: старт минус 270 тыс.
(интервал 178–416 тыс.) незарегистрированного оттока 2020–2026 → 7,24 млн
к 2050. Контрольные значения — `checks/expected_results.json` (30 метрик).
Модель: CCMPP по областям (уровни 0–1, official идентичен v2026.1) +
Гамильтон–Перри по районам + доли городов (этап 5) + реконструкция оттока
из зеркальной статистики (`etl/mirror.py`, WP-F3).

## Задача 1 — проверка источников

Реестр — `sources/registry.csv` (18 первоисточников с sha256 и датами).
Сырые файлы завендорены в репозитории проекта — в пакете их производные
(`data/curated/*`). Проверьте: (а) внутреннюю согласованность curated-входов
(суммы возрастных групп по переписям = официальные итоги: 2009 — 9 503 807;
2019 — 9 413 446; старт 2026 — 9 056 080; районы+города = область до
человека); (б) доступность контрольных внешних источников
(population.un.org/wpp, github.com/guyabel/wcde-data).

## Задача 2 — воспроизведение

```bash
pip install -r code/requirements.lock   # PyYAML
bash code/run.sh                        # ~2 минуты
```

Сверьте `data/curated/forecast_v2026_4.csv` (колонка jumpoff:
official/adjusted), `docs/notes/backtest_results.json`,
`docs/notes/backtest_sub.json` и интервал поправки (печать
`python3 -m etl.mirror`) с
`checks/expected_results.json` (это делает и `code/verify.py`). Прогон
детерминирован: повторный запуск даёт байт-в-байт те же файлы.
Перед перезапуском с правками кода удаляйте байткод-кэш
(`rm -rf etl/__pycache__ etl/forecast/__pycache__`).

## Задача 3 — стресс допущений

Самые сильные допущения (обоснования — `params/assumptions.yaml`,
`etl/forecast/scenarios/*.yaml`; ограничения — LIMITATIONS.md):

1. **Объём внутренней миграции 60 тыс. перемещений/год** (уровни 0–1).
   Варьируйте `ANNUAL_INTEROBLAST_MOVES` в `etl/forecast/migration.py`
   (40k/80k): потоки нулевой суммы, меняется распределение по областям
   (Минск ±13–14% к 2075); национальный итог дрейфует ≤ ±0,2%
   (композиционный эффект — свойство модели, не ошибка).
2. **Shrinkage районных CCR (K=1000)**. Варьируйте `K_SHRINK` в
   `etl/forecast/sub.py` (500/2000) и перезапустите
   `python3 -m etl.forecast.backtest_sub`: MAPE районов остаётся в
   диапазоне 2,09–2,22% (наивная 2,76%) — гейт устойчив.
3. **Чернобыльский floor** (вес CCR ≤ 50%, floor 0,6 областного).
   Отключите (`W_CAP_CHERNOBYL = 1.0`, `CCR_FLOOR = 0.0`): траектории
   Хойникского/Брагинского/Наровлянского меняются лишь на ±1–2% к 2075 —
   CCR 2009–2019 уже НЕ содержат экстремального постчернобыльского
   падения (основное отселение закончилось к началу 1990-х). Ограничение —
   страховка от выбросов малых когорт при будущих пересмотрах данных, а
   не активный корректор текущего прогноза.
4. **Затухание миграции облцентров до 40% к 2060** (`MIG_DECAY_TO`).
   Варьируйте 0,2/0,6: облцентры сдвигаются на ~±2% к 2075 (Гомель
   311–324 тыс. против базовых 317 тыс.), ранжирование не меняется;
   IPF сохраняет областные итоги.
5. **Вероятностный веер** (`etl/forecast/probabilistic.py`): амплитуды
   персистентных шоков СКР/ОПЖ (`A_TFR=0.235`, `A_E0=2.0`, рост `G=0.30`)
   калиброваны под 80% PI WPP. Проверьте гейт: `python3 -m
   etl.forecast.probabilistic` печатает «калибровка 2051/2075: симуляция
   vs WPP» — расхождение обязано быть ≤1,5 п.п. Стрессы: варьируйте `A_TFR`
   (0,20/0,27) — ширина 2050 сдвигается ~пропорционально; `G` (0/0,6) —
   меняет отношение ширин 2075/2050; веер остаётся монотонным и брекетит
   детерминированную медиану (инвариант `test_probabilistic_fan`). Сид
   `SEED=20260712` фиксирован → повтор даёт те же квантили. **Смертность
   областей = национальная**; **стартовый СКР WPP 1,23 против факта
   ~1,0–1,1** — как в аудите v1.0.x (≤1,5% на область; разрыв base/negative
   ~1,05 млн к 2050).
6. **Интервал поправки WP-F3** (`etl/mirror.py`). Проверьте гейт
   приёмки: low <= (сток ВНЖ ЕС 2024 − сток 2019 = 252 945) <= high и
   350 000 ∈ [low, high]. Стрессы: (а) доля ЕС в диаспоре
   `CNI_SHARES`/CNI_EU_SHARE 0,7/0,85 → mid 246–299 тыс.; (б) карты
   Польши конца 2024 (`UDSC_PL_CARDS_END2024`) ±20 тыс. → low ±20 тыс.;
   выводы прогноза (adjusted ниже official на 3–4% к 2050) устойчивы.
   Формулы прозрачны — пересчитайте low/mid/high вручную из
   `data/curated/migration_mirror.csv`.
7. **Тренд-обучение бэктеста уровней 0–1** (линейные тренды 1999–2009):
   замена на hold-2009 в `etl/forecast/backtest.py` сохраняет гейт MAPE,
   национальная ошибка растёт до ~−2,2% — граница гейта.

## Формат отчёта

1. Совпадения (метрики со значениями); 2. Расхождения (с величинами);
3. Недоступные источники; 4. Спорные допущения (что варьировали, что
изменилось); 5. Вердикт воспроизводимости.

## Границы (что пакет НЕ утверждает)

- Для районов и городов НЕ публикуются вероятностные интервалы:
  неопределённость коммуницируется сценариями; локальные шоки (закрытие
  предприятия, административные реформы) сценарии не покрывают.
- Районные CCR консервируют паттерн 2009–2019: рост Минского района —
  экстраполяция наблюдаемой субурбанизации, не самостоятельный сценарий.
- 21 гп с рядами, оборванными до 2019 г., не прогнозируется (перечень —
  LIMITATIONS.md); живое городское население покрыто полностью.
- Поправка ряда adjusted — интервальная реконструкция, не измерение:
  сама Беларусь потоки не публикует; после переписи (~2029/2030) интервал
  подлежит ретроспективному пересчёту по невязке демографического баланса.
- Веер уровней 0–1 — собственный сеяный Монте-Карло СКР/ОПЖ, калиброванный
  под 80% PI WPP (на страновом уровне ширина ≈ WPP по построению); миграция
  в нём детерминирована (её неопределённость — отдельный ряд adjusted),
  поэтому «P(убыль к 2050) = 100%» — доля из 600 реализаций при фиксированной
  миграции, а не безусловная вероятность. Шоки СКР и ОПЖ — по одному
  персистентному на реализацию (упрощение против годовой автокорреляции
  bayesTFR/bayesLife). Шок общий на страну, поэтому области делят общий
  фактор: областные полосы занижают истинную областную неопределённость —
  вероятностные утверждения даются только по стране.
- Сценарии — детерминированные траектории «если-то», не вероятностные
  утверждения о будущем.
