机器学习中测试集是否需要数据清洗?

Does the test set need data cleaning in machine learning?

我正在进行一个关于纽约出租车数据的有趣机器学习项目 (https://s3.amazonaws.com/nyc-tlc/trip+data/green_tripdata_2017-04.csv),目标是预测小费金额,原始数据看起来像(2 个数据样本):

   VendorID lpep_pickup_datetime lpep_dropoff_datetime store_and_fwd_flag  \
0         2  2017-04-01 00:03:54   2017-04-01 00:20:51                  N   
1         2  2017-04-01 00:00:29   2017-04-01 00:02:44                  N   

   RatecodeID  PULocationID  DOLocationID  passenger_count  trip_distance  \
0           1            25            14                1           5.29   
1           1           263            75                1           0.76   

   fare_amount  extra  mta_tax  tip_amount  tolls_amount  ehail_fee  \
0         18.5    0.5      0.5        1.00           0.0        NaN   
1          4.5    0.5      0.5        1.45           0.0        NaN   

   improvement_surcharge  total_amount  payment_type  trip_type  
0                    0.3         20.80             1        1.0  
1                    0.3          7.25             1        1.0  

有五种不同的'payment_type',用数字1,2,3,4,5表示

我发现只有当'payment_type'为1时,'tip_amount'才有意义,'payment_type'2,3,4,5都是零小费:

for i in range(1,6):
    print(raw[raw["payment_type"] == i][['tip_amount', 'payment_type']].head(2))

给出:

   tip_amount  payment_type
0        1.00             1
1        1.45             1
   tip_amount  payment_type
5         0.0             2
8         0.0             2
     tip_amount  payment_type
100         0.0             3
513         0.0             3
     tip_amount  payment_type
59          0.0             4
102         0.0             4
       tip_amount  payment_type
46656         0.0             5
53090         0.0             5

第一个问题:我想为 'tip_amount' 建立一个回归模型,如果我使用 'payment_type' 作为特征,模型可以自动处理这种行为吗?

第二个问题:我们知道 'tip_amount' 对于 'payment_type' 2,3,4,5 实际上不是零,只是没有被正确记录,如果我删除这些数据样本并只保留'payment_type' == 1,那么当使用模型用于未见过的测试数据集时,它无法预测 'payment_type' 2,3,4,5 到零提示,所以我必须保留 'payment_type' 作为一项重要功能吧?

第三个问题:假设我保留了所有不同的 'payment_type' 数据样本,并且该模型能够预测 'payment_type' 2,3,4,5 的零小费金额,但这是我们真正想要的吗想?因为潜在的真实小费不应该为零,这就是数据的样子。

机器学习的俗语是垃圾进,垃圾出。通常,特征选择和数据预处理比模型架构更重要。

第一个问题:

第二个问题:

既然2、3、4、5的payment_type的结果都是0,为什么不简单点呢。将所有非 1 的付款类型替换为 0。这将使您的模型轻松地将 1 与已付款相关联,将 0 与未付款相关联。它还减少了您的模型将来必须学习的东西的数量。

第三题:

如果 "underlying true tip" 没有反映在数据中,那么你的模型根本不可能学习它。这种对事实的不准确表述是否是我们想要的,由您来决定。理想情况下,您会有显示实际小费的数据。

预处理您的数据非常重要,它将极大地帮助您的模型。除了对 payment_type 功能进行一些更改外,您还应该考虑对数据进行规范化,这将有助于您的机器学习算法更好地概括数据之间的关系。