What
ItemCF在使用过程中,在建立用户-物品倒排表时,为了避免异常的用户数据行为对计算的影响,需要对每个用户喜欢的物品列表中物品数量进行限制。
Why
ItemCF流程.png1.异常值
异常的用户行为数据对ItemCF中物品相似度的计算并没有意义。
一个用户会在一个数据周期内(比如,7天)下载多少次应用呢?
可以统计每个用户在一个数据周期内的平均下载数,然后根据这个平均值user_avg来判断异常值。
如果一个用户(outlier)平均每天下载20个应用,那么拉取一周的数据,该用户就会下载140个应用,很明显,这个用户的行为数据是异常的,他的行为并不能起到协同过滤的作用。
试想,谁会一天下载20多个应用呢?可能是幕后的测试人员吧,或者,一个把下载App当做个人爱好的朋友。而这个行为对于ItemCF并没有意义,因为ItemCF是通过用户对物品的行为来计算物品之间的相似度的,如果用户的对于物品的行为是随机的、无目的,将这种异常行为数据用于计算就没有意义。
2.计算量
不对异常值进行处理,会增加不必要的计算开销。
还是上面的例子,如果将上面的异常用户(outlier)的行为数据用于ItemCF计算,在根据其用户-物品倒排表制作共现矩阵时,一共进行次运算;
而假设一个正常的用户每天最多下载5个应用,那么一周就是35个引用,在根据其用户-物品倒排表制作共现矩阵时,一共进行次运算。
计算开销多了10倍。随着数据的不断增加,由于异常值造成的计算开销只会越来越大。
How
如何对异常值进行处理?
1.删除
直接将该用户的行为数据进行删除,不用于后续计算。我现在是这样做的,因为数据量较大。
2.修改后保留
根据经验对用户的行为数据进行保留,例如根据用户行为的时间戳,保留他在白天的时间段内的行为数据,而将凌晨的行为数据删除。
需要说明的是,不同的数据挖掘场景,对于异常值的处理不同,需要根据具体的需求而定。
How Good
1.达到更好的计算效果;
2.避免了不必要的资源浪费;
3.当计算量很大,限制用户-物品倒排表中物品数量也是模型调优的选择之一。
网友评论