云音乐用户增长预测之Prophet模型

本文探讨了Prophet模型在云音乐业务中的应用,通过改良处理季节性因素、关键转折点和天花板,将模型预测DAU的准确率从85%提升至95%以上。内容涵盖了模型原理、业务场景优化及拓展,如活动影响评估和波动分析。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Prophet模型是Meta公司开发并应用于Facebook/Twitter等产品的开源时间序列模型,适用于MAU/DAU和新增的预测。在云音乐的业务中,此模型不仅能用于DAU预测,也能用于评估活动和波动分析等多种场景。

本文将从Prophet模型的原理出发,基于对云音乐实际业务的思考,优化和改良了原模型,提高了模型预测准确性,并探究了优化后该模型在多种业务场景中的应用。

1

关于Prophet

Prophet模型是Meta公司开发并应用于Facebook/Twitter等产品的开源时间序列模型,适用于MAU/DAU和新增的预测。它仅仅使用序列的自相关性就能产生高质量的预测结果,不依赖其他的参数,所以使用起来非常简单便利,需要的计算资源也非常小。主要特点包括:

  • 简单易用,使用者只需懂得简单的时间序列知识就可以使用

  • 泛用性高,能广泛应用于多个业务场景,也可以根据具体需要微调

  • 解释性好,模型易于解释

不仅如此,了解Prophet最重要的不在于使用Prophet本身,而在于通过这一综合的预测模型来了解预测时间序列的模式和方法,并将业务产生的价值和日常的波动分离开。

例如,通过将长期趋势、季节因素、节假日分离开,Prophet可以帮助我们回答以下几个其他模型难以回答的业务问题:

  • 一些活动经常与节假日重合,例如元旦活动会带来活跃但用户在元旦本身就会更活跃,如何剥离元旦本身的影响来评估元旦活动带来的额外价值?

  • 一到9月,受开学影响,活跃会下降,但定量来说,开学的影响到底有多大?

  • 在解释DAU波动时,今年和去年同期都上升或下降但幅度不同,为什么?

原版Prophet模型只需要输入时间戳和对应的值就可以输出预测,但准确性偏低;我们通过结合业务特点,改良了Prophet模型,使得模型预测6个月DAU准确度从 ~85%提升到了 ~95%

2

Prophet 的原理

首先根据Harvey & Peters (1990),Prophet模型将输入的时间序列拆分为三个部分

9b253c75d1996c68f98f855ca26d3b8e.png

其中g(t)表示整体趋势,并不包含任何周期性的因素,例如长期增长或者下跌;s(t) 表示周期性因素,例如季节性的因素,一周内的波动等等;h(t)代表重复的但非周期性的因素,例如假期;最后的μt则表示测量误差(error term)。这一形式和Generalized Additive Model (GAM) 有非常多类似的地方,但是在Prophet模型中,这些关系间都是线性的,但是在每个因素内部则允许非线性的回归。

如下图所示,对于许多线上app来说,时间与日期往往对DAU或MAU有显著的影响,例如在假期中MAU,DAU可能会有快速的增长,而在一般的工作日中DAU又可能会下跌。Prophet模型剥离出了日常的波动与长期的趋势,这使得该模型不仅能够更准确的预测波动,也能够帮助剥离日常的波动而关注长期的趋势。

158152c5bab7c3845cd58d9fe52e484d.png

通过上述的式子,Prophet模型将时间序列问题转换为了曲线拟合的问题。

2.1长期趋势

在业务的不同的阶段,长期趋势的表现可能是不同的,在app上线的初期可能会有非常快速的增长,但是随着时间的推移增长会逐渐趋于0。与之对应,在运营动作上,当业务快速增长时,拉新可能是最重要的,但是当增长逐渐放缓时,老客运营与召回可能有逐渐变得更有意义,所有准确的预测长期趋势,不仅能够反映目前的业务状态,也能够帮助业务同学找到目前的重点。

对于许多业务而言,长期增长一般与自然界人口增长的模式比较接近,都有快速增长期,也存在着某一天花板例如上网人数。针对这些特征,一个常用的模型是 logistic growth model:

79a7b0cd2ecdbc0894415bf6c199f345.png

C就是capacity,也就是增长的天花板,k是增长速率,m则是抵消增长速率的参数。

2.2 季节因素

Prophet模型使用傅里叶级数来预测季节因素

c077a6d68e1758cf12fa4c38916a1d38.png

这一公式的优点在于可以不需要任何输入就进行预测,但因为不需要任何输入所以在长周期的预测中会不准确。

3

模型在云音乐业务中的应用&改良

根据云音乐的业务特点,我们对Prophet模型进行了如下改进:

  • 结合市场及新业务板块,设置了随时间变化的天花板 C(t)

  • 结合重大业务动作及市场事件,设置了关键的转折点s

  • 结合业务规律,为周期性因素预测引入了新的模型

