Повысьте эффективность анализа временных рядов с помощью этих пакетов 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 для анализа:
- pmdarima
- sktime
- fbprophet
Я надеюсь, что это помогает!
Посетите меня в моем LinkedIn или Twitter.
Если вы не подписаны как Средний участник, рассмотрите возможность подписки через мой реферал.