Sunday, March 20, 2022

Time series decomposition in Python

Декомпозиция временных рядов — это метод, который разбивает временной ряд на несколько компонентов, каждый из которых представляет базовую категорию модели, тренд, сезонность и шум. В этом уроке мы покажем вам, как автоматически разложить временной ряд с помощью Python.Для начала давайте немного поговорим о компонентах временного ряда:

Сезонность: описывает периодический сигнал в вашем временном ряду.

Тенденция: описывает, является ли временной ряд убывающим, постоянным или увеличивающимся с течением времени.

Шум: описывает то, что остается за выделением сезонности и тренда из временного ряда. Другими словами, это изменчивость данных, которую модель не может объяснить.

Для этого примера мы будем использовать 

Air Passengers Data from Kaggle.

(.env) [boris@fedora34server VERIFY]$ cat seasonDecomposition0.py

import pandas as pd

import numpy as np

import matplotlib.pyplot as plt

from statsmodels.tsa.seasonal import seasonal_decompose

df=pd.read_csv('AirPassengers.csv')

df.head()

print(df.head())

df.set_index('Month',inplace=True)

df.index=pd.to_datetime(df.index)

# drop null values

df.dropna(inplace=True)

df.plot()

plt.show()






























В Season_decompose мы должны установить модель. Мы можем установить модель как аддитивную или мультипликативную. Эмпирическое правило для выбора правильной модели заключается в том, чтобы увидеть на нашем графике, являются ли тренд и сезонные изменения относительно постоянными во времени, другими словами, линейными. Если да, то мы выберем аддитивную модель. В противном случае, если тенденция и сезонные колебания увеличиваются или уменьшаются со временем, мы используем мультипликативную модель.
Обратите внимание: наш индекс здесь имеет месячную периодичность. Если x не имеет частоты, нам нужно установить период. Мы можем получить каждый компонент следующим образом:

(.env) [boris@fedora34server VERIFY]$ cat seasonDecomposition1.py

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from statsmodels.tsa.seasonal import seasonal_decompose

df=pd.read_csv('AirPassengers.csv')
df.head()
print(df.head())
df.set_index('Month',inplace=True)
df.index=pd.to_datetime(df.index)
# drop null values
df.dropna(inplace=True)

result=seasonal_decompose(df['Passengers'],  model='multiplicable')
result.seasonal.plot()
plt.show()






























Теперь получаем плот Тренда 

(.env) [boris@fedora34server VERIFY]$ cat seasonDecomposition2.py
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

from statsmodels.tsa.seasonal import seasonal_decompose

df=pd.read_csv('AirPassengers.csv')
df.head()
print(df.head())
df.set_index('Month',inplace=True)
df.index=pd.to_datetime(df.index)
# drop null values
df.dropna(inplace=True)

result=seasonal_decompose(df['Passengers'],  model='multiplicable')
result.seasonal.plot()
plt.show(block=False)

result.trend.plot()
plt.show()





























Кроме того, мы можем построить каждый компонент сразу

(.env) [boris@fedora34server VERIFY]$ cat seasonDecomposition3.py
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from statsmodels.tsa.seasonal import seasonal_decompose

df=pd.read_csv('AirPassengers.csv')
df.head()
print(df.head())
df.set_index('Month',inplace=True)
df.index=pd.to_datetime(df.index)
# drop null values
df.dropna(inplace=True)

result=seasonal_decompose(df['Passengers'],  model='multiplicable')
result.seasonal.plot()
plt.show(block=False)

result.trend.plot()
plt.show(block=False)

result.plot()
plt.show()





















References















No comments:

Post a Comment