Диагностика кривой

Язык English Español Português العربية Русский 中文

Эта страница отвечает:На какой стадии эти данные сейчас и что будет дальше?

Как читать этот вердикт: движок смотрит на динамику, а не на уровень.
Оценка 6 означает две совершенно разные вещи в зависимости от того, поднялась ли она только что с 2 или упала с 9 — движок берёт последние 3 точки и вычисляет недавний наклон (текущее значение − третье с конца значение) ÷ 2, затем вычитает из него наклон по всему ряду и получает ускорение. «Оставшийся запас» = 10 − текущее значение: он говорит, насколько значение далеко от вершины шкалы ±10, а не сколько временных точек осталось. Стадия определяется всего двумя величинами: в какой диапазон попадает текущее значение (пять линий на −8 / −4 / 0 / 5 / 8) и положителен ли недавний наклон внутри этого диапазона и достаточно ли он крут.

Что эта страница переносит, а что нет (сказано прямо)
· Перенесено: analyze_single_trend (определение стадии для одного ряда) — все 15 стадийных диапазонов, пять разделяющих линий −8/−4/0/5/8, поддиапазоны 0.5 / 1 / −0.5 / −1 внутри каждого диапазона, формулы remaining_space и score и соглашение брать последние 3 точки для наклона.
· Не перенесено (не нужно на этой странице, а не из-за расхождения): compute_main_line (нужны 7 взвешенных подлиний), cross_validate (нужны попарная корреляция и опережение/запаздывание) и общий вывод predict_trend — всем им на вход нужны «7 цепочек × много точек», а на этой странице один ряд.
· Различие соглашений: в версии на Python одна подлиния берётся из одного из 7 столбцов базы данных, а пересчёт шкалы v*2−10 здесь скопирован дословно; у базы данных есть status_label/status_color (сильный прорыв / дрейф на низком уровне …), но на этой странице для них нет источника данных, поэтому они не отображаются — это всегда было другое соглашение, чем стадия движка.
· Плавающая точка: питоновский round() округляет половину к чётному, и pyRound() повторяет это здесь; см. отчёт о сравнении в каталоге сборки.

Известные дефекты (измерены, сказано прямо)
· Диапазон «Обвал» никогда не может сработать внутри шкалы 0–10. Его условие эквивалентно «третья с конца точка > текущее значение + 2», а после пересчёта потолок равен 10, так что он недостижим. Полный перебор 0–10 с шагом 0.1 по всем тройкам (1,030,301 комбинация) дал 0 попаданий; самый крутой отрицательный наклон внутри диапазона всегда попадает только в «Падение с пика».
· Только входные данные вне диапазона (сырые значения > 10 — суммы, количества, всё в гораздо более крупной шкале) могут дать «Обвал».
· Итак: если вы вставляете суммы или количества, нормализуйте их к 0–10 перед диагностикой, иначе поведение изменится, а движок вас не предупредит. Пока что читайте этот диапазон как сигнал выхода за пределы шкалы.

[Раздел доказательств · где можно проверить каждое число]
(1) Источник: машина переноса алгоритмов /opt/curve_engine/app_v4.2.py, строки 387-472, analyze_single_trend() (только чтение; в этом раунде без изменений); пересчёт шкалы v*2-10 находится в строке 205. Номера строк порогов зарегистрированы в карточке контракта /opt/contracts/curve_engine.md в разделе «жёстко заданные пороги / веса»: пять разделяющих линий −8/−4/0/5/8 = 398/402/411/420/433; наклоны внутри диапазона 0.5/1/−0.5/−1 = 412/421/438/447; remaining = 10 - current = 460; score=(current+10)/20*100 = 471; наклон по последним 3 точкам = 394-395.
(2) Три категории
· [Проверяемо] 15 стадийных диапазонов, пять разделяющих линий, поддиапазоны наклона внутри диапазона, формулы remaining_space и score и соглашение о наклоне по последним 3 точкам — каждое дословно попадает на эти номера строк в app_v4.2.py.
· [Соглашение отображения этой страницы] Линейный график SVG (шкала ±10, markLine, маркеры точек) рисует сама эта страница, и это не вывод исходного кода; движок выдаёт только числовые поля.
· [Источник не найден] Почему пять линий стоят именно на −8 / −4 / 0 / 5 / 8, нет пояснения о происхождении ни в исходниках движка, ни в карточке контракта (карточка регистрирует номера строк, но не их происхождение).
(3) Как проверить самому: запустите пример «Растёт стабильно» на этой странице 2.1,2.8,3.5,4.1,4.9,5.6,6.4,7.2,7.9 → текущее значение 7.9 попадает в [5,8) и наклон по последним 3 точкам равен (7.9−6.4)/2 = +0.75 > 0 → должно вернуться «Приближение к пику»; пример «Падает стабильно» 9.2,8.6,7.8,7.1,6.3,5.4,4.6,3.7,2.9 → текущее значение 2.9 попадает в [0,5) и наклон равен (2.9−4.6)/2 = −0.85 < 0 → должно вернуться «Рост замедляется». Пропуск тех же чисел через цепочку if/else в app_v4.2.py 387-472 должен дать слово в слово тот же результат.

Что можно сделать дальше

Атлас стадий

15 стадийных диапазонов диагностики кривой, их условия определения и дословный текст прогноза

Почему эта связь: Эта страница выдаёт trend_verdict, а этот слайс принимает trend_verdict на вход

Пересчёт шкал

Пересчитывает оценки 0~10 и шкалу движка −10~+10 друг в друга

Почему эта связь: Продолжение выбрано вручную (score-map)
Сгенерировано /opt/slices_build/build.py по спецификации /_shared/slices/curve-diagnose.json — чтобы изменить эту страницу, правьте спецификацию и перезапустите генератор; никогда не правьте HTML вручную.