曲线诊断 Curve Diagnosis

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

这页回答:这段数据现在处在哪个阶段、接下来会怎样?

怎么看这个判断:引擎看的是「动量」,不是「水平」。
同样是 6 分,刚从 2 分爬上来的和从 9 分掉下来的,结论完全不同 —— 引擎取最后 3 个点算近期斜率 (当前值 − 倒数第 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(强势爆发/低位徘徊…)本页没有数据来源,不显示 —— 它和引擎的 stage 本来就是两套口径。
· 浮点数:Python round() 是五取偶,已用 pyRound() 对齐;参见构建目录里的对比报告。

已知缺陷(实测,照实标)
· 「暴跌」这一档在 0~10 值域内永远不会触发。触发条件等价于「倒数第 3 点 > 当前值 + 2」,而映射后上限就是 10,做不到。穷举 0~10 步长 0.1 的三连点(1,030,301 组)实测 0 次命中,值域内最陡的负斜率只会落在「顶峰回落」。
· 只有越界输入(原始值 > 10,例如金额、计数这类量级远大于 10 的数据)才可能打出「暴跌」。
· 所以:如果你贴的是金额/计数,请先归一化到 0~10 再诊断,否则行为会变样而且引擎不报错。这一档目前当「越界告警」看。

【依据区 · 每个数字上哪儿查】
① 来源:算法移植国内机 /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。
② 分三类
· 【可核验的】15 个阶段档、五条分档线、档内斜率再分档、remaining_space 与 score 公式、后 3 点斜率口径 —— 逐字落在 app_v4.2.py 上述行号。
· 【本页展示口径】页面那条 SVG 折线图(±10 刻度、markLine、标点)是页面自己画的,不是源码输出;引擎只输出数值字段。
· 【未找到依据的】−8 / −4 / 0 / 5 / 8 这五条线「为什么取这几个数」在引擎源码与契约卡里都没有出处注释(契约卡只登记行号,未登记来源)。
③ 怎么自己复核:拿页面示例「持续上升」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 → 应得「增长放缓」。同一组数代进 app_v4.2.py 387-472 的 if/else,结论应逐字一致。

下一步可以做什么

阶段对照表 Stage Atlas

曲线诊断的 15 个阶段档,各自的判定条件和展望原文

为什么连到这里:本页产出 trend_verdict,它正好吃 trend_verdict

刻度换算 Scale Mapper

把 0~10 分和引擎的 −10~+10 刻度互相换算

为什么连到这里:手工指定的下游(score-map)
由 /opt/slices_build/build.py 从规格 /_shared/slices/curve-diagnose.json 生成 —— 要改这页,改规格再跑生成器,别手改 HTML。