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

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

Введение в библиотеку

Prophet разработан командой Facebook и представляет собой фреймворк, специализированный именно для анализа временных рядов. Его главное преимущество заключается в том, что он делает процесс анализа более доступным, упрощая создание моделей и прогнозирование.

Основные функции Prophet включают:

  • Автоматическое обнаружение сезонности: Одной из ключевых особенностей Prophet является его способность автоматически обнаруживать сезонные колебания в данных. Независимо от того, являются ли данные ежедневными, ежемесячными или другими, библиотека сама определит периодичность и интенсивность сезонных изменений.

  • Учет праздников и событий: Prophet позволяет встроить в модель информацию о праздниках, событиях и других внешних факторах, которые могут влиять на временные данные. Это существенно повышает качество прогнозов и учет изменчивости данных в разные периоды.

  • Гибкость настройки параметров: Библиотека предоставляет пользователю контроль над параметрами модели, что позволяет более точно настроить её под конкретные данные и требования. Это обеспечивает баланс между автоматизацией и гибкостью.

Пример использования: Прогнозирование продаж в розничной торговле

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

# Установка и импорт необходимых библиотек
!pip install prophet
from fbprophet import Prophet

# Подготовка данных в формате DataFrame с колонками 'ds' (дата) и 'y' (значение)
data = {'ds': ['2023-01-01', '2023-01-02', '2023-01-03', ...],
        'y': [100, 120, 90, ...]}
df = pd.DataFrame(data)

# Создание и обучение модели
model = Prophet()
model.fit(df)

# Создание фреймворка для прогнозирования на будущее
future = model.make_future_dataframe(periods=30)  # Прогноз на 30 дней вперед
forecast = model.predict(future)

# Визуализация прогнозов
fig = model.plot(forecast)

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

Применение библиотеки Prophet для анализа временных рядов

Пример 1:

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

Шаг 1: Подготовка данных.

Для начала импортируем необходимые библиотеки и загрузим данные:

import pandas as pd
from fbprophet import Prophet
import matplotlib.pyplot as plt

# Загрузка данных
data = pd.read_csv('sales_data.csv')

Посмотрим на структуру данных и убедимся, что она соответствует ожиданиям:

print(data.head())
print(data.info())

Подготовим данные, приведя столбец с датами к формату datetime:

data['Date'] = pd.to_datetime(data['Date'])

Шаг 2: Построение модели с Prophet.

Теперь, когда данные готовы, давайте создадим модель Prophet. Мы будем учитывать сезонность и праздники, так как они могут оказать влияние на продажи.

# Создание модели
model = Prophet(
    growth='linear',           # Линейный рост
    seasonality_mode='additive',  # Аддитивная сезонность
    yearly_seasonality=True,    # Годовая сезонность
    weekly_seasonality=True,    # Недельная сезонность
    daily_seasonality=False,    # Дневная сезонность
    holidays_prior_scale=10,    # Влияние праздников
)

# Добавление праздников
holidays = pd.DataFrame({
    'holiday': 'black_friday',
    'ds': pd.to_datetime(['2018-11-23', '2019-11-29', '2020-11-27']),
    'lower_window': 0,
    'upper_window': 1,
})
model.add_country_holidays(country_name='US')
model.add_seasonality(name='monthly', period=30.5, fourier_order=5)
model.fit(data)

Шаг 3: Создание фреймворка для прогнозов и визуализация.

Создадим фреймворк для прогнозирования на будущее и получим прогнозы:

future = model.make_future_dataframe(periods=365)  # Прогноз на год вперед
forecast = model.predict(future)

Теперь давайте визуализируем результаты:

fig1 = model.plot(forecast)
plt.title('Прогноз продаж')
plt.xlabel('Дата')
plt.ylabel('Продажи')
plt.show()

Шаг 4: Анализ и интерпретация.

Анализируя график прогноза, мы видим, как модель учитывает сезонность и праздники. Мы можем также взглянуть на компоненты модели:

fig2 = model.plot_components(forecast)
plt.show()

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

Пример 2:

3. Применение библиотеки Prophet для анализа временных рядов: Решение задачи прогнозирования продаж.

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

