tonify-sims

SIM 2 — распространение музыки по социальному графу Telegram

Граф N = 50 000: BA-подложка (личные связи, хвост хабов) + 3 460 плантированных клик с перекрытием (Telegram-чаты, широкие мосты Centola). Complex contagion (k = 2) против simple (k = 1); проверка GTM-гипотезы «посев в хабы бьёт случайный при равном бюджете». Реализация SPEC v1.3 (sim2/SPEC.md), seed = 42, полный детерминизм.

CHANGELOG-факт: v1.0 (независимая посадка клик) блокировала complex полностью — штатный стоп «p* не существует»; v1.1 (посадка с перекрытием) оживила механику, но провалила T3(б) из-за категориальной ошибки метрика/порог; v1.2 перевела T3 на P_macro — полный PASS и публикация; v1.3 — по аудиту красной команды (вердикт: принять, отзываемых чисел нет) добавлен контроль интерпретации хабов top-BA и декомпозиция union-степени. Детали — SPEC.md, CHANGELOG.

Запуск

python3 sim2/tonify_graph_sim.py   # numpy + scipy + networkx + matplotlib + pillow

Полный прогон ≈ 36 с (M-серия); stdout детерминирован (два прогона — идентичный diff); числа стратегий 0–2 воспроизводят v1.2 байт-в-байт. Фигуры кладутся в figures/.

Параметры → источники (сжатая таблица SPEC §1 v1.3)

Параметр Значение Источник / флаг
N узлов; BA m; seed 50 000; 3; 42 ТЗ (HANDOFF); Barabási & Albert 1999
Размер клики LogNormal(μ=ln 12, σ=0,6), клип [5, 40] границы — ТЗ; μ, σ — допущение (медиана 12 = малый групповой чат; статистики приватных групп Telegram нет)
Число клик C 3 460 калибровка на покрытие q = 0,50
Покрытие q 0,50 допущение: консервативная середина, доля юзеров в ≥1 приватной группе не публикуется
Перекрытие чатов n_par = 2 родителя, o = 2 общих узла допущение (минимальность): o=2 — минимальная ширина широкого моста (Centola 2010); перекрывающиеся сообщества — Palla et al., Nature 2005; признание конструкции — §9.6
Пороги k complex 2; simple 1 ТЗ; Centola & Macy 2007, Centola 2010; Granovetter 1973
Share rate p сетка 0,05…1,00, шаг 0,05 ТЗ: ось фазовой диаграммы
Рабочая точка p* min{p: mean охват(k=2) ≥ 5 % N} правило-конструкция на измеренной фазовой; mean = P(розжиг)×условный охват — единственный агрегат, монотонный при бимодальности
p_seed 1 допущение (GTM-реализм): посев = оплаченное размещение
Память касаний бессрочная в каскаде Centola & Macy 2007; ограничение §9.1
Бюджеты B {1, 2, 5, 10, 20, 50, 100, 200, 500} конструкция: лог-сетка до 1 % N; равный бюджет = равное число узлов (ТЗ)
Прогоны A 30; B 40; C 40 допущение: бюджет рантайма; разрыв, не видимый поверх SEM, не GTM-аргумент
Посев B и C один случайный чат 10–14 (факт: 970 кандидатов = 28 % C) Centola 2010 (посев соседства); окно убирает дисперсию размера
Посев C на G_BA узел deg ≥ 11 + 11 соседей (12) конструкция: симметрия протокола
R_eff; P_macro пулированные поколения (G₂+G₃+G₄)/(G₁+G₂+G₃), условно на G₁≥1; P_macro = P(охват ≥ 5 % N) конструкция: декомпозиция бимодальности розжиг × распространение
Точка C и T3: p_C max(p*, 0,7) глубоко в сверхкритике обеих механик (аналитики 0,018 и 0,526)
Хабы топ-B по степени G (BA + клики); контроль v1.3 — top-BA по степени чистого G_BA ТЗ; оговорка §9.10; контроль — аудит красной команды
GIF N_gif 4 000; C_gif 277 ТЗ; пропорция клик сохранена

ВАЛИДАЦИЯ (мишень → получено → допуск → PASS/FAIL), прогон seed=42