以某模拟的业务数据为例,预测其DAU,准确率95%以上

ce09edb6dc8aa1e7dbe3caa2640116d8.png

整体趋势

05029b72585d5441e80f1c181a343a5c.png

假期影响

8d62a93414293159d506b4b569b64206.png

年内周期

e4d2145d53991dd173d868a9b73cbce7.png

周内周期

b1c77309d52b69b82acc915e3b517029.png

3.1 模型改进一:业务转折点&天花板

单纯的logistic growth model并不适用于云音乐:

  • 这个模型假定了一个固定的市场天花板C,但云音乐能触达到人群并不是一成不变的,从单纯的音乐播放到直播,社区等新业务,云音乐能触达到的人群也在不断扩大;

  • 云音乐业务增长的速度k并不是不变的,随着市场状态的改变和不同的业务动作,增长速率在不断改变。

针对上述两个缺点:

  • 以随时间变化的C(t)代替常数C

  • 定义业务的转折点 s∈S,即当k发生改变的时候:

定义基础的增长k和修正参数δ∈R s , 其中 δj 是转折点 sj 的修正参数,那么对任意时刻,总的增长速率是

d8c1dc842114b15c8177d8322075c89d.png

定义集合a(t),上式可以写为 k + a(t)^Tδ ,其中

79fd7ba14ff5db68170e254d6ade9bf9.png

因为增长速率k在转折点会变化,相应的参数m也会变化来保证曲线是连续的并最终趋向0,定义

92cbcfdde66e39f2fca43ac32b1617a4.png

经调整的logistic growth model可以表示成

b839741e089ba316b5818bc86979d6cd.png

转折点选择

一般在预测中,转折点出现的频率并不会很高,通常可以选择一个范围,例如:一周可能会有一次转折,一月一转折等等)在选择完范围后可以通过拉普拉斯分布进行判断是否存在大于0的转折点,即假设1cde468dc8b286853b9fa26f81cbf33e.png,τ是一个控制分布的参数,当τ越高时模型会选择出更多的转折点,反之亦然。转折点也可以根据业务进行人工输入。

3d4ff4aeb64b05db27f0128d586f5217.png

之所以选择该分布时因为绝大多数情况下都不存在转折点,即修正为0,所以分布会聚集于0,显然不满足正态分布。

转折点选择的标准是:可能对长期增长产生永久性影响的业务动作或者事件。例如,音乐领域反垄断的出台以及重大版权回归。在选择了可能的转折点之后,还需要判断转折点是否显著,我们用了两种做法:

1)与历史上类似的转折点比较,观察转折点前后是否有明显不同,依赖主观判断

2)比较R^2 ,比较加入该转折点后预测准确性有没有显著的提升

天花板的确定

对于一个业务来说,能触达到的用户数是有限的,我们采用了三种方法确定天花板:1)成熟的业务,如音视频等,直接采用研报和调研数据;

2)成长期的业务,以自身指标及调研的市场份额进行估计;

3)对于初创期的业务,结合业务经营和市场调研的结果,对整体市场的成长率进行曲线拟合,得到整体市场的增长趋势在应用于天花板。

最后,会根据app内不同业务的用户重合度以及得到的天花板进行折算,最终计算出全站dau的天花板。

3.2 模型改进二:周期性因素的处理

对于云音乐来说,受到开学,放假等周期事件的影响较大,所以在通常情况下,我们只用傅里叶级数预估周末/周中的影响,即P = 7;对于月的周期影响会在排除了长期趋势,周内周期后,结合其他的参数进行估计,例如9月上学的影响会与当年学生人数,7月放假时dau提升及其他因素有关可以表示为:

70d44476219c83eaa42a88d9a3965dc2.png

除去长期趋势,季节因素(周,月),Prophet 模型也提供了假期的估计方法:

e0fa2ea9c1b076da1b33f8d916554736.png

209f610fbc2731c75a2fff69accd61ce.png

v 是控制假期影响的一个参数,模型内默认是10,但因为我们根据业务特点,在之前的周期预测的时候实际上可能已经考虑了一部分节假日的因素,所以实际上应用中通常设置v=8。

4

其他应用场景拓展&总结

预测DAU/MAU仅仅是该模型一个功能,在不同的业务中,Prophet可以有很多变体和表现形式,例如:

4.1评估活动影响

通过模型来评估活动影响有两种方式:

1)将每重复的活动视为一个节假日,例如云音乐的年度歌单发布视为一个节假日;这种方式的优点在于比较容易处理,但缺点也显而易见,就是当活动与节假日重合的时候没有办法分离出节假日与活动影响,而且没有办法观察活动的长尾影响。

2)将实际DAU减去长期趋势,季节因素,节假日因素,最后得出活动带来的增量,即

0f476b661ca1e167a647086cdccb8f60.png

4.2 波动分析

该模型的每一部分都是独立的,这使得我们可以结合业务特点,针对DAU的各个成分进行分析。

