Facebook Prophet:提供不同的数据集来构建更好的模型
Facebook Prophet: Providing different data sets to build a better model
我的数据框看起来像那样。我的目标是根据 event_id
1 & event_id
[=22] 的数据预测 event_id
3 =]2
ds tickets_sold y event_id
3/12/19 90 90 1
3/13/19 40 130 1
3/14/19 13 143 1
3/15/19 8 151 1
3/16/19 13 164 1
3/17/19 14 178 1
3/20/19 10 188 1
3/20/19 15 203 1
3/20/19 13 216 1
3/21/19 6 222 1
3/22/19 11 233 1
3/23/19 12 245 1
3/12/19 30 30 2
3/13/19 23 53 2
3/14/19 43 96 2
3/15/19 24 120 2
3/16/19 3 123 2
3/17/19 5 128 2
3/20/19 3 131 2
3/20/19 25 156 2
3/20/19 64 220 2
3/21/19 6 226 2
3/22/19 4 230 2
3/23/19 63 293 2
我想根据该数据预测未来 10 天的销售额:
ds tickets_sold y event_id
3/24/19 20 20 3
3/25/19 30 50 3
3/26/19 20 70 3
3/27/19 12 82 3
3/28/19 12 94 3
3/29/19 12 106 3
3/30/19 12 118 3
到目前为止,我的模型就是那个模型。但是,我并没有告诉模型这是两个独立的事件。然而,考虑来自不同事件的所有数据是有用的,因为它们属于同一个组织者,因此提供的信息不仅仅是一个事件。预言家可以做那种装修吗?
# Load data
df = pd.read_csv('event_data_prophet.csv')
df.drop(columns=['tickets_sold'], inplace=True, axis=0)
df.head()
# The important things to note are that cap must be specified for every row in the dataframe,
# and that it does not have to be constant. If the market size is growing, then cap can be an increasing sequence.
df['cap'] = 500
# growth: String 'linear' or 'logistic' to specify a linear or logistic trend.
m = Prophet(growth='linear')
m.fit(df)
# periods is the amount of days that I look in the future
future = m.make_future_dataframe(periods=20)
future['cap'] = 500
future.tail()
forecast = m.predict(future)
forecast[['ds', 'yhat', 'yhat_lower', 'yhat_upper']].tail()
fig1 = m.plot(forecast)
事件的开始日期似乎会导致高峰。您可以通过将每个事件的开始日期设置为假期来使用 holidays
。这会告知先知有关事件(及其高峰)的信息。我注意到事件 1 和事件 2 重叠。我认为您在这里有多种选择来处理这个问题。您需要问自己每个事件的预测值与事件 3 相关。您没有太多数据,这将是主要问题。如果它们具有相同的价值,您可以更改一个事件的日期。例如 11 天前。不等值场景可能意味着您放弃 1 个事件。
events = pd.DataFrame({
'holiday': 'events',
'ds': pd.to_datetime(['2019-03-24', '2019-03-12', '2019-03-01']),
'lower_window': 0,
'upper_window': 1,
})
m = Prophet(growth='linear', holidays=events)
m.fit(df)
我还注意到你对 cumsum 进行了预测。我认为您的活动是静止的,因此先知可能受益于预测每日门票销售而不是 cumsum。
我的数据框看起来像那样。我的目标是根据 event_id
1 & event_id
[=22] 的数据预测 event_id
3 =]2
ds tickets_sold y event_id
3/12/19 90 90 1
3/13/19 40 130 1
3/14/19 13 143 1
3/15/19 8 151 1
3/16/19 13 164 1
3/17/19 14 178 1
3/20/19 10 188 1
3/20/19 15 203 1
3/20/19 13 216 1
3/21/19 6 222 1
3/22/19 11 233 1
3/23/19 12 245 1
3/12/19 30 30 2
3/13/19 23 53 2
3/14/19 43 96 2
3/15/19 24 120 2
3/16/19 3 123 2
3/17/19 5 128 2
3/20/19 3 131 2
3/20/19 25 156 2
3/20/19 64 220 2
3/21/19 6 226 2
3/22/19 4 230 2
3/23/19 63 293 2
我想根据该数据预测未来 10 天的销售额:
ds tickets_sold y event_id
3/24/19 20 20 3
3/25/19 30 50 3
3/26/19 20 70 3
3/27/19 12 82 3
3/28/19 12 94 3
3/29/19 12 106 3
3/30/19 12 118 3
到目前为止,我的模型就是那个模型。但是,我并没有告诉模型这是两个独立的事件。然而,考虑来自不同事件的所有数据是有用的,因为它们属于同一个组织者,因此提供的信息不仅仅是一个事件。预言家可以做那种装修吗?
# Load data
df = pd.read_csv('event_data_prophet.csv')
df.drop(columns=['tickets_sold'], inplace=True, axis=0)
df.head()
# The important things to note are that cap must be specified for every row in the dataframe,
# and that it does not have to be constant. If the market size is growing, then cap can be an increasing sequence.
df['cap'] = 500
# growth: String 'linear' or 'logistic' to specify a linear or logistic trend.
m = Prophet(growth='linear')
m.fit(df)
# periods is the amount of days that I look in the future
future = m.make_future_dataframe(periods=20)
future['cap'] = 500
future.tail()
forecast = m.predict(future)
forecast[['ds', 'yhat', 'yhat_lower', 'yhat_upper']].tail()
fig1 = m.plot(forecast)
事件的开始日期似乎会导致高峰。您可以通过将每个事件的开始日期设置为假期来使用 holidays
。这会告知先知有关事件(及其高峰)的信息。我注意到事件 1 和事件 2 重叠。我认为您在这里有多种选择来处理这个问题。您需要问自己每个事件的预测值与事件 3 相关。您没有太多数据,这将是主要问题。如果它们具有相同的价值,您可以更改一个事件的日期。例如 11 天前。不等值场景可能意味着您放弃 1 个事件。
events = pd.DataFrame({
'holiday': 'events',
'ds': pd.to_datetime(['2019-03-24', '2019-03-12', '2019-03-01']),
'lower_window': 0,
'upper_window': 1,
})
m = Prophet(growth='linear', holidays=events)
m.fit(df)
我还注意到你对 cumsum 进行了预测。我认为您的活动是静止的,因此先知可能受益于预测每日门票销售而不是 cumsum。