Обработка временных рядов

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

Что вы узнали, глядя на эти цифры? Первое, что бросается в глаза, это то, что цифры отмечаются в разные дни месяца, с 1 февраля по 28 февраля. Продажи фиксируются с интервалом в один день, за все 28 дней. Внезапно у вас возникает ощущение, что, может быть, это временной ряд…?

Да, это действительно набор данных временных рядов. Данные сортируются с использованием временных интервалов, и они как бы связаны со временем. Как? Теперь Hooman выводит данные на график. Вы с хуманом немедленно находите закономерности, которые могут быть связаны со временем.

Хуман говорит вам, что нашел на этом графике три интересных вывода, которые могут иметь некоторое значение. Он указывает, что:

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

Это делает вас любопытным. Это нормально? Как вы собираетесь объяснять эти события? Это слишком сложно для обработки! Hooman теперь спрашивает вас, что, если бы вы могли найти точную закономерность взлетов и падений продаж? Вы понимаете, что могли бы найти вариации, упомянутые в третьем пункте, если бы знали «идеальный» паттерн. Да, ты прав. Хуман говорит, что он называет «идеальный» паттерн этих циклических взлетов и падений СЕЗОННОСТЬЮ. Постепенное увеличение, которое вы обнаружили, несмотря на взлеты и падения (в пункте 2), называется ТРЕНД (человек говорит, что это может быть и уменьшение значений). А отклонение ваших данных от «идеального» шаблона называется ОСТАТОКИ.

Теперь, как будет выглядеть сезонность ваших данных? Hooman показывает закономерность взлетов и падений данных о продажах:

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

Ух ты! Hooman, наконец, показал вам общее направление изменений в вашем отчете о продажах. Здесь видно, что некоторые пункты ваших данных о продажах далеки от вашего тренда, да и сезонность тоже. После сравнения ваших данных как с тенденцией, так и с сезонностью, неучтенные точки, которые вы обнаружите, являются остатками. Теперь Hooman покажет вам сравнение:

Таким образом, есть ряд точек, которые довольно далеки от идеальных значений. Теперь, почему ваши данные имеют шаблон? Или отклонение от шаблона? Должно же быть объяснение, верно? Теперь вы начинаете думать, что обычно происходит в четверг или пятницу. Ну, в Purrsday, то есть в четверг, ты обычно устаешь. Быть кошкой — непростая работа. Поскольку человек не выходит на улицу и не работает дома из-за этой дурацкой пандемии, вы тоже очень усердно работаете с ним в будние дни, согревая его колени. Таким образом, вы не выходите на улицу и продолжаете получать фишки из своего запаса. Вы пополняете свой запас в пятницу, потому что обычно веселитесь со своим другом-хуманом на выходных, в субботу и воскресенье и часто едите чипсы. Итак… Это имеет смысл, не так ли? Ваше поведение и поведение большинства ваших пушистых друзей соответствует этому шаблону.

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

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

Теперь, когда вы узнали обо всех этих хлопотных компонентах, вы начинаете думать, зачем вам вообще это знать? Теперь Хуман говорит, что временной ряд со всеми этими компонентами трудно анализировать. Он называет это НЕСТАЦИОНАРНЫМ временным рядом. Когда компоненты разделены, он превращается в временной ряд СТАЦИОНАРНЫЙ. Поскольку компоненты разделены в стационарном наборе данных, становится легче анализировать.

Теперь большой вопрос. Как вы делаете это разделение? Hooman и в этом случае предпочитает библиотеки Python. Он показывает вам пример:

from statsmodels.tsa.seasonal import seasonal_decompose 
data =[10,12,9,12,6,5,16,
       12,15,11,13,15,5,18,
       11,17,12,14,8,8,21,
       13,5,13,15,11,12,23] 
nresult=seasonal_decompose(data, model='additive', freq=4) nresult.plot() 
plt.show()

Вывод этого кода выглядит так:

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

Предыдущая часть: https://orthymarjan.medium.com/data-science-for-cats-part-3-24ade26aa5f3

Следующая часть: https://orthymarjan.medium.com/data-science-for-cats-part-5-93eb20eb1ad8

Первоначально опубликовано на https://dev.to 7 ноября 2020 г.