feat(browser): auto-commit con 178 cambios

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-06-20 18:22:23 +02:00
parent 7d100e7f3e
commit 763e06c127
178 changed files with 19917 additions and 317 deletions
@@ -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"`.