问题描述
我试图了解一些自变量之间的基本原理,并量化它们对因变量的重要性。我遇到了诸如随机森林之类的方法,该方法可以量化变量的重要性,然后预测结果。但是,我对与随机森林或类似方法一起使用的数据的性质存在疑问。下面提供了一个数据结构示例,您可以看到时间序列中的某些变量(如人口和年龄)不会随时间变化,尽管不同城市之间有所不同。而其他变量(例如温度和#internet用户)则随时间在城市中变化。我的问题是:如何量化这些变量对“ Y”变量的重要性?顺便说一句,我更喜欢在python环境中应用该方法。
解决方法
“如何量化重要性”是非常常见的问题,也称为“功能重要性”。
功能的重要性取决于您的模型;通过回归,您会非常重视系数,在随机森林中,您可以使用(但有些人不建议使用)内置feature_importances_
或更好的SHAP
值。此外,您还可以使用som相关,即特征与目标之间的Spearman / Pearson相关性。
不幸的是,这里没有“免费午餐”,您需要根据使用目的,数据的外观等来决定。
我认为您遇到的人可能是Boruta,您可以在其中混排变量,将其添加到数据集中,然后根据随机森林中的“最佳混排变量”创建阈值。
,我的想法如下。您的结果变量“ Y”只有几个可能的值。您可以构建一个分类器(Random Forest是许多现有分类器之一),以预测说“在[25-94,95-105,106-150]中为Y”。您将在这里有 三种不同的结果 ,它们相互排除。 (如果更适合您的应用,则可以使用95
和105
以外的其他间隔限制。
正如您所解释的,您的一些预测变量是时间序列,而其他则是恒定的。您应该使用滑动窗口技术,其中分类器根据与时间相关的变量(例如1月)预测“ Y”。某些变量是常量并不重要,因为实际变量'City'具有四个结果:'[City_1,City_2,City_3,City_4]'。同样,使用“人口”和“年龄平均值”作为实际变量。
一旦使用分类器,就会开发出许多用于特征排名和特征选择的方法。您可以使用insight classifiers之类的网络服务来为您完成此操作,也可以下载诸如Weka之类的软件包。
关键是要组织模型及其预测变量,以便分类器可以正确学习。
,如果城市和月份也是您的自变量,则应将它们从索引转换为列。使用熊猫读取文件,然后使用df.reset_index()可以为您完成这项工作。