# Введение в прогнозирование временных рядов ![Сводка временных рядов в виде скетчноута](../../../../translated_images/ml-timeseries.fb98d25f1013fc0c59090030080b5d1911ff336427bec31dbaf1ad08193812e9.ru.png) > Скетчноут от [Tomomi Imura](https://www.twitter.com/girlie_mac) В этом уроке и следующем вы узнаете немного о прогнозировании временных рядов — интересной и полезной части арсенала ученого в области машинного обучения, которая менее известна, чем другие темы. Прогнозирование временных рядов — это своего рода «хрустальный шар»: основываясь на прошлых данных о переменной, такой как цена, можно предсказать ее потенциальное значение в будущем. [![Введение в прогнозирование временных рядов](https://img.youtube.com/vi/cBojo1hsHiI/0.jpg)](https://youtu.be/cBojo1hsHiI "Введение в прогнозирование временных рядов") > 🎥 Нажмите на изображение выше, чтобы посмотреть видео о прогнозировании временных рядов ## [Тест перед лекцией](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/41/) Это полезная и интересная область, имеющая реальную ценность для бизнеса благодаря прямому применению к задачам ценообразования, управления запасами и проблемам цепочки поставок. Хотя методы глубокого обучения начали использоваться для получения более точных прогнозов, прогнозирование временных рядов остается областью, в значительной степени опирающейся на классические методы машинного обучения. > Полезный учебный курс по временным рядам от Penn State можно найти [здесь](https://online.stat.psu.edu/stat510/lesson/1) ## Введение Представьте, что вы управляете массивом умных парковочных счетчиков, которые предоставляют данные о том, как часто и как долго они используются с течением времени. > Что если вы могли бы предсказать, основываясь на прошлых данных о работе счетчика, его будущую ценность в соответствии с законами спроса и предложения? Точно предсказать, когда действовать для достижения своей цели, — это задача, которую можно решить с помощью прогнозирования временных рядов. Людям, конечно, не понравится, если им придется платить больше в часы пик, когда они ищут парковочное место, но это будет надежный способ заработать деньги на уборку улиц! Давайте изучим некоторые типы алгоритмов временных рядов и начнем работу с ноутбуком, чтобы очистить и подготовить данные. Данные, которые вы будете анализировать, взяты из конкурса прогнозирования GEFCom2014. Они включают три года почасовых данных о потреблении электроэнергии и температуре с 2012 по 2014 год. Учитывая исторические паттерны потребления электроэнергии и температуры, вы сможете предсказать будущие значения потребления электроэнергии. В этом примере вы научитесь прогнозировать один временной шаг вперед, используя только исторические данные о потреблении. Однако перед началом полезно понять, что происходит «за кулисами». ## Некоторые определения Когда вы сталкиваетесь с термином «временные ряды», важно понимать его использование в различных контекстах. 🎓 **Временные ряды** В математике «временные ряды — это последовательность точек данных, упорядоченных (или перечисленных, или отображенных на графике) в хронологическом порядке. Чаще всего временные ряды представляют собой последовательность, взятую в равномерно распределенные моменты времени». Пример временных рядов — это ежедневное значение закрытия [индекса Dow Jones](https://wikipedia.org/wiki/Time_series). Использование графиков временных рядов и статистического моделирования часто встречается в обработке сигналов, прогнозировании погоды, предсказании землетрясений и других областях, где события происходят, а точки данных можно отображать во времени. 🎓 **Анализ временных рядов** Анализ временных рядов — это изучение вышеупомянутых данных временных рядов. Данные временных рядов могут принимать различные формы, включая «прерывистые временные ряды», которые выявляют паттерны в эволюции временных рядов до и после прерывающего события. Тип анализа, необходимый для временных рядов, зависит от природы данных. Сами данные временных рядов могут быть представлены в виде последовательности чисел или символов. Анализ выполняется с использованием различных методов, включая методы частотной и временной области, линейные и нелинейные подходы и другие. [Узнайте больше](https://www.itl.nist.gov/div898/handbook/pmc/section4/pmc4.htm) о множестве способов анализа этого типа данных. 🎓 **Прогнозирование временных рядов** Прогнозирование временных рядов — это использование модели для предсказания будущих значений на основе паттернов, выявленных в ранее собранных данных. Хотя можно использовать регрессионные модели для изучения данных временных рядов, где временные индексы выступают в роли переменных x на графике, такие данные лучше анализировать с помощью специальных типов моделей. Данные временных рядов представляют собой список упорядоченных наблюдений, в отличие от данных, которые можно анализировать с помощью линейной регрессии. Наиболее распространенной моделью является ARIMA, акроним, который расшифровывается как «Автокорреляционная интегрированная скользящая средняя». [Модели ARIMA](https://online.stat.psu.edu/stat510/lesson/1/1.1) «связывают текущее значение ряда с прошлыми значениями и ошибками прошлых прогнозов». Они наиболее подходят для анализа данных временной области, где данные упорядочены во времени. > Существует несколько типов моделей ARIMA, о которых вы можете узнать [здесь](https://people.duke.edu/~rnau/411arim.htm) и которые вы изучите в следующем уроке. В следующем уроке вы создадите модель ARIMA, используя [Унивариантные временные ряды](https://itl.nist.gov/div898/handbook/pmc/section4/pmc44.htm), которые фокусируются на одной переменной, изменяющей свое значение во времени. Примером такого типа данных является [этот набор данных](https://itl.nist.gov/div898/handbook/pmc/section4/pmc4411.htm), который фиксирует ежемесячную концентрацию CO2 на обсерватории Мауна-Лоа: | CO2 | YearMonth | Year | Month | | :----: | :-------: | :---: | :---: | | 330.62 | 1975.04 | 1975 | 1 | | 331.40 | 1975.13 | 1975 | 2 | | 331.87 | 1975.21 | 1975 | 3 | | 333.18 | 1975.29 | 1975 | 4 | | 333.92 | 1975.38 | 1975 | 5 | | 333.43 | 1975.46 | 1975 | 6 | | 331.85 | 1975.54 | 1975 | 7 | | 330.01 | 1975.63 | 1975 | 8 | | 328.51 | 1975.71 | 1975 | 9 | | 328.41 | 1975.79 | 1975 | 10 | | 329.25 | 1975.88 | 1975 | 11 | | 330.97 | 1975.96 | 1975 | 12 | ✅ Определите переменную, которая изменяется во времени в этом наборе данных. ## Характеристики данных временных рядов, которые нужно учитывать При изучении данных временных рядов вы можете заметить, что они обладают [определенными характеристиками](https://online.stat.psu.edu/stat510/lesson/1/1.1), которые необходимо учитывать и устранять, чтобы лучше понять их паттерны. Если рассматривать данные временных рядов как потенциальный «сигнал», который вы хотите анализировать, эти характеристики можно считать «шумом». Часто требуется уменьшить этот «шум», компенсируя некоторые из этих характеристик с помощью статистических методов. Вот некоторые понятия, которые вам следует знать для работы с временными рядами: 🎓 **Тренды** Тренды определяются как измеримые увеличения и уменьшения с течением времени. [Узнайте больше](https://machinelearningmastery.com/time-series-trends-in-python). В контексте временных рядов речь идет о том, как использовать и, если необходимо, удалять тренды из данных. 🎓 **[Сезонность](https://machinelearningmastery.com/time-series-seasonality-with-python/)** Сезонность определяется как периодические колебания, например, всплески продаж в праздничные дни. [Посмотрите](https://itl.nist.gov/div898/handbook/pmc/section4/pmc443.htm), как различные типы графиков отображают сезонность в данных. 🎓 **Выбросы** Выбросы — это точки данных, которые значительно отклоняются от стандартной дисперсии данных. 🎓 **Долгосрочные циклы** Независимо от сезонности, данные могут демонстрировать долгосрочные циклы, такие как экономический спад, который длится более года. 🎓 **Постоянная дисперсия** С течением времени некоторые данные демонстрируют постоянные колебания, например, использование энергии днем и ночью. 🎓 **Резкие изменения** Данные могут демонстрировать резкие изменения, которые требуют дальнейшего анализа. Например, внезапное закрытие бизнеса из-за COVID вызвало изменения в данных. ✅ Вот [пример графика временных рядов](https://www.kaggle.com/kashnitsky/topic-9-part-1-time-series-analysis-in-python), показывающий ежедневные расходы на внутриигровую валюту за несколько лет. Можете ли вы определить какие-либо из перечисленных выше характеристик в этих данных? ![Расходы на внутриигровую валюту](../../../../translated_images/currency.e7429812bfc8c6087b2d4c410faaa4aaa11b2fcaabf6f09549b8249c9fbdb641.ru.png) ## Упражнение — начало работы с данными о потреблении электроэнергии Давайте начнем создавать модель временных рядов для прогнозирования будущего потребления электроэнергии на основе прошлых данных. > Данные в этом примере взяты из конкурса прогнозирования GEFCom2014. Они включают три года почасовых данных о потреблении электроэнергии и температуре с 2012 по 2014 год. > > Tao Hong, Pierre Pinson, Shu Fan, Hamidreza Zareipour, Alberto Troccoli и Rob J. Hyndman, "Probabilistic energy forecasting: Global Energy Forecasting Competition 2014 and beyond", International Journal of Forecasting, vol.32, no.3, pp 896-913, July-September, 2016. 1. В папке `working` этого урока откройте файл _notebook.ipynb_. Начните с добавления библиотек, которые помогут вам загружать и визуализировать данные: ```python import os import matplotlib.pyplot as plt from common.utils import load_data %matplotlib inline ``` Обратите внимание, что вы используете файлы из включенной папки `common`, которые настраивают вашу среду и обрабатывают загрузку данных. 2. Далее изучите данные в виде датафрейма, вызвав `load_data()` и `head()`: ```python data_dir = './data' energy = load_data(data_dir)[['load']] energy.head() ``` Вы можете увидеть, что есть два столбца, представляющих дату и потребление: | | load | | :-----------------: | :----: | | 2012-01-01 00:00:00 | 2698.0 | | 2012-01-01 01:00:00 | 2558.0 | | 2012-01-01 02:00:00 | 2444.0 | | 2012-01-01 03:00:00 | 2402.0 | | 2012-01-01 04:00:00 | 2403.0 | 3. Теперь постройте график данных, вызвав `plot()`: ```python energy.plot(y='load', subplots=True, figsize=(15, 8), fontsize=12) plt.xlabel('timestamp', fontsize=12) plt.ylabel('load', fontsize=12) plt.show() ``` ![график энергии](../../../../translated_images/energy-plot.5fdac3f397a910bc6070602e9e45bea8860d4c239354813fa8fc3c9d556f5bad.ru.png) 4. Затем постройте график первой недели июля 2014 года, указав ее в качестве входных данных для `energy` в формате `[с даты]: [по дату]`: ```python energy['2014-07-01':'2014-07-07'].plot(y='load', subplots=True, figsize=(15, 8), fontsize=12) plt.xlabel('timestamp', fontsize=12) plt.ylabel('load', fontsize=12) plt.show() ``` ![июль](../../../../translated_images/july-2014.9e1f7c318ec6d5b30b0d7e1e20be3643501f64a53f3d426d7c7d7b62addb335e.ru.png) Прекрасный график! Взгляните на эти графики и попробуйте определить какие-либо из перечисленных выше характеристик. Что можно заключить, визуализируя данные? В следующем уроке вы создадите модель ARIMA для создания прогнозов. --- ## 🚀Задача Составьте список всех отраслей и областей исследований, которые, по вашему мнению, могли бы извлечь выгоду из прогнозирования временных рядов. Можете ли вы придумать применение этих методов в искусстве? В эконометрике? Экологии? Розничной торговле? Промышленности? Финансах? Где еще? ## [Тест после лекции](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/42/) ## Обзор и самостоятельное изучение Хотя мы не будем рассматривать их здесь, нейронные сети иногда используются для улучшения классических методов прогнозирования временных рядов. Узнайте больше об этом [в этой статье](https://medium.com/microsoftazure/neural-networks-for-forecasting-financial-and-economic-time-series-6aca370ff412) ## Задание [Визуализируйте еще несколько временных рядов](assignment.md) --- **Отказ от ответственности**: Этот документ был переведен с помощью сервиса автоматического перевода [Co-op Translator](https://github.com/Azure/co-op-translator). Несмотря на наши усилия обеспечить точность, автоматические переводы могут содержать ошибки или неточности. Оригинальный документ на его исходном языке следует считать авторитетным источником. Для получения критически важной информации рекомендуется профессиональный перевод человеком. Мы не несем ответственности за любые недоразумения или неправильные толкования, возникшие в результате использования данного перевода.