Форум врачей-аспирантов

Здравствуйте, гость ( Вход | Регистрация )

> Как временной ряд считать по дням.
kont
сообщение 1.11.2017 - 16:41
Сообщение #1





Группа: Пользователи
Сообщений: 149
Регистрация: 11.02.2014
Пользователь №: 26005



Подскажите, мне нужно построить предсказание по дням
test=ts(datas$SALES,start=c(01-11-2015))
test



Предсказание я делаю на базе продаж за месяц на день вперед , т.е. зная данные за месяц предсказать объем продаж на 30.11.2015

На всякий случай прикреплю данные

переформулирую свой вопрос
Usage

ts(data = NA, start = 1, end = numeric(), frequency = 1,
deltat = 1, ts.eps = getOption("ts.eps"), class = , names = )

если я прогнозирую на один день, что мне указать во фреквенси?

Сообщение отредактировал kont - 1.11.2017 - 20:34
Прикрепленные файлы
Прикрепленный файл  sales.zip ( 5,94 мегабайт ) Кол-во скачиваний: 361
 
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
 
 
Открыть тему
Ответов
kont
сообщение 2.11.2017 - 15:50
Сообщение #2





Группа: Пользователи
Сообщений: 149
Регистрация: 11.02.2014
Пользователь №: 26005



Зато я понял, что значит утро вечера мудренее, я услышал, то о чем говорил p2004r. Действительно под вечер глядя ничего не соображал, а Вы правы, я лепил все в одну кучу, мне же нужно сделать форекаст для каждого магазина и каждого артикулла. Я пошел не тензорным путем, он для меня сложен пока, я пошел по старинке

