В современном мире, где данные играют ключевую роль в принятии стратегических решений, анализ временных рядов занимает центральное место в предсказании трендов и планировании. Стремительный рост объемов данных в сочетании с необходимостью оперативного реагирования на изменения делает анализ временных рядов критически важным инструментом для бизнеса и науки.
В этом контексте, библиотека 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)
baldr
15.08.2023 06:15+3Посмотрим на структуру данных и убедимся, что она соответствует ожиданиям:
И ни одного примера вывода, несмотря на
print()
. Картинок тоже нет. Потерялось?Статья - снова перепечатка офсправки, без каких-либо попыток что-то улучшить. Ещё раз вам говорю - такие статьи очень плохо рекламируют ваш OTUS. На курсах тоже лектор монотонно бубнит буквы из распечатанной документации?
Хотите пример? Пожалуйста. Статья 6.5-летней (!!) давности, на ту же самую тему и на данный момент прекрасно актуальна, причем, гораздо подробнее.
Ну потратьте вы немного времени, добавьте, например, сравнения с другими библиотеками. Чем Prophet лучше?
Во всех статьях про Prophet один и тот же пример - прогнозирование в зависимости только от времени. Но не бывает в реальной жизни таких простых зависимостей. И даже Prophet позволяет предсказывать по нескольким полям. Добавьте это в статью - и сразу ценность вырастет в разы!
sunsexsurf
15.08.2023 06:15Поддержу вас по всем пунктам. Статья - просто перевод.
Автору статьи: в чем ценность? В том, что вы импортнули библиотеку и сделали по ней фит/предикт? Ну да, достойно. Тогда можете еще несколько таких статей написать: как вы тинькоффскую по ВР импортнули, как вы линкединовскую импортнули…
Рано или поздно дойдете до сравнений.
GospodinKolhoznik
15.08.2023 06:15+1Я так понимаю, что питон среди языков теперь то же, что Москва среди городов? Можно не указывать город, по дефолту Москва, можно не указывать язык, по дефолту питон?
dyadyaSerezha
Я понимаю, что всё легко гуглится, но почему бы в начале статьи сразу не упомянуть, что библиотека для Питона. А если есть версии и для других языков, то тоже указать. Банальное уважение к читателям.