Использование пакета прогноза R с отсутствующими значениями и / или нерегулярными временными рядами

16

Я впечатлен forecastпакетом R , а также, например, zooпакетом для нерегулярных временных рядов и интерполяции пропущенных значений.

Мое приложение находится в области прогнозирования трафика в колл-центре, поэтому данные о выходных (почти) всегда отсутствуют, что может быть легко обработано zoo. Кроме того, некоторые дискретные точки могут отсутствовать, я просто использую R NAдля этого.

Дело в том, что все приятное волшебство пакета прогноза, например eta(), и auto.arima()т. Д., Похоже, ожидает простые tsобъекты, то есть равноправные временные ряды, не содержащие пропущенных данных. Я думаю, что приложения реального мира для равномерно распределенных временных рядов, безусловно, существуют, но, на мой взгляд, очень ограничены.

Проблема нескольких дискретных NAзначений может быть легко решена с помощью любой из предложенных функций интерполяции, zooа также с помощью forecast::interp. После этого я запускаю прогноз.

Мои вопросы:

  1. Кто-нибудь предлагает лучшее решение?
  2. (мой главный вопрос) По крайней мере, в моей прикладной области, прогнозирования трафика центра обработки вызовов (и, насколько я могу представить, большинство других проблемных областей), временные ряды не равны. По крайней мере, у нас есть схема "рабочих дней" или что-то в этом роде. Какой лучший способ справиться с этим и при этом использовать всю крутую магию пакета прогноза?

    Должен ли я просто «сжать» временной ряд, чтобы заполнить выходные, сделать прогноз, а затем снова «раздувать» данные, чтобы заново вставить значения NA в выходные? (Это было бы позором, я думаю?)

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

Я довольно новичок в прогнозировании (и статистике в целом), поэтому я могу упустить из виду кое-что важное.

entreprogreur
источник
Добро пожаловать на сайт и прогнозирования! Реальные приложения для равномерно распределенных временных рядов определенно не очень ограничены. Я немного знаю о прогнозе, который поступает в ваш супермаркет с достаточным количеством товара под рукой для удовлетворения спроса на рекламу, и, поверьте мне, эти миллионы временных рядов (20 000 единиц хранения в 1000 магазинах очень распространены) действительно очень равномерно распределены. (Извините, но вы как бы просили об этом ...) Но я постараюсь придумать что-нибудь более полезное для вас через минуту.
Стефан Коласса
2
Не могли бы вы более четко объяснить, почему данные колл-центра не распределены одинаково? (Возможно, я неправильно понимаю, что вы подразумеваете под «равнозначным».) Методы прогнозирования в колл-центре, которые я видел, обычно объединяют входящие вызовы с 15-минутными интервалами, что соответствует моему определению «равнозначно». Затем нам приходится иметь дело со сложной сезонностью (внутри-дневной, внутри-недельной, годовой), по какой теме это может вам помочь: stats.stackexchange.com/questions/44704/… Это отвечает на ваш вопрос? Если нет, просто скажите нам, что еще вам нужно.
Стефан Коласса
5
auto.arimaможет обрабатывать пропущенные значения.
Роб Хиндман
1
Спасибо за все конструктивные комментарии! Стефан, мои данные не распределены по двум причинам: 1. Многие кол-центры просто закрыты по субботам и воскресеньям. Некоторые закрыты только по воскресеньям. Таким образом, «нормальное» расстояние между двумя смежными точками данных составляет один день, кроме как с пятницы по понедельник, то есть три дня. Таким образом, пространство не равно, то есть не равноудалено. Во-вторых, где-то могут быть просто случайные пропущенные данные, потому что они просто забыли включить свое измерительное устройство в тот день или что-то еще. Я надеюсь, что это проясняет мою точку зрения.
entreprogreur
1
Просто (провокационная) мысль. Если вы говорите, кол-центры закрыты по выходным. Тогда у вас нет пропущенных данных. Ваш временной ряд охватывает Mo-Fr. 5 дней. довольно равноудаленный. Интерполяция выходных кажется мне формально неправильной, поскольку вы знаете, что никаких звонков не происходит и любая информация, которую вы вменяете, является ложной. Я бы сказал, что вы никогда не сможете улучшить оценку, придумав данные ...
средство к значению

