Pull to refresh

Comments 25

В R есть пакет forecast, а в нем функция auto.arima. Проверьте на нем.

Даже нашел описание. Может Вам пригодится.

Сам R простой, не пугайтесь. В целях использования ARIMA и фильтра Калмана, если нужно восстанавливать пропуски, разобраться с ним можно за несколько часов.

А мы в универе сначала добивается стационарности, а потом смотрим на гиперпараметры p и q, при которых наименьшие значения информационных критериев. Только делается это в gretl пятью кликами. Попробуйте, там ошибиться негде

Спасибо за рекомендацию!

Стационарности ряда я добилась, но гиперпараметры p и q ACF и PACF дали не очень удачные, optuna подобрала лучше

Про gretl до этого не слышала, попробую

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

optuna можно попробовать еще донастроить

В следующей статье расскажу, не хотела эту перегружать😄

Если данных не много и у них большой разброс, можно сделать сглаживание, и на сглаженных данных применять модели ARMA.

Также, с учётом специфика можно применить модель ARCH, если параметры гетероскедастичности, как, например на биржевых котировках.

Спасибо за информацию!

Сглаживание я не пробовала, учту на будущее

Уважаемая Марина, не без интереса прочитал Ваш пост и, поверьте, крайне удивлен, что АРСС модели/методы ещё живы. Позвольте несколько замечаний, которые , как мне кажется, улучшили бы текст. Во-первых, в начале статьи следовало бы сразу определиться с моделью процесса (отображаемого временным рядом) - процесс есть аддитивная смесь детерминированного процесса и случайного процесса стационарного в узком/широком смысле. Во-вторых, в части случайного процесса Вы представляете гауссов (почему именно его) процесс. Почему этого достаточно? В третьих, строго определитесь с понятием стационарности. Это позволит избежать сентенций "Стационарный ряд в первом приближении можно считать просто чем-то похожим на синус". Представлен ряд ни разу не является случайным процессом, и, следовательно, к нему пряд ли применимо понятие стационарности. Это АР-процесс первого порядка, заданный рекурсивным уравнением в конечных разностях первого порядка. Это именно та детерминированная часть модели, которую Вы строите, используя АРМА метод. Есть ещё места в тексте, которые требовалось бы поправить, но они больше связаны собственно с инструментами, которые Вы используете. А в заключение - бросьте эти методы и плюньте на них слюной. Они перекочевали в экономику из радио/гидро/сейсмо-локации. Они обсуждались сообществом с середины 60х до середины 90х прошлого века. В сухом остатке - "гора родила мышь", поскольку 2 основных априорных предположения о гауссовости случайной части и собственно детерминированной части в виде АРСС являются чрезвычайно жёсткими, и, как только, реальный процесс не соответствует этой модели, результат непредсказуем. Искренне.

Спасибо большое за такую подробную обратную связь!

Я только учусь, так что Ваше комментарий очень ценен для меня

А Вы могли бы посоветовать другие подходы для предсказания временных рядов? Я сейчас остановилась на пакете FEDOT, т.к. пока ничего лучше не нашла для предсказаний, но, может быть, я просто плохо искала

Марина, если отбросить много буков, ранее сказанных, то самое первое, что необходимо сделать - это понять суть того процесса, который Вы наблюдаете. Я вижу, простите, что у Вас в голове каша. Давайте сформулируем задачу, а она, задача, такова, что Вы ходите разделить процесс на 2 составляющих - случайную и детерминированную, зависящую от времени. Ведь так? Далее надо попытаться понять - шум аддитивен или мультипликативен, что следует из физической сути процесса. Далее - насколько применима модель детерминированной части в виде уравнения в конечных разностях. Для этих моделей очень важен порядок, особенно в АР части, поскольку эта часть отвечает за колебания. При превышении порядка решение неустойчиво. СС составляющая даёт тренды - превышение порядка здесь не столь существенно. Вам надо почувствовать на что влияют глобальные параметры модели. Как-то так. А про пакеты пока забудьте, поймите физическую сущность процесса. Больше не утомляю. Удачи.