T1   хвост степеней G_BA: MLE Ньюмана, k_min=15:         γ̂ = 2.913   допуск γ̂ ∈ [2,60; 3,40]      PASS
T2   размеры клик: медиана                     :               12.0   допуск ∈ [11; 13]             PASS
T2   размеры клик: среднее                     :              14.20   допуск ∈ [13,30; 15,00]       PASS
T2   размеры клик: P(s=5)                      :              0.101   допуск ≤ 0,12                 PASS
T2   размеры клик: P(s=40)                     :              0.025   допуск ≤ 0,04                 PASS
T2b  покрытие: доля узлов в ≥1 чате            :              0.504   допуск ∈ [0,45; 0,55]         PASS
T2c  мостовой слой: доля чатов c≥1 с ≥1 мостом :             1.0000   допуск ≥ 0,99                 PASS
T2c  мостовой слой: средняя степень d̄(B_chat) :               4.62   допуск ∈ [4,0; 5,5]           PASS
T3   G_BA, simple k=1: P_macro                 :              1.000   допуск ≥ 0,75                 PASS
T3   G_BA, complex k=2: P_macro                :              0.150   допуск ≤ 0,25                 PASS
T3   G, complex k=2: P_macro                   :              1.000   допуск ≥ 0,75                 PASS

11/11 PASS. Справочно: G_BA 149 991 рёбер (⟨k⟩ = 6,00); G 586 182 рёбер (⟨k⟩ = 23,45); членств 0,98/узел, 1,95/покрытого; B_chat связен (1 компонента, по построению); выходов по T_max = 100: ноль на все 2 841 каскад. Пороги T3 фиксированы в SPEC v1.2 с признанием пост-хок-контекста (процессное правило §CHANGELOG v1.3); PASS воспроизведён аудитом на независимых батчах сидов (P_macro G_BA complex = 0,150/0,075/0,125 — всюду ≤ 0,25).

Результаты

Критические точки (эксперимент B: фазовая диаграмма, fig9)

Эксперимент C — контраст Centola 2×2 (p_C = max(p*, 0,7) = 0,7; 40 прогонов/ячейку)

Метрика мишени T3 — P_macro = P(охват ≥ 5 % N):

P_macro simple k=1 complex k=2
G (BA + клики) 1,000 1,000
G_BA (без клик) 1,000 0,150

Mean-охват, % N (справочно):

mean, % N simple k=1 complex k=2
G (BA + клики) 99,4 93,7
G_BA (без клик) 98,6 12,54

Чтение (Centola 2010 / Centola & Macy 2007): simple проводится слабыми связями и живёт на обоих графах; complex на графе без чатов зажигается лишь в 15 % посевов — «теория рукопожатий» Granovetter работает для информации и ломается на поведении. Чаты возвращают complex надёжность: P_macro 0,15 → 1,00.

Rich-club-находка (§9.12, запрет оверклейма). «Ломается» — вероятностно, НЕ абсолютно: даже на чистом BA плотное ядро высокостепенных узлов в ~15 % посевов собирает второй источник, и зажёгшийся каскад доходит до 82–84 % N (степени центров розжига 11–257 — это не хабовый артефакт посева). Клики меняют не возможность макрокаскада, а его НАДЁЖНОСТЬ: P(макрокаскад) 1,00 против 0,15. Формулировка «без чатов complex невозможен» запрещена валидацией: mean-охват G_BA complex = 12,54 % N именно из-за этого хвоста.

Эксперимент A — посев при равном бюджете (complex k=2, p = p* = 0,15; fig8)

Mean reach-per-seed = (охват − B)/B ± 1 SEM, 30 прогонов/точку. top-BA — контрольная стратегия v1.3 (топ-B по степени ЧИСТОГО G_BA), в критерий фальсификатора §6 не входит:

B random top-hubs random-cliques top-BA (контроль)
1 0,0 ± 0,0 0,0 ± 0,0 0,0 ± 0,0 0,0 ± 0,0
2 0,0 ± 0,0 1 856,7 ± 764,2 1 111,8 ± 612,9 1 895,0 ± 780,9
5 0,0 ± 0,0 4 509,1 ± 16,7 1 016,1 ± 339,7 4 225,0 ± 206,8
10 0,8 ± 0,4 2 269,4 ± 8,2 1 101,8 ± 203,7 2 273,0 ± 7,3
20 145,5 ± 68,6 1 150,6 ± 3,6 733,1 ± 95,5 1 170,3 ± 2,8
50 322,9 ± 36,0 484,1 ± 1,4 441,0 ± 1,5 488,7 ± 1,3
100 220,0 ± 0,9 251,0 ± 0,5 222,8 ± 0,8 255,1 ± 0,6
200 111,2 ± 0,4 130,0 ± 0,2 113,0 ± 0,4 135,3 ± 0,3
500 46,5 ± 0,1 55,4 ± 0,1 47,3 ± 0,1 59,4 ± 0,1

