Obsah

Katz - Framework pre Analýzu Časových Radov

Cieľom Kats je poskytnúť komplexné služby pre analýzu časových radov, od pochopenia kľúčových štatistík a zisťovania anomálií až po predpovedanie trendov, extrakciu/vkladanie prvkov, viacrozmernú analýzu atď.

Analýza časových radov je základnou oblasťou dátovej vedy a strojového učenia s masívnymi aplikáciami v rôznych odvetviach, ako je elektronický obchod, financie, plánovanie kapacít, riadenie dodávateľského reťazca, medicína, počasie, energetika, astronómia a mnohé ďalšie.

Analýza časových radov

Analýza časových radov ako štatistická technika sa používa na skúmanie a modelovanie údajov závislých od času. Medzi spoločné vlastnosti nástrojov analýzy časových radov patria:

  • Rozklad časových radov: schopnosť rozložiť časový rad na jeho zložky, ako sú trend, sezónnosť a rezíduá.
  • Predpovedanie: schopnosť predpovedať budúce hodnoty časového radu na základe minulých údajov
  • Detekcia anomálií: schopnosť identifikovať neobvyklé alebo neočakávané správanie v časovom rade
  • Multivariačná analýza: schopnosť analyzovať viac časových radov súčasne, pričom sa zohľadňujú vzťahy medzi nimi
  • Extrakcia/vkladanie znakov: schopnosť extrahovať zmysluplné znaky z údajov časových radov alebo reprezentovať údaje časových radov v menej rozmernom priestore na účely ďalšej analýzy.

Toto je len niekoľko príkladov typov funkcií, ktoré môže obsahovať nástroj na analýzu časových radov. Pozrime sa, čo nám môže poskytnúť Kats.

Všetko v jednom

Kats je ľahký, ľahko použiteľný a zovšeobecniteľný rámec na všeobecnú analýzu časových radov vrátane prognózovania, zisťovania anomálií, viacrozmernej analýzy a extrakcie/vkladania prvkov.

Kats je prvá komplexná knižnica jazyka Python na všeobecnú analýzu časových radov, ktorá poskytuje klasické aj pokročilé techniky na modelovanie údajov časových radov.

Kats spája rôzne oblasti analýzy časových radov, v ktorých môžu používatelia skúmať základné charakteristiky svojich údajov časových radov, predpovedať budúce hodnoty, sledovať anomálie a začleňovať ich do svojich ML modelov a pipeline.

Čo Kats robí

Kats poskytuje súbor algoritmov a modelov pre štyri oblasti v analýze časových radov: predpovedanie, detekciu, extrakciu a vkladanie príznakov a viacrozmernú analýzu.

  • Predpovedanie: Kats poskytuje kompletnú sadu nástrojov na prognózovanie, ktorá zahŕňa viac ako 10 individuálnych prognostických modelov, ensembling, model samoučenia (meta-learning), spätné testovanie, ladenie hyperparametrov a empirické intervaly predpovedí.

  • Detekcia: Kats podporuje funkcie na zisťovanie rôznych vzorov na údajoch časových radov vrátane sezónnosti, odľahlých hodnôt, bodu zmeny a pomalých trendových zmien.

  • Extrakcia a vkladanie znakov: Modul extrakcie funkcií časových radov (TSFeature) v systéme Kats dokáže vytvoriť 65 funkcií s jasnými štatistickými definíciami, ktoré možno začleniť do väčšiny modelov strojového učenia (ML), ako je klasifikácia a regresia.

  • Užitočné nástroje: Kats poskytuje aj súbor užitočných utilít, ako sú simulátory časových radov.

Inštalácia v jazyku Python

Kats je na PyPI, takže na jeho inštaláciu môžete použiť pip.

1
2
pip install --upgrade pip
pip install kats

Príklad prognózovania

Použitie modelu Prophet na predpovedanie súboru údajov air_passengers.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
from kats.consts import TimeSeriesData
from kats.models.prophet import ProphetModel, ProphetParams

# ako príklad si zoberme údaje `air_passengers`
air_passengers_df = pd.read_csv("../kats/data/air_passengers.csv")