Pycaret попробуйте, там в несколько строчек можно сразу по 10+ моделям получить показатели

Марина, статья отличная.

Попробуйте на досуге fbprophet. Тестировал на огромном количестве разных временных рядов в паре с SARIMA. При примерно той же накопленной ошибке прогноза fbprophet кратно быстрее и проще в использовании. Также подходит для временных рядов разной размерности.

Есть ещё neuralprophet. Там к аддитивной модели из fbprophet подкручена нейронка. Коллеги пишут, что стало ещё точнее, но сам ручками не трогал.

Добрый день!

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

Во-вторых, если уж Вы начали с максимально общего определения "есть скачущие туда-сюда точки, которые распределены по временной шкале", то затем надо сказать, КАК ИМЕННО они распределены по временной шкале. Все написанное в статье (да и в большинстве источников в интернете) - это про ряды с равномерным шагом по времени. Но есть еще тьма рядов, где интервал меду измерениями не одинаковый. Например, часть наблюдений пропущена. Или вообще измерения проводятся, когда получится.

В-третьих, нельзя писать "...рекомендуют применять для данных от трёх лет", не сказав ничего про частоту опроса. Если Ваши данные - это среднегодовые значения, то трех лет наблюдений ни для какой модели не хватит ;-) И наоборот, для сигнала с частотой 100Гц нескольких секунд будет достаточно. В общем, гораздо правильнее говорить про длину ряда в точках, а не в годах ;-)

Ну и теперь чуть более сложная часть комментария - для тех, кто хочет разобраться поглубже, а не просто "сдал и забыл". Прежде всего, не надейтесь, что какая-то типовая модель будет хорошо аппроксимировать Ваш ряд. Да, в жизни изредка встречаются совершенно стандартные временные ряды, в точности подходящие под условия применимости той или иной типовой модели. Но гораздо чаще такого соответствия нет. Т.е. просто "взять и применить модель" не получится (если, конечно, нужен хороший результат, а не просто "на, отвяжись"). Вы молодец, что проверяете качество модели. Однако проблема в том, что хорошие формальные метрики совершенно не гарантируют, что модель адекватна. Так как они все на самом деле условны. А именно, полная фраза звучит так:
ЕСЛИ выполнены (список условий) перечисленные условия,
ТО низкая дисперсия остатка говорит о хорошем соответствии модели и данных.
Так вот, на дисперсию остатка смотрят все и всегда, а вот о списке условий иногда забывают. Хуже того, про него даже в описании моделей и методик далеко не всегда говорят. Хотя это - ключевой момент. Ведь если они не выполнены, то и вторая (результирующая) часть тезиса беспредметна.

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