针对长期趋势的分析可以找到各个关键的转折点,一方面可以评估某一事件对指标长期的影响,另一方面也可以发现目前指标下降是否是之前某个事件的累积效应。对比今年和之前的长期趋势,则可以更科学的判断目前业务的状态。

针对季节性波动和节假日的分析则可以更精确的拆分波动的来源。不仅如此,在实践中,通过对不同端的周中,周末的波动分析,我们甚至发现了一些使用不同手机用户的特点,帮助业务团队进行更精准的运营投放。

5

Prophet 模型的局限性&思考

业界对Prophet的评价褒贬不一,因为Prophet 模型的输入非常少,所以Prophet 模型的准确性非常依赖大量的数据进行预测。在实践中,Prophet模型对DAU这类比较密集的指标预测往往能取得比较好的效果,但是对于MAU这类相较稀疏的指标预测则表现的比较差。

Prophet模型综合了许多预测方法,通过Prophet抛砖引玉可以调整出适合自己业务的模型。

以上。

a83b6c89a0571bb853cb735d8bd51809.gif

●适婚农村青年找对象有多难?
●品牌知名度分析
### Prophet预测模型使用指南 Prophet 是 Facebook 开源的时间序列预测工具,基于可分解模型,能够自动处理趋势、季节性和节假日效应等时间序列中的关键成分[^2]。以下是 Prophet 的实现与应用指南,包括代码示例和参数调优方法。 --- ### 1. 安装 Prophet 在使用 Prophet 之前,需要安装相关依赖库: ```bash pip install prophet ``` --- ### 2. 数据准备 Prophet 需要输入一个包含两列的数据框:`ds`(日期)和 `y`(目标值)。以下是一个简单的数据准备示例: ```python import pandas as pd # 示例数据 data = { 'ds': pd.date_range(start='2023-01-01', periods=100, freq='D'), 'y': [i**2 + 10*i + 5 for i in range(100)] # 模拟时间序列数据 } df = pd.DataFrame(data) ``` --- ### 3. 创建并训练 Prophet 模型 以下是创建和训练 Prophet 模型的基本代码: ```python from prophet import Prophet # 初始化模型 model = Prophet() # 拟合模型 model.fit(df) ``` --- ### 4. 生成未来时间点并进行预测 使用 `make_future_dataframe` 方法生成未来时间点,并通过 `predict` 方法进行预测: ```python # 生成未来 365 天的时间点 future = model.make_future_dataframe(periods=365) # 进行预测 forecast = model.predict(future) # 查看预测结果 print(forecast[['ds', 'yhat', 'yhat_lower', 'yhat_upper']].tail()) ``` --- ### 5. 可视化预测结果 Prophet 提供了内置的可视化功能,可以直接绘制预测结果: ```python # 绘制预测图 fig = model.plot(forecast) # 绘制趋势和季节性分解图 fig_components = model.plot_components(forecast) ``` --- ### 6. 参数调优 Prophet 允许调整多个参数以优化预测结果。以下是常见的参数及其作用: #### 6.1 调整季节性 可以通过 `seasonality_prior_scale` 参数控制季节性的强度: ```python model = Prophet(seasonality_prior_scale=10) # 增强季节性影响 ``` #### 6.2 添加节假日效应 可以使用 `add_country_holidays` 方法添加特定国家的节假日效应: ```python model.add_country_holidays(country_name='US') # 添加美国节假日 model.fit(df) ``` #### 6.3 自定义节假日 如果需要自定义节假日,可以使用以下方式: ```python holidays = pd.DataFrame({ 'holiday': 'custom_holiday', 'ds': pd.to_datetime(['2023-07-04', '2023-12-25']), }) model = Prophet() model.add_country_holidays(country_name='US') model.add_regressor('custom_regressor') # 添加自定义回归变量 model.fit(df) ``` #### 6.4 调整增长函数 默认情况下,Prophet 使用线性增长模型。可以通过 `growth='logistic'` 参数启用逻辑增长模型: ```python df['cap'] = 100 # 设置上限 model = Prophet(growth='logistic') model.fit(df) ``` --- ### 7. 性能评估 Prophet 提供了多种评估指标(如 MAE、RMSE、MAPE),可以用来比较不同配置下的模型性能[^2]。以下是一个简单的评估示例: ```python from sklearn.metrics import mean_absolute_error, mean_squared_error # 计算误差 mae = mean_absolute_error(df['y'], forecast.loc[forecast['ds'].isin(df['ds']), 'yhat']) rmse = mean_squared_error(df['y'], forecast.loc[forecast['ds'].isin(df['ds']), 'yhat'], squared=False) print(f'MAE: {mae}, RMSE: {rmse}') ``` --- ### 8. 实际应用案例 Prophet 广泛应用于股票价格预测、销售预测等领域。例如,在股票价格预测中,可以通过添加节假日效应和季节性调整来提高预测精度[^3]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值