仅用于站内搜索,没有排版格式,具体信息请跳转上方微信公众号内链接
我尝试了几种传统方法,包括ARIMA和Prophet,但发现由于产品的复杂性和多样性,这些统计模型并不十分适用。因此,我寻求更好的方法。
这时,我想到了一种不同的策略–使用LifetimesPython库来预测细粒度的客户行为。
为了完成需求预测,我将使用不同于传统时间序列数据的交易数据。
这种时间序列数据的一个主要特点是,它基于涉及客户、产品和时间的交易,而不是传统时间序列数据中的产品和时间。
尽管我们预测的是相同的结果–产品在未来一段时间内的销售量,但数据结构和业务逻辑的不同可能要求我们使用不同的模型或方法来进行更好的预测和解释。
例如,在这个涉及典型供应链需求预测的项目中,尽管它仍然是一个时间序列预测模型,但在建立模型时,我们需要考虑客户级购买量等因素。
回购预测模型预测客户是否会在接下来的N天内再次购买。
根据客户过去的行为,如购买过什么商品以及购买频率,我们可以使用回购预测模型来预测客户是否会再次光顾。这对企业调整营销和管理库存也至关重要。
这里使用的是BG/NBD模型(Beta-几何/负二项分布)。
它假设每个客户都有一个独特的购买频率(购买频率),由Gamma分布建模,并有一个停止(流失)的概率,由Beta分布建模。
当客户处于活跃期时,他们的购买遵循泊松过程。
该模型使用新近度(最近一次购买的时间)、频率和货币价值(每次购买花费的金额)来预测未来的交易次数,计算公式为:
然后,我们利用Lifetime库建立一个“回购预测模型”,该模型通过考虑新近度和频率来提供客户级预测。
例如,像Alice这样经常购买的顾客可能有90%的机会再次购买,而像Bob这样不经常购买的顾客可能有40%的机会再次购买。汇总这些预测有助于更准确地预测销售情况。
简而言之,回购预测模型提供了有关单个客户行为的有用信息,如他们的购买频率、最近的购买频率以及消费金额。这些信息对于我们预测产品销售的最终时间序列(TM)模型至关重要。
虽然回购模型奠定了坚实的基础,但这只是一个局部过程。我们应该做更多的工作来微调TM模型,以获得更好的结果。
以下是代码重要方面的细分,重点是算法构建、季节性调整、预测、验证和业务逻辑。
我使用了在线零售数据集进行数据实验。具体来说,我对数据进行了处理,根据交易金额选出了排名前12位的产品。
导入:用于客户生命周期建模(Lifetimes)、时间序列分析和误差评估的库。
数据准备读取原始数据帧。将交易时间转换为日期时间。删除客户ID和数量值缺失或无效的行。
异常值删除:使用IQR方法从数量中过滤异常值。
数据分割:将数据拆分为训练集(2011-11-30之前)和验证集(未来10天)。确保验证数据只包括训练数据中的客户。
BG/NBD模型:根据重复性和频率预测客户再次购买的金额。
Gamma-Gamma模型:预测未来购买的平均货币价值。
预测值会被修改,以确保没有负值。
销售额计算:每个客户的预计销售额是用预计购买量乘以预计平均销售额计算得出的。
产品比例:每个客户的销售额按比例分配给不同产品。
分解销售额:时间序列分解用于确定每种产品的季节性模式。
调整:根据历史模式得出的季节指数对销售预测进行调整。
关键:如果销售数据中存在零,则使用加法分解,否则使用乘法分解。
调整功能:应用计算出的季节性指数来调整每种产品的预期销售额。
确保无负值:对调整后的销售额进行剪切,确保不出现负值。
验证:将预测销售额与验证期的实际销售额进行比较。
误差度量:使用平均绝对误差(MAE)和均方根误差(RMSE)量化预测准确性。
业务逻辑:过滤掉销售额低(低于临界值)的产品,以关注重要数据。
最终评估:过滤后,计算平均绝对百分比误差(MAPE)和APE中值,以评估模型在重要销售数据上的表现。
以下是估值结果:
我还应用Prophet模型进行了同样的预测,并与回购预测模型进行了比较。Prophet由Facebook开发,是一种广泛用于商业预测的时间序列预测工具。
Prophet模型考虑了季节性(年、月和周),并使用平均绝对百分比误差(MAPE)评估其性能。它能同时处理多个产品,预测未来的销售额,并根据实际销售数据验证这些预测。
模型初始化如下
yearly_seasonality=True:这样,“Prophet”就能建立年度季节性模型(例如,在一年中的某些时间销售额较高)。
weekly_seasonality=True:这将增加每周的模式(例如,周末与工作日的行为)。
daily_seasonality=False:禁用每日季节性,因为本用例不需要它。
seasonality_mode=’multiplicative’:这意味着季节效应将随趋势水平的变化而变化,因此适用于季节变化幅度随时间增长的数据。
model.add_seasonality:为模型添加月度季节性。
make_future_dataframe:该函数生成模型将预测数值的未来日期(30天)。
model.predict:它根据学习到的季节性和趋势模式预测未来的销售额。输出结果存储在预测中,其中包括每天的预测值(yhat)。
提取预测值:提取模型对未来30天的预测(yhat)。
验证:将预测值(yhat)与实际验证数据合并,以评估模型的性能。
绝对百分比误差(APE):计算绝对百分比误差(APE)是为了衡量实际值与预测值之间的差异,随后用来计算模型的整体性能指标,如MAPE(平均绝对百分比误差)。
在对每种产品未来30天的销售额进行预测后,在产品层面对预测结果进行汇总,得出每种产品的预期总销售额:
回购预测模型看起来更好。虽然这一结论是基于一个案例研究得出的,但结果表明本文提出的方法值得进一步研究。
我使用回购预测模型预测了每位客户在未来N天内的购买量。然后,我将这些预测汇总,得出产品的总销售额。
这种方法适用于供应链中的客户-产品交易数据,有助于预测许多产品的需求或销售情况。
我之所以推荐这种方法,是因为客户的回购行为遵循一定的分布,比如泊松分布,这使得它比传统模型更能捕捉个体模式。
为了改进这种方法,你可以添加积分干预、节假日、促销或库存水平等因素,使预测更加准确。
不断探索和完善这些模型–它们有助于做出更好的商业决策。
长按👇关注-机器学习研习院-设为星标,干货速递