预测增长

默认情况下,Prophet 使用线性模型进行预测。 在预测增长时,通常存在一些最大可实现的点:总市场规模、总人口规模等。 这称为承载能力,预测应在该点饱和。

Prophet 允许您使用指定的承载能力,使用 logistic 增长趋势模型进行预测。 我们用维基百科上 R (编程语言) 页面的日志访问量来说明这一点。

1
2
# R
df <- read.csv('https://raw.githubusercontent.com/facebook/prophet/main/examples/example_wp_log_peyton_manning.csv')
1
2
# Python
df = pd.read_csv('https://raw.githubusercontent.com/facebook/prophet/main/examples/example_wp_log_peyton_manning.csv')

我们必须在 cap 列中指定承载能力。 在这里,我们将假定一个特定值,但通常会使用有关市场规模的数据或专业知识来设置该值。

1
2
# R
df$cap <- 8.5
1
2
# Python
df['cap'] = 8.5

需要注意的重要事项是,必须为数据框中的每一行指定 cap,并且不必是常量。 如果市场规模在增长,那么 cap 可以是一个递增的序列。

然后,我们像以前一样拟合模型,除了传递一个额外的参数来指定 logistic 增长

1
2
# R
m <- prophet(df, growth = 'logistic')
1
2
3
# Python
m = Prophet(growth='logistic')
m.fit(df)

我们像以前一样为未来预测创建一个数据框,除了我们还必须指定未来的容量。 在这里,我们使容量保持恒定,与历史记录中的值相同,并预测未来 5 年

1
2
3
4
5
# R
future <- make_future_dataframe(m, periods = 1826)
future$cap <- 8.5
fcst <- predict(m, future)
plot(m, fcst)
1
2
3
4
5
# Python
future = m.make_future_dataframe(periods=1826)
future['cap'] = 8.5
fcst = m.predict(future)
fig = m.plot(fcst)

png

logistic 函数有一个隐含的最小值为 0,并且会像在容量饱和时一样在 0 饱和。 也可以指定不同的饱和最小值。

饱和最小值

logistic 增长模型也可以处理饱和最小值,该最小值使用 floor 列指定,方式与 cap 列指定最大值的方式相同

1
2
3
4
5
6
7
8
9
# R
df$y <- 10 - df$y
df$cap <- 6
df$floor <- 1.5
future$cap <- 6
future$floor <- 1.5
m <- prophet(df, growth = 'logistic')
fcst <- predict(m, future)
plot(m, fcst)
1
2
3
4
5
6
7
8
9
10
# Python
df['y'] = 10 - df['y']
df['cap'] = 6
df['floor'] = 1.5
future['cap'] = 6
future['floor'] = 1.5
m = Prophet(growth='logistic')
m.fit(df)
fcst = m.predict(future)
fig = m.plot(fcst)

png

要使用具有饱和最小值的 logistic 增长趋势,还必须指定最大容量。

在 GitHub 上编辑