Використання пакету R прогнозу з відсутніми значеннями та / або нерегулярними часовими рядами


16

Мене вражає forecastпакет R , а також, наприклад, zooпакет для нерегулярних часових рядів та інтерполяції відсутніх значень.

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

Справа в тому: все добре магія прогнозного пакета, наприклад eta(), і auto.arima()т.д., здається, чекають прості tsоб'єкти, тобто еквідистантно часових рядів , що не містять жодних - або відсутніх даних. Я думаю, що реальні додатки для часових рядів, що мають єдиний характер, безумовно, існують, але, на мій погляд, дуже обмежені.

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

Мої запитання:

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

    Чи варто просто "стиснути" часовий ряд, щоб заповнити вихідні дні, зробити прогноз, а потім знову "надути" дані, щоб знову вставити значення NA у вихідні дні? (Я гадаю, гадаю?)

    Чи планується зробити пакет прогнозу повністю сумісним з нерегулярними пакетами часових рядів, як-от зоопарк чи його? Якщо так, коли і якщо ні, то чому б ні?

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


Ласкаво просимо на сайт та на прогноз! Приклади реального світу для тимчасових рядів, що є лише для рівномірного періоду, безумовно, не дуже обмежені. Мені здається, я знаю небагато про прогнози, які надходять у ваш супермаркет, маючи на руках достатньо продукту для вирішення рекламного попиту, і, повірте, ті мільйони часових рядів (20 000 SKU в 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 або будь-який вибір з порожніми значеннями.

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

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

Якщо цикл досягне кінцевої дати, ви повернете свої нові ts.

Перевагою такої функції є те, що ви можете використовувати різні інтерполяції чи процедури обробки залежно від довжини зазору та повертати чисто створений ряд у обраному вами форматі. Після написання це дозволяє отримувати чисті та приємні зображення з будь-яких табличних даних. Сподіваюся, це вам якось допоможе.


Дякую, IMA, за корисну відповідь! Отже, що я зараз роблю: для дискретних відсутніх значень я використовую інтерполяцію (а також надані користувачем "корективи") для заповнення відсутніх даних. IMA, ваша відповідь у подальшому вдосконаленні дуже корисна. Для "звичайних" відсутніх даних, таких як вихідні, я перетворюю свої дані у секунду, "псевдо" лише для цілей прогнозування, а потім перетворюю результат назад у "правильний" часовий ряд, так що також прогноз матиме відсутні значення у вихідні дні. Я все одно буду вдячний за більш елегантну пропозицію щодо того, як впорядкувати регулярні «прогалини» у вихідні дні.
entreprogreur

@entreprogreur, я не відповів, IMA зробив. IMA отримати повний кредит тут. Я просто налаштував форматування, щоб воно добре відображалось.
gung - Відновити Моніку

1

Ви повинні бути дуже обережними, застосовуючи інтерполяцію перед подальшим статистичним лікуванням. Вибір, який ви робите для своєї інтерполяції, вносить упередження у ваші дані. Цього ви обов'язково хочете уникати, оскільки це може змінити якість ваших прогнозів. На мою думку, для пропущених значень, таких як ті, про які ви згадали, які регулярно розподіляються у часі і відповідають зупинці в діяльності, може бути правильніше залишати ці дні поза вашою моделлю. У маленькому світі вашого кол-центру (модель, про яку ви будуєте), можливо, краще вважати, що час просто зупинився, коли він закритий, а не придумувати вимірювання неіснуючої діяльності. З іншого боку, модель ARIMA була статистично побудована на припущенні, що дані однаково розташовані. Наскільки мені відомо, немає адаптації ARIMA до вашої справи. Якщо вам не вистачає декількох вимірювань у фактичні робочі дні, можливо, ви будете змушені використовувати інтерполяцію.


0

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

Шлях до цього - використовувати методи часових рядів, які обробляють відсутні дані. Наприклад, методи простору стану. Погляньте на пакунок astsa R. Він поставляється з чудовою книгою з аналізу часових рядів. Це прекрасно обробить відсутні дані. Matlab тепер має аналогічну функціональність у пакеті ssm . Ви повинні навчитися перетворювати свої моделі у форму простору стану, але вам це доведеться навчитися будь-коли, якщо ви хочете відійти від auto.arima"магії".

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.