maloyan/sberindex-2026-forecasting

СберИндекс 2026: прогнозирование расходов МО и структурные сдвиги

Python

0

11 commits

updated Oct 3, 2026

See the code

README

СберИндекс 2026 · Прогнозирование: расходы муниципалитетов и структурные сдвиги

Решение для направления «Прогнозирование» конкурса СберИндекса 2026. Прогноз средних безналичных расходов на жителя для 2016 МО × 6 категорий (12 096 рядов) на 1, 3, 6 и 12 месяцев и поиск точек структурных сдвигов.

Результат (отложенное окно 2024-07..12, MAE, руб. на жителя в месяц)

Модельh = 1h = 3h = 6h = 12
Prophet (базовая модель организатора)5635746521361
Лучшая zero-shot FM на сырых уровнях (TimesFM 2.5)55979712831691
TimesFM 2.5 на локальной компоненте296522493729
GBM (LightGBM, все признаки)296532509724
Ансамбль306435446658
Снижение MAE ансамбля к Prophet−46%−24%−32%−52%
95% ДИ разницы, двусторонний бутстреп (МО × месяц)[−511; −37][−302; +16][−353; −66][−1110; −430]

Разница с Prophet значима на h = 1, 6, 12. На h = 3 ансамбль лучше в 5 из 6 месяцев test, но 95% ДИ включает 0. Все модели в момент прогноза видят только прошлое (скользящий origin). Веса ансамбля и параметры выбраны на validation (2024-01..06). Один раз test использован в дизайне: правило «отдельные (k, w) для h ≤ 3» введено после первого просмотра test (записано в LOG.md). Пост-hoc эксперименты (ансамбль v2, национальная компонента по порталу СберИндекса) — в приложении А отчёта, в заголовок не входят.

Проверка на факте: прогноз роста 2025 для «Всех категорий», сделанный в конце 2024 г., — лог-прирост 0.135 против 0.132 по порталу СберИндекса.

Карта критериев

КритерийРаздел отчётаКод
Простота объяснения методологии§1 (одна страница, 4 шага, глоссарий), §2—
Сравнение моделей, лучше Prophet§3 (таблица выбора, все модели, сетка Prophet, по категориям)src/ensemble.py, src/evaluate.py, src/tables.py
Поиск структурных сдвигов§5 (калибровка, синтетика, таблица решений, Орск)src/cpd/
Фундаментальные модели§4 (уровни против локальной компоненты, где помогают и где нет)src/fm/
Интеграция новостей§6 (GDELT, реестр ЧС, правило as-of, event study)src/news/, src/event_study.py
Метрики§7 (MAE, R², R² на изменении, WAPE, интервалы, значимость)src/common.py, src/tables.py
Интерпретация и воспроизводимость§8-10 (проверка 2025, выводы, make)Makefile, tests/, src/verify.py

Идея

log y[i,t] = n[c,t] + d[i,t]
  • n — национальная компонента категории (медиана по 2016 МО): сезонность и инфляция общие для всей страны. Прогноз: сезонная наивная + годовой рост (собственный и по обороту розницы Росстата).
  • d — локальная компонента МО. Её прогнозируют фундаментальные модели (Chronos-Bolt, Chronos-2, TimesFM 2.5, TiRex-2, Toto-2.0; zero-shot и дообучение), LightGBM/CatBoost, классика.
  • Ансамбль Caruana по горизонтам, пул из 35 моделей зафиксирован в конфиге. Детекторы сдвигов на d с калибровкой на равную частоту ложных тревог; новости GDELT и реестр ЧС из официальных источников как prior и разметка событий.

Методология

Запуск

Нужно: macOS или Linux, uv. Для полного прогона ещё ≈ 40 ГБ трафика (новости GDELT); для сборки PDF — pandoc + XeLaTeX и Google Chrome.

make setup        # .venv на Python 3.13, точные версии из requirements.lock.txt
make data         # данные СберИндекса, справочник МО, Росстат, портал -> data/raw/ (в git не входят)
make quick        # свежий клон: тесты на утечку + пересчёт главных чисел и сверка (≈ 2 мин)
make reproduce    # полный прогон: ≈ 4-5 ч на Apple M3 Pro (FM на MPS; на CUDA быстрее)

