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

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

2 страниц V   1 2 >  
Добавить ответ в эту темуОткрыть тему
> Как временной ряд считать по дням.
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 мегабайт ) Кол-во скачиваний: 1043
 
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
 
p2004r
сообщение 1.11.2017 - 20:33
Сообщение #2





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



Цитата(kont @ 1.11.2017 - 16:41) *
Подскажите, мне нужно построить предсказание по дням
test=ts(datas$SALES,start=c(01.11.2015))
test

выходит ошибка
Error: unexpected numeric constant in "test=ts(mydat$SALES,start=c(01.11.2015"
как мне указать именно частоту по дням

Предсказание я делаю на базе продаж за месяц на день вперед , т.е. зная данные за месяц предсказать объем продаж на 30.11.2015
если эта модель покажет хорошие ре-ты, её будут имплементировать на сегодняшние данные
На всякий случай прикреплю данные


А чего предсказание то?

Код
> str(df.sales)
'data.frame':    873912 obs. of  4 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 ...
> table(df.sales$DAY)

2015-11-01 2015-11-02 2015-11-03 2015-11-04 2015-11-05 2015-11-06 2015-11-07
     27819      28653      29529      28320      28321      29031      28747
2015-11-08 2015-11-09 2015-11-10 2015-11-11 2015-11-12 2015-11-13 2015-11-14
     27294      28628      29558      29501      29594      30613      29489
2015-11-15 2015-11-16 2015-11-17 2015-11-18 2015-11-19 2015-11-20 2015-11-21
     28717      28829      29379      29402      28850      30584      29037
2015-11-22 2015-11-23 2015-11-24 2015-11-25 2015-11-26 2015-11-27 2015-11-28
     28458      29420      29199      29468      29974      30481      29752
2015-11-29 2015-11-30
     28381      28884
> levels(factor(df.sales$STORE))
[1] "956"   "958"   "961"   "974"   "980"   "999"   "1053"  "1082"  "1094"
[10] "1122"  "1530"  "1534"  "1544"  "1574"  "1579"  "1594"  "1596"  "1602"
[19] "1609"  "1612"  "17096" "17474" "19009" "20581" "21761" "22691" "24605"
[28] "25039" "27220" "29245"
> length(levels(factor(df.sales$ART)))
[1] 7683


Там 1 месяц торговли с привязкой к календарю в 30 магазинах, по 7683 позициям товаров. Что предсказывать то? Сумму покупок в конкретный день? Ассортимент проданный? Разносить по магазинам?

PS откуда вообще эта античная база? из какого курса ML на этот раз? smile.gif

Сообщение отредактировал p2004r - 1.11.2017 - 20:39


Signature
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
 
kont
сообщение 1.11.2017 - 20:38
Сообщение #3





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



p2004r, я немного изменил свой вопрос
предсказываем переменную SALES это сумма покупок
вопрос в том, что если мне нужно предсказать на один день вперед , какое значение нужно указать во frequency

далее
library("forecast")
testforecast2=forecast.HoltWinters(testforecast,h=?)
h это параметр который указывает насколько вперед предсказываем
мне так и ставить единицу? т.е. 30-11.2015
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
 
p2004r
сообщение 1.11.2017 - 20:41
Сообщение #4





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



Цитата(kont @ 1.11.2017 - 20:38) *
p2004r, я немного изменил свой вопрос
предсказываем переменную SALES это сумма покупок
вопрос в том, что если мне нужно предсказать на один день вперед , какое значение нужно указать во frequency

далее
library("forecast")
testforecast2=forecast.HoltWinters(testforecast,h=?)
h это параметр который указывает насколько вперед предсказываем
мне так и ставить единицу? т.е. 30-11.2015


Вы прочитайте еще раз внимательно что представляет из себя эта база, а потом "рвитесь в бой" smile.gif


Signature
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
 
kont
сообщение 1.11.2017 - 20:49
Сообщение #5





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



'data.frame': 873912 obs. of 4 variables:
$ DAY : Factor w/ 30 levels "01.11.2015","02.11.2015",..: 1 1 1 1 1 1 1 1 1 1 ...
$ 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 ...

