Как временной ряд считать по дням. |
Здравствуйте, гость ( Вход | Регистрация )
Как временной ряд считать по дням. |
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
Прикрепленные файлы
|
|
1.11.2017 - 20:33
Сообщение
#2
|
|
Группа: Пользователи Сообщений: 1091 Регистрация: 26.08.2010 Пользователь №: 22699 |
Подскажите, мне нужно построить предсказание по дням 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 на этот раз? Сообщение отредактировал p2004r - 1.11.2017 - 20:39 |
|
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 |
|
1.11.2017 - 20:41
Сообщение
#4
|
|
Группа: Пользователи Сообщений: 1091 Регистрация: 26.08.2010 Пользователь №: 22699 |
p2004r, я немного изменил свой вопрос предсказываем переменную SALES это сумма покупок вопрос в том, что если мне нужно предсказать на один день вперед , какое значение нужно указать во frequency далее library("forecast") testforecast2=forecast.HoltWinters(testforecast,h=?) h это параметр который указывает насколько вперед предсказываем мне так и ставить единицу? т.е. 30-11.2015 Вы прочитайте еще раз внимательно что представляет из себя эта база, а потом "рвитесь в бой" |
|
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 |
|
1.11.2017 - 21:14
Сообщение
#6
|
|
Группа: Пользователи Сообщений: 1091 Регистрация: 26.08.2010 Пользователь №: 22699 |
'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 ) PS ну и это же _календарь_, имейте к нему уважения раз в датасаенс потянуло (да еще во временные ряды), уважьте эту размерность предобработкой в формат даты... |
|
1.11.2017 - 21:23
Сообщение
#7
|
|
Группа: Пользователи Сообщений: 149 Регистрация: 11.02.2014 Пользователь №: 26005 |
я стараюсь)
на стаковерфлоу загуглил 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 покажите, пожалуйста, как правильно нужно мне самому сложно |
|
1.11.2017 - 22:02
Сообщение
#8
|
|
Группа: Пользователи Сообщений: 1091 Регистрация: 26.08.2010 Пользователь №: 22699 |
я стараюсь) на стаковерфлоу загуглил 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 покажите, пожалуйста, как правильно нужно мне самому сложно Я склоняюсь к помощи хирургическим путем Решейпить данные из динного формата в широкий формат довольно просто. Эту трансформацию в разные стороны обеспечивают 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) Ну и покажем анимированный срез Магазин-Асортимет по дням |
|
1.11.2017 - 22:23
Сообщение
#9
|
|
Группа: Пользователи Сообщений: 149 Регистрация: 11.02.2014 Пользователь №: 26005 |
p2004r. я воспроизвел, а предикативную модель -ку то как строить?
именно вот эту часть testforecast=HoltWinters(test,beta=F,gamma=F) по идеи после этого стринга testforecast$fitted я должен видеть нормальное предсказание)) а не то что я увидел) |
|
1.11.2017 - 22:32
Сообщение
#10
|
|
Группа: Пользователи Сообщений: 1091 Регистрация: 26.08.2010 Пользователь №: 22699 |
p2004r. я воспроизвел, а предикативную модель -ку то как строить? именно вот эту часть testforecast=HoltWinters(test,beta=F,gamma=F) по идеи после этого стринга testforecast$fitted я должен видеть нормальное предсказание)) а не то что я увидел) Что такое у вас test? |
|
1.11.2017 - 22:36
Сообщение
#11
|
|
Группа: Пользователи Сообщений: 149 Регистрация: 11.02.2014 Пользователь №: 26005 |
хотя Хольт-Винтерс для ежедневных данных, что-то я погорячился
fit <- auto.arima(datas$SALES) но тоже не спасло фигня какая-то выходит)) |
|
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)) |
|
1.11.2017 - 22:48
Сообщение
#13
|
|
Группа: Пользователи Сообщений: 1091 Регистрация: 26.08.2010 Пользователь №: 22699 |
переменная mydatas=read.csv2(sales.csv) test=ts(mydatas$SALES,frequency=365, start=c(2015, 11)) Вы действительно не видите разницы из чего делать _временной_ ряд? Даже из названия товара и магазинов вперемешку? То есть "макароны купленные на малой бронной" это один тик, а "курица на маховой" второй тик _временного_ ряда? Ничего не смущает? PS Вы сюда точно "на охоту ходите"ТМ? |
|
1.11.2017 - 22:52
Сообщение
#14
|
|
Группа: Пользователи Сообщений: 149 Регистрация: 11.02.2014 Пользователь №: 26005 |
p2004r прогнозируются общие суммы продаж купили макароны, и куры в итоге общая выручка 200 рублей. все её и нужно спрогнозировать, но я не могу понять как прогнозировать по ежедневным данным
сможете помочь? PS Вы сюда точно "на охоту ходите"ТМ? что значит эта фраза? Сообщение отредактировал kont - 1.11.2017 - 23:00 |
|
1.11.2017 - 23:14
Сообщение
#15
|
|
Группа: Пользователи Сообщений: 1091 Регистрация: 26.08.2010 Пользователь №: 22699 |
p2004r прогнозируются общие суммы продаж купили макароны, и куры в итоге общая выручка 200 рублей. все её и нужно спрогнозировать, но я не могу понять как прогнозировать по ежедневным данным сможете помочь? PS Вы сюда точно "на охоту ходите"ТМ? что значит эта фраза? нет, больше чем уже помог, помочь не в силах. "теперь вся сила в гемоглобине"(С) до свидания. |
|