суббота, 4 июля 2020 г.

Временные ряды : скользящее среднее

Простое скользящая среднее


Метод скользящих средних можно считать развитием метода прогнозирования по среднему. Только при скользящих средних используются для осреднения не все значения, а к-последних. Как только новое наблюдение становится доступным, оно включается в осреднение, а наиболее старое исключается. Уравнение для скользящего среднего имеет вид 

$$A_{t}=\frac{1}{k}\sum_{t-k+1}^{t}x_{t}$$




Где $x_{t}$ - наблюдения, $A_{t}$ - скользящая средняя во времени t.
Скользящая средняя использует n последовательных периодов времени. Для сезонных временных рядов порядок скользящей средней определяется частотой ряда,  Для недельного ряда порядок равен 7, годового - 12, квартального - 4. При  таком подходе устраняется влияние сезонности и случайной составляющей, что позволяет выделить из временного ряда тенденцию.
Рассмотрим, как можно использовать метод скользящей средней для анализа работы розничного магазина одежды. Для этого возьмем датафрейм с месячными показателями продаж розничного магазина c 01.2016 по 12.2019.

head(df_month)

 data               rev      visit     conv      lch     price    rv
  <date>      <dbl>    <dbl>   <dbl>  <dbl> <dbl> <dbl>
1 2016-01-01 60440.  7462.   0.0718  3.23    35.0    8.10
2 2016-02-01 45041.  6047.   0.0699  3.11    34.3    7.45
3 2016-03-01 48758.  6812.   0.0623  3.10    37.0    7.16
4 2016-04-01 50207.  6497.   0.0786  2.79    35.3    7.73
5 2016-05-01 60750.  6913.   0.0863  3.53    28.8    8.79

6 2016-06-01 51709.  6683.   0.0868  3.58    24.9    7.74

В качестве показателей выводится rev - выручка, visit - посетители, conv-конверсия,lch - длина чека, price - цена продажи, rv - выручка на посетителя, интегрированный показатель, равный произведению конверсии, длины чека и средней цены.  Сделаем из него объект временного ряда и выведем график показателей

ts_month <- ts(data = df_month[,c(2:7)],
               start = c(2016, 1),
               frequency = 12)

plot.ts(ts_month)






Для выделения тенденции применим скользящее среднее порядка 12 и выведем графики

ts_month_ma <- ma(ts_month,12,centre = FALSE)

Чтобы при выводе графиков вывелись названия показателя

ts_month_ma <- ts(data=ts_month_ma,               
                  start = c(2016, 1),

                  frequency = 12,names=c('rev','visit','conv','lch','price','rv'))

plot.ts(ts_month_ma)




Как видно по графикам, скользящее среднее выделяет тенденцию по каждому показателю, необходимую для анализа происходящих процессов. Это как панель управления, сигнализирующая в каком состоянии находится и куда движется показатель контролируемого процесса.
Повторим анализ для дневных данных, возьмем те же параметры, только по дням за один год

head(df_day)

 data              visit      rev     conv     lch    price     rv
  <date>        <dbl> <dbl>  <dbl>  <dbl> <dbl>  <dbl>
1 2018-01-01  97.5    898.    0.0659  3.87    36.1     9.22
2 2018-01-02  460.    4658.  0.0759  3.80    35.1    10.1 
3 2018-01-03  485.    5254.  0.0776  3.93    35.5    10.8 
4 2018-01-04  471.    5070.  0.0758  3.97    35.9    10.8 
5 2018-01-05  442.    5109.  0.0822  3.99    35.3    11.6 
6 2018-01-06  402.    4802.  0.0841  4.10    34.6    12.0 


ts_day <- ts(data = df_day[,c(2:7)],
             start = c(2018, 1),
             frequency = 365)

plot.ts(ts_day)


Для выделения тенденции применим скользящее среднее порядка 7 и выведем графики

ts_day_ma <- ma(ts_day,7,centre = FALSE)

ts_day_ma <- ts(data=ts_day_ma,               
                  start = c(2018, 1),
                  frequency = 365,names=c('rev','visit','conv','lch','price','rv'))


plot.ts(ts_day_ma)











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

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