day-день продажи
STORE код магизина
ART код товара
SALES: цена

даны данные по дням за месяц
нужно предсказать значения за 30.11.2015

вот я и думаю что мне указать во фриквенси
и что указать в параметре h
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
 
p2004r
сообщение 1.11.2017 - 21:14
Сообщение #6





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



Цитата(kont @ 1.11.2017 - 20:49) *
'data.frame': 873912 obs. of 4 variables:
$ DAY : Factor w/ 30 levels "01.11.2015","02.11.2015",..: 1 1 1 1 1 1 1 1 1 1 ...
$ 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 ...

day-день продажи
STORE код магизина
ART код товара
SALES: цена

даны данные по дням за месяц
нужно предсказать значения за 30.11.2015

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



мда... это "3х мерный тензор платежей в длинном формате", так понятно?
пока не зарешепите данные в размерность этого тензора никаких "временных рядов" в датасете не существует.

кстати опять маячит на горизонте многомерное svd smile.gif)

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


Signature
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
 
kont
сообщение 1.11.2017 - 21:23
Сообщение #7





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



я стараюсь)
help.gif
на стаковерфлоу загуглил starting a daily time series in R

test=ts(mydat$SALES,frequency=365, start=c(2015, 11))

#Хольт-Винтерс
testforecast=HoltWinters(test,beta=F,gamma=F)


testforecast$fitted

я получаю фигню какую-то
2015.090 63.66014 63.66014
2015.093 63.69003 63.69003
2015.096 63.67381 63.67381
2015.099 63.69335 63.69335
2015.101 63.74642 63.74642
2015.104 63.75224 63.75224
2015.107 63.75847 63.75847
2015.110 63.75986 63.75986
2015.112 63.76634 63.76634
2015.115 63.81441 63.81441
2015.118 63.79887 63.79887
2015.121 63.78152 63.78152
2015.123 63.81786 63.81786
2015.126 63.88588 63.88588
2015.129 63.87830 63.87830
2015.132 63.86346 63.86346
2015.134 63.86787 63.86787
2015.137 63.86864 63.86864
2015.140 63.85490 63.85490

покажите, пожалуйста, как правильно нужно sorry.gif sad.gif help.gif
мне самому сложно
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
 
p2004r
сообщение 1.11.2017 - 22:02
Сообщение #8





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



Цитата(kont @ 1.11.2017 - 21:23) *
я стараюсь)
help.gif
на стаковерфлоу загуглил starting a daily time series in R

test=ts(mydat$SALES,frequency=365, start=c(2015, 11))

#Хольт-Винтерс
testforecast=HoltWinters(test,beta=F,gamma=F)


testforecast$fitted

я получаю фигню какую-то
2015.090 63.66014 63.66014
2015.093 63.69003 63.69003
2015.096 63.67381 63.67381
2015.099 63.69335 63.69335
2015.101 63.74642 63.74642
2015.104 63.75224 63.75224
2015.107 63.75847 63.75847
2015.110 63.75986 63.75986
2015.112 63.76634 63.76634
2015.115 63.81441 63.81441
2015.118 63.79887 63.79887
2015.121 63.78152 63.78152
2015.123 63.81786 63.81786
2015.126 63.88588 63.88588
2015.129 63.87830 63.87830
2015.132 63.86346 63.86346
2015.134 63.86787 63.86787
2015.137 63.86864 63.86864
2015.140 63.85490 63.85490

покажите, пожалуйста, как правильно нужно sorry.gif sad.gif help.gif
мне самому сложно


Я склоняюсь к помощи хирургическим путем smile.gif

Решейпить данные из динного формата в широкий формат довольно просто. Эту трансформацию в разные стороны обеспечивают melt() и *cast() из library(reshape2)

В данном случае у нас трех мерный тензор поэтому acast()

Код
> library(reshape2)
> str(acast(df.sales, DAY ~ STORE ~ ART , value.var="SALES", fill=0))
num [1:30, 1:30, 1:7683] 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:30] "956" "958" "961" "974" ...
  ..$ :8322456 [1:7683] "540" "546" "570" "738" ...

