0 / 0
Go back to the English version of the documentation
Zaman serisi işlevleri
Last updated: 06 Tem 2023
Zaman serisi işlevleri

Zaman dizisi işlevleri, zaman içinde noktalarla ölçülen veri değerleri sıraları üzerinde çalışan toplama işlevleridir.

Aşağıdaki kısımlarda, farklı zaman serisi paketlerinde kullanılabilen bazı zaman serisi işlevleri açıklanmaktadır.

Dönüştürme işlemleri

Dönüşümler, başka bir zaman dizisiyle sonuçlanan bir zaman serisi üzerinde uygulanan işlevlerdir. Zaman dizisi kitaplığı, sağlanan dönüşümler ( from tspy.functions import transformerskullanılarak) yanı sıra kullanıcı tanımlı dönüşümler de içinde olmak üzere çeşitli dönüştürme tiplerini destekler.

Aşağıdaki örnek, sağlanan bazı dönüştürmeleri gösterir:

#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

Bölümleme

Kesimlere ayırma ya da pencere, bir zaman serisinin birden çok kesime bölünmesi işlecisidir. Zaman dizisi kitaplığı çeşitli bölümleme biçimlerini destekler ve kullanıcı tanımlı bölümlerin oluşturulmasına da olanak sağlar.

  • Pencere tabanlı kesimlere ayırma

    Bir zaman dizisine ilişkin bu bölümleme tipi, kullanıcı tarafından belirlenen bölüm büyüklüklerine dayalıdır. Bölümler, kayıt tabanlı ya da zamana dayalı olabilir. Kayan pencere tabanlı kesimler kadar tumbling yaratılmasına izin veren seçenekler vardır.

    >>> 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)]
    
  • Tutturucu tabanlı bölümleme

    Tutturucu tabanlı kesimlere ayırma, belirli bir lamda tutturularak bir kesim oluşturan çok önemli bir bölümleme türüdür ve bu da basit bir değer olabilir. Bir örnek, bir anomaliyi gözlemledikten sonra 500 hatadan önce gelen ya da değerleri inceleyen olaylara bakmaktadır. Tutturucu tabanlı kesimlere ayırma çeşitlemeleri, birden çok işaretçi içeren bir aralık sağlar.

    >>> 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)]
    
  • Segmenter

    segmenters paketini ( from tspy.functions import segmenterskullanarak) içe aktararak, kutudan dışarı çıkan bazı özel segmenter 'lar vardır. Örnek bir segmenter, bir zaman serisini bölümlere ayırtabilmek için regresyon kullanan bir örnektir:

    >>> 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: {}
    

Azaltıcılar

Indirgeme, tek bir değer üretmek üzere bir zaman serisi kümesindeki değerlere uygulanmış bir işlevdir. Zaman serisi reducer işlevleri, Hadoop/Spark tarafından kullanılan indirgeme kavramına benzer. Bu tek değer bir toplama olabilir, ancak genel olarak tek bir nesne olabilir. Bir indirgeme işlevine ilişkin bir örnek, bir zaman dizisindeki değerleri ortalamalıdır.

Aşağıdakiler de içinde olmak üzere çeşitli reducer işlevleri desteklenir:

  • Mesafe azaltıcıları

    Mesafe azaltıcıları, iki zaman serisi arasındaki mesafeyi hesaplayan bir indirgeme sınıfıdır. Kitaplık, sıraların yanı sıra, sayısal uzaklık işlevlerini de destekler. Bunlar arasında, Itakura Parallelogram, Sakoe-Chiba Band, DTW non-constrated ve DTW dışı kontrat gibi mesafe ölçümlerinin yer alması dahildir. Macarca uzaklığı ve Dünya-Movers mesafesi gibi dağıtım mesafeleri de mevcuttur.

    Kategorik zaman serisi uzaklık ölçümleri için, Damerau Levenshtein ve Jaro-Winkler mesafe ölçümlerini kullanabilirsiniz.

    >>> 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
    
  • Matematik azaltıcılar

    Sayısal zaman serileri için çok sayıda kullanışlı matematik indirgenleri sağlanır. Bunlar, ortalama, toplam, standart sapma ve anlar gibi temel olanları içerir. Entropi, kurtosis, FFT ve bunun çeşitlemeleri, çeşitli korelaslar ve histogramı da kapsamakta. Uygun bir temel özetleme indirgeme, zaman dizisiyle ilgili temel bilgiler sağlayan describe işlevidir.

    >>> 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
    
  • Zaman serilerinin ilk sipariş anlayışısını elde etmek için çok yararlı olan bir diğer temel indirgeme ise tarif indirgemesidir. Aşağıda bu indirgeme gösterilmektedir:

    >>> 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
    

Geçici birleştirmeler

Kitaplık, zaman damgalarına göre zamansal birleştirmeler ya da birleştirme zamanı serilerine ilişkin işlevleri içerir. Birleştirme işlevleri, sol, sağ, dış, iç, sol dış, sağ dış birleşimler vb. gibi veritabanlarındaki işlevlere benzerdir. Aşağıdaki örnek kodlar, bu birleştirme işlevlerinin bazılarını göstermektedir:

# 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

Tahmin yürütme

Zaman dizisi kitaplığı tarafından sağlanan önemli bir işlevsellik tahmin edilir. Kitaplık, ARIMA, üstel, Holt-Winters ve BATS de içinde olmak üzere karmaşık tahmin modellerinin yanı sıra basit işlevler için de işlevler içerir. Aşağıdaki örnekte Holt-Winters (Holt-Winters) yaratılacak işlev gösterilmektedir:

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

Zaman serisi SQL

Zaman dizisi kitaplığı Apache Sparkile sıkıca tümleştirilmiştir. By using new data types in Spark Catalyst, you are able to perform time series SQL operations that scale out horizontally using Apache Spark. Bu, IBM Analytics Engine ' ta ya da Watson Studio Spark ortamları gibi IBM Analytics Engine işlevlerini içeren çözümlerde zaman serisi uzantılarını kolayca kullanmanıza olanak sağlar.

SQL uzantıları, segmentasyon, dönüşümler, indiriciler, tahmin ve G/Ç de dahil olmak üzere, zaman dizisi işlevlerinin çeşitli özelliklerini kapsar. Bkz. Zaman serisi verilerinin çözümlenmesi.

Daha fazla bilgi

tspy Python SDK ' yı kullanmak için, tspy Python SDK belgelerine bakın.

Üst konu: Zaman serisi analizi

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