0 / 0
Go back to the English version of the documentation
Funkce časové řady
Last updated: 06. 7. 2023
Funkce časové řady

Funkce časové řady jsou agregační funkce, které pracují na posloupnostech datových hodnot měřených v bodech v čase.

Následující části popisují některé funkce časové řady dostupné v různých balících časových řad.

Transformace

Transformace jsou funkce, které jsou aplikovány na časovou řadu, která vede k jiné časové řadě. Knihovna časové řady podporuje různé typy transformů, včetně poskytovaných transformací (pomocí produktu from tspy.functions import transformers) a uživatelem definovaných transformací.

Následující ukázka zobrazuje některé poskytnuté transformace:

#Interpolation
>>> ts = tspy.time_series([1.0, 2.0, 3.0, 4.0, 5.0, 6.0])
>>> periodicity = 2
>>> interp = interpolators.nearest(0.0)
>>> interp_ts = ts.resample(periodicity, interp)
>>> interp_ts.print()
TimeStamp: 0     Value: 1.0
TimeStamp: 2     Value: 3.0
TimeStamp: 4     Value: 5.0

#Fillna
>>> shift_ts = ts.shift(2)
    print("shifted ts to add nulls")
    print(shift_ts)
    print("\nfilled ts to make nulls 0s")
    null_filled_ts = shift_ts.fillna(interpolators.fill(0.0))
    print(null_filled_ts)

shifted ts to add nulls
TimeStamp: 0     Value: null
TimeStamp: 1     Value: null
TimeStamp: 2     Value: 1.0
TimeStamp: 3     Value: 2.0
TimeStamp: 4     Value: 3.0
TimeStamp: 5     Value: 4.0

filled ts to make nulls 0s
TimeStamp: 0     Value: 0.0
TimeStamp: 1     Value: 0.0
TimeStamp: 2     Value: 1.0
TimeStamp: 3     Value: 2.0
TimeStamp: 4     Value: 3.0
TimeStamp: 5     Value: 4.0

# Additive White Gaussian Noise (AWGN)
>>> noise_ts = ts.transform(transformers.awgn(mean=0.0,sd=.03))
>>> print(noise_ts)
TimeStamp: 0     Value: 0.9962378841388397
TimeStamp: 1     Value: 1.9681980879378596
TimeStamp: 2     Value: 3.0289374962174405
TimeStamp: 3     Value: 3.990728648807705
TimeStamp: 4     Value: 4.935338359740761

TimeStamp: 5     Value: 6.03395072999318

segmentace

Segmentace nebo stříhání je proces rozdělení časové řady na více segmentů. Knihovna časových řad podporuje různé formy segmentace a umožňuje také vytváření uživatelsky definovaných segmentů.

  • Segmentace dle okna

    Tento typ segmentace časové řady je založen na velikosti segmentů zadaných uživatelem. Segmenty mohou být založeny na záznamu nebo na čase. Existují možnosti, které umožňují vytvořit tumování a také klouzavé segmenty založené na oknech.

    >>> import tspy
    >>> ts_orig = tspy.builder()
      .add(tspy.observation(1,1.0))
      .add(tspy.observation(2,2.0))
      .add(tspy.observation(6,6.0))
      .result().to_time_series()
    >>> ts_orig
    timestamp: 1     Value: 1.0
    timestamp: 2     Value: 2.0
    timestamp: 6     Value: 6.0
    
    >>> ts = ts_orig.segment_by_time(3,1)
    >>> ts
    timestamp: 1     Value: original bounds: (1,3) actual bounds: (1,2) observations: [(1,1.0),(2,2.0)]
    timestamp: 2     Value: original bounds: (2,4) actual bounds: (2,2) observations: [(2,2.0)]
    timestamp: 3     Value: this segment is empty
    timestamp: 4     Value: original bounds: (4,6) actual bounds: (6,6) observations: [(6,6.0)]
    
  • Segmentace podle kotvy

    Segmentace na bázi kotvy je velmi důležitým typem segmentace, která vytváří segment pomocí ukotvení na konkrétní lambda, což může být jednoduchá hodnota. Příklad hledá události, které před pozorováním anomálie předcházely po uplynutí 500 chyb nebo zkontrolovali hodnoty. Varianty segmentace na základě kotvy zahrnují zadání rozsahu s více značkovači.

    >>> import tspy
    >>> ts_orig = tspy.time_series([1.0, 2.0, 3.0, 4.0, 5.0])
    >>> ts_orig
    timestamp: 0     Value: 1.0
    timestamp: 1     Value: 2.0
    timestamp: 2     Value: 3.0
    timestamp: 3     Value: 4.0
    timestamp: 4     Value: 5.0
    
    >>> ts = ts_orig.segment_by_anchor(lambda x: x % 2 == 0, 1, 2)
    >>> ts
    timestamp: 1     Value: original bounds: (0,3) actual bounds: (0,3) observations: [(0,1.0),(1,2.0),(2,3.0),(3,4.0)]
    timestamp: 3     Value: original bounds: (2,5) actual bounds: (2,4) observations: [(2,3.0),(3,4.0),(4,5.0)]
    
  • Segmentry

    Existuje několik specializovaných segmentů, které jsou poskytnuty z krabičky importováním balíku produktu segmenters (pomocí produktu from tspy.functions import segmenters). Příklad segmentovače, který používá regresi k segmentování časové řady:

    >>> ts = tspy.time_series([1.0,2.0,3.0,4.0,5.0,2.0,1.0,-1.0,50.0,53.0,56.0])
    >>> max_error = .5
    >>> skip = 1
    >>> reg_sts = ts.to_segments(segmenters.regression(max_error,skip,use_relative=True))
    >>> reg_sts
    
    timestamp: 0     Value:   range: (0, 4)   outliers: {}
    timestamp: 5     Value:   range: (5, 7)   outliers: {}
    timestamp: 8     Value:   range: (8, 10)   outliers: {}
    

