Модель вменения для отсутствующих данных временного ряда в R - PullRequest
0 голосов
/ 19 ноября 2018

Данные временного ряда состоят из:

Товар (категоричный); Группа товаров (категориальная); Страна (категориальная); YearSinceProductLaunch (числовой); SalesAtLaunchYear (числовой)

Только данные "SalesAtLaunchYear" имеют некоторые пропущенные значения, которые должны быть вменены.

Для некоторых продуктов имеются полные данные, то есть данные о продажах существуют за год запуска 1,2 и до настоящего времени.

Однако некоторые другие продукты содержат недостающие данные о продажах только в первые годы после запуска. Продукты имеют разный возраст, поэтому иногда не хватает 2 лет с момента запуска, иногда 10 лет, в зависимости от продукта.

Мне интересно найти модель в R, которая может вменять пропуски в пропущенные данные временных рядов. Я попробовал MICE, установив модель для «SalesAtLaunchYear» в качестве случайного леса, но я по-прежнему получаю очень высокие значения продаж, особенно в начале запуска продукта. Я гарантирую, что в год 0 все продажи равны 0, чтобы избежать отрицательных значений. Фрейм данных имеет 20000 строк с 300 уникальными продуктами.

testdf = tibble::tribble(
  ~Country,   ~ProductGroup,   ~Product, ~YearSinceProductLaunch, ~SalesAtLaunchYear,
      "CA", "ProductGroup1", "Product1",                      0L,                  0,
      "CA", "ProductGroup1", "Product1",                      1L,                 NA,
      "CA", "ProductGroup1", "Product1",                      2L,                 NA,
      "CA", "ProductGroup1", "Product1",                      3L,                 NA,
      "CA", "ProductGroup1", "Product1",                      4L,                 NA,
      "CA", "ProductGroup1", "Product1",                      5L,        206034.9814,
      "CA", "ProductGroup1", "Product1",                      6L,        170143.2623,
      "CA", "ProductGroup1", "Product1",                      7L,        212541.9306,
      "CA", "ProductGroup1", "Product1",                      8L,         270663.199,
      "CA", "ProductGroup1", "Product1",                      9L,        736738.3755,
      "CA", "ProductGroup1", "Product1",                     10L,        2579723.981,
      "CA", "ProductGroup1", "Product1",                     11L,        4964319.496,
      "CA", "ProductGroup1", "Product1",                     12L,         6864985.16,
      "CA", "ProductGroup1", "Product1",                     13L,        8793292.386,
      "CA", "ProductGroup1", "Product1",                     14L,        11416033.38,
      "IT", "ProductGroup2", "Product2",                      0L,                  0,
      "IT", "ProductGroup2", "Product2",                      1L,                 NA,
      "IT", "ProductGroup2", "Product2",                      2L,                 NA,
      "IT", "ProductGroup2", "Product2",                      3L,                 NA,
      "IT", "ProductGroup2", "Product2",                      4L,                 NA,
      "IT", "ProductGroup2", "Product2",                      5L,                 NA,
      "IT", "ProductGroup2", "Product2",                      6L,                 NA,
      "IT", "ProductGroup2", "Product2",                      7L,                 NA,
      "IT", "ProductGroup2", "Product2",                      8L,                 NA,
      "IT", "ProductGroup2", "Product2",                      9L,                 NA,
      "IT", "ProductGroup2", "Product2",                     10L,                 NA,
      "IT", "ProductGroup2", "Product2",                     11L,                 NA,
      "IT", "ProductGroup2", "Product2",                     12L,                 NA,
      "IT", "ProductGroup2", "Product2",                     13L,        30806222.96,
      "IT", "ProductGroup2", "Product2",                     14L,           31456272,
      "IT", "ProductGroup2", "Product2",                     15L,        31853476.78,
      "IT", "ProductGroup2", "Product2",                     16L,           30379818,
      "IT", "ProductGroup2", "Product2",                     17L,        29765448.87,
      "IT", "ProductGroup2", "Product2",                     18L,           31376234,
      "IT", "ProductGroup2", "Product2",                     19L,        32628514.81,
      "IT", "ProductGroup2", "Product2",                     20L,           32732196,
      "IT", "ProductGroup2", "Product2",                     21L,        33503784.25,
      "IT", "ProductGroup2", "Product2",                     22L,           35163372,
      "DE", "ProductGroup3", "Product3",                      0L,                  0,
      "DE", "ProductGroup3", "Product3",                      1L,         161884.081,
      "DE", "ProductGroup3", "Product3",                      2L,        7876925.474,
      "DE", "ProductGroup3", "Product3",                      3L,        12948209.55,
      "DE", "ProductGroup3", "Product3",                      4L,        13304401.76
  )


testdf$Country = as.factor(testdf$Country)
testdf$ProductGroup   = as.factor(testdf$ProductGroup)
testdf$Product  = as.factor(testdf$Product)

1 Ответ

0 голосов
/ 24 ноября 2018

Вероятно, использование мышей не даст вам желаемых результатов.Так как он в основном использует корреляции между переменными.Вы ищете больше корреляций во времени.

Моя рекомендация для этого конкретного примера состояла бы в том, чтобы разбить набор данных на Страны, Группы товаров, Группы продуктов и выполнить вменение для них с помощью пакета импутации временных рядов.

Глядя на ваши данные, я думаю, что что-то вроде функции na.interpolation из пакета imputeTS уже хорошо бы поработало.

Вот как вы это называете:

library("imputeTS")
na.interpolation(yourTimeSeries)

Вам придется вызывать его несколько раз для каждого временного ряда, созданного вами для каждой страны, группы продуктов, продукта.

Вы также можете просто запустить

 na.interpolation(testdf$SalesAtLaunchYear)

Для всего себяНабор данных, который проще - в примере, который вы показали, это также будет работать.(может привести к проблемам, если все остальное структурировано иначе или вы используете другой алгоритм из пакета imputeTS)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...