Декомпозиция временных рядов — это метод, который разбивает временной ряд на несколько компонентов, каждый из которых представляет базовую категорию модели, тренд, сезонность и шум. В этом уроке мы покажем вам, как автоматически разложить временной ряд с помощью 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