Omezovače

Reduktor je funkce, která se aplikuje na hodnoty v rámci sady časových řad a vytvoří tak jedinou hodnotu. Funkce časové řady reducer se podobají koncepci redukčního zařízení používaného produktem Hadoop/Spark. Tato jediná hodnota může být kolekce, ale obecněji se jedná o jednotlivý objekt. Příklad funkce reducer je zprůměrování hodnot v časové řadě.

Je podporováno několik funkcí produktu reducer , včetně následujících:

  • Reduktory vzdálenosti

    Reduktory vzdálenosti jsou třídou redukčních ventilátorů, které počítají vzdálenost mezi dvěma časovými řadami. Knihovna podporuje číselné, stejně jako kategoriální funkce vzdálenosti v posloupnostech. Mezi tato období patří měření vzdálenosti do vzdálenosti od měření rychlosti Itakura Paralelogram, Sakae-Cabiba Band, DTW non-svázané a DTW bez časového omezení. K dispozici jsou také distribuční vzdálenosti, jako jsou například maďarská vzdálenost a vzdálenost mezi zeměmi/Movadery.

    Pro měření vzdálenosti řady kategorií časových řad můžete použít opatření Dameerau Levenshtein a Jaro-Winkler vzdálenost.

    >>> from tspy.functions import *
    >>> ts = tspy.time_series([1.0, 2.0, 3.0, 4.0, 5.0, 6.0])
    >>> ts2 = ts.transform(transformers.awgn(sd=.3))
    >>> dtw_distance = ts.reduce(ts2,reducers.dtw(lambda obs1, obs2: abs(obs1.value - obs2.value)))
    >>> print(dtw_distance)
    1.8557981638880405
    
  • Matematické reduktory

    K dispozici je několik pohodlných redukčních výpočtů pro numerické časové řady. Ty zahrnují základní ty, jako jsou průměr, součet, směrodatná odchylka a momenty. Zahrnuty jsou i Entropy, kurtóza, FFT a varianty s ní, různé korelace a histogram. Praktické základní redukční redukce je funkce describe , která poskytuje základní informace o časové řadě.

    >>> from tspy.functions import *
    >>> ts = tspy.time_series([1.0, 2.0, 3.0, 4.0, 5.0, 6.0])
    >>> ts2 = ts.transform(transformers.awgn(sd=.3))
    >>> corr = ts.reduce(ts2, reducers.correlation())
    >>> print(corr)
    0.9938941942380525
    
    >>> adf = ts.reduce(reducers.adf())
    >>> print(adf)
    pValue: -3.45
    satisfies test: false
    
    >>> ts2 = ts.transform(transformers.awgn(sd=.3))
    >>> granger = ts.reduce(ts2, reducers.granger(1))
    >>> print(granger) #f_stat, p_value, R2
    -1.7123613937876463,-3.874412217575385,1.0
    
  • Dalším základním reduktorem, který je velmi užitečný pro získání prvního pořadí pochopení časové řady je popsat reducer. Tento reduktor znázorňuje následující ilustraci:

    >>> desc = ts.describe()
    >>> print(desc)
    min inter-arrival-time: 1
    max inter-arrival-time: 1
    mean inter-arrival-time: 1.0
    top: null
    unique: 6
    frequency: 1
    first: TimeStamp: 0     Value: 1.0
    last: TimeStamp: 5     Value: 6.0
    count: 6
    mean:3.5
    std:1.707825127659933
    min:1.0
    max:6.0
    25%:1.75
    50%:3.5
    75%:5.25
    

časová spojení

Knihovna obsahuje funkce pro časová spojení nebo spojení časových řad na základě časových razítek. Funkce sloučení jsou podobné funkcím v databázi, včetně levého, pravého, vnějšího, vnitřního, levého vnějšího, pravého vnějšího spojení a tak dále. Některé z těchto funkcí spojení se zobrazují v následujících ukázkových kódech:

# Create a collection of observations (materialized TimeSeries)
observations_left = tspy.observations(tspy.observation(1, 0.0), tspy.observation(3, 1.0), tspy.observation(8, 3.0), tspy.observation(9, 2.5))
observations_right = tspy.observations(tspy.observation(2, 2.0), tspy.observation(3, 1.5), tspy.observation(7, 4.0), tspy.observation(9, 5.5), tspy.observation(10, 4.5))