> df.sales.t <- acast(df.sales, DAY ~ ART ~ STORE , value.var="SALES")

> saveGIF(for(i in 1:30) image(df.sales.t[i,,], xlab=i), movie.name = "animation.gif", interval=0.1)


Ну и покажем анимированный срез Магазин-Асортимет по дням
Эскизы прикрепленных изображений
Прикрепленное изображение
 


Signature
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
 
kont
сообщение 1.11.2017 - 22:23
Сообщение #9





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



p2004r. я воспроизвел, а предикативную модель -ку то как строить?
именно вот эту часть
testforecast=HoltWinters(test,beta=F,gamma=F)

по идеи после этого стринга
testforecast$fitted
я должен видеть нормальное предсказание)) а не то что я увидел)

Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
 
p2004r
сообщение 1.11.2017 - 22:32
Сообщение #10





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



Цитата(kont @ 1.11.2017 - 22:23) *
p2004r. я воспроизвел, а предикативную модель -ку то как строить?
именно вот эту часть
testforecast=HoltWinters(test,beta=F,gamma=F)

по идеи после этого стринга
testforecast$fitted
я должен видеть нормальное предсказание)) а не то что я увидел)



Что такое у вас test?


Signature
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
 
kont
сообщение 1.11.2017 - 22:36
Сообщение #11





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



хотя Хольт-Винтерс для ежедневных данных, что-то я погорячился
fit <- auto.arima(datas$SALES)
но тоже не спасло фигня какая-то выходит))
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
 
kont
сообщение 1.11.2017 - 22:37
Сообщение #12





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



переменная
mydatas=read.csv2(sales.csv)
test=ts(mydatas$SALES,frequency=365, start=c(2015, 11))
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
 
p2004r
сообщение 1.11.2017 - 22:48
Сообщение #13





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



Цитата(kont @ 1.11.2017 - 22:37) *
переменная
mydatas=read.csv2(sales.csv)
test=ts(mydatas$SALES,frequency=365, start=c(2015, 11))


Вы действительно не видите разницы из чего делать _временной_ ряд? Даже из названия товара и магазинов вперемешку? То есть "макароны купленные на малой бронной" это один тик, а "курица на маховой" второй тик _временного_ ряда? Ничего не смущает?

PS
Вы сюда точно "на охоту ходите"ТМ? smile.gif


Signature
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
 
kont
сообщение 1.11.2017 - 22:52
Сообщение #14





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



p2004r прогнозируются общие суммы продаж купили макароны, и куры в итоге общая выручка 200 рублей. все её и нужно спрогнозировать, но я не могу понять как прогнозировать по ежедневным данным
сможете помочь?

PS
Вы сюда точно "на охоту ходите"ТМ?
что значит эта фраза?

Сообщение отредактировал kont - 1.11.2017 - 23:00
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
 
p2004r
сообщение 1.11.2017 - 23:14
Сообщение #15





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



Цитата(kont @ 1.11.2017 - 22:52) *
p2004r прогнозируются общие суммы продаж купили макароны, и куры в итоге общая выручка 200 рублей. все её и нужно спрогнозировать, но я не могу понять как прогнозировать по ежедневным данным
сможете помочь?

PS
Вы сюда точно "на охоту ходите"ТМ?
что значит эта фраза?


нет, больше чем уже помог, помочь не в силах. "теперь вся сила в гемоглобине"(С)

до свидания.


Signature
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
 
100$
сообщение 1.11.2017 - 23:24
Сообщение #16





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



/ меланхолично/

Вообще-то для обсуждения эконометрических заморочек существуют форумы по эконометрике.
А на врачебном форуме чьи-то страдания по поводу чьих-то продаж - однозначно магарычовая тема. Жаль только, 2004-й цены сбивает...
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
 
kont
сообщение 2.11.2017 - 15:50
Сообщение #17





Группа: Пользователи
Сообщений: 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
Сообщение #18





Группа: Пользователи
Сообщений: 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
сообщение 2.11.2017 - 22:20
Сообщение #19





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



