Как вручную построить недельный компонент в fbprophet? - PullRequest
0 голосов
/ 07 октября 2019

Я использую fbprophet для составления прогноза на основе временных рядов, которые у меня есть. Все идет хорошо, кроме последнего момента.

m = Prophet(daily_seasonality = True, yearly_seasonality = False, weekly_seasonality = True,
                seasonality_mode = 'multiplicative', 
                interval_width = interval_width,
                changepoint_range = changepoint_range)
m = m.fit(dataframe)
forecast = m.predict(dataframe)
m.plot_components(forecast)

Результаты функции plot_components

Вместо использования стандартной функции plot_components мне нужно сохранить данные и построить их независимо(например, в QuickSight AWS). Я понял, как сделать это для тренда (он берет все возможные данные и составляет график), но я не понимаю, как это работает с недельными и дневными графиками.

Кто-нибудь знает, как сохранить данные для еженедельных и дневных графиков?

1 Ответ

0 голосов
/ 07 октября 2019

Пролистать некоторые пророческие внутренности на: https://github.com/facebook/prophet/blob/master/python/fbprophet/plot.py

Один из способов добиться этого - написать свою собственную функцию, повторно используя некоторый внутренний код из plot_weekly()

def my_custom_plot_weekly(m, ax=None, uncertainty=True, weekly_start=0, figsize=(10, 6), name='weekly'):
    """Plot the weekly component of the forecast.
    Parameters
    ----------
    m: Prophet model.
    ax: Optional matplotlib Axes to plot on. One will be created if this
        is not provided.
    uncertainty: Optional boolean to plot uncertainty intervals, which will
        only be done if m.uncertainty_samples > 0.
    weekly_start: Optional int specifying the start day of the weekly
        seasonality plot. 0 (default) starts the week on Sunday. 1 shifts
        by 1 day to Monday, and so on.
    figsize: Optional tuple width, height in inches.
    name: Name of seasonality component if changed from default 'weekly'.
    Returns
    -------
    a list of matplotlib artists
    """
    artists = []
    if not ax:
        fig = plt.figure(facecolor='w', figsize=figsize)
        ax = fig.add_subplot(111)
    # Compute weekly seasonality for a Sun-Sat sequence of dates.
    days = (pd.date_range(start='2017-01-01', periods=7) +
            pd.Timedelta(days=weekly_start))
    # Import this function: seasonality_plot_df 
    df_w = seasonality_plot_df(m, days)
    seas = m.predict_seasonal_components(df_w)
    days = days.weekday_name
    # Return the data here, do not plot.
    return days, seas

В вашемна случай, если вы получите что-то вроде этого:

m = Prophet(daily_seasonality = True, yearly_seasonality = False, weekly_seasonality = True,
                seasonality_mode = 'multiplicative', 
                interval_width = interval_width,
                changepoint_range = changepoint_range)
m = m.fit(dataframe)
forecast = m.predict(dataframe)
my_custom_plot_weekly(m)
...