因此,我正在研究一个ML模型,它可以作为潜在的预测因素:年龄、他所在城市的代码、他的社会地位(已婚/单身等等)、他的子女数和输出签名(0或1)。这是我拥有的初始数据集。
我的预测将基于这些特征来预测签名的价值。
我已经根据看不见的数据做了预测。对预测结果与实际数据进行验证后,我的准确率为25%。而交叉验证给我65%的准确性。所以我想:太合适了
这是我的问题,我回到了整个过程的早期阶段,开始创建新的特性。示例:我创建了基于签名百分比的类,而不是将其作为ML模型的输入的城市代码,而是将具有较高“签名”(输出)百分比的城市分配到更高的class_city值,这大大改进了关联矩阵--有符号类_城市的关系,这是有意义的。我做的对吗?或者我不应该创建基于输出的特性?这是我的CM:

经过重新建模,只有3个功能( department_class,年龄和情况),我测试了我的模型的无形数据,由148行,而60k行在培训文件。
具有旧特征的第一个模型(部门的ID )提供了25%的准确率,而具有新特性的第二个模型class_department提供了71%的精度(同样是在未见数据上)。
注意:第一个25%的模型还有一些其他特性,比如ID(它们可能导致模型在deparment_ID中具有如此弱的准确性)。
发布于 2019-03-19 17:07:31
您可以基于输出值创建特性,但是在这样做时应该小心。
当您对给定的数据点使用class_city值(基于该城市的签名百分比)时,请注意,此计算不能包括当前数据点,因为在预测期间不会有“已签名”的值。
处理这一问题的一种方法是将您拥有的全部数据分成三部分--估计、训练、测试。估计集仅用于估计每个城市的class_city值。然后,这些值可以用于火车和测试数据。这样,您有标签值,而您的模型不做任何‘不公平’。对于测试,您实际上可以使用来自estimation+train集的数据来估计在测试集中使用的class_city值。对于任何看不见的数据,情况也是如此。您可以使用从以前的所有数据点估计的class_city值。
例如,在时间序列数据的上下文中,任何数据点的class_city值都可能使用来自以前所有数据点的信息,而不应该使用来自未来数据点的任何信息!
发布于 2019-03-19 15:04:43
不,你不应该这样做,这是造成数据泄漏。当你用来训练机器学习算法的数据碰巧有你想要预测的信息时,数据泄漏就会发生。
它将在培训期间提供有关测试数据的模型信息。它将导致您的考试成绩过于乐观,并将使模型更糟糕的概括为完全看不见的数据。
https://datascience.stackexchange.com/questions/47619
复制相似问题