feat(browser): auto-commit con 178 cambios
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,98 @@
|
||||
---
|
||||
id: trend_slope_py_datascience
|
||||
name: trend_slope
|
||||
kind: function
|
||||
lang: py
|
||||
domain: datascience
|
||||
version: "1.0.0"
|
||||
purity: pure
|
||||
signature: "def trend_slope(values: list, x: list = None) -> dict"
|
||||
description: "Detecta la tendencia (sube/baja/plana) de una serie via regresion lineal simple del grupo eda y su significancia estadistica. Devuelve slope, r, r_squared, p_value, direction y significant. Descarta pares con None/NaN. Funcion pura, determinista, no muta el input."
|
||||
tags: [eda, models, trend, regression, timeseries, datascience]
|
||||
uses_functions: []
|
||||
uses_types: []
|
||||
returns: []
|
||||
returns_optional: false
|
||||
error_type: ""
|
||||
imports: ["scipy"]
|
||||
example: |
|
||||
from datascience import trend_slope
|
||||
trend_slope([1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
|
||||
# {"slope": 1.0, "intercept": 1.0, "r": 1.0, "r_squared": 1.0,
|
||||
# "p_value": 0.0, "std_err": 0.0, "direction": "up",
|
||||
# "significant": True, "n": 10}
|
||||
tested: true
|
||||
tests:
|
||||
- "test_increasing_series_slope_positive_up_significant"
|
||||
- "test_decreasing_series_slope_negative_down_significant"
|
||||
- "test_flat_constant_series_not_significant"
|
||||
- "test_random_series_flat_not_significant"
|
||||
- "test_custom_x_axis"
|
||||
- "test_too_few_pairs_returns_none_slope"
|
||||
- "test_drops_none_and_nan_pairs"
|
||||
- "test_too_few_valid_pairs_after_dropping"
|
||||
test_file_path: "python/functions/datascience/trend_slope_test.py"
|
||||
file_path: "python/functions/datascience/trend_slope.py"
|
||||
params:
|
||||
- name: values
|
||||
desc: >
|
||||
Serie de valores numericos (variable dependiente, eje Y). Acepta huecos:
|
||||
los elementos None o NaN se descartan, emparejados con su x correspondiente,
|
||||
antes del ajuste.
|
||||
- name: x
|
||||
desc: >
|
||||
Posiciones de cada valor (variable independiente, eje X). Si es None se
|
||||
usa el indice posicional 0..n-1. Cuando se proporciona debe tener la misma
|
||||
longitud que values; los pares con x None/NaN tambien se descartan.
|
||||
output: >
|
||||
dict con slope (float|None), intercept (float), r (float), r_squared (float),
|
||||
p_value (float), std_err (float), direction ("up"|"down"|"flat"|"unknown"),
|
||||
significant (bool, True si p_value<0.05) y n (int, pares validos usados). Con
|
||||
menos de 3 pares validos devuelve {slope:None, direction:"unknown",
|
||||
significant:False, n:<n>}.
|
||||
---
|
||||
|
||||
## Ejemplo
|
||||
|
||||
```python
|
||||
from datascience import trend_slope
|
||||
|
||||
# Serie creciente: tendencia al alza, significativa.
|
||||
trend_slope([1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
|
||||
# {
|
||||
# "slope": 1.0, "intercept": 1.0, "r": 1.0, "r_squared": 1.0,
|
||||
# "p_value": 0.0, "std_err": 0.0,
|
||||
# "direction": "up", "significant": True, "n": 10,
|
||||
# }
|
||||
|
||||
# Serie plana (constante): no hay tendencia significativa.
|
||||
trend_slope([5.0] * 12)
|
||||
# {... "slope": 0.0, "direction": "flat", "significant": False, "n": 12}
|
||||
|
||||
# Eje x explicito (no equiespaciado) y serie con hueco.
|
||||
trend_slope([1, None, 3, float("nan"), 5], x=[0, 1, 2, 3, 4])
|
||||
# {... "direction": "up", "significant": True, "n": 3}
|
||||
|
||||
# Menos de 3 pares validos -> sin ajuste.
|
||||
trend_slope([1, 2])
|
||||
# {"slope": None, "direction": "unknown", "significant": False, "n": 2}
|
||||
```
|
||||
|
||||
## Cuando usarla
|
||||
|
||||
Cuando tengas una serie (ventas por dia, precio en el tiempo, una metrica del
|
||||
grupo `eda`) y necesites saber rapido si sube, baja o esta plana, y si ese
|
||||
movimiento es estadisticamente real o ruido. Util para semaforos de tendencia
|
||||
en un dashboard, alertas ("esta metrica cae de forma significativa"), o como
|
||||
feature barata antes de un modelo mas caro. Pasa `x` cuando los puntos no estan
|
||||
equiespaciados (fechas con huecos); deja `x=None` para tratar la serie como
|
||||
secuencia ordenada.
|
||||
|
||||
## Gotchas
|
||||
|
||||
Funcion pura sin I/O, pero depende de `scipy.stats.linregress`. La direccion
|
||||
solo es `"up"`/`"down"` cuando ademas hay significancia (`p_value < 0.05`); una
|
||||
pendiente no nula pero ruidosa se reporta como `"flat"`. El umbral 0.05 es fijo
|
||||
(no parametrizable, KISS). Con menos de 3 pares validos tras descartar None/NaN
|
||||
no se ajusta nada y `slope` es `None` — comprobar ese caso antes de usar el
|
||||
valor numerico. Series constantes dan `r_squared` 0 y `direction` `"flat"`.
|
||||
Reference in New Issue
Block a user