# konvertovať na objekt TimeSeriesData
air_passengers_ts = TimeSeriesData(air_passengers_df)

# vytvoriť inštanciu modelu param
# note that additive mode gives worse results
params = ProphetParams(seasonality_mode='multiplicative')

# vytvoriť inštanciu modelu proroka
m = ProphetModel(air_passengers_ts, params)

# fit model jednoducho volaním m.fit()
m.fit()

# predpoveď na nasledujúcich 30 mesiacov
fcst = m.predict(steps=30, freq="MS")

Príklady detekcie

Pomocou Kats možno získať nasledujúce závery:

  • Outlier Detection: Zisťuje nárast alebo pokles anomálie v časovom rade.
  • Detekcia bodu zmeny: Zisťuje náhle zmeny v časovom rade. V Kats sú na tento proces 3 rôzne algoritmy:
    • Detekcia CUSUM
    • Bayesovská online detekcia bodu zmeny (BOCPD)
    • Detekcia Stat Sig
  • Detekcia zmeny trendu: Zisťuje zmeny trendu časového radu pomocou algoritmu Mann-Kendall Detection.

Detekcia odľahlých hodnôt

Na detekciu odchýlok sa vyžaduje minimálne 24 riadkov údajov.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
from kats.detectors.outlier import OutlierDetector

fake_df = df[df["Product"] == "Product E"].drop(["VisitsCount", "Product"], axis=1)
fake_df = fake_df.append(pd.DataFrame({"time":["2021-12-31"], "SalesCount":[round(fake_df["SalesCount"][-3:].mean())]})).reset_index(drop=True)
fake_df["time"] = pd.to_datetime(fake_df["time"])

outlier_ts = TimeSeriesData(fake_df)
ts_outlierDetection = OutlierDetector(outlier_ts, 'multiplicative')
ts_outlierDetection.detector()

ts_outlierDetection.outliers[0]

Odchýlky zistené pomocou Kats možno tiež vyčistiť pomocou Kats. Kats na to ponúka 2 metódy:

  • Bez interpolácie: Vyplní odľahlé hodnoty hodnotou NaN bez použitia operácie interpolácie.
  • S interpoláciou: Vyplní odľahlé hodnoty použitím lineárnej interpolácie.

Detekcia bodu zmeny

Pomocou Kats je možné zistiť body zmeny v časovom rade. Na tento proces existujú v Kats 3 rôzne algoritmy:

  • CUSUMDetector
  • BOCPDetector
  • RobustStatDetector

Použitie algoritmu detekcie CUSUM na simulovanom súbore údajov.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
from kats.consts import TimeSeriesData
from kats.detectors.cusum_detection import CUSUMDetector

# simulate time series with increase
np.random.seed(10)
df_increase = pd.DataFrame(
    {
        'time': pd.date_range('2019-01-01', '2019-03-01'),
        'increase':np.concatenate([np.random.normal(1,0.2,30), np.random.normal(2,0.2,30)]),
    }
)

# convert to TimeSeriesData object
timeseries = TimeSeriesData(df_increase)

# run detector and find change points
change_points = CUSUMDetector(timeseries).detector()

Detekcia zmeny trendu

Pomocou Kats je možné zistiť aj smer trendu série. Kats na tento proces používa algoritmus MKDetector. Základom tohto algoritmu je Mann-Kendallov test, ktorý je neparametrickým testom.

1
2
3
4
5
from kats.detectors.trend_mk import MKDetector

detector = MKDetector(data=cpd_ts, threshold=.8)
detected_time_points = detector.detector(direction='up', window_size=10)
detector.plot(detected_time_points)

Užitočné odkazy

Záver

Kats je nástroj na analýzu časových radov, ktorý využíva metódu metalearningu na identifikáciu najvhodnejšieho modelu a príslušných parametrov pre daný časový rad. Robí to pomocou metadát získaných pomocou TSFeatures a použitím algoritmu Random Forest na určenie najlepšieho modelu na základe týchto metadát. Táto funkcia Kats umožňuje používateľom vytvoriť si vlastný nástroj automatického strojového učenia (autoML).