关于课程的project1的两个问题

有两个关于project的问题想问一下老师:

  1. 构建label的时候,我们进行了对有相同user_id&product_id pair的信息进行了去重操作,但他们drop的行的‘order_number’,'order_dow’这些都有可能是不一样的,随机drop的话,保留下来的信息相当于是随机留下来的,那为什么还要保留这些作为feature呢?为什么不全都用之后构建的feature呢?
  2. 在构建user_product features时,为何不构建per user的商品距离上次被购买的均值,而在构建product features时有这个feature?
    product feature:

    user_product feature:
  1. 你这里讨论的代码是我们构造label的工作。当构造label的时候,每位用户对于某一个product,只能有一个label: either 1 or 0,更细致一点说,即使一位用户在prior data里对某个商品买了很多次,它的label也还是1,不会是其他数字,因此在这里我们需要dedup (而且无论随机保留下来哪行数据,dedup的结果都不会影响最后的label的数值). 但是,就像你说的,在training data里面,一位用户对于一个商品可能有多行数据(e.g. 在prior里购买了多次),这些数据虽然对label的构造没有额外用途,但是可以帮助我们构造其他user-level or product-level的features. 你可以看到,在后续section 2的时候,我们用的raw data并不是model_all_data, 而是prior_details。

  2. 这个feature也可以被加入到 user_product feature中,可以实验一下,看看这个feature的importance以及对模型的效果如何。

谢谢老师。是的,对于第一题,后续构造feature用的是prior details,我的问题是model_all_data 里依旧保留了类似‘order_dow’这些列,为什么要保留这些列作为feature呢?这些feature的值是dedup后随机保留的,不合适作为feature进入training吧

1 个赞

你说的很对。如果后续建模的时候还会用到这些feature的话,更严谨的做法应该是把这个random dedup替换成固定的做法,比如取所有出现情况的最后一次or第一次作为数据保留下来,或者取多次的均值。目前这种做法不能算是错误的,因为它确实是实际情况中的数据,但确实不严谨,最好做一下上述改进。谢谢你指出!

1 个赞