Ответы:

1

Я не эксперт по R, так что, возможно, есть более простой способ, но я сталкивался с этим раньше. Ранее я реализовал функцию, которая измеряет расстояние (в единицах времени) между фактическими датами и сохраняет его в новом столбце в существующем временном ряду. Итак, у нас есть что-то вроде:

index/date | value | distance  
01.01.2011 |  15   |   1  
02.01.2011 |  17   |   3  
05.01.2011 |  22   |   ..   

Таким образом, если ваш временной ряд еще не связан с фактическим рядом точек во времени (или неправильным форматом или чем-то еще), то вы все равно можете работать с ним.

Затем вы пишете функцию, которая создает для вас новый временной ряд, например:

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

Во-вторых, вы берете свой массив неполных временных рядов и, используя цикл, заполняете значения в правильную временную шкалу в соответствии с ограничениями по вашему выбору. Когда вы наталкиваетесь на строку, в которой единичное расстояние не равно единице (дни (единицы) отсутствуют), вы вводите интерполированные значения.

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

Если цикл достигает конечной даты, вы возвращаете свой новый тс.

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

IMA
источник
Спасибо, IMA, за полезный ответ! Итак, что я делаю сейчас: для дискретных пропущенных значений я использую интерполяцию (а также предоставленные пользователем «корректировки») для заполнения пропущенных данных. IMA, твой ответ в дальнейшем улучшении, это очень полезно. Для «обычных» пропущенных данных, таких как выходные, я преобразую свои данные в секунду, «псевдо», просто для целей прогнозирования, а затем преобразовываю результат обратно в «правильный» временной ряд, так что прогноз также будет иметь пропущенные значения в выходные дни Я все еще был бы благодарен за более изящное предложение о том, как обращаться с регулярными "пробелами" в выходные дни.
entreprogreur
@entreprogreur, я не ответил, IMA сделал. IMA получить полный кредит здесь. Я просто подправил форматирование, чтобы оно хорошо отображалось.
gung - Восстановить Монику
1

Вы должны быть очень осторожны, когда применяете интерполяцию перед дальнейшей статистической обработкой. Выбор, который вы делаете для своей интерполяции, вносит предвзятость в ваши данные. Это то, чего вы определенно хотите избежать, так как это может изменить качество ваших прогнозов. По моему мнению, для пропущенных значений, таких как те, которые вы упомянули, которые регулярно разнесены во времени и соответствуют остановке в действиях, было бы более правильным оставить эти дни вне вашей модели. В маленьком мире вашего колл-центра (модель, которую вы строите об этом), возможно, было бы лучше считать, что время просто остановилось, когда оно закрыто, вместо того, чтобы придумывать измерения несуществующей деятельности. С другой стороны, модель ARIMA была статистически построена на предположении, что данные расположены на одинаковом расстоянии. Насколько я знаю, нет никакой адаптации ARIMA к вашему делу. Если вам просто не хватает нескольких измерений в фактические рабочие дни, возможно, вам придется использовать интерполяцию.

Реми Д
источник
0

Я бы не стал интерполировать данные, прежде чем оценивать модель по этим данным, как заметил @Remi. Это плохая идея. Крайний пример: представьте, что у вас есть две точки данных за январь 2013 года и январь 2014 года. Теперь интерполируйте 10 месячных точек между: с февраля по декабрь 2013 года и выполните регрессию на месячной дате. На самом деле все будет не так плохо, но идея та же: в лучшем случае вы будете раздувать статистику.

Для этого нужно использовать методы временных рядов, которые обрабатывают недостающие данные. Например, методы пространства состояний. Посмотрите на пакет astsa R. Это идет с превосходной книгой по анализу временных рядов. Это хорошо справится с отсутствующими данными. Matlab теперь имеет похожую функциональность в пакете ssm . Вы должны научиться преобразовывать свои модели в форму пространства состояний, но вы должны научиться этому в любом случае, если хотите отойти от auto.arima«магии».

Аксакал
источник