机器学习——新增用户预测

机器学习——新增用户预测

Github地址

背景

​ 今年8月末在一个机器学习方面的公众号上看到了一篇使用机器学习进行预测的比赛推文,本着参加Datawhale的AI夏令营拿个实习证明的想法(后来发现是实践证明)决定试一试,也为备战数模的练练手感。比赛链接:

用户新增预测挑战赛

问题重述

​ 赛题数据由约62万条训练集、20万条测试集数据组成,共包含13个字段。其中uuid为样本唯一标识,eid为访问行为ID,udmap为行为属性,其中的key1到key9表示不同的行为属性,如项目名、项目id等相关字段,common_ts为应用访问记录发生时间(毫秒时间戳),其余字段x1至x8为用户相关的属性,为匿名处理字段。target字段为预测目标,即是否为新增用户。比赛的评价标准采用f1_score,分数越高,效果越好。

​ 问题类似于鸢尾花分类,是一个分类预测,不过这应该只是一个二分类问题,常用的解决此类问题的模型有支持向量机、决策树、随机森林等等。

探索性数据分析(EDA)

  • 数据处理

    首先,直观地观察一下训练集

    图1 训练集可视化

​ 很明显,udmapcomm_ts这两个特征是需要进行处理的。对于udmap可以进行拆分,得到key1到key9和"isunknown"十个特征,这也是Datawhale给出的Baseline中的做法。对于common_ts,则可以一个时间戳中提取出日期、小时、分钟、秒等等多个时间特征。在本题中,我提取出的是小时、日期、分钟、星期、时钟+分钟。

  • 特征提取

    在上一步的基础上,进行特征提取,为了得到更多的特征用于特征筛选。

    首先,观察到eid、x1、x2…x8中的一个特征内,取值只在几个值之中,推测这些值是某一些操作的代号。对此,从这些特征的其中一个中可以提取出两个特征,分别是所有取值它们各自出现的次数一个特征中取某一个值时target为1的频率

    对于x1到x8,我还进行了目标编码,最终得到42个特征。

​ 上述工作完成后,在进行查空补空,就可以进入下一项工作——探索性数据分析了。

  • EDA

    • 相关性分析

      图2 相关性热力图>=0.5
      从相关性热力图中发现,有些特征之间的相似度很高,达到了0.8、0.9。对于两个或多个相关性强的特征,只要保留其中一两个即可。

      **如何保留:**在这里我本来想用两个方法,选择保留特征的评判标准都是特征对于目标特征target的重要性。

      法一:秩和检验。对于一个特征,将它分为两个列表,一部分是target为0的,另一部分是target为1的,将两个列表的值进行秩和检验,得到pvalue值,若值大于0.05,可以认为两个列表没有显著差异,也就可以认为是重要性较低的。

      法二:将包含全部特征的训练集放进随机森林模型中进行训练,由模型根据该特征节点的平均深度给出特征的重要性。实际完成时我用的是法二。

特征重要分数
common_ts_hour_minute0.11770636674156788
x50.09159779450338466
common_ts_minute0.09044867249636006,
common_ts_hour0.07109628463099216

模型训练

模型训练中我使用的是xgboost+贝叶斯搜索,不过根据大佬的分享,用lightgbm的速度和训练效果也很不错。具体代码见github,最终得分:

图3 fi_score

体代码见github,最终得分:

[外链图片转存中…(img-L7IZtQoR-1697466482810)]

当时八月末时好像还能排个50名上下,后来没再调模型,排名应该不怎么高了。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值