Diagnóstico de curva

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

Esta página responde:¿En qué etapa están estos datos ahora y qué viene después?

Cómo leer este veredicto: el motor observa el impulso, no el nivel.
Una puntuación de 6 significa dos cosas completamente distintas según si acaba de subir desde 2 o ha vuelto a caer desde 9 — el motor toma los últimos 3 puntos y calcula la pendiente reciente (valor actual − el tercer valor desde el final) ÷ 2, y luego le resta la pendiente de toda la serie para obtener la aceleración. «Margen restante» = 10 − valor actual: indica a qué distancia está el valor de la cima de la escala ±10, no cuántos puntos temporales quedan. La etapa se decide con solo dos cantidades: en qué banda cae el valor actual (las cinco líneas en −8 / −4 / 0 / 5 / 8) y si la pendiente reciente dentro de esa banda es positiva o negativa, y lo bastante pronunciada.

Qué porta esta página y qué no (dicho con claridad)
· Portado: analyze_single_trend (detección de etapa de una sola serie) — las 15 bandas de etapa, las cinco líneas divisorias −8/−4/0/5/8, las subbandas 0.5 / 1 / −0.5 / −1 dentro de cada banda, las fórmulas de remaining_space y score, y la convención de tomar los últimos 3 puntos para la pendiente.
· No portado (no se necesita en esta página, no por desalineación): compute_main_line (necesita 7 sublíneas ponderadas), cross_validate (necesita correlación por pares y adelanto/retraso) y la conclusión global de predict_trend — todas ellas necesitan «7 cadenas × muchos puntos» como entrada, mientras que esta página tiene una sola serie.
· Diferencia de convención: en la versión de Python una sublínea proviene de una de las 7 columnas de la base de datos, y la asignación de escala v*2−10 se copia literalmente aquí; el status_label/status_color de la base de datos (ruptura fuerte / a la deriva en un nivel bajo …) no tiene fuente de datos en esta página, así que no se muestra — siempre fue una convención distinta de la etapa del motor.
· Punto flotante: el round() de Python redondea al par más cercano, y pyRound() lo replica aquí; véase el informe de comparación en el directorio de compilación.

Defectos conocidos (medidos, dicho con claridad)
· La banda «Desplome» nunca puede activarse dentro del rango 0–10. Su condición equivale a «el tercer punto desde el final > valor actual + 2», y tras la asignación el techo es 10, así que es inalcanzable. Un barrido exhaustivo de 0–10 en pasos de 0.1 sobre cada terna (1,030,301 combinaciones) produjo 0 aciertos; la pendiente negativa más pronunciada dentro del rango solo llega a «Caída desde el pico».
· Solo una entrada fuera de rango (valores brutos > 10 — importes, recuentos, cualquier cosa en una escala mucho mayor) puede producir un «Desplome».
· Por tanto: si pegas importes o recuentos, normalízalos a 0–10 antes de diagnosticar, de lo contrario el comportamiento cambia y el motor no te avisará. Por ahora, lee esa banda como una alarma de fuera de rango.

[Sección de evidencia · dónde se puede comprobar cada número]
(1) Fuente: la máquina de portado de algoritmos /opt/curve_engine/app_v4.2.py, líneas 387-472, analyze_single_trend() (solo lectura; sin cambios en esta ronda); la asignación de escala v*2-10 está en la línea 205. Los números de línea de los umbrales están registrados en la tarjeta de contrato /opt/contracts/curve_engine.md bajo «umbrales/pesos codificados de forma fija»: las cinco líneas divisorias −8/−4/0/5/8 = 398/402/411/420/433; las pendientes dentro de banda 0.5/1/−0.5/−1 = 412/421/438/447; remaining = 10 - current = 460; score=(current+10)/20*100 = 471; la pendiente de los últimos 3 puntos = 394-395.
(2) Tres categorías
· [Verificable] Las 15 bandas de etapa, las cinco líneas divisorias, las subbandas de pendiente dentro de banda, las fórmulas de remaining_space y score, y la convención de la pendiente de los últimos 3 puntos — cada una corresponde literalmente a esos números de línea en app_v4.2.py.
· [Convención de visualización de esta página] El gráfico de líneas SVG (escala ±10, markLine, marcadores de punto) lo dibuja esta página y no es salida del código fuente; el motor solo emite campos numéricos.
· [Sin fuente encontrada] Por qué las cinco líneas están en −8 / −4 / 0 / 5 / 8 no tiene nota de procedencia en el código fuente del motor ni en la tarjeta de contrato (la tarjeta registra los números de línea, pero no su origen).
(3) Cómo verificarlo tú mismo: ejecuta el ejemplo «Subida constante» de la página 2.1,2.8,3.5,4.1,4.9,5.6,6.4,7.2,7.9 → el valor actual 7.9 cae en [5,8) y la pendiente de los últimos 3 puntos es (7.9−6.4)/2 = +0.75 > 0 → debería devolver «Cerca del pico»; el ejemplo «Bajada constante» 9.2,8.6,7.8,7.1,6.3,5.4,4.6,3.7,2.9 → el valor actual 2.9 cae en [0,5) y la pendiente es (2.9−4.6)/2 = −0.85 < 0 → debería devolver «Crecimiento desacelerando». Introducir los mismos números en la cadena if/else de app_v4.2.py 387-472 debería dar palabra por palabra el mismo resultado.

Qué puedes hacer a continuación

Atlas de etapas

Las 15 bandas de etapa del diagnóstico de curva, con sus condiciones de decisión y el texto literal de su perspectiva

Por qué este enlace: Esta página produce trend_verdict, y este slice toma trend_verdict como entrada

Conversión de escalas

Convierte entre sí las puntuaciones de 0~10 y la escala −10~+10 del motor

Por qué este enlace: Continuación elegida a mano (score-map)
Generado por /opt/slices_build/build.py a partir de la especificación /_shared/slices/curve-diagnose.json — para cambiar esta página, edita la especificación y vuelve a ejecutar el generador; nunca edites el HTML a mano.