Я Вас правильно понял, теперь уже можно делать форекаст на сплитованном датасете df.sales.t?

# проверки на стационарность
adf.test(df.sales.t, alternative = "stationary")

#forecast
auto.arima(df.sales.t, seasonal=FALSE)
fit2 = arima(df.sales.t, order=c(1,1,7))

#
fcast <- forecast(fit2, h=1) # 1day ahead

Сообщение отредактировал kont - 2.11.2017 - 22:21
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
 
p2004r
сообщение 3.11.2017 - 00:01
Сообщение #20





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



Цитата(kont @ 2.11.2017 - 22:20) *
Я Вас правильно понял, теперь уже можно делать форекаст на сплитованном датасете df.sales.t?

# проверки на стационарность
adf.test(df.sales.t, alternative = "stationary")

#forecast
auto.arima(df.sales.t, seasonal=FALSE)
fit2 = arima(df.sales.t, order=c(1,1,7))

#
fcast <- forecast(fit2, h=1) # 1day ahead


Тут всё забавнее...

Поскольку пока у нас только 1 месяц, то дни недели трудно интерпретировать недели, и мы можем дни месяца слить вместе с днями недели

Код
> res_hosvd <- hosvd(as.tensor(df.sales.t.all), ranks=c(30,899,30))
  |======================================================================| 100%
> 1-res_hosvd$fnorm_resid/fnorm(as.tensor(df.sales.t.all))
[1] 0.9953629
> res_hosvd <- hosvd(as.tensor(df.sales.t.all), ranks=c(30,900,30))
  |======================================================================| 100%
> 1-res_hosvd$fnorm_resid/fnorm(as.tensor(df.sales.t.all))
[1] 1


Но ассортимент товаров реально состоит из 900 позиций (с точки зрения стоимости и сочетаемости продаж).

Это точно не синтетика какая то?


Signature
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
 
kont
сообщение 3.11.2017 - 01:00
Сообщение #21





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



Нет, это обычные продовольственные товары, как вы сказали, макароны, куры.. до хоть джек дениелс и кола))

Я ратую за модель ARIMA ... обосновываю это тем, что аддитивные модели больше для прогнозов по месячным данным. Да и на стаковерфлоу, люди тоже советуют АРИМУ.
вернее stats.stackexchange.com/
https://stats.stackexchange.com/questions/1...series-analysis

Сообщение отредактировал kont - 3.11.2017 - 11:33
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
 
kont
сообщение 3.11.2017 - 11:59
Сообщение #22





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





стал писать цикл для анализа, сможете помочь, разобраться, пожалуйста.
выдал ошибкуmy_forecast <- function(x){
model <- arima(x, order = c(1, 1, 1))
fcast <- forecast(model, 1)
return(fcast)
}

prog=lapply(df.sales.t[1:1], my_forecast)



Error in arima(x, order = c(1, 1, 1)) : too few non-missing observations

Сообщение отредактировал kont - 3.11.2017 - 14:08
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
 
kont
сообщение 3.11.2017 - 15:34
Сообщение #23





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



сможете помочь по этой ошибке?
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
 
kont
сообщение 6.11.2017 - 16:45
Сообщение #24





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



p2004r, можно Вас последний раз потревожить? С остальными ошибками сам разобрался.
А суть вывода данных.
пример, см. скрин
df.sales.t <- acast(mydat, DAY ~ ART ~ STORE , value.var="SALES", fill=0)
View(df.sales.t )
у нас обычный датафрем по строкам даты, по столбцам


ок, хочу записать этот датафрейм в csv
g=as.data.frame(df.sales.t[,1,1:10])
Как результат совершенно не те столбцы
Код
> g
            956  958   961  974 980  999  1053 1082 1094 1122
