Skip to content

CUSUM Statistic

Intuição

A estatística CUSUM acumula desvios do retorno em relação à média, padronizados pelo desvio-padrão, para sinalizar possíveis mudanças estruturais.

Definição

Para retornos (log) r_t, e estimativas rolling backward-only em janela n:

  • z_t = (r_t - μ_t) / σ_t
  • CUSUM_t = sum(z_{t-n+1..t})

Uso

from quantmaster.features.regime import cusum_statistic

df["cusum_60"] = cusum_statistic(df, window=60)

API

Source code in src/quantmaster/features/regime.py
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
def cusum_statistic(
    data: pd.DataFrame | pd.Series,
    *,
    window: int = 60,
    price_col: str = "close",
) -> pd.Series:
    window = validate_positive_int(window, name="window")

    price = get_price_series(data, price_col=price_col).astype(float)
    price = price.where(price > 0)
    rets = np.log(price).diff()

    mu = rets.rolling(window).mean()
    sigma = rets.rolling(window).std(ddof=1)

    z = (rets - mu) / sigma.where(sigma > 0)
    out = z.rolling(window).sum()
    out.name = f"cusum_statistic_{window}"
    return out