[ChatGPT] ТЕСТ-ПЛАН
Сущности
ТЕСТ-ПЛАН<br>
<br>
S-G Stress Test Plan v1.0 для модели S-G Index v2.0a<br>
<br>
0) Цель и ожидаемый результат<br>
<br>
Цель: проверить, что модель v2.0a:<br>
<br>
ведёт себя монотонно и интерпретируемо при изменении входов (C,T,V,P,D,R);<br>
<br>
корректно фиксирует режим коллапса через порог (\theta) и демпфер (\lambda);<br>
<br>
даёт сравнимые результаты по 30 сценариям (A–D), включая динамику, лаги и интервенции;<br>
<br>
выдаёт стабильный KPI-интерфейс (S_{\text{kpi}}) (0–150) без “ложных обнулений” в норме.<br>
<br>
Выход:<br>
<br>
единый пакет результатов (таблица + отчёт),<br>
<br>
ранжирование сценариев по опасности/реалистичности/диагностической ценности,<br>
<br>
перечень параметров “самое слабое звено” по эластичностям,<br>
<br>
рекомендации по калибровке (\theta,\lambda) и корректировке метрик входов (если выявятся проблемы).<br>
<br>
1) Версия модели и фиксированные формулы (норматив тестирования)<br>
<br>
1.1. Входы и агрегация видимости<br>
<br>
(C,T,P,D,R\in[0,1])<br>
<br>
(V = V_{\text{soc}}^{0.5}\cdot V_{\text{gen}}^{0.3}\cdot V_{\text{search}}^{0.2})<br>
<br>
1.2. “Физика”<br>
<br>
[<br>
S_{\text{pot}}=C^{0.25}\cdot T^{0.40}\cdot V^{0.35}<br>
]<br>
[<br>
F_{\text{lin}}=\frac{1}{1+1.0P+1.2D}<br>
]<br>
[<br>
Load=\frac{P+1.5D}{R+0.001}<br>
\qquad<br>
Excess=\max(0,Load-\theta)<br>
]<br>
[<br>
F_{\text{exp}}=\exp(-\lambda\cdot Excess)<br>
]<br>
[<br>
S_{\text{raw}}=S_{\text{pot}}\cdot F_{\text{lin}}\cdot F_{\text{exp}}<br>
]<br>
<br>
1.3. KPI-интерфейс (управленческий индекс)<br>
<br>
[<br>
S_{\text{kpi}}=<br>
100\cdot \min!\left(1.5,;<br>
\frac{\log_{10}(S_{\text{raw}}+\delta)-\log_{10}(S_{\min})}<br>
{\log_{10}(S_{\max})-\log_{10}(S_{\min})}<br>
\right)<br>
]<br>
Техпараметры тест-плана:<br>
<br>
(\delta=10^{-8})<br>
<br>
(S_{\min}=8.77\times10^{-5}) (якорь “катастрофа-2025”)<br>
<br>
(S_{\max}=0.15) (якорь “цель-2030”)<br>
<br>
1.4. Зонирование KPI<br>
<br>
0–25 🔴 кризис<br>
<br>
25–40 🟡 уязвимость<br>
<br>
40–60 🟢 управляемая устойчивость<br>
<br>
60–100 🔵 стратегическая устойчивость<br>
<br>
100–150 🟣 превышение целей<br>
<br>
2) Базовая точка (baseline) для воспроизводимости<br>
<br>
Baseline-2026 (операционный для стресс-тестов):<br>
<br>
(C=0.22,;T=0.32,;V_{\text{soc}}=0.30,;V_{\text{gen}}=0.22,;V_{\text{search}}=0.35)<br>
<br>
(P=0.82,;D=0.65,;R=0.38)<br>
<br>
Важно: baseline фиксируется один раз на цикл тестирования. Если вы хотите также прогон “baseline-2025”, он делается отдельным прогоном.<br>
<br>
3) Протокол исполнения сценариев (единый стандарт)<br>
<br>
3.1. Типы сценариев<br>
<br>
Static (A,B,D): одноразовое изменение параметров, держим на длительность сценария.<br>
<br>
Dynamic (C): многофазная траектория во времени, интервенции/триггеры/лаги.<br>
<br>
3.2. Правила применения шока<br>
<br>
Для каждого параметра (X):<br>
<br>
“умножение”: (X \leftarrow \text{clip}(k\cdot X))<br>
<br>
“прибавка”: (X \leftarrow \text{clip}(X+\Delta))<br>
<br>
“задание уровня”: (X \leftarrow \text{clip}(x_{\text{fixed}}))<br>
<br>
3.3. Лаги (latency)<br>
<br>
Лаг задаётся как отложенное действие на вход:<br>
<br>
пример: “T падает через 3 дня после D-шока”<br>
<br>
реализуется расписанием изменения параметра в момент (t_0 + lag)<br>
<br>
3.4. Интервенции (countermeasures)<br>
<br>
Интервенции — такие же операции над входами (или над производными, например (\tau) внутри R, если вы так считаете R), но:<br>
<br>
привязываются к фиксированному времени (t=7, t=14), или<br>
<br>
запускаются по триггеру (Load>(\theta), S_kpi<25 два периода подряд и т.п.)<br>
<br>
3.5. Временная дискретизация<br>
<br>
Для тест-цикла “2026-операционный” рекомендуется:<br>
<br>
шаг 1 день для сценариев длительностью ≤ 30 дней<br>
<br>
шаг 1 неделя для сценариев 2–6 месяцев<br>
<br>
шаг 1 месяц для сценариев ≥ 6 месяцев<br>
<br>
4) Выходные метрики (обязательные поля результата)<br>
<br>
Для каждого (t) (или для статических — до/после/пик/конец):<br>
<br>
Inputs: C, T, V_soc, V_gen, V_search, V, P, D, R<br>
<br>
Core: S_pot, F_lin, Load, Excess, F_exp, S_raw, S_kpi<br>
<br>
Zone: зона KPI<br>
<br>
Diagnostics:<br>
<br>
(\Delta S_{\text{kpi}}%) от baseline<br>
<br>
расстояние до порога: (\theta-Load) (если Load<(\theta))<br>
<br>
флаги триггеров (Load>(\theta), F_exp<0.1, S_kpi<25)<br>
<br>
5) Набор сценариев (канонический пакет 30 сценариев)<br>
<br>
Ниже — реестр. Внутри движка каждый сценарий задаётся как “Shock Vector + Schedule”.<br>
<br>
Группа A — единичные шоки (12)<br>
<br>
A1: (V_{\text{soc}}\leftarrow 0.3V_{\text{soc}}) (постоянно)<br>
<br>
A2: (V_{\text{gen}}\leftarrow 0.4V_{\text{gen}}) (постоянно)<br>
<br>
A3: (V_{\text{search}}\leftarrow 0.5V_{\text{search}}) (постоянно)<br>
<br>
A4: (D\leftarrow \min(1,D+0.4)) (2 недели, lag 1 день)<br>
<br>
A5: (D\leftarrow \min(1,D+0.3)), (T\leftarrow 0.8T) (1 неделя, lag T=3 дня)<br>
<br>
A6: (T\leftarrow 0.6T) (1 месяц, lag 1 неделя)<br>
<br>
A7: (C\leftarrow 0.5C) (постоянно)<br>
<br>
A8: (P\leftarrow \min(1,P+0.2)) (постоянно)<br>
<br>
A9: (R\leftarrow 0.7R) (постоянно)<br>
<br>
A10: “ускорение атак” → реализуем как (R\leftarrow 0.8R) (или через (\tau) в R, если используете R=exp(-τ/τ0)*…); постоянно<br>
<br>
A11: контрмера: (R\leftarrow \min(1,R+0.3)), (D\leftarrow 0.8D) (2 недели, lag 2 дня)<br>
<br>
A12: прорыв: (C\leftarrow \min(1,C+0.3)), (V_{\text{soc}}\leftarrow \min(1,V_{\text{soc}}+0.2)) (1 месяц, lag 1 неделя)<br>
<br>
Группа B — комбинированные (8)<br>
<br>
B1: (V\leftarrow 0.7V), (D\leftarrow \min(1,D+0.2)), (T\leftarrow 0.9T) (1 месяц)<br>
<br>
B2: (V\leftarrow 0.5V), (D\leftarrow \min(1,D+0.4)), (T\leftarrow 0.7T) (2 недели)<br>
<br>
B3: (V_{\text{soc}}\leftarrow 0.2), (V_{\text{gen}}\leftarrow 0.3), (V_{\text{search}}\leftarrow 0.4) (постоянно)<br>
<br>
B4: (T\leftarrow 0.4T), (C\leftarrow 0.8C), (R\leftarrow 0.8R) (1 месяц)<br>
<br>
B5: (P\leftarrow \min(1,P+0.3)), (C\leftarrow 0.7C), (R\leftarrow 0.6R) (постоянно)<br>
<br>
B6: (D\leftarrow \min(1,D+0.3)), (P\leftarrow \min(1,P+0.2)), (V\leftarrow 0.8V) (3 недели)<br>
<br>
B7: восстановление: (C\leftarrow \min(1,C+0.2)), (T\leftarrow \min(1,T+0.15)), (R\leftarrow \min(1,R+0.25)) (2 месяца)<br>
<br>
B8: трансформация: (C\leftarrow \min(1,C+0.4)), (T\leftarrow \min(1,T+0.3)), (V\leftarrow \min(1,V+0.3)), (R\leftarrow \min(1,R+0.2)) (6 месяцев)<br>
<br>
Группа C — динамические с интервенциями (6)<br>
<br>
C1 “атака-ответ-восстановление”<br>
<br>
t=0..6: (D\leftarrow \min(1,D+0.3))<br>
<br>
trigger: если Load>(\theta) → t=7: (R\leftarrow \min(1,R+0.4))<br>
<br>
t=14: (C\leftarrow \min(1,C+0.1))<br>
<br>
горизонт: 30 дней<br>
<br>
C2 “кризис доверия + восстановление”<br>
<br>
t=0: (T\leftarrow 0.6T)<br>
<br>
t=14: “аудит” → (C\leftarrow \min(1,C+0.05)), (R\leftarrow \min(1,R+0.1))<br>
<br>
t=30: “реформа” → (T\leftarrow \min(1,T+0.15))<br>
<br>
горизонт: 60 дней<br>
<br>
C3 “постепенная деградация + запоздалый ответ”<br>
<br>
каждые 10 дней: (D\leftarrow \min(1,D+0.05)), (V_{\text{soc}}\leftarrow 0.98V_{\text{soc}})<br>
<br>
trigger: если (S_{\text{kpi}}<25) три квартала подряд (в ускоренном тесте: 3 “контрольных окна”) → t=60: (R+0.35), t=90: (T+0.10)<br>
<br>
горизонт: 120 дней<br>
<br>
C4 “упреждающее укрепление”<br>
<br>
t=0: (C+0.15,;V_{\text{soc}}+0.10,;R+0.20)<br>
<br>
t=30: оценка → если (\Delta S_{\text{kpi}}<10) → доп. мера (T+0.10)<br>
<br>
горизонт: 90 дней<br>
<br>
C5 “циклические атаки” (каждые 30 дней)<br>
<br>
цикл: 7 дней атака (D+0.2), 7 дней ответ (R+0.2), 16 дней восстановление (C+0.05, V+0.05)<br>
<br>
3 цикла (90 дней)<br>
<br>
C6 “постоянное давление”<br>
<br>
удерживаем (D=0.8) 90 дней<br>
<br>
адаптивно: если Load>(\theta) → (R\leftarrow \min(1,R+0.05)) каждые 7 дней<br>
<br>
цель: проверить, выходит ли система в “устойчивый режим” или остаётся в коллапсе<br>
<br>
Группа D — экстремальные (4)<br>
<br>
D1: (V\leftarrow 0.01) (постоянно)<br>
<br>
D2: (T\leftarrow 0.05) (постоянно)<br>
<br>
D3: “режим коллапса”: задать (Load \approx 10\theta) через (R\leftarrow) очень низкое и/или (P,D\to1) (фиксируем входами: (P=1, D=1, R=0.05))<br>
<br>
D4: “идеальная система”: (C=0.95, T=0.9, V_{\text{soc}}=0.9, V_{\text{gen}}=0.85, V_{\text{search}}=0.85, P=0.2, D=0.1, R=0.9)<br>
<br>
6) Матрица исполнения (календарь 4 недели)<br>
<br>
Неделя 1 — базовая валидация (устойчивость “ядра”)<br>
<br>
Прогон: baseline-2026 → A1–A4<br>
<br>
Проверки: монотонность, диапазоны, отсутствие “ложного коллапса” в A1–A3 (это шоки видимости)<br>
<br>
Неделя 2 — сильные единичные и первые комбинированные<br>
<br>
A5–A8 + B1–B2<br>
<br>
Отдельно: фиксируем вклад компонент (S_pot / F_lin / F_exp)<br>
<br>
Неделя 3 — динамика, лаги, триггеры<br>
<br>
C1–C3<br>
<br>
Ключевое: корректность расписания лагов и включения интервенций по trigger<br>
<br>
Неделя 4 — экстремальные, “потолок” и регулярные сценарии<br>
<br>
D1–D4 + B3–B8 + C4–C6<br>
<br>
Итог: ранжирование сценариев и рекомендации по калибровке (\theta,\lambda)<br>
<br>
7) Правила интерпретации результатов (что считается “провалом”)<br>
<br>
Сценарий считается непройденным (для модели или для данных), если:<br>
<br>
Нарушена монотонность (при увеличении C/T/V падает S_raw без изменения прочих)<br>
<br>
Ложный коллапс: Excess>0 стабильно в baseline без шоков (выше регламентной доли)<br>
<br>
Невоспроизводимость: повтор прогонов с теми же входами даёт разные зоны<br>
<br>
Парадокс зон: D4 (“идеальная система”) не попадает минимум в 🔵<br>
<br>
Тех-нестабильность: изменение (\delta) или (\varepsilon) меняет зону слишком часто<br>
<br>
8) Стандартизованный формат данных (чтобы команда работала одинаково)<br>
<br>
8.1. Таблица сценариев (реестр)<br>
<br>
Минимальные поля:<br>
<br>
scenario_id, group, name<br>
<br>
duration_days, timestep (“day/week/month”)<br>
<br>
shock_ops (список операций)<br>
<br>
lags (список отложенных операций)<br>
<br>
triggers (условия)<br>
<br>
interventions (операции по времени/триггеру)<br>
<br>
expected_zone (опционально)<br>
<br>
priority_score (после экспертной оценки)<br>
<br>
8.2. Формат “операции”<br>
<br>
Унифицированная запись:<br>
<br>
{"t": 0, "var": "D", "op": "add", "value": 0.4, "clip": true}<br>
<br>
{"t": 7, "var": "R", "op": "add", "value": 0.4, "clip": true, "trigger": "Load>theta"}<br>
<br>
{"t": 0, "var": "V_soc", "op": "mul", "value": 0.3}<br>
<br>
{"t": 0, "var": "P", "op": "set", "value": 1.0}<br>
<br>
9) Шаблон результата по каждому сценарию (для отчёта и обсуждения)<br>
<br>
Свод (1 строка на сценарий):<br>
<br>
ID, Тип, Длительность<br>
<br>
S_kpi_baseline, S_kpi_min (пик падения), S_kpi_end<br>
<br>
Min Zone, Time in 🔴, Max Load, Max Excess<br>
<br>
Top-3 эластичности (по модулю)<br>
<br>
Ключевая причина (какой компонент “съел” индекс: S_pot/F_lin/F_exp)<br>
<br>
Деталь (таблица временного ряда):<br>
<br>
t, C,T,V_soc,V_gen,V_search,V,P,D,R<br>
<br>
S_pot,F_lin,Load,Excess,F_exp,S_raw,S_kpi,Zone<br>
<br>
flags: Collapse(Load>θ), Fexp<0.1, Skpi<25<br>
<br>
10) Итоговый “мастер-отчёт” (структура)<br>
<br>
перечень прогнанных сценариев и статус (pass/fail)<br>
<br>
топ-10 самых опасных сценариев по падению S_kpi и времени в 🔴<br>
<br>
топ-10 самых реалистичных (по экспертной шкале)<br>
<br>
“карта слабых мест”: какие параметры чаще всего дают максимальную эластичность<br>
<br>
выводы по (\theta,\lambda): нужна ли рекалибровка и куда сдвигать<br>
<br>
рекомендации “матрицы контрмер” (какие интервенции лучше всего поднимают R/снижают D/поддерживают T)<br>
<br>
Мини-добавка: как быстро проверить, что тест-план реализован правильно (3 контрольных прогона)<br>
<br>
D4 (идеальная система) → S_kpi должен быть в 🔵/🟣<br>
<br>
A3 (поиск 0.5×) → падение умеренное, без “коллапса” (если baseline не на грани (\theta))<br>
<br>
D3 (P=1,D=1,R=0.05) → должен уверенно включиться Excess≫0 и F_exp→очень малое