HTS Prophet Праздничный выпуск
Я пытаюсь использовать пакет htsprophet в Python. Я использую следующий пример кода ниже. Этот пример взят из https://github.com/CollinRooney12/htsprophet/blob/master/htsprophet/runHTS.py. Проблема, которую я получаю, - ValueError "holidays must be a DataFrame with 'ds' and 'holiday' column
, Мне интересно, есть ли обходной путь, потому что у меня явно есть выходные данные с двумя столбцами ds и праздничные дни. Я полагаю, что ошибка происходит от одного из пакетов зависимостей от fbprophet из файла forecaster. Мне интересно, есть ли что-то, что мне нужно добавить или кто-то добавил что-то, чтобы это исправить.
import pandas as pd
from htsprophet.hts import hts, orderHier, makeWeekly
from htsprophet.htsPlot import plotNode, plotChild, plotNodeComponents
import numpy as np
#%% Random data (Change this to whatever data you want)
date = pd.date_range("2015-04-02", "2017-07-17")
date = np.repeat(date, 10)
medium = ["Air", "Land", "Sea"]
businessMarket = ["Birmingham","Auburn","Evanston"]
platform = ["Stone Tablet","Car Phone"]
mediumDat = np.random.choice(medium, len(date))
busDat = np.random.choice(businessMarket, len(date))
platDat = np.random.choice(platform, len(date))
sessions = np.random.randint(1000,10000,size=(len(date),1))
data = pd.DataFrame(date, columns = ["day"])
data["medium"] = mediumDat
data["platform"] = platDat
data["businessMarket"] = busDat
data["sessions"] = sessions
#%% Run HTS
##
# Make the daily data weekly (optional)
##
data1 = makeWeekly(data)
##
# Put the data in the format to run HTS, and get the nodes input (a list of list that describes the hierarchical structure)
##
data2, nodes = orderHier(data, 1, 2, 3)
##
# load in prophet inputs (Running HTS runs prophet, so all inputs should be gathered beforehand)
# Made up holiday data
##
holidates = pd.date_range("12/25/2013","12/31/2017", freq = 'A')
holidays = pd.DataFrame(["Christmas"]*5, columns = ["holiday"])
holidays["ds"] = holidates
holidays["lower_window"] = [-4]*5
holidays["upper_window"] = [0]*5
##
# Run hts with the CVselect function (this decides which hierarchical aggregation method to use based on minimum mean Mean Absolute Scaled Error)
# h (which is 12 here) - how many steps ahead you would like to forecast. If youre using daily data you don't have to specify freq.
#
# NOTE: CVselect takes a while, so if you want results in minutes instead of half-hours pick a different method
##
myDict = hts(data2, 52, nodes, holidays = holidays, method = "FP", transform = "BoxCox")
##
1 ответ
Проблема заключается в пакете htsProphet с файлом fitForecast.py. Создание экземпляра объекта fbProphet основывается только на позиционных аргументах, однако новый аргумент добавлен в класс fbProphet. Это означает, что аргументы больше не соответствуют.
Вы можете решить эту проблему, взломав модуль fbProphet и изменив позиционные аргументы на аргументы с ключевыми словами. Достаточно просто исправить строки '73-74', чтобы запустить его:
Prophet(growth=growth, changepoints=changepoints1, n_changepoints=n_changepoints1, yearly_seasonality=yearly_seasonality, weekly_seasonality=weekly_seasonality, holidays=holidays, seasonality_prior_scale=seasonality_prior_scale, \
holidays_prior_scale=holidays_prior_scale, changepoint_prior_scale=changepoint_prior_scale, mcmc_samples=mcmc_samples, interval_width=interval_width, uncertainty_samples=uncertainty_samples)
Я отправлю сообщение об этом создателям.