1. Первый совет - если вы хотите глубоко разобраться в структуре сигнала и научиться его качественно прогнозировать, не пытайтесь применять какие-либо модели к ряду в целом. Сначала разберите ряд на детали! То есть, начните с декомпозиции сигнала на составляющие с максимально простыми свойствами, по возможности опираясь при этом на физику явления. Например, в экономике это может быть тренд, сезонная и календарная и/или недельная компоненты, эффекты возмущений (праздники и т.п.), разовые ЧЛ (ковид, СВО), квазислучайная составляющая и т.д. Чтобы найти и выделить эти компоненты, начните с разведочного анализа (для понимания принципов очень советую книжку Дж. Тьюки. Да, она очень неторопливая и страшно старая (там даже про компьютерные методы ничего еще нет), но зато она простым языком (без избытка формул) дает базу.

2. Затем, зная основные элементы сигнала, выделите каждую составляющую в чистом виде. Отдельно - стационарные, отдельно нестационарные. После чего можно строить техническую модель каждой составляющей, разглядывая ее буквально "под микроскопом". Если вы хотите иметь хороший прогноз, то это единственный путь. Ведь хороший прогноз - это на самом деле НЕ точный прогноз (как многие ошибочно думают), а прогноз с достоверно известной погрешностью, причем очень желательно - минимально возможной для данного ряда. А оценка погрешности прогноза возможна либо методом "грубой силы" (при наличии немеряного количества данных), либо при использовании очень простых малопараметрических моделей, где нет хитрых взаимосвязей между параметрами. То есть, единственный путь - это максимальное упрощение каждой "элементарной модели", из которых потом Вы, как из кирпичиков, сложите итоговую конструкцию сигнала.

3. Вообще, очень многие ряды в принципе не позволяют давать точные прогнозы - таковы внутренние свойства сигнала. Да, под такой ряд можно очень неплохо подогнать какую-то модель, если у нее достаточно много настроечных параметров или (внимание!) вы перепробуете достаточно много разных моделей (что по сути эквивалентно добавлению неявных параметров в модель - т.н. p-хакинг). Но как только вы выйдете за тестовые данные, прогноз даст лажу. Часто совершенно неожиданную, ведь данные так хорошо ложились на модель, вроде бы?! Это называется "сверхподгонка".

Ведь что такое прогноз временного ряда? Это изучение наблюдаемых (реально существующих!) закономерностей и их экстраполяция в будущее. Чудес не бывает. Чем точнее вы выделите и опишете эти закономерности, тем точнее будет прогноз. Чем лучше вы оцените погрешность экстраполяции каждой составляющей, тем более адекватной получится оценка погрешности прогноза в целом.

4. Ключевой момент тут - это поиск закономерностей в сигнале. Все "модели" фактически именно этим и занимаются. Причем часто их результаты обусловлены базовыми гипотезами. Поясню на простом примере. Например, модель может (неявно) формулироваться так:
ДОПУСТИМ, что наш сигнал состоит из синусоиды и белого шума.
ТОГДА оптимальный метод оценки параметров этой синусоиды (...длинные формулы, которые никто не читает...) и, следовательно, получаем
ОТВЕТ (...короткие простые формулы, которые дают период, амплитуду и фазу искомой синусоиды и их сигмы, и которые мы фактически и используем, применяя модель).

Так вот, основной подвох тут в том, что вместе с "длинными формулами" (которые часто действительно можно и не читать) мы сплошь и рядом пропускаем вводную часть со словом "ДОПУСТИМ". Хуже того, иногда ее и авторы учебников пропускают, полагая самоочевидной и тривиальной... Но если наш сигнал не совсем точно удовлетворяет этим "допустим", то и результирующие формулы получатся "пальцем в небо". Причем наиболее катастрофические ошибки будут в этом случае не в значениях параметров, а в их сигмах (стандартных отклонениях). Из-за чего эти ошибки становятся очевидными далеко не сразу. Например, если шум на самом деле не белый, а броуновский, то описанную выше модель можно смело посылать лесом. С реальностью она не будет иметь вообще ничего общего. Иначе (если довериться этим оценкам, сделанным в самой последней версии самой лучшей программы) мы потом будем с возмущением удивляться: как же так, модель идеально подогналась к обучающей выборке, прогноз был дан с точностью до 0.01, а в реальности ошибка составила 100. Неужели пакет (подставьте название) настолько кривой? Да нет, все гораздо проще - мы просто невнимательно прочитали раздел "ДОПУСТИМ" и недостаточно хорошо проверили, что наш тестовый сигнал ему в точности соответствует... Последнее, кстати, тоже далеко не тривиально, особенно если количество/качество данных не совсем такое, как нужно...

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

Где об этом почитать подробнее?

Если честно - не знаю;-)

