作者都是各自领域经过审查的专家,并撰写他们有经验的主题. 我们所有的内容都经过同行评审,并由同一领域的Toptal专家验证.
艾哈迈德·哈立德
验证专家 在工程

Ahmed是一名高级数据科学家,他喜欢深入研究客户的问题,并使用最先进的数据驱动解决方案来解决这些问题.

以前在

辉瑞
分享

预测是一种利用历史数据和事件来估计未来趋势的技术, 潜在的灾害, 以及受试者的整体行为. 预测可以作为决策分析的概率支持, 估算费用, 收入, 预算计划.

商业预测可分为两类: 定性预测定量预测.

  • 定性预测. 定性预测涉及市场研究和市场策略, 因此,它更多的是专家驱动和人为因素的影响. 它通常旨在制定短期战略.
  • 定量预测. 定量预测排除了任何人为因素. 它只依赖于实体拥有的历史数据,并旨在预测某些因素,如销售额, 价格, 而其他财务方面的问题将是长期的.

欲了解更多信息,您可以查看 Investopedia的财务预测 底漆.

这两种类型的预测都显示了很多希望,并设法为许多实体创建业务增强.

如果您想了解更多有关预测如何影响市场决策的信息, 这是一个很好的开始 预测市场:基础、设计和应用 作者:Stefan Luckner等人.

我们可以使用定量预测解决的一个问题是需求预测或销售预测.

需求预测和销售预测方法

假设你是一个经营许多商店的零售商, 每家商店都有一个静态的产品库存补充系统,该系统基于季节和市场趋势等特定事件的人为决策.

偶尔,你会遇到这些问题之一,可能会导致两个主要问题:

  • 库存积压. 有大量的产品库存,计划在一定时间内出售,但没有售出.
  • 缺货的产品. 有销售产品的机会,但由于没有产品而无法销售.

根据 这是IHL集团对600个家庭和零售商的调查在美国,由于缺货问题,零售商每年损失近1万亿美元的销售额.

“购物者在三次购物中就有一次遇到缺货, 根据报告, 邮件发给了Retail Dive. 在食物, 药品和大众零售商, 他们在五分之一的旅行中遇到缺货的商品, 在百货公司和专业零售商中,这个比例是四分之一, 三分之一的人在电子商店买,” 国际人道法组织成立.

看起来, 这两个问题都会导致收益减少,因为我们要么失去了销售机会,要么在未售出的产品上投入了更多资金, 这意味着拥有短期内不会产生收入的资产来弥补成本.

这显然不利于实体的现金流,为了解决这一风险,我们需要做两件事:

  • 更多的信息来帮助我们做决定
  • 能够为库存补充系统做长期战略规划的预测团队

So, 问题是:有什么迹象表明你需要在公司中采用人工智能来帮助你的预测过程?

要做出这个决定,你需要专家回答以下问题:

  • 预测你的销售渠道困难吗?
  • 你的销售预测是否不准确,或者不够准确(即使你有历史数据)??
  • 你们有缺货或积压的问题吗?
  • 你是否无法从你所拥有的数据中提取描述性和推断性的见解来推动你的决策和计划?

这些问题的答案应该是一个明确的信号,帮助你决定是否开始将人工智能应用到你的预测策略中.

人工智能如何使销售预测过程受益?

在许多公司中,人工智能在预测方面的表现都超过了人类, 实现更快的决策和规划以及更可靠的风险管理策略. 这就是为什么 顶级公司正在规划中采用人工智能.

在处理需求预测问题时, 时间序列预测方法可以用来预测每种产品的销量, 从而使企业能够优化库存补充,最大限度地减少上述问题的发生. 然而, 许多模型都难以在单个产品层面进行预测, 或者产品类别层面, 因为缺少必要的功能. 所以,问题是:我们如何让它发挥作用,并最大限度地利用我们的数据?

对于现实生活中的零售商来说,这些问题绝不是微不足道的. 你要么有1000多个产品在数据集中引入了很多非线性 多变量的依赖关系, 或者你需要被告知预计的库存补充量,并提前通知你能够生产或购买它, 或者做任何你需要做的事情,在需求实现之前获得它.

在这种情况下,经典模型就像 华宇电脑美国教育考试服务中心 不会执行,我们需要一个更健壮的方法,比如 RNNsXGBoost这就是为什么我们需要大量的功能创建来解决这个问题.

要做到这一点,我们需要:

  • 获取必要的输入特征来解释产品的多样性.
  • 对数据进行分类, 所以每个类别都有相同的时间序列行为, 每个类别都将使用一个独立的模型来处理.
  • 根据获得的分类输入特征训练我们的模型.

在本文中,我们将以XGBoost作为这种模型的一个示例.

在销售预测模型所需的功能