ВЕРДИКТ ФАЛЬСИФИКАТОРА GTM (SPEC §6, дословно из прогона): «гипотеза хабов подтверждена на всех бюджетах B ∈ [2; 500]: mean reach-per-seed(top-hubs) > random на всей сетке (B=1 исключён как вырожденный, §6)».

Контроль top-BA («каналы vs чат-хопперы», v1.3): top-BA бьёт random на всех B ∈ [2; 500] и на B ≥ 10 систематически ≥ top-hubs (2 273,0 vs 2 269,4; 1 170,3 vs 1 150,6; 488,7 vs 484,1; 255,1 vs 251,0; 135,3 vs 130,0; 59,4 vs 55,4) — union-определение хабов ЗАНИЖАЛО канальное преимущество, а не создавало его. Вывод аудита подтверждён в основном прогоне.

Декомпозиция хабов (§4.1 v1.3, справочно): у топ-500 по union-степени 81,6 % степени — кликовые рёбра; пересечение |H₅₀₀ ∩ H₅₀₀^BA| = 84/500; членства топ-500 union: медиана 8, максимум 42. «Хабы» union-определения — в большинстве чат-хопперы; контроль top-BA показывает, что вердикт §6 от этого загрязнения не зависит.

Механика малых B (аудит v1.2, §8): на B ≤ 20 выигрыш хабов смешан с эффектом плотности посева вообще — cliques тоже бьют random (733,1–1 111,8 против 0,0–145,5); чистый хаб-эффект изолируется на B ≥ 100, где cliques сходятся к random (при B = 100: 222,8 vs 220,0; при B = 500: 47,3 vs 46,5), а хабы держат преимущество: +14–19 % у union-хабов, до +27,7 % у top-BA (251,0/255,1 против 220,0 при B = 100; 55,4/59,4 против 46,5 при B = 500).

Честные ограничения (SPEC §9 v1.3 + факты прогона)

  1. Забывание и отписки не моделируются — охват есть оценка сверху; затухание сдвинуло бы критику вправо.
  2. Один трек в вакууме: без конкуренции каскадов за чаты и внимание.
  3. Хаб ненаправленный (и вещает, и слушает) — переоценивает способность хаба принять трек; реальный канал — направленный broadcast.
  4. Порог k = 2 у всех; гетерогенность порогов (Granovetter 1978) не моделируется.
  5. Одна монетка p на узел активирует оба канала (чаты + личные); раздельные вероятности не моделируются.
  6. Посадка чатов подчинена существованию мостов — признание: перекрытие o = 2 от n_par = 2 родителей выбрано, чтобы широкие мосты существовали ПО ПОСТРОЕНИЮ (реализм — Palla et al. 2005; проводимость перекрытий — Centola 2010). Плотность мостового слоя d̄ = 4,62 — конструкция, не измерение Telegram; p_c^chat переносится на реальность с точностью до этой плотности.
  7. Состав чата не коррелирует с BA-связями участников (нет гомофилии к личному слою).
  8. Граф статичен на время каскада.
  9. Хвост членств (rich-get-richer наследования; факт прогона: максимум 42 членства) правдоподобен, но не калиброван.
  10. p одинаков для всех; посев транслирует с вероятностью 1 — верхняя оценка посева; «канал» и «суперактивный юзер» не различаются (union-степень); декомпозиция v1.3 и контроль top-BA количественно ограничивают эту оговорку.
  11. μ, σ размеров чатов не измерены; чувствительность по μ, σ, q, n_par, o вне scope.
  12. Rich-club-розжиг на чистом BA — находка, не ограничение: complex без клик ломается вероятностно (P_macro 0,15), не абсолютно; оверклейм запрещён (см. эксперимент C).

Факты прогона: полный пайплайн 36 с; 2 841 каскад (B 1 600 + A 1 080 + C 160 + gif); stdout двух прогонов идентичен; fig9/fig10 байтово идентичны публикации v1.2 (эксперимент B и gif не менялись — md5 совпадают); gif — 20 логических кадров (14 раундов + посев + 5 финальных; в ориентире 15–40 SPEC §7 v1.3; PIL склеивает неотличимые кадры — 15 физических, длительности сохранены; файл 2,3 МБ), охват показанного каскада 48,3 % N_gif.

Артефакты

MIT.