make quick без полного кэша запускает:

  • make smoke — тесты без данных (секунды): прогноз в origin o и тревога детектора в месяце t не меняются, если изменить данные после o; описание для формы ≤ 4096 символов, только ASCII и кириллица.
  • make verify — пересчёт MAE, R², R² на изменении, MAE по категориям, ДИ двустороннего бутстрепа, DM-HLN и прогноза 2025 из results/verify/cubes.npz (8 МБ: прогнозы 8 ключевых моделей на test) и сверка с results/metrics/*.csv. Код возврата 1 при расхождении.

С полным кэшем results/cache/ (после make reproduce) make quick пересобирает ансамбль, метрики, таблицы, прогноз, рисунки и отчёт за минуты. Отдельные шаги — см. Makefile. Пост-hoc эксперименты: make reproduce-v2.

Конфигурация

Все гиперпараметры — в configs/config.yaml: окна validation/test, горизонты, пул ансамбля, параметры Prophet, LightGBM, CatBoost, statsforecast, список фундаментальных моделей, детекторы сдвигов и их сетки, группы тем новостей, радиус геопривязки.

Структура

configs/config.yaml        все параметры
src/common.py              панель, «кубы» прогнозов (origin x horizon), метрики
src/models/                baselines, Prophet (+ сетка из 10 конфигураций), statsforecast, декомпозиция, GBM
src/fm/                    адаптеры и прогон фундаментальных моделей, дообучение Chronos-2
src/cpd/                   детекторы сдвигов, бенчмарк, признаки для GBM
src/news/                  загрузка GDELT GKG, геопривязка к МО, признаки
src/exog/                  Росстат, портал СберИндекса, производственный календарь
src/ensemble.py            отбор Caruana по горизонтам (validation)
src/evaluate.py            метрики validation/test, двусторонний бутстреп, DM-HLN
src/tables.py              таблица выбора модели, интервалы (покрытие, WIS), таблица решений по детекторам
src/event_study.py         event study паводков по реестру ЧС
src/verify.py              пересчёт главных чисел из малого кэша (свежий клон)
src/check_2025.py          проверка прогноза 2025 на факте портала
src/stack.py               пост-hoc ансамбль v2 (приложение А)
tests/                     тесты на утечку и проверка формы (make smoke)
results/metrics, results/cpd   все таблицы, на которые ссылается отчёт
data/external              производные открытые данные: Росстат, новости по МО и месяцам, реестр событий

Данные и лицензии

  • Данные СберИндекса (CC BY-SA 4.0) используются только для конкурса и не входят в репозиторий (Положение §9.2.2); скачиваются make data.
  • Росстат — открытые данные со ссылкой на источник. GDELT — свободное использование со ссылкой на The GDELT Project. Реестр событий — даты и номера официальных актов со ссылками на источник. Производственный календарь — пакет holidays (MIT) + постановления Правительства.
  • Фундаментальные модели — только Apache-2.0 (Chronos-Bolt, Chronos-2, TimesFM 2.5, TiRex-2, Toto-2.0). Модели с некоммерческими лицензиями (Moirai, TimesFM 3.0) не используются.
  • Код решения — MIT.

При разработке кода использовались инструменты ИИ-ассистирования (Claude Code); решения и результаты проверены автором.

maloyan/sberindex-2026-forecasting

СберИндекс 2026: прогнозирование расходов МО и структурные сдвиги

Python

0

11 commits

updated Oct 3, 2026

See the code

README

СберИндекс 2026 · Прогнозирование: расходы муниципалитетов и структурные сдвиги

Решение для направления «Прогнозирование» конкурса СберИндекса 2026. Прогноз средних безналичных расходов на жителя для 2016 МО × 6 категорий (12 096 рядов) на 1, 3, 6 и 12 месяцев и поиск точек структурных сдвигов.

Результат (отложенное окно 2024-07..12, MAE, руб. на жителя в месяц)

Модельh = 1h = 3h = 6h = 12
Prophet (базовая модель организатора)5635746521361
Лучшая zero-shot FM на сырых уровнях (TimesFM 2.5)55979712831691
TimesFM 2.5 на локальной компоненте296522493729
GBM (LightGBM, все признаки)296532509724
Ансамбль306435446658
Снижение MAE ансамбля к Prophet−46%−24%−32%−52%
95% ДИ разницы, двусторонний бутстреп (МО × месяц)[−511; −37][−302; +16][−353; −66][−1110; −430]

Разница с Prophet значима на h = 1, 6, 12. На h = 3 ансамбль лучше в 5 из 6 месяцев test, но 95% ДИ включает 0. Все модели в момент прогноза видят только прошлое (скользящий origin). Веса ансамбля и параметры выбраны на validation (2024-01..06). Один раз test использован в дизайне: правило «отдельные (k, w) для h ≤ 3» введено после первого просмотра test (записано в LOG.md). Пост-hoc эксперименты (ансамбль v2, национальная компонента по порталу СберИндекса) — в приложении А отчёта, в заголовок не входят.

Проверка на факте: прогноз роста 2025 для «Всех категорий», сделанный в конце 2024 г., — лог-прирост 0.135 против 0.132 по порталу СберИндекса.

Карта критериев

КритерийРаздел отчётаКод
Простота объяснения методологии§1 (одна страница, 4 шага, глоссарий), §2—
Сравнение моделей, лучше Prophet§3 (таблица выбора, все модели, сетка Prophet, по категориям)src/ensemble.py, src/evaluate.py, src/tables.py
Поиск структурных сдвигов§5 (калибровка, синтетика, таблица решений, Орск)src/cpd/
Фундаментальные модели§4 (уровни против локальной компоненты, где помогают и где нет)src/fm/
Интеграция новостей§6 (GDELT, реестр ЧС, правило as-of, event study)src/news/, src/event_study.py
Метрики§7 (MAE, R², R² на изменении, WAPE, интервалы, значимость)src/common.py, src/tables.py
Интерпретация и воспроизводимость§8-10 (проверка 2025, выводы, make)Makefile, tests/, src/verify.py

Идея

log y[i,t] = n[c,t] + d[i,t]
  • n — национальная компонента категории (медиана по 2016 МО): сезонность и инфляция общие для всей страны. Прогноз: сезонная наивная + годовой рост (собственный и по обороту розницы Росстата).
  • d — локальная компонента МО. Её прогнозируют фундаментальные модели (Chronos-Bolt, Chronos-2, TimesFM 2.5, TiRex-2, Toto-2.0; zero-shot и дообучение), LightGBM/CatBoost, классика.
  • Ансамбль Caruana по горизонтам, пул из 35 моделей зафиксирован в конфиге. Детекторы сдвигов на d с калибровкой на равную частоту ложных тревог; новости GDELT и реестр ЧС из официальных источников как prior и разметка событий.

Методология

Запуск

Нужно: macOS или Linux, uv. Для полного прогона ещё ≈ 40 ГБ трафика (новости GDELT); для сборки PDF — pandoc + XeLaTeX и Google Chrome.

make setup        # .venv на Python 3.13, точные версии из requirements.lock.txt
make data         # данные СберИндекса, справочник МО, Росстат, портал -> data/raw/ (в git не входят)
make quick        # свежий клон: тесты на утечку + пересчёт главных чисел и сверка (≈ 2 мин)
make reproduce    # полный прогон: ≈ 4-5 ч на Apple M3 Pro (FM на MPS; на CUDA быстрее)

make quick без полного кэша запускает:

  • make smoke — тесты без данных (секунды): прогноз в origin o и тревога детектора в месяце t не меняются, если изменить данные после o; описание для формы ≤ 4096 символов, только ASCII и кириллица.
  • make verify — пересчёт MAE, R², R² на изменении, MAE по категориям, ДИ двустороннего бутстрепа, DM-HLN и прогноза 2025 из results/verify/cubes.npz (8 МБ: прогнозы 8 ключевых моделей на test) и сверка с results/metrics/*.csv. Код возврата 1 при расхождении.

С полным кэшем results/cache/ (после make reproduce) make quick пересобирает ансамбль, метрики, таблицы, прогноз, рисунки и отчёт за минуты. Отдельные шаги — см. Makefile. Пост-hoc эксперименты: make reproduce-v2.

Конфигурация

Все гиперпараметры — в configs/config.yaml: окна validation/test, горизонты, пул ансамбля, параметры Prophet, LightGBM, CatBoost, statsforecast, список фундаментальных моделей, детекторы сдвигов и их сетки, группы тем новостей, радиус геопривязки.

Структура

configs/config.yaml        все параметры
src/common.py              панель, «кубы» прогнозов (origin x horizon), метрики
src/models/                baselines, Prophet (+ сетка из 10 конфигураций), statsforecast, декомпозиция, GBM
src/fm/                    адаптеры и прогон фундаментальных моделей, дообучение Chronos-2
src/cpd/                   детекторы сдвигов, бенчмарк, признаки для GBM
src/news/                  загрузка GDELT GKG, геопривязка к МО, признаки
src/exog/                  Росстат, портал СберИндекса, производственный календарь
src/ensemble.py            отбор Caruana по горизонтам (validation)
src/evaluate.py            метрики validation/test, двусторонний бутстреп, DM-HLN
src/tables.py              таблица выбора модели, интервалы (покрытие, WIS), таблица решений по детекторам
src/event_study.py         event study паводков по реестру ЧС
src/verify.py              пересчёт главных чисел из малого кэша (свежий клон)
src/check_2025.py          проверка прогноза 2025 на факте портала
src/stack.py               пост-hoc ансамбль v2 (приложение А)
tests/                     тесты на утечку и проверка формы (make smoke)
results/metrics, results/cpd   все таблицы, на которые ссылается отчёт
data/external              производные открытые данные: Росстат, новости по МО и месяцам, реестр событий

Данные и лицензии

  • Данные СберИндекса (CC BY-SA 4.0) используются только для конкурса и не входят в репозиторий (Положение §9.2.2); скачиваются make data.
  • Росстат — открытые данные со ссылкой на источник. GDELT — свободное использование со ссылкой на The GDELT Project. Реестр событий — даты и номера официальных актов со ссылками на источник. Производственный календарь — пакет holidays (MIT) + постановления Правительства.
  • Фундаментальные модели — только Apache-2.0 (Chronos-Bolt, Chronos-2, TimesFM 2.5, TiRex-2, Toto-2.0). Модели с некоммерческими лицензиями (Moirai, TimesFM 3.0) не используются.
  • Код решения — MIT.

При разработке кода использовались инструменты ИИ-ассистирования (Claude Code); решения и результаты проверены автором.