# Build TimeSeries from Observations
ts_left = observations_left.to_time_series()
ts_right = observations_right.to_time_series()

# Perform full join
ts_full = ts_left.full_join(ts_right)
print(ts_full)

TimeStamp: 1     Value: [0.0, null]
TimeStamp: 2     Value: [null, 2.0]
TimeStamp: 3     Value: [1.0, 1.5]
TimeStamp: 7     Value: [null, 4.0]
TimeStamp: 8     Value: [3.0, null]
TimeStamp: 9     Value: [2.5, 5.5]
TimeStamp: 10     Value: [null, 4.5]

# Perform left align with interpolation
ts_left_aligned, ts_right_aligned = ts_left.left_align(ts_right, interpolators.nearest(0.0))

print("left ts result")
print(ts_left_aligned)
print("right ts result")
print(ts_right_aligned)

left ts result
TimeStamp: 1     Value: 0.0
TimeStamp: 3     Value: 1.0
TimeStamp: 8     Value: 3.0
TimeStamp: 9     Value: 2.5
right ts result
TimeStamp: 1     Value: 0.0
TimeStamp: 3     Value: 1.5
TimeStamp: 8     Value: 4.0
TimeStamp: 9     Value: 5.5

Prognózování

Klíčovou funkčností, kterou poskytuje knihovna časových řad, je prognóza. Knihovna obsahuje funkce pro jednoduché i složité prognostické modely včetně ARIMA, Exponenciální, Holt-Winters a BATS. Následující příklad ukazuje funkci pro vytvoření Holt-Winters:

import random

model = tspy.forecasters.hws(samples_per_season=samples_per_season, initial_training_seasons=initial_training_seasons)

for i in range(100):
    timestamp = i
    value = random.randint(1,10) * 1.0
    model.update_model(timestamp, value)

print(model)

Forecasting Model
  Algorithm: HWSAdditive=5 (aLevel=0.001, bSlope=0.001, gSeas=0.001) level=6.087789839896166, slope=0.018901997884893912, seasonal(amp,per,avg)=(1.411203455586738,5, 0,-0.0037471500727535465)

#Is model init-ed
if model.is_initialized():
    print(model.forecast_at(120))

6.334135728495107

ts = tspy.time_series([float(i) for i in range(10)])

print(ts)

TimeStamp: 0     Value: 0.0
TimeStamp: 1     Value: 1.0
TimeStamp: 2     Value: 2.0
TimeStamp: 3     Value: 3.0
TimeStamp: 4     Value: 4.0
TimeStamp: 5     Value: 5.0
TimeStamp: 6     Value: 6.0
TimeStamp: 7     Value: 7.0
TimeStamp: 8     Value: 8.0
TimeStamp: 9     Value: 9.0

num_predictions = 5
model = tspy.forecasters.auto(8)
confidence = .99

predictions = ts.forecast(num_predictions, model, confidence=confidence)

print(predictions.to_time_series())

TimeStamp: 10     Value: {value=10.0, lower_bound=10.0, upper_bound=10.0, error=0.0}
TimeStamp: 11     Value: {value=10.997862810553725, lower_bound=9.934621260488143, upper_bound=12.061104360619307, error=0.41277640121597475}
TimeStamp: 12     Value: {value=11.996821082897318, lower_bound=10.704895525154571, upper_bound=13.288746640640065, error=0.5015571318964149}
TimeStamp: 13     Value: {value=12.995779355240911, lower_bound=11.50957896664928, upper_bound=14.481979743832543, error=0.5769793776877866}
TimeStamp: 14     Value: {value=13.994737627584504, lower_bound=12.33653268707341, upper_bound=15.652942568095598, error=0.6437557559526337}

print(predictions.to_time_series().to_df())

timestamp      value  lower_bound  upper_bound     error
0         10  10.000000    10.000000    10.000000  0.000000
1         11  10.997863     9.934621    12.061104  0.412776
2         12  11.996821    10.704896    13.288747  0.501557
3         13  12.995779    11.509579    14.481980  0.576979
4         14  13.994738    12.336533    15.652943  0.643756

Kód SQL časové řady

Knihovna časových řad je úzce integrovaná s produktem Apache Spark. Pomocí nových datových typů v produktu Spark Catalyst můžete provádět operace SQL časové řady, které se vodorovně rozliší pomocí Apache Spark. To vám umožní snadno používat rozšíření časových řad v produktu IBM Analytics Engine nebo v řešeních, která zahrnují funkčnost IBM Analytics Engine , jako jsou prostředí produktu Watson Studio Spark.

Rozšíření SQL pokrývají většinu aspektů funkcí časové řady, včetně segmentace, transformací, redukčních prostředků, prognóz a I/O. Viz Analýza dat časové řady.

Další informace

Chcete-li použít produkt tspy Python SDK, přečtěte si dokumentaci sady tspy Python SDK.

Nadřízené téma: Analýza časové řady

Generative AI search and answer
These answers are generated by a large language model in watsonx.ai based on content from the product documentation. Learn more