此问题所需的特征集主要分为四组:

  • 与时间相关的特性
  • 销售相关的特性
  • 一个与特性
  • 名的特性

不像 深度学习(递归神经网络), 机器学习模型如果不为时间序列创建手动特征提取层,就无法获得时间序列中的长期或短期依赖关系 datetime 功能.

可以从日期中提取许多特征,例如:

  • 一年
  • 一天
  • 小时
  • 周末或工作日(无论这一天是工作日还是周末)
  • 一天ofweek

许多方法只是提取这些时间特征,并将其用作输入和训练模型, 但进一步的工程设计是可以完成的. 我们可以看到, 特色(日), 小时, 一天ofweek)是周期性的, 这意味着它们有一系列重复的值. 一个模特该如何处理这种情况呢?

简短的回答是, 因为模型看到的是00:00离23:00有23个小时的距离, 但事实上, 有一个小时的路程. 解决这个问题的一种方法是将这些特征转化为循环变换.

与时间相关的特性

利用正弦和余弦的概念, 或者向量表示, 我们可以把每一个小时(24小时)换算成一个角度, 使用它们的sin和cos会使模型更容易检测到小时之间的真实比例, 不管周期性如何.

这将消除发生在周期时间特征或任何周期特征中的不连续.

在本文中,我们将使用 公开发现的Superstore样本数据集 并尝试预测某一产品类别的目标月销售额.

同样,我们将使用Python 3.使用以下库的环境:

  • NumPy
  • 熊猫
  • XGBoost
  • Sklearn

现在, 我将向您展示如何构建周期特征转换函数并测试它是否有用.

def convert_periodic (val):
    θ = 2*np.π* val /期
    Sin_period = np.sin(θ)
    Cos_period = np.cosθ
    返回sin_period cos_period

def convert_month (x):
    返回convert_periodic (x, 12)

df(“sin_month”),df [' cos_month '] = zip (* df(“月”).地图(convert_month))

有了这些,我们就可以测试添加的特性是否会提高性能.

X = df.下降([“订单日期”、“销售”、“sin_month”,' cos_month '],轴= 1)
Y = np.log1p (df['销售'])


X_train,X_test,y_train,y_test = train_test_split(X,y,test_size = 0.2、洗牌= False)

我们可以看到, 我们对目标销售特征进行了log1p变换, 因为它是一个倾斜的特征(非正态分布).

现在,我们将在数据上拟合XGBoost回归器.

Y_pred =模型.预测(X_test)

print(f'测试集上没有循环转换的损失是{sqrt(mean_squared_error(y_pred,y_test))}')

测试集上没有循环转换的损失为0.4313676193485837

接下来,我们将尝试使用我们创建的特性.

X = df.drop(['Order Date','Sales'],轴= 1)
Y = np.log1p (df['销售'])


X_train,X_test,y_train,y_test = train_test_split(X,y,test_size = 0.2、洗牌= False)
Y_pred =模型.预测(X_test)

print(f'测试集上循环转换的损失为{sqrt(mean_squared_error(y_pred,y_test))}')

测试集上循环转换的损失为0.33868030449130826

正如我们所看到的,损失从0开始改善.43 RMSE到0.33 RMSE.

根据你的问题,你可以考虑其他一些与时间相关的特征,包括:

  • 商品上架的月数
  • 距离上次销售的天数

这是预测销量所需的主要核心输入功能, 那么如何最大限度地利用销售数据呢? 我们可以使用滞后和自相关的概念来实现这一点.

滞后特性是产品的历史销售记录. 例如, 如果我们把月销量的12个滞后特征作为模型的输入,来预测2020年5月的销量, 这意味着我们将为该模型提供2019年5月至2020年4月之间的数据记录. 这真的很有帮助.

也, 它可以用自相关图来解释,以检查目标特征与其滞后特征的相关程度. 这也有助于在滞后特征中只选择相关特征, 因此我们减少了内存使用和功能冗余.

这就是我们如何在数据框架中添加延迟特性:

对于(3)范围内的I:
    df[f'lag_{i+1}'] = df['Sales'].转变(i + 1)
Df = Df.dropna ()
df.头()

销售相关的特性

在这里,我选择了一个三滞后特征的值来包含在我们的训练集中. 这个特征是一个超参数——您可以根据自相关图选择它,也可以通过尝试许多值并在调优阶段选择最佳值.

X = df.drop(['Order Date','Sales'],轴= 1)
Y = np.log1p (df['销售'])


X_train,X_test,y_train,y_test = train_test_split(X,y,test_size = 0.2、洗牌= False)
Y_pred =模型.预测(X_test)

print(f'测试集上有滞后特征的损失是{sqrt(mean_squared_error(y_pred,y_test))}')

在测试集上,具有滞后和聚合销售特征的损失为0.2862175857169188

