预测增长
默认情况下,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
| # 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)
|

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)
|

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