了解正在发生的事情

数据挖掘 机器学习 数据挖掘
2022-02-22 12:21:12

我收藏了 1000 瓶葡萄酒。我想了解什么可能/可能推动价格上涨或下跌。下面是数据示例

Wine      Country       Area        Grape        Class    Year    Price
A         France        Burgundy    Pinot Noir   Grand    2014    +6%
B         France        Burgundy    Chardonnay   1er      2014    -1%
C         France        Burgundy    Pinot Noir   1er      2014    +4%
D         USA           California  Pinot Noir            2013    +1%
E         USA           California  Blend                 2014    +0.5%
F         USA           California  Chardonnay            2014    -4%
G         USA           California  Chardonnay            2013    -5%

从这些虚构的数字中,我认为 A 瓶上升的原因是因为比诺上升了,但更重要的是法国上升了 V 美国葡萄酒。同样程度的霞多丽表现不佳,但美国的表现再次比法国差。

在这里,这相当容易,但如果将其扩展为 1000 行并添加更多类别,则该练习变得不那么容易看出趋势。

我最初的想法是使用决策树中特征的重要性。但是有更好的方法吗?

谢谢

2个回答

您正在寻找的是对具有正或负价格的观察的最终分数的特征贡献。决策树或随机森林中的特征重要性对您没有帮助,因为特征的重要性在所有观察结果(葡萄酒)中都是固定的。他们讲述了一个关于整个模型的故事,但没有关于个别观察。因此,如果您想知道是什么导致葡萄酒价格为负数或正数,您应该查看特征贡献。

让我们详细说明一下。

让我们忘掉决策树,去寻找它们的集合,比如随机森林,有充分的理由。(我强烈建议您阅读为什么集成模型一致击败基础学习者,以及它们如何帮助解决基础学习者可能遇到的高偏差 - 高方差问题。)

第一步是将您的因变量价格标记为10, 取决于价格是正数还是负数 (y=1当且当price>0)。在典型的探索性分析(您可以在其中查看箱线图和其他东西作为开始研究)和特征工程之后,您可以拟合随机森林来预测具有正或负价格的葡萄酒(即y存在1或者0)。

完成此操作后,您将获得每种葡萄酒的估计概率,表示分类模型对该葡萄酒价格的估计是正数还是负数。像这样的东西:

Wine Prob
A    0.4
B    0.7
C    0.9
D    0.3

这些概率实际上仅包括偏差项的总和以及所有特征对该观察的个体贡献:

P(yi=1)=bias+i=1m(contributionOfFeaturei),

在哪里m是特征的总数。这就是您如何分析每个特征对特定葡萄酒价格为正或负的最终概率的贡献。

关于如何编写代码,如果您使用的是 scikit,则可以使用这个非常简单方便的工具:

https://github.com/andosa/treeinterpreter

看起来您的所有功能都是分类的。只是为了快速浏览。尝试按每个类别对每个变量进行价格方框图。如果对于某些变量,您开始在盒子中看到明显的差异(盒子的高度和胡须)。这将帮助您在分析上声明该功能的重要性。否则做一个决策树并查看特征重要性似乎是一个很好的解决方案。