Решение трека «Кластеризация» онлайн-конкурса СберИндекса 2026: динамическая атрибутированная сеть 2 016 муниципалитетов по безналичным расходам жителей (январь 2023 — декабрь 2024), её кластеризация и интерпретация кластеров как реальных типов локальных экономик.
- Интерактивный лендинг — https://lebedev-git.github.io/sberindex-mo-clusters/ (исходники в
site/). История из восьми шагов: одни и те же 2 016 точек-МО перетекают от географии к равновеликой карте, сети синхронности (раскладка t-SNE), «островам» типов, проигрыванию 13 окон и итоговой карте, где насыщенность цвета — уверенность в типе (site/stage.js, Canvas). Ниже — исследовательская часть: карта всех МО с фильтрами и проигрыванием окон, паспорт каждого МО (тип, траты, зарплата и занятость Росстата, соседи по сети), переходы 2023→2024, сравнение методов и правил голосования, проверки внешними данными, три разобранных примера. - Методологический отчёт —
docs/report.md(PDF:docs/report.pdf); обзор международного опыта —docs/international_review.md. - Все гиперпараметры —
configs/default.yaml; результаты всех сравнений —results/.
- 2 016 муниципалитетов → 4 макротипа (Столицы и центры высоких трат, Городская Россия, Сельская Россия, Север) → 6 типов; вложенность уровней 92,7% («Удалённая Сибирь и горы» — переходный тип между «Городской Россией», «Севером» и «Сельской Россией»).
- Метод — KEFRiN для сетей с признаками на сети синхронности трат; выбран правилом Коупленда по 45 конфигурациям (голосуют 6 индексов качества и устойчивость), детальный уровень — тот же метод при наименьшем устойчивом k ≥ 6 (
results/selection.json,results/selection_sensitivity.csv). - Типы согласуются с официальными категориями, которых модель не видела: сильно — с Севером и Арктикой (V 0,52–0,59; «Арктика и Крайний Север» — 100% районов Крайнего Севера), умеренно — с моногородами, агломерациями и столицами (V 0,22–0,27); типы объясняют 43% разброса численности населения и 40% — доступности рынков.
- Из 656 формальных смен типа 2023→2024 значимы 116; главный сдвиг — у 84 МО «Аграрной периферии» исчез летний подъём трат в общепите (+1% → −5% к стране; обратно 23, p ≈ 2·10⁻⁹).
- Проверка на США: динамика карточных трат по округам не восстанавливает производственные типы ERS (ARI 0,03) — типология по структуре трат дополняет производственную, а не заменяет её.
| Шаг | Решение |
|---|---|
| Узлы и признаки | 2 016 МО с полными рядами; уровень трат, лог-профиль пяти категорий (CLR), сезонность сверх общероссийской — всё относительно медианы страны в том же месяце |
| Рёбра | 5 правил: евклид по признакам, корреляция идиосинкратических рядов, косинус корзины трат, DTW с окном лага, автодороги; основное — синхронность трат (корреляция) |
| Методы | k-means, Ward, спектральный, Leiden, KEFRiN (Shalileh & Mirkin, 2022) — на одних узлах, признаках и сети, k = 4…12 |
| Качество | SW, CH, S_Dbw, MQ (модулярность), AVI, AVU, ANUI по определениям статьи Shalileh, Antonov, Tsyplakova (2025) + устойчивость (бутстреп) + сравнение со случайным разбиением |
| Выбор | Правило Коупленда (6 индексов качества и устойчивость «голосуют» за 45 конфигураций) выбирает метод и макроуровень; детальный уровень — тот же метод при наименьшем k ≥ 6 с устойчивостью ARI ≥ 0,75; доля сети в KEFRiN — наибольшая, при которой силуэт теряет не больше 0,005 |
| Динамика | 13 скользящих годовых окон (шаг месяц); каждый снимок — своя сеть; KEFRiN с якорным стартом от основных типов; значимый переход = уверенная принадлежность в непересекающихся 2023 и 2024 |
| Интерпретация | Профили в рублях и долях, правило Миркина (отклонение типа от среднего), медоиды; внешняя проверка официальными метками Росстата (население, моногорода, Крайний Север, Арктика, агломерации) и доступностью рынков — модель их не видела |
| Обоснование | Что меняет сеть против k-means (136 МО, доля синхронных связей 35% → 57%); устойчивость к числу соседей, правилу рёбер и весам блоков; веса блоков — равные доли разброса (31/36/33%); типы против официального вида МО (сильнее по 5 метрикам из 7) — results/justification.json, results/weights_sensitivity.csv |
| Международный контекст | Обзор типологий США, Канады, ЕС/ОЭСР, Австралии, Бразилии; проверка на США: кластеры трат против официальных типов ERS (scripts/us_check.py) |
| Устойчивость выбора | Четыре правила агрегирования индексов — Коупленд, Борда, Шульце, пороговое правило Алескерова: KEFRiN — победитель или среди равных победителей при всех; GMM как шестой метод победителя не меняет (results/aggregation.csv, results/gmm_check.json) |
| Синтетическая проверка | Атрибутированная блочная модель с известными группами, сетка «сигнал в признаках × в сети» 3 × 3: KEFRiN не хуже k-means во всех ячейках, выигрыш мал; при сильной сети точнее Leiden и спектральный (scripts/synthetic_check.py) |
| Объяснимые типы | Пороговое дерево IMM (Dasgupta et al., 2020): 5 порогов воспроизводят 80% назначений (results/imm_rules.json) |
| Динамика типов | События MONIC между окнами: из 72 случаев 70 — «выжил», 2 раскола «Удалённой Сибири»; опережения по рёбрам сети нет — 85% рёбер синхронны без сдвига (results/cluster_events.csv, results/leadlag.json) |
| Рынок труда и география | Росстат: η² логарифма зарплаты 0,69 (почти целиком через уровень трат), типология по занятости с нашей совпадает слабо (ARI 0,17); рёбра сети лишь в 2,8% случаев соединяют соседей по границе, но тип по ним совпадает чаще, чем у соседей (results/rosstat_validation.json, results/spatial_autocorr.json) |
python -m venv .venv
.venv/Scripts/pip install -r requirements.txt # Windows; в Linux/macOS: .venv/bin/pip
.venv/Scripts/python scripts/download_data.py # данные СберИндекса -> data/raw/ (проверка SHA-256)
.venv/Scripts/python run.py --config configs/default.yaml
python -m http.server 8000 --directory site # лендинг: http://localhost:8000run.py --fast пропускает бутстреп устойчивости (≈3 мин вместо ≈13 мин); правило выбора проверяется только в полном режиме.
Дополнительные проверки (их результаты уже в results/, а сводка — в site/data/v2.json): python scripts/download_data.py --only rosstat — выборка БД ПМО Росстата для внешней проверки; python scripts/synthetic_check.py — синтетическая сеть с известными группами; python scripts/gmm_check.py — смесь гауссиан как дополнительный метод; python scripts/mobility_check.py — индекс мобильности (СЗФО).
node scripts/build_site_layouts.js — раскладки точек для лендинга (site/data/layouts.json: равновеликая карта и карта по населению); запускать после run.py, если менялись данные (Node.js и вендорный D3 из site/vendor/).
python scripts/us_check.py — проверка на данных США. python scripts/anchor_check.py — почему окна динамики стартуют от основной типологии. python scripts/cash_check.py — проверка гипотезы о маркетплейсах внешними данными о доле безнала. Самотест индексов: python src/smc/metrics.py.
python scripts/check_claims.py — реестр утверждений: 70 чисел и сравнений из отчёта, README и лендинга пересчитываются
по results/ и site/data/, плюс запрет на формулировки, которые раньше оказывались неверными. Python 3.12.
Лендинг публикуется на GitHub Pages через .github/workflows/pages.yml (один раз: Settings → Pages → Source: GitHub Actions).
Сервер www.sberbank.com подписан сертификатом Минцифры; download_data.py берёт корневой сертификат
с Госуслуг, сверяет отпечаток SHA-256 и не отключает проверку TLS.
configs/default.yaml гиперпараметры (признаки, окна, сети, методы, выбор)
configs/type_names.yaml названия типов, привязанные к якорным МО (устойчиво к перенумерации)
run.py весь конвейер одной командой
src/smc/data.py загрузка панели и справочника
src/smc/features.py признаки узлов и ряды для рёбер
src/smc/graphs.py 5 правил рёбер, диагностика сетей
src/smc/clustering.py 5 методов, включая KEFRiN
src/smc/metrics.py ICVI (SW, CH, S_Dbw, AVI, AVU, ANUI, MQ), устойчивость, внешняя проверка; самотест
src/smc/dynamics.py эволюционная кластеризация окон, значимые переходы
src/smc/interpret.py профили типов, правило Миркина, медоиды
src/smc/external.py внешняя проверка официальными метками
src/smc/export_web.py данные для лендинга
src/smc/aggregation.py правила голосования: Коупленд, Борда, Шульце, пороговое; самотест
src/smc/explain.py пороговое дерево IMM: правила типов на признаках; самотест
src/smc/layout.py раскладка сети t-SNE для лендинга (site/data/net.json)
src/smc/leadlag.py опережение-запаздывание по рёбрам сети
src/smc/events.py события типов между окнами (MONIC); самотест
src/smc/spatial.py пространственная автокорреляция типов (join count)
src/smc/rosstat.py внешняя проверка зарплатой и занятостью Росстата
scripts/download_data.py скачивание и проверка исходных данных
scripts/us_check.py проверка на США (Opportunity Insights + USDA ERS)
scripts/check_claims.py реестр утверждений: тексты против рассчитанных результатов
scripts/anchor_check.py якорный старт окон против цепочки (обоснование метода динамики)
scripts/cash_check.py гипотеза о маркетплейсах против доли безнала по регионам (Сбербанк + «Платформа ОФД», 2025)
scripts/synthetic_check.py синтетика: атрибутированная блочная модель с известными группами
scripts/gmm_check.py смесь гауссиан как дополнительный метод (вне голосования)
scripts/mobility_check.py индекс мобильности СберИндекса (СЗФО) против типов
scripts/build_site_layouts.js раскладки точек для лендинга (Node.js, D3 из site/vendor)
data/external/ официальные российские метки МО (Росстат 2024 и др.) с описанием источников
results/ таблицы всех сравнений и итогов (CSV/JSON)
site/ статический лендинг (D3 v7, без сервера и внешних CDN): stage.js — сцена истории (Canvas),
app.js — карта и паспорт МО, v2.js — блоки дополнительных проверок, vendor/ — D3 и шрифты (OFL)
docs/report.md методологический отчёт
docs/international_review.md обзор международного опыта и источников
scripts/build_report_pdf.py сборка docs/report.pdf (pip install markdown; Edge или Chrome)
Данные СберИндекса: «Потребительские безналичные расходы на уровне муниципальных образований по категориям трат»,
«Индекс доступности рынков на уровне муниципальных образований», «Автодорожные и железнодорожные связи между
муниципальными образованиями». СберИндекс. https://sberindex.ru/ru/research/data-sense-opisanie-nabora-dannikh-khakatona-sberindeksa-po-munitsipalnim-dannim
(данные скачаны 08.10.2026). Лицензия CC BY-SA 4.0; производные данные в site/data/ и results/ распространяются
на тех же условиях. Исходные файлы в репозиторий не включены — их скачивает scripts/download_data.py.
Внешняя проверка (в признаки модели не входит): Росстат, база данных показателей муниципальных образований в обработке
проекта «Если быть точным», CC BY 4.0 — зарплата и занятость по ОКВЭД2, 2023–2024 (data/external/rosstat_bdpmo_2023_2024.csv,
scripts/download_data.py --only rosstat); «Индекс мобильности» СберИндекса по СЗФО, CC BY-SA 4.0
(data/external/sberindex_mobility_szfo.csv). Источники и хэши — data/external/README.md.
Код — MIT. D3 — ISC (site/vendor/d3.LICENSE).
При разработке использовались ИИ-ассистенты (Claude).
