Повысьте эффективность анализа временных рядов с помощью этих пакетов Python

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

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

Многие компании хотят, чтобы специалисты по данным решали их проблемы; Специалистам по данным полезно изучать анализ временных рядов, особенно Python. По этой причине я хочу обрисовать три моих лучших пакета Python для анализа временных рядов. Давай займемся этим!

1. пмдарима

Анализ временных рядов - это анализ последовательности, в которой точка данных записывается через регулярные интервалы времени. Частота временных интервалов может быть любой (от года до миллисекунд). Что важно, так это анализ временных рядов, в котором данные связаны друг с другом через временные интервалы.

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

Одной из моделей прогнозирования, часто используемых при анализе временных рядов, является ARIMA (интегрированное скользящее среднее с авторегрессией). ARIMA - это алгоритм прогнозирования, в котором мы можем прогнозировать будущие значения на основе информации из прошлых значений временного ряда без какой-либо дополнительной информации. Я бы не стал углубляться в модель ARIMA, потому что для ее объяснения требуется отдельная статья, но вы можете посмотреть эту статью для получения дополнительных ссылок.

Pmdarima - это статистический пакет Python, который предоставляет API ARIMA и все основные API анализа временных рядов, но мы пробуем только Auto ARIMA.

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

pip install pmdarima

После установки пакета мы будем использовать встроенные данные и руководство для создания нашей модели ARIMA.

import pmdarima as pm
from pmdarima.model_selection import train_test_split
import numpy as np
import matplotlib.pyplot as plt
y = pm.datasets.load_wineind()
train, test = train_test_split(y, train_size=150)

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

# Fit the model automatically
model = pm.auto_arima(train, seasonal=True, m=12)
# make the forecasts
forecasts = model.predict(test.shape[0])  # predict N steps into the future

С Auto ARIMA модель будет разработана автоматически для вас. Затем мы использовали модель, чтобы попытаться спрогнозировать и сравнить ее с фактическими данными.

plt.figure(figsize  = (8,8))
plt.title('Forecast result and Test data')
# Visualize the forecasts (blue=train, green=forecasts)
x = np.arange(y.shape[0])
plt.plot(x[:150], train, c='blue')
plt.plot(x[150:], forecasts, c='green', label = 'ARIMA Forecast')
plt.plot(x[150:], test, c='red', label = 'Test Data')
plt.legend()
plt.show()

Есть разница между прогнозом и фактическими данными; тем не менее, он по-прежнему полезен в деловом смысле. Вы можете изучить множество гиперпараметров и API в pmdarima, что полезно для простейшей модели временных рядов.

2. sktime

Многие люди, изучавшие машинное обучение с помощью Python, использовали бы Sklearn в качестве отправной точки. Проблема Sklearn в том, что в пакете нет модуля анализа временных рядов; поэтому и разрабатываются пакеты sktime. Согласно домашней странице, sktime специализируется на алгоритмах временных рядов и инструментах, совместимых с scikit-learn, включая:

  • Прогнозирование,
  • Классификация временных рядов,
  • Регрессия временных рядов.

sktime следует API Sklearn для разработки модели с методами прогнозирования, подгонки и преобразования, доступными для метода класса. Давайте попробуем на примере набора данных разработать модель прогнозирования с помощью sktime. В качестве примера я бы использовал учебные данные, доступные в sktime.

from sktime.datasets import load_airline
from sktime.forecasting.model_selection import temporal_train_test_split
# from sktime.utils.plotting.forecasting import plot_ys
y = load_airline()
y_train, y_test = temporal_train_test_split(y)
plt.title('Airline Data with Train and Test')
y_train.plot(label = 'train')
y_test.plot(label = 'test')
plt.legend()

На основе этих данных попробуем разработать модель прогнозирования. Пакет sktime также предлагает модель auto ARIMA, которую мы могли бы использовать.

from sktime.forecasting.arima import AutoARIMA
forecaster = AutoARIMA(sp=12)
forecaster.fit(y_train)

После разработки модели мы попытаемся спрогнозировать следующие 3 года данных и сравнить их с тестовыми данными.

#Prediction
fh = np.arange(1, 37)
y_pred = forecaster.predict(fh)
#Test and Prediction Plotting
plt.title('Airline Data with Train, Test, and Prediction')
y_train.plot(label = 'train')
y_test.plot(label = 'test')
y_pred.plot(label = 'prediction')
plt.legend()

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

3. fbprophet

Fbprophet или пророк - это анализ временных рядов, разработанный группой Facebook. Согласно домашней странице, fbprophet - это пакет для разработки данных временных рядов прогнозирования на основе аддитивной модели, в которой нелинейные тенденции соответствуют сезонности времени с эффектами праздников.

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

Давайте попробуем пакет с образцами данных, но сначала нам нужно установить пакет.

# pystan>=3.0 is currently not supported 
pip install pystan==2.19.1.1
pip install prophet

Затем мы будем использовать образцы данных для прогноза; Я бы использовал данные о запасах Yahoo Finance.

from yahoo_historical import Fetcher
BBCA = Fetcher('BBCA.JK', [2012,1,1], [2019,7,1]).getHistorical()

Данные о запасах содержат всю информацию, необходимую для прогнозирования будущих запасов. Я бы попытался предсказать данные Close в будущем; однако, если вы используете fbprophet, нам нужно изменить имя столбца на ds (для даты и времени) и y (для данных, которые вы хотите прогнозировать). Для простоты я бы также пересчитал данные на ежемесячные.

BBCA = BBCA.resample('MS').mean().reset_index()[['Date','Close']].rename(columns = {'Date':'ds', 'Close':'y'})

Затем мы готовы разработать модель прогнозирования с помощью fbprophet. Во-первых, нам нужно импортировать модель и объявить класс.

from fbprophet import Prophet
model = Prophet()
model.fit(BBCA)

Разработка будет быстрой, но интуитивно понятной. Давайте попробуем использовать эту модель, чтобы спрогнозировать запасы через три года.

BBCA_forecast = model.make_future_dataframe(periods=36, freq='MS')
BBCA_forecast = model.predict(BBCA_forecast)
plt.figure(figsize=(18, 6))
model.plot(BBCA_forecast, xlabel = 'Date', ylabel = 'Close')
plt.title('BBCA Stock Close')

Результат прогноза показан на графике выше, где черная точка - это реальная точка данных, а линия - обобщение. Мы также можем разбить данные временного ряда из модели с помощью следующего кода.

model.plot_components(BBCA_forecast)

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

Заключение

Временные ряды - одна из проблем, которую хотят решить предприятия. К счастью, многие разработчики разработали пакеты Python, полезные для анализа данных временных рядов. Вот три моих лучших пакета Python для анализа:

  1. pmdarima
  2. sktime
  3. fbprophet

Я надеюсь, что это помогает!

Посетите меня в моем LinkedIn или Twitter.

Если вы не подписаны как Средний участник, рассмотрите возможность подписки через мой реферал.