现在,RMSE已经提高到0.28、同时使用滞后特性和循环转换.

您可以添加一些其他与销售相关的功能:

  • 商品销售比例(商品销售占商店总销售额的比例)
  • 商品类别的销售事件频率
  • 加入资历概念

资历 是一个概念,用于为商店中的新物品分配资历级别:

  • 资历0:新加入公司的项目
  • 资历1:从未在本店销售过,但在公司其他店销售过
  • 资历2:以前在本店销售过的物品

一个简单的论点是,价格和促销是造成销售额上升和下降的直接原因之一. 价格是区分不同品类的最好方法之一, 子分类, 以及产品的超级分类.

例如, 假设为每个产品分配了一个类别和一个子类别, 可以创建以下价格特征:

  • (平均值,最大值,最小值,中位数)各个类别的价格
  • (平均,最大,最小,中位数)各子类别的价格
  • 这些统计数据之间的比较, 例如类别和子类别中每个统计量之间的差异

这种聚合可以使用多个主题分组执行多次(假设我们的目标是预测每月需求)。, 如:

  • 每月,商店,类别
  • 每月,商店,子类别
  • 每月,商店,项目,类别
  • 每月,商店,项目,子类别

此外,还可以添加除 每月 分组研究整体价格的行为.

这种情况在零售商和销售预测者中并不常见, 但这对销售预测模型有很大影响. 库存数据集主要有每个产品的库存数据,每天在每个商店. 由此,我们可以将其与销售数据结合起来,得到每个产品的月周转率. 这个比率将表明一种产品的库存销售一空的速度, 它有两个主要好处:

  • 它可以帮助模型根据当前库存水平预测销售.
  • 它可以帮助我们利用这一价值将产品划分为缓慢、中等和快速移动的产品. 这种聚类将帮助我们进行决策和建模.

对于这个, 你需要每个产品的每日库存数据, 还有销售数据, 然后可以计算出存货周转率如下:

名的特性

提示: 这些聚合是基于时间范围完成的. 例如, 如果我们正在预测每月的销售额, 那么ITO将被计算为上个月的总销售额除以当月的平均库存价值.

销售预测可以将数据转化为机会

总之, 销售预测可以帮助公司增加收入,实现盈利, 前提是他们拥有正确的数据管道并使用正确的特征工程方法. 本文是一个试验,表明各种数据在解决这个问题时都是有用的.

每家公司都应该调查是否需要人工智能来解决其预测问题, 如果是的话, 它将需要专业的人工智能工程师和机器学习工程师的建议来创建自己的销售预测系统.

如果你是一家公司或零售商,愿意应用这种销售预测技术, 从收集你能收集到的所有数据开始, 尤其是日常销售, 每日库存, 以及日常交易.

一旦你掌握了这些数据, 你可以用它来增加你的收入和优化库存补充策略, 让您的企业利用现有资源获得最高利润, 如上面的几个例子所示, 以及主要零售商使用的销售预测方法.

引用:

数据集
进一步阅读财务预测

了解基本知识

  • 你如何计算销售预测(在产品层面)??

    通过收集销售, 股票, 价格数据, 为他们创建数据库, 预处理他们, 并执行特征工程来创建可解释的特征, 然后应用像XGBoost或RNN这样的预测方法.

  • 准备销售预测的四个步骤是什么?

    销售预测过程分为四个步骤:数据收集, 数据预处理, 工程特性, 和 数据建模.

  • 什么是最好的销售预测方法?

    华宇电脑和美国教育考试服务中心对于总销售额来说是完美的, 但在产品层面上, 像XGBoost或RNN这样的东西表现得更好.

  • 为什么需求/销售预测很重要?

    因为它解决了需求和销售两个主要问题, 哪些是库存过剩和缺货问题. 这将带来更高的收入和更好的现金流.

  • 销售潜力和销售预测的区别是什么?

    销售潜力回答的问题是,“某种品牌的产品能卖出多少台。?另一方面,销售预测回答的问题是:“将售出多少台??”

聘请Toptal这方面的专家.
现在雇佣
艾哈迈德·哈立德

艾哈迈德·哈立德

验证专家 在工程

开罗,埃及开罗省

2020年3月23日成为会员

作者简介

Ahmed是一名高级数据科学家,他喜欢深入研究客户的问题,并使用最先进的数据驱动解决方案来解决这些问题.

作者都是各自领域经过审查的专家,并撰写他们有经验的主题. 我们所有的内容都经过同行评审,并由同一领域的Toptal专家验证.

以前在

辉瑞

世界级的文章,每周发一次.

输入您的电子邮件,即表示您同意我们的 隐私政策.

世界级的文章,每周发一次.

输入您的电子邮件,即表示您同意我们的 隐私政策.

Toptal开发者

加入总冠军® 社区.