tajm sírízTakéčasové řady, time-series dataPokročilý

Definice

Time series je posloupnost měření nebo událostí uspořádaných podle času, kde pořadí a rozestupy mezi záznamy nesou význam. Používá se pro sledování trendů, sezónnosti, výkyvů a změn v čase, například u metrik aplikace, cen akcií, počasí, prodejů nebo senzorových dat.

Kategorie: Datová analytikaAktualizováno

Proč u časové řady záleží na pořadí

Časová řada není jen seznam hodnot se sloupcem pro datum. Význam vzniká hlavně z návaznosti bodů: hodnota po výpadku serveru znamená něco jiného než stejná hodnota během běžného provozu. Analytika proto sleduje trend, sezónnost, periodicitu, náhlé skoky a zpožděné reakce. U pravidelně vzorkovaných dat lze snadno počítat klouzavý průměr nebo frekvenční složky, zatímco nepravidelné události často vyžadují agregaci do časových oken.

Časové rozlišení je samostatné rozhodnutí. Příliš jemné měření zvětší objem dat a zvýrazní šum. Příliš hrubé měření zakryje krátké incidenty. Podobný kompromis řeší i snímková frekvence: vyšší hustota záznamu zachytí víc detailů, ale stojí paměť, přenos a výpočet.

Čas jako součást schématu

Datový model pro time series obvykle obsahuje časovou značku, jednu nebo více měřených hodnot a dimenze, podle kterých se data filtrují. Dimenzí může být služba, region, zařízení, uživatelův segment nebo burzovní symbol. Databáze pak často indexuje čas společně s dimenzí, protože běžný dotaz zní: ukaž poslední hodinu pro konkrétní službu.

Časové řady mohou žít v běžné relační databázi, ve specializované time-series databázi i v datovém jezeře. Volba závisí na rychlosti zápisu, době uchování, dotazech nad agregacemi a nákladech na archivaci. Důležité je také rozhodnout, zda se stará data mažou, zhušťují do delších intervalů, nebo zůstávají v původní přesnosti kvůli auditům.

Příklad 1: latence API po nasazení

Monitoring ukládá každou minutu P95 latenci veřejného API. Po deployi začne graf růst jen v jednom regionu, takže tým porovná časovou řadu podle dimenze region a rychle najde chybu v konfiguraci. Samotný průměr za celý den by incident skryl, protože problém trval krátce.

CREATE TABLE api_latency (
  measured_at timestamptz NOT NULL,
  service text NOT NULL,
  region text NOT NULL,
  p95_ms numeric NOT NULL
);

CREATE INDEX ON api_latency (service, region, measured_at DESC);

SELECT date_trunc('minute', measured_at) AS minute,
       avg(p95_ms) AS avg_p95_ms
FROM api_latency
WHERE service = 'checkout'
  AND region = 'eu'
  AND measured_at > now() - interval '1 hour'
GROUP BY minute
ORDER BY minute;

Příklad 2: poptávka po zboží v e-shopu

E-shop sleduje denní prodeje zimních bund a vidí pravidelný růst před sezónou. Model nad časovou řadou oddělí dlouhodobý trend od sezónnosti a pomůže odhadnout objednávku na další měsíc. Náhodná sleva konkurence se v datech projeví jako výkyv, který nemusí znamenat trvalou změnu poptávky.

Co časová řada stojí

Časové řady rychle nabývají na objemu, protože nové body přicházejí stále a staré se málokdy přepisují. Provozní otázky proto zahrnují retenci, kompresi, downsampling, deduplikaci opožděných záznamů a práci s časovými pásmy. Analytická otázka je jiná: jak odlišit skutečný signál od šumu, jak zacházet s chybějícími body a jak neporovnávat intervaly, které mají odlišnou délku nebo jiný obchodní kontext.

