基于地理市场、产品和公司的价格预测方法

数据挖掘 预测建模 分类数据 数据插补
2022-02-13 00:23:38

我有一个数据集,它跟踪全球 150 个不同城市的 24 家公司收取的 21 种产品的价格。但是,数据集有缺失值——也就是说,我可能有 X 公司在伦敦的产品 A 的价格,但没有纽约。鉴于我已经拥有的数据,我正在寻找有关如何估算这些值的指导。

数据中有待利用的趋势。如:

  • 地理趋势:即,按照给定产品的中位价衡量,伦敦和纽约是相似的市场,但像开罗和约翰内斯堡这样的市场往往要贵得多(尽管不同产品的价格不同)
  • 产品趋势:在给定的市场内,对于给定的公司,产品按等级定价,尽管这种关系是非线性的。例如,如果产品是“Good”、“Better”和“Best”,“Better”的价格可能是“Good”的 2X,“Best”的价格可能是“Good”的 2.5X,尽管这些关系没有严格持有。
  • 公司趋势:在大多数市场中,某些公司的价格往往高于其他公司,但同样,这些关系并非严格保持,并且对于公司具有竞争优势的某些产品或市场子集可能会有所不同。

我在下面描述了我迄今为止尝试过的方法,尽管我觉得它过于简单化了。我正在寻找有关如何更好地捕捉数据复杂性并为缺失值获得合理准确估算的建议。任何建议表示赞赏。

到目前为止,我尝试过的方法是估计每个类别的系数。例如,保持公司和产品不变,市场 B 与市场 A 的平均价格倍数是多少?市场 C 优于市场 A?然后,如果我知道我在市场 B 和 C 中有一个(公司 X,产品“好”)的价格,我会将它们乘以这些平均倍数,以获得“基于市场的最佳猜测”。然后我重复保持不变的公司和市场,以及市场和产品。最后,我留下了三个“最佳猜测”。然后问题是将我的三个最佳猜测转换为一个猜测,因为根据对这种方法的一些测试,真实价格可能位于这三个最佳猜测之间或之外。这是基于训练样本的错误直方图:

直方图:估计为实际的百分比

3个回答

将您正在做的事情放在正式的上下文中可能会很有用,这样您就可以查看一些针对您的问题的标准解决方案。

您有一个(随机)变量 X(价格)的观测值,以及一些解释变量 L、C、P(L="location" = city, C=company, P=price)。所以你的数据由cuadruples组成(Ci,Li,Pi,Xi).

你假设一个multiplicative模型:

E(X|C,L,P)=λ fC gL hP.

该模型非常适合广义线性模型的上下文,因为:

ln(E(X|C,L,P))=ln(λ)+ln(fC)+ln(gL)+ln(hP).

您正在通过迭代缩放的变化来拟合模型。我不知道是否存在与拟合模型的方式相对应的概率模型。乘法模型和迭代缩放都有悠久的传统,所以答案可能是已知的。

无论如何,一旦在广义线性模型的上下文中,您可以拟合参数,对误差做出一些假设。自从X计算每个项目的货币单位数,您可以从尝试泊松模型(以及过度分散的泊松模型)开始。也值得尝试其他 GLM。

你的方法看起来很有趣。有机会我会借的。让我提出一些建议(“建议”,而不是“处方”):

  1. 价格倍数通常称为“指数”。考虑根据总体加权平均值进行索引,而不是进行成对索引。加权平均指数将与更稳定的分母进行比较。为了规避索引中的缺失值,您可以使用索引滞后一个时间单位,将其与今天的值一起使用,并进行更新(用预测替换今天的 NA)以供明天使用。

  2. 过去我尝试过以下方法:如果数量的值X有时t不可用,使用X^(t)=most recent observed value of X. 对于我试图做的事情,它在我的情况下效果不佳,但如果你跟踪的数量的动态不是太疯狂,它可能对你有用。您可以结合这两种想法,使用 2) 来更新 1) 中索引的基线。

请记住,没有“最佳预测”。只有“合理的预测方法”和“有用的预测”。我建议使用一些平均值作为指数的基准线是因为平均值比单个观察值更稳定。

我会根据可用信息训练多个机器学习模型。首先,我会将每个产品的数据标准化,使平均值为 0。这样您就可以更好地比较不同的价格类别。但是,我会将已知的平均价格添加到您的集合中,并在您的整个训练数据上标准化,因为我可以想象不同价格组的政策会有所不同。现在您可以为不同的产品训练不同的模型。您使用的功能越多,您拥有的数据就越少,因此这是您必须测试的权衡。这是我正在谈论的一个示例(非标准化):

ID  Price1 Price2 Price3 Feat1 Feat2
1   1      2      NA     3     8
2   4      NA     4      6     9
3   2      NA     3      5     3
4   NA     2      NA     3     4
5   5      1      NA     4     5
6   NA     3      5      2     3
7   8      5      7      4     1

现在估算缺失的 Price1 值,您可以使用:

  • Price1 = F(Price2, Price3, Feat1, Feat2) 仅使用 1 行 (ID: 7)

  • Price1 = F(Price2, Feat1, Feat2) 使用 3 行(ID:1、5、7)

  • Price1 = F(Feat1, Feat2) 使用 5 行(ID:1、2、3、5、7)

在这个非常简短的示例中,第三个可能更好,但是使用更多的数据会产生更好的结果。

要比较插补模型,您可以按价格删除许多已知实体,对其余实体进行训练并将输出与已知价格进行比较。如果流程完全自动化,您可以使用交叉验证方案一次性获取所有价格。我会以标准化的价格来做这件事,所以这是关于相对错误而不是绝对的。