Шаг 1: Установка и настройка библиотеки.

Сгенерируем синтетические данные о продажах на протяжении нескольких месяцев.

import pandas as pd
import numpy as np
from fbprophet import Prophet
import matplotlib.pyplot as plt

# Генерация синтетических данных о продажах
np.random.seed(42)
dates = pd.date_range(start='2023-01-01', periods=365, freq='D')
sales = np.random.randint(50, 200, size=len(dates))
sales_data = pd.DataFrame({'ds': dates, 'y': sales})

Шаг 2: Подготовка данных и создание модели.

Теперь, когда у нас есть данные о продажах, давайте подготовим их к анализу. Мы преобразуем столбец дат в формат datetime и создадим модель Prophet.

# Преобразование столбца 'ds' в формат datetime
sales_data['ds'] = pd.to_datetime(sales_data['ds'])

# Создание и настройка модели
model = Prophet()
model.fit(sales_data)

Шаг 3: Создание фреймворка для прогнозирования.

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

# Создание фреймворка для прогнозирования на следующие 6 месяцев
future = model.make_future_dataframe(periods=180, freq='D')

Шаг 4: Получение и визуализация прогнозов.

Теперь, когда мы подготовили фреймворк для прогнозирования, давайте получим прогнозы на будущие 6 месяцев и визуализируем результаты.

# Получение прогнозов
forecast = model.predict(future)

# Визуализация результатов
fig = model.plot(forecast)
plt.title('Прогноз продаж на следующие 6 месяцев')
plt.xlabel('Дата')
plt.ylabel('Продажи')
plt.show()

Проанализировав сгенерированные синтетические данные о продажах, мы использовали библиотеку Prophet для создания модели прогнозирования. Модель учитывает сезонные колебания, тренды и праздники, что позволяет получить более точные прогнозы на будущие периоды.

Заключение

Библиотека Prophet открывает новые горизонты в анализе временных рядов. Её простота использования и автоматическое обнаружение сезонности делают её незаменимым инструментом для точных прогнозов.

В заключение рекомендую посетить открытый урок, посвященный теме сбора требований в работе дата-аналитика. Урок в первую очередь будет интересен начинающим специалистам в области анализа данных. Аналитики, работающие с подготовкой ручной отчетности, тоже смогут получить полезные знания о том, как оптимизировать свою работу. Записаться можно на странице курса «Аналитик данных».

Комментарии (4)


  1. dyadyaSerezha
    15.08.2023 06:15
    +1

    Я понимаю, что всё легко гуглится, но почему бы в начале статьи сразу не упомянуть, что библиотека для Питона. А если есть версии и для других языков, то тоже указать. Банальное уважение к читателям.


  1. baldr
    15.08.2023 06:15
    +3

    Посмотрим на структуру данных и убедимся, что она соответствует ожиданиям:

    И ни одного примера вывода, несмотря на print(). Картинок тоже нет. Потерялось?

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

    Хотите пример? Пожалуйста. Статья 6.5-летней (!!) давности, на ту же самую тему и на данный момент прекрасно актуальна, причем, гораздо подробнее.

    Ну потратьте вы немного времени, добавьте, например, сравнения с другими библиотеками. Чем Prophet лучше?

    Во всех статьях про Prophet один и тот же пример - прогнозирование в зависимости только от времени. Но не бывает в реальной жизни таких простых зависимостей. И даже Prophet позволяет предсказывать по нескольким полям. Добавьте это в статью - и сразу ценность вырастет в разы!


    1. sunsexsurf
      15.08.2023 06:15

      Поддержу вас по всем пунктам. Статья - просто перевод.

      Автору статьи: в чем ценность? В том, что вы импортнули библиотеку и сделали по ней фит/предикт? Ну да, достойно. Тогда можете еще несколько таких статей написать: как вы тинькоффскую по ВР импортнули, как вы линкединовскую импортнули…

      Рано или поздно дойдете до сравнений.


  1. GospodinKolhoznik
    15.08.2023 06:15
    +1

    Я так понимаю, что питон среди языков теперь то же, что Москва среди городов? Можно не указывать город, по дефолту Москва, можно не указывать язык, по дефолту питон?