01.ноя.15 108.0  0.0   0.0  0.0   0  0.0 216.0  0.0    0    0
02.ноя.15   0.0  0.0  97.0  0.0   0  0.0   0.0  0.0    0    0
03.ноя.15   0.0  0.0  97.0 99.9   0  0.0   0.0  0.0  106    0
04.ноя.15 108.0  0.0  97.0  0.0   0  0.0 108.0  0.0    0    0
05.ноя.15   0.0  0.0   0.0 99.9   0  0.0   0.0  0.0    0    0
06.ноя.15 216.0  0.0  97.0  0.0 106  0.0   0.0  0.0    0    0
07.ноя.15   0.0  0.0   0.0  0.0 106  0.0   0.0  0.0  212    0
08.ноя.15   0.0 99.9  97.0  0.0   0  0.0 108.0  0.0  212   86
09.ноя.15   0.0  0.0 194.0  0.0   0  0.0 108.0  0.0    0    0
10.ноя.15   0.0  0.0   0.0  0.0 106 99.9   0.0  0.0    0    0
11.ноя.15   0.0  0.0   0.0  0.0   0  0.0   0.0  0.0    0    0
12.ноя.15   0.0  0.0   0.0 99.9   0  0.0   0.0  0.0  212    0
13.ноя.15   0.0  0.0   0.0  0.0   0  0.0   0.0  0.0    0    0
14.ноя.15 108.0  0.0  97.0  0.0   0 99.9   0.0 89.9  106    0
15.ноя.15   0.0  0.0   0.0  0.0   0  0.0  99.9  0.0   98    0
16.ноя.15   0.0  0.0   0.0  0.0   0  0.0   0.0  0.0  294    0
17.ноя.15 199.8  0.0  97.0  0.0   0  0.0   0.0  0.0   98    0
18.ноя.15   0.0  0.0   0.0 89.9  92  0.0   0.0  0.0  196    0
19.ноя.15   0.0  0.0   0.0  0.0  92  0.0   0.0 89.9   98    0
20.ноя.15   0.0  0.0   0.0  0.0   0  0.0  99.9  0.0   98    0
21.ноя.15   0.0 99.9   0.0  0.0   0  0.0  99.9  0.0   98    0
22.ноя.15   0.0  0.0   0.0 89.9   0  0.0   0.0  0.0    0    0
23.ноя.15  92.0  0.0   0.0 89.9   0 89.9   0.0 88.0    0    0
24.ноя.15   0.0  0.0   0.0  0.0   0  0.0   0.0  0.0    0   86
25.ноя.15   0.0  0.0   0.0 89.9   0  0.0  92.0  0.0    0  172
26.ноя.15   0.0  0.0   0.0  0.0   0  0.0   0.0  0.0   92   86
27.ноя.15   0.0  0.0   0.0  0.0   0  0.0   0.0  0.0   92    0
28.ноя.15   0.0 89.9   0.0  0.0   0  0.0  92.0  0.0    0    0
29.ноя.15 184.0  0.0  89.9 89.9  86  0.0   0.0  0.0    0    0

как мне в датафрейм перевести весь df.sales.t
чтобы отображались все 7000 столбцов

всё больше мне ничего не надо:)

help.gif, пожалуйста.
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
 
comisora
сообщение 6.11.2017 - 18:47
Сообщение #25





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



2kont
Код
as.data.frame(df.sales.t[[b],[/b]1,1:10])

Я, конечно, не знаю, как организованы данные и всё такое, но до запятой - это строчки, после - это столбцы. Чтобы записывались все столбцы, после запятой ничего быть не должно, например df[1:100,] - первые сто строчек, все столбцы. В Вашем примере запятая представляется лишней. Если всё заковырестей, нужно смотреть детальней.
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
 
kont
сообщение 6.11.2017 - 20:25
Сообщение #26





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



> g=as.data.frame(df.sales.t[1:10])
> g
df.sales.t[1:10]
1 108
2 0
3 0
4 108
5 0
6 216
7 0
8 0
9 0
10 0
>

я получил 10 пер

или без запятой t[,1
> g=as.data.frame(df.sales.t[1,1:10])
Error in df.sales.t[1, 1:10] : incorrect number of dimensions
>
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
 
comisora
сообщение 7.11.2017 - 18:06
Сообщение #27





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



2kont
Структура данных после acast какая?
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
 

2 страниц V   1 2 >
Добавить ответ в эту темуОткрыть тему