воскресенье, 31 мая 2020 г.

Временные ряды : декомпозиция временного ряда

При прогнозировании удобно представить временной ряд как комбинацию трех компонент : тренд, сезонность и случайная компонента. В результате получаем две модели временного ряда :

 аддитивная модель Yt = Tt + St +et. 

 мультипликативная Yt = Tt*St*et.

Функция decompose из пакета stats делает такое разложение. Применим ее для нашего месячного временного ряда, рассмотрим отдельно аддитивную и мультипликативную модель.


ts_month_dec_ad <- decompose(ts_month,type = "additive") 
ts_month_dec_mult <- decompose(ts_month,type = "multiplicative")

Рассмотрим структуру полученных объектов.

str(ts_month_dec_ad)

## List of 6
##  $ x       : Time-Series [1:60] from 2015 to 2020: 14472 7045 10279 9084 10825 ...
##  $ seasonal: Time-Series [1:60] from 2015 to 2020: 3063 -3696 -948 -1618 -897 ...
##  $ trend   : Time-Series [1:60] from 2015 to 2020: NA NA NA NA NA ...
##  $ random  : Time-Series [1:60] from 2015 to 2020: NA NA NA NA NA ...
##  $ figure  : num [1:12] 3063 -3696 -948 -1618 -897 ...
##  $ type    : chr "additive"
##  - attr(*, "class")= chr "decomposed.ts"

str(ts_month_dec_mult)

## List of 6
##  $ x       : Time-Series [1:60] from 2015 to 2020: 14472 7045 10279 9084 10825 ...
##  $ seasonal: Time-Series [1:60] from 2015 to 2020: 1.306 0.628 0.906 0.836 0.91 ...
##  $ trend   : Time-Series [1:60] from 2015 to 2020: NA NA NA NA NA ...
##  $ random  : Time-Series [1:60] from 2015 to 2020: NA NA NA NA NA ...
##  $ figure  : num [1:12] 1.306 0.628 0.906 0.836 0.91 ...
##  $ type    : chr "multiplicative"
##  - attr(*, "class")= chr "decomposed.ts"

Функция decompose возвращает список из шести объектов:

x : временной ряд
seasonal: оценка сезонных коэффициентов (матрица по годам)
trend : это оценка тренда ряда, можно видеть, что первые и последние шесть наблюдений отсутствуют в связи с использованием двухстороннего скользящего среднего, число пропущенных значений определяется порядком скользящего среднего.
random : это оценка нерегулярной компоненты, этот не что иное, как остальная часть серии без двух предыдущих компонентов.
figure : оценка сезонных коэффициентов (вектор)
type : это тип разложения, либо аддитивная (по умолчанию), либо мультипликативная модель.

Сравним заданные при формировании временного ряда сезонные коэффициенты и полученные после декомпозиции мультипликативной модели. Для этого создадим датафрейм из входных (in) и выходных после декомпозиции СК (out) и выведем столбчатый график.

df_sc <- data.frame(ind=as.factor(rep(c('in','out'),c(12,12))),
                    month=as.factor(rep((1:12),2)),
                    sc=c(sc_month,ts_month_dec_mult$figure))


ggplot(df_sc, aes(x = month, y = sc, fill = ind)) +
  geom_col(position = "dodge", colour = "black") +
  scale_fill_brewer(palette = "Pastel1")+
  geom_text(aes(label = round(sc,2)), vjust = 1.0,
  size = 3,colour = "black",position = position_dodge(.9))+
  xlab('Месяц')+ylab('Сезонный коэффициент')


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

Класс полученного при декомпозиции объекта можно также посмотреть с помощью функции class()

class(ts_month_dec_ad)

## [1] "decomposed.ts"

class(ts_month_dec_mult)

## [1] "decomposed.ts"

Класс decomposed.ts легко визуализируется с помощью функции plot

plot(ts_month_dec_ad)

plot(ts_month_dec_mult)

Разложение временных рядов до их компонентов является одним из основных методов анализ временных рядов. Использование этого метода помогает при выборе модели и метода прогнозирования, что , в конечном счете, и является основной задачей работы с временными рядами.






























Комментариев нет:

Отправить комментарий