Příklady z praxe

  1. Latence API po nasazení

    Monitoring ukládá každou minutu P95 latenci veřejného API. Po deployi začne graf růst jen v jednom regionu, takže tým porovná časovou řadu podle dimenze region a najde chybu v konfiguraci. Denní průměr by incident skryl, protože problém trval krátce.

    CREATE TABLE api_latency (
      measured_at timestamptz NOT NULL,
      service text NOT NULL,
      region text NOT NULL,
      p95_ms numeric NOT NULL
    );
    
    CREATE INDEX ON api_latency (service, region, measured_at DESC);
    
    SELECT date_trunc('minute', measured_at) AS minute,
           avg(p95_ms) AS avg_p95_ms
    FROM api_latency
    WHERE service = 'checkout'
      AND region = 'eu'
      AND measured_at > now() - interval '1 hour'
    GROUP BY minute
    ORDER BY minute;
  2. Predikce poptávky v e-shopu

    E-shop sleduje denní prodeje zimních bund a vidí pravidelný růst před sezónou. Model nad časovou řadou oddělí dlouhodobý trend od sezónnosti a pomůže odhadnout objednávku na další měsíc. Jednorázová sleva konkurence se projeví jako výkyv, který nemusí znamenat trvalou změnu poptávky.

Časté omyly

MýtusStačí uložit timestamp a je z toho time series.
Ve skutečnostiČasová značka sama o sobě nestačí. Time series vyžaduje, aby časové pořadí a rozestupy mezi body byly důležité pro dotazování, vizualizaci nebo modelování.
MýtusChybějící body se dají prostě vyplnit nulou.
Ve skutečnostiNula je skutečná hodnota, ne univerzální náhrada za chybějící měření. U prodejů může znamenat žádný prodej, u senzoru může falešně vytvořit pád teploty nebo tlaku.

Časté dotazy

Jak poznám, že moje data mají být time series?
Time series dává smysl, když se hodnota mění v čase a pořadí měření ovlivňuje interpretaci. Typické signály jsou metriky aplikací, ceny, teplota, spotřeba energie, prodeje nebo počty událostí za interval. Pokud stejná tabulka pouze obsahuje datum vytvoření záznamu a analýza se neptá na průběh, trend ani sezónnost, nemusí jít o časovou řadu v praktickém smyslu.
Musí mít time series pravidelný interval měření?
Time series může mít pravidelný i nepravidelný interval měření. Pravidelné vzorkování zjednodušuje grafy, agregace a mnoho statistických metod. Nepravidelná data vznikají například z událostí, obchodů nebo senzorů s výpadky. Analýza pak často převádí záznamy do časových oken, doplňuje chybějící hodnoty nebo pracuje přímo s rozdílnými rozestupy mezi body.
Kdy je pro time series potřeba specializovaná databáze?
Time series obvykle potřebuje specializované řešení ve chvíli, kdy běžná databáze naráží na rychlý zápis, velké objemy historických bodů nebo časté agregace přes časová okna. Relační databáze může stačit pro menší objemy a jednodušší dotazy. Specializovaná databáze dává větší smysl u monitoringu, IoT telemetrie nebo finančních ticků, kde retence, komprese a časové indexování přímo ovlivňují náklady.
Dá se time series použít pro predikci?
Time series může sloužit pro predikci, pokud historický průběh obsahuje opakující se vzory nebo vztah k vysvětlujícím proměnným. Prognóza ale není automaticky spolehlivá jen proto, že data mají časovou osu. Model musí řešit sezónnost, změny režimu, výpadky měření, mimořádné události a ověření na budoucích intervalech, ne na náhodně promíchaných řádcích.

Zdroje

  1. Time series(otevře se v novém okně)Wikipedia
  2. Time Series Collections(otevře se v novém okně)MongoDB
  3. 8.5. Date/Time Types(otevře se v novém okně)PostgreSQL Global Development Group
  4. Time series forecasting(otevře se v novém okně)TensorFlow

Související pojmy

Potřebujete to vyřešit v praxi?

Poradíme, jak na to ve vašem projektu

Vysvětlit pojem je jedna věc, navrhnout kolem něj funkční řešení druhá. Ozvěte se a probereme, co dává smysl u vás.