Мне попадались хорошие современные книжки и курсы (примерно одна из 10-20 ссылок в поисковике), но обычно это происходило, когда я искал ответ на какой-то конкретный вопрос, поэтому книжку в целом я не читал и ссылки не коллекционировал... :-( А из "настольного" у меня либо что-то совсем не подходящее для введения в тему (в математическом стиле - с кучей формул, в которые я сам врубаюсь с трудом, и минимумом текста), либо "неувядающая классика" вроде Дженкинса и Бокса (и другие их книжки), в которой, однако, очень мало внимания обращается на реальные жизненные проблемы (нестационарность, различные аномалии и дефекты данных и пр.), работа с которыми в реале занимает 90% времени... Хотя как введение в тему, наверно, нормально (только имхо затянуто чересчур). В общем, приведу в качестве примера несколько наших статей (как мы работали с реальными кейсами) - не потому, что они чем-то особенно хороши, а просто потому, что если вдруг что, то я смогу на возникшие вопросы ответить ;-)
- декомпозиция ряда на составляющие (раз, два, три)
- модели квазипериодических составляющих (раз, два, три)
- что может пойти не так, если шум не белый (раз, два)
- про ряды с пропущенными наблюдениями (раз, два)

А их полные тексты можно взять вот отсюда

Спасибо огромное! Очень ценная обратная связь, пойду читать
Теперь плюс-минус понятно хотя бы куда копать)

Спасибо за оценку! Могу еще повторить сказанную выше MrSpud очень мудрую фразу:

А про пакеты пока забудьте, поймите физическую сущность процесса.

Если хотите разобраться в теме всерьез, то на начальном этапе выбор пакета вообще не имеет значения. Первый шаг - это понять, что и зачем Вы делаете (можете сделать). Для этого подойдет любая среда визуализации, которая позволит наглядно поэкспериментировать с простейшими моделями. Начиная с самых тривиальных. Типа алгебраического тренда, синусоиды, пилы, меандра, случайного дрейфа, шума и пр. Периодические элементы берите с некратными периодами и с нецелым числом периодов. Просуммируйте вручную несколько таких элементов, - у Вас получится тест-сигнал. А потом попробуйте эти составляющие из сигнала вычленить, и сравните оценки их параметров с истинными значениями. Особенно посмотрите на погрешности оценок. Для начала просто вручную (без "пакетных" моделей) оцените все параметры по вики-формулам. Для прямой/синусоиды они не сложные. Многое понятнее станет, особенно если шум не белый ;-) Главное - на каждом шаге смотрите на графики всех составляющих. Это очень способствует пониманию, особенно когда что-то идет "не так". Собственно, ради этого все это и нужно: понять, насколько легко оно может "пойти не так". И только после этого, зная цену той "лапше", которая напрашивается нам на уши, начинайте эксперименты с реальными моделями и пакетами.

А еще очень полезно бывает подать на вход любой модели из любого пакета АВР броуновский шум (=интеграл от белого шума=БШ). И посмотреть - как она там будет искать "свои" элементы. И ведь найдет же! И синусоиду, и меандр, и АРСС, и все остальное. Хотя на самом деле в сигнале нет ничего, кроме проинтегрированного БШ. Это позволит понять, насколько важно проверять "условия применимости".

В общем, не пожалейте времени потратить денек на такие эксперименты, которые показывают разницу между теоретическим идеалом и жизненной правдой. И лишь после этого, уже имея в своей косметичке такую вот "вилочку для снятия лапши с ушей", переходите к экспериментам с теми примерами, на которых обычно демонстрируется работа пакетов (и, тем более, к реальным кейсам). Если Вам попадется плохой учебник, у Вас уже будет иммунитет к "макаронам". А если хороший, то Вы с легкостью прочитаете весь тот подтекст, который кроется за невзрачным словом "ДОПУСТИМ" в самом начале повествования...На мой субъективный взгляд, такой "скучнодень" с раскручиванием тривиальных моделей позволит потом гораздо легче нажить тот "профессиональный опыт", к которому многие практики приходят лишь ценой тяжелых мучений ;-)

Sign up to leave a comment.

Articles