datas=read.csv(sales.csv", sep=";",dec=",")
View(datas)
str(datas)


count_ts = ts(datas[, c('SALES')])
View(count_ts)

datas$clean_cnt = tsclean(count_ts)



datas$cnt_ma = ma(datas$clean_cnt, order=7) # using the clean count with no outliers
datas$cnt_ma30 = ma(datas$clean_cnt, order=30)

count_ma = ts(na.omit(datas$cnt_ma), frequency=30)
decomp = stl(count_ma, s.window="periodic")
deseasonal_cnt <- seasadj(decomp)
plot(decomp)


adf.test(count_ma, alternative = "stationary") # ряд стационарный , тест Дюке-Фудллера (p<0.01)

#count_d1 = diff(deseasonal_cnt, differences = 1)

#adf.test(count_d1, alternative = "stationary") # p<0,05 is STACIONARY SERIES


auto.arima(deseasonal_cnt, seasonal=FALSE)


fit<-auto.arima(deseasonal_cnt, seasonal=FALSE)

tsdisplay(residuals(fit), lag.max=45, main='(1,1,0) Model Residuals')



fit2 = arima(deseasonal_cnt, order=c(1,1,7))


fcast <- forecast(fit2, h=30)

p2004r,теперь когда на меня нашло озорение, сможете подсказать как мне сплит по группам сделать (shop+art)

Сообщение отредактировал kont - 2.11.2017 - 15:56
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
 
p2004r
сообщение 2.11.2017 - 19:27
Сообщение #3





Группа: Пользователи
Сообщений: 1091
Регистрация: 26.08.2010
Пользователь №: 22699



Цитата(kont @ 2.11.2017 - 15:50) *
Зато я понял, что значит утро вечера мудренее, я услышал, то о чем говорил p2004r. Действительно под вечер глядя ничего не соображал, а Вы правы, я лепил все в одну кучу, мне же нужно сделать форекаст для каждого магазина и каждого артикулла. Я пошел не тензорным путем, он для меня сложен пока, я пошел по старинке

datas=read.csv(sales.csv", sep=";",dec=",")
View(datas)
str(datas)


count_ts = ts(datas[, c('SALES')])
View(count_ts)

datas$clean_cnt = tsclean(count_ts)



datas$cnt_ma = ma(datas$clean_cnt, order=7) # using the clean count with no outliers
datas$cnt_ma30 = ma(datas$clean_cnt, order=30)

count_ma = ts(na.omit(datas$cnt_ma), frequency=30)
decomp = stl(count_ma, s.window="periodic")
deseasonal_cnt <- seasadj(decomp)
plot(decomp)


adf.test(count_ma, alternative = "stationary") # ряд стационарный , тест Дюке-Фудллера (p<0.01)

#count_d1 = diff(deseasonal_cnt, differences = 1)

#adf.test(count_d1, alternative = "stationary") # p<0,05 is STACIONARY SERIES


auto.arima(deseasonal_cnt, seasonal=FALSE)


fit<-auto.arima(deseasonal_cnt, seasonal=FALSE)

tsdisplay(residuals(fit), lag.max=45, main='(1,1,0) Model Residuals')



fit2 = arima(deseasonal_cnt, order=c(1,1,7))


fcast <- forecast(fit2, h=30)

p2004r,теперь когда на меня нашло озорение, сможете подсказать как мне сплит по группам сделать (shop+art)



Он был сделан когда был cast() подготовлен тензор

Код
df.sales.t <- acast(df.sales, DAY ~ ART ~ STORE , value.var="SALES", fill=0)

> str(df.sales.t)
num [1:30, 1:7683, 1:30] 108 0 0 108 0 216 0 0 0 0 ...
- attr(*, "dimnames")=List of 3
  ..$ :8322456 [1:30] "2015-11-01" "2015-11-02" "2015-11-03" "2015-11-04" ...
  ..$ :8322456 [1:7683] "540" "546" "570" "738" ...
  ..$ :8322456 [1:30] "956" "958" "961" "974" ...


Первая размерность -- день серии, вторая -- артикул товара, третья -- магазин.

Соответственно берем для первого магазина, и первого артикула историю за 30 дней.

Код
> str(df.sales.t[,1,1])
Named num [1:30] 108 0 0 108 0 216 0 0 0 0 ...
- attr(*, "names")=8322456 [1:30] "2015-11-01" "2015-11-02" "2015-11-03" "2015-11-04" ...
> df.sales.t[,1,1]
2015-11-01 2015-11-02 2015-11-03 2015-11-04 2015-11-05 2015-11-06 2015-11-07
     108.0        0.0        0.0      108.0        0.0      216.0        0.0
2015-11-08 2015-11-09 2015-11-10 2015-11-11 2015-11-12 2015-11-13 2015-11-14
       0.0        0.0        0.0        0.0        0.0        0.0      108.0
2015-11-15 2015-11-16 2015-11-17 2015-11-18 2015-11-19 2015-11-20 2015-11-21
       0.0        0.0      199.8        0.0        0.0        0.0        0.0
2015-11-22 2015-11-23 2015-11-24 2015-11-25 2015-11-26 2015-11-27 2015-11-28
       0.0       92.0        0.0        0.0        0.0        0.0        0.0
2015-11-29 2015-11-30
     184.0        0.0


Но это на самом деле не весь нужный тензор, нужно обязательно добавить еще измерение по дням недели, это крайне важный фактор для модели.

Вот таким образом.

Код
> df.sales$WDAY <- lubridate::wday(df.sales$DAY)
> str(df.sales)
'data.frame':    873912 obs. of  5 variables:
$ DAY  : POSIXct, format: "2015-11-01" "2015-11-01" ...
$ STORE: int  1534 25039 1612 1053 1612 961 1602 21761 19009 22691 ...
$ ART  : int  343533 20490 295206 16406274 49495 15309949 242763 188087 16350692 86093 ...
$ SALES: num  62.5 686.4 185 32.5 143.1 ...
$ WDAY : num  1 1 1 1 1 1 1 1 1 1 ...
> df.sales.t <- acast(df.sales, DAY ~ WDAY ~ ART ~ STORE , value.var="SALES", fill=0)
> str(df.sales.t)
num [1:30, 1:7, 1:7683, 1:30] 108 0 0 0 0 0 0 0 0 0 ...
- attr(*, "dimnames")=List of 4
  ..$ :8322456 [1:30] "2015-11-01" "2015-11-02" "2015-11-03" "2015-11-04" ...
  ..$ :8322456 [1:7] "1" "2" "3" "4" ...
  ..$ :8322456 [1:7683] "540" "546" "570" "738" ...
  ..$ :8322456 [1:30] "956" "958" "961" "974" ...


Сообщение отредактировал p2004r - 2.11.2017 - 19:47


Signature
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
 

Сообщений в этой теме
- kont   Как временной ряд считать по дням.   1.11.2017 - 16:41
- - p2004r   Цитата(kont @ 1.11.2017 - 16:41) Под...   1.11.2017 - 20:33
- - kont   p2004r, я немного изменил свой вопрос предсказывае...   1.11.2017 - 20:38
|- - p2004r   Цитата(kont @ 1.11.2017 - 20:38) p20...   1.11.2017 - 20:41
- - kont   'data.frame': 873912 obs. of 4 variables:...   1.11.2017 - 20:49
|- - p2004r   Цитата(kont @ 1.11.2017 - 20:49) ...   1.11.2017 - 21:14
- - kont   я стараюсь) на стаковерфлоу загуглил starting a ...   1.11.2017 - 21:23
|- - p2004r   Цитата(kont @ 1.11.2017 - 21:23) я с...   1.11.2017 - 22:02
- - kont   p2004r. я воспроизвел, а предикативную модель -ку ...   1.11.2017 - 22:23
|- - p2004r   Цитата(kont @ 1.11.2017 - 22:23) p20...   1.11.2017 - 22:32
- - kont   хотя Хольт-Винтерс для ежедневных данных, что-то я...   1.11.2017 - 22:36
- - kont   переменная mydatas=read.csv2(sales.csv) test=ts(my...   1.11.2017 - 22:37
|- - p2004r   Цитата(kont @ 1.11.2017 - 22:37) пер...   1.11.2017 - 22:48
- - kont   p2004r прогнозируются общие суммы продаж купили ма...   1.11.2017 - 22:52
|- - p2004r   Цитата(kont @ 1.11.2017 - 22:52) p20...   1.11.2017 - 23:14
- - 100$   / меланхолично/ Вообще-то для обсуждения экономет...   1.11.2017 - 23:24
- - kont   Зато я понял, что значит утро вечера мудренее, я у...   2.11.2017 - 15:50
|- - p2004r   Цитата(kont @ 2.11.2017 - 15:50) Зат...   2.11.2017 - 19:27
- - kont   Я Вас правильно понял, теперь уже можно делать фо...   2.11.2017 - 22:20
|- - p2004r   Цитата(kont @ 2.11.2017 - 22:20) Я В...   3.11.2017 - 00:01
- - kont   Нет, это обычные продовольственные товары, как вы ...   3.11.2017 - 01:00
- - kont   стал писать цикл для анализа, сможете помочь, разо...   3.11.2017 - 11:59
- - kont   сможете помочь по этой ошибке?   3.11.2017 - 15:34
- - kont   p2004r, можно Вас последний раз потревожить? С ост...   6.11.2017 - 16:45
- - comisora   2kont Кодas.data.frame(df.sales.t[[b...   6.11.2017 - 18:47
- - kont   > g=as.data.frame(df.sales.t[1:10]) > g d...   6.11.2017 - 20:25
- - comisora   2kont Структура данных после acast какая?   7.11.2017 - 18:06


Добавить ответ в эту темуОткрыть тему