最近在学习天池比赛:商场中精确定位用户所在店铺,该比赛作为新手刚开始我想到了多分类,经过学习一些人的想法后得知该问题转化为二分类去做会减少计算量同时准确度也会提升,在学习过程中接触到了“候选集”、“覆盖率”两个概念,经过查询很多资料找到相关解释,写在下面供以后查阅。
从领域归属划分来看:电商推荐,广告点击率预估,销量预估,贷款违约判定,癌症检测等
从任务目标划分来看:回归,分类,排序,推荐等
从数据载体划分来看:互联网日志,表单数据,文本,语音,图像等
从特征形式划分来看:原始数据,明文特征,脱敏特征等
针对该比赛先了解一下其中的数据情况:
缺失值填充
特征变换
LR,SVM,DNN等对特征的分布和尺度是比较敏感的,归一化有助于模型收敛;
基于树的模型,具有伸缩不变性,不需要做特征变换;
ID类特征的处理
Averaging, Voting, Stacking , Blending
本赛题目标为在商场内精确的定位用户当前所在商铺。在真实生活中,当用户在商场环境中打开手机的时候,存在定位信号不准、环境信息不全、店铺信息缺失、不同店铺空间距离太近等等挑战,因此如何精确的判断用户所在商铺是一个难题。
本次大赛我们将提供在2017年8月份大概100家商场(复赛为2017年7-8月大概500家商场)的详细数据,包括用户定位行为和商场内店铺等数据(已脱敏),参赛队伍需要对其进行数据挖掘和必要的机器学习训练。另外,我们会提供2017年9月份的商场内用户数据来做评测,检测您的算法是否能准确的识别出当时用户所在的店铺。
任务描述
参赛者需要对我们提供的2017年8月份(复赛为2017年7-8月)数据进行店铺、用户、WIFI等各个维度进行数据挖掘和特征创建,并自行创建训练数据中的负样本,进行合适的机器学习训练。在我们提供2017年9月份的数据中,根据当时用户所处的位置和WIFI等环境信息,通过您的算法或模型准确的判断出他当前所在的店铺。
本赛题提供两种数据
1、商场内店铺的信息数据,这个对训练和评测都是统一的。
2、真实用户在这些商场内的一段时间的到店交易数据,训练和评测将采用不同的时间段。
注意:为了保护用户和商家的隐私,所有数据均作匿名处理,同时做了必要的有偏采样、过滤等脱敏措施。某些数据的某些字段可能为NULL,请自行处理。
本赛题采用准确率进行评价。详细评分算法如下:
预测正确:您给出的shop_id和标准答案的shop_id相等。
准确率 = 预测正确样本总数/总样本数
注意:如果某些row_id样本您没有给出结果,那么也会被当成错误识别。
首先通过这个问题映射出二分类问题中候选集和覆盖率的概念。
常规问题的解决思路是:
对于常规问题来说采用上述步骤进行即可,但是还有一个其中一个步骤可以穿插到其中即候选集的构建。
即在数据分析和特征工程之间加入候选集的构建。
在这个比赛当中可以采用多分类的做法以及二分类的做法。
多分类的方法:
候选集:所在mall的所有的商店
覆盖率:100%
正负样本比:1:所在mall中的所有商店-1
二分类的方法:
候选集:通过简单的规则来构造候选样本来形成候选集
规则如下:
覆盖率:99.1%(正样本未出现在训练集中的样本在测试集中剔除)
正负样本比:1:负样本随机抽样之后所产生的候选集
通过不同规则产生的候选集需要进行候选集融合,因为训练的时候要保证每个样本的候选集的数量相同
候选集的融合和过滤保证候选集的数量一致
在多分类中候选集的数量为整个mall当中的所有商店
在二分类中候选集的数量为通过规则生成的少量商店
二分类中:相对于直接使用全量的商场店铺做候选,用简单规则构造的候选集样本可以在不降低模型预测精度的情况下,大大降低模型训练的复杂度
在构造候选集的过程当中,应当控制正负样本比,把正负样本比控制在合适的位置,必然,正负样本比越小,模型的覆盖率越高,但是当正负样本太大的时候,会导致模型的复杂度和模型训练时间大大增加,得不偿失。
候选集:通过数据处理之后,通过特定的规则从训练集当中筛选出来的少量的可以最大化体现数据特征的样本点
覆盖率:在验证集上面,正样本可以在候选集中命中的概率。(亦可以是在整个训练集中)
构建完候选集之后,之后模型训练以及预测都是基于候选集来完成的
所以,覆盖率可以大致表明该模型的上限
所以构造候选集的过程也是至关重要的一个步
下面给出针对该比赛比较好的方案:
数据大致就是上图中所述的那样
在数据当中,存在如下的数据缺陷:
数据分析模块:
分析数据的分布(图)占坑,各种数据的分析
数据划分的过程通过前面的讲解,我们可以判断该类问题为时间序列推断相关的问题,我们应该采用滑窗法进行划分。
不一定要以线上测试集的窗口为准,因为特征提取的时间跨度越小越好
因为,窗口越大, 在当前窗口中的后续部分的预测可能遗漏了很多关键信息
(上述划分当以天为划分的时候效果最佳但是太过于复杂和耗时)
上述划分在训练线上训练集的时候将时间窗口进行叠加,也就是第二条线,这样可能会有小幅度的提升。
在进行比赛之前可以先不考虑模型的问题,可以先考虑通过构造简单的规则来处理这个数据,
这些规则的构建也可以为后续的特征工程做一些准备的工作。
规则可以包括如下:
通过上面的规则可以大致过滤出来一些店铺,上述的规则同时也可以用来构造候选集
构造完成规则之后,需要考虑使用什么样纸的模型
对于这个问题来说,这个问题肯定是一个分类的问题
那么是采用二分类还是采用多分类
就这个问题而言,二分类和多分类都是可以的
多分类的问题就是对两个以上类别的标签的数据进行分类,对于所有的店铺有一个概率预测值
二分类的问题就是对两个类别的标签的数据进行分类,通过预测结果判定该店铺到底是不是预测结果
多分类的问题当前交易订单中的商店就是该笔订单的label信息,如果将所有的数据一起进行训练的话, label的种类非常的多,十分的难以进行训练,因为数据交易信息当中给出了商场的信息,我们可以通过分mall的方式进行训练,这样的话,就可以降低训练难度。
在多分类的问题当中,训练集的划分就需要按照分mall来进行,每个mall单独构造训练集的方式,候选的话就是该店铺所在mall的所有商店,之后再构建特征工程,进行预测
采用多分类的方式的话,覆盖率线下的话,可以达到100%,
但是存在相应的缺点的问题就是:
优点就是样本的召回率特别的高,与二分类有一定的互补性。(可以将多分类的预测结果top10作为二分类的候选集)
候选集的构建的方式:
一般的思路是先用规则构造候选,然后在候选集中利用模型输出概率值。这样需要同时兼顾候选集合的
覆盖率
和预测模型的同时,为了避免训练集数据量过大,可以在训练集中进行样本抽样。具体方法是,保留全部正样本,负样本中随机抽取一定比例加入训练集。实际测试,抽样对于模型的精度影响不大。
准确率
,实现上较为复杂。直接选取目标mall中所有的shop作为候选,大大降低了模型的复杂程度。
通过上述候选集的构建可以达到现下覆盖率99.1%(但是这个覆盖率是有一定的水分的,我们将测试集中的正样本如果没有出现在训练集当中的话,将其进行剔除)
采用二分类的优点,相对于直接用全量的商场店铺进行候选,用简单的规则构造出来的候选集样本可以在不降低模型预测精度的情况下,大大的降低模型训练的负担
采用二分类的理由:
采用二分类的理由:
二分类方案,即针对测试集中的每一条记录,构造候选shop集合,用模型输出每个候选的概率值,然后选取概率值最大的作为该条记录的预测shop。训练集和测试集的构造方法图示如下:
训练:
测试:
标记特征
null
"总量-比例"特征
对于特征3、4,每条记录中的10个wifi由强到弱排列,可生成10个特征。
差值特征
三个wifi强度差值特征,按照信号强度由强到弱排列,可生成10个特征。
距离特征
离散化是将强度值取整(就是将后续的个位数部分去除,因为可能在同一个方面的不同位置强度值也是不同的,但是是表示的同一个店铺,应该表示的是同一个店铺才对)
数据挖掘比赛当中,如果想要取得较好的名词,特征基本上一定要在百位级别才比较好
你不可能单纯的为了测试这个特征有没有用,而且测试一遍数据集,显然如果对于大数据集是不可行的,必然采用其他的比较简单的方式进行判断。
"总量-比例"特征
对于特征3、4,每条记录中的10个wifi由强到弱排列,可生成10个特征。
差值特征
三个wifi强度差值特征,按照信号强度由强到弱排列,可生成10个特征。
距离特征
离散化是将强度值取整(就是将后续的个位数部分去除,因为可能在同一个方面的不同位置强度值也是不同的,但是是表示的同一个店铺,应该表示的是同一个店铺才对)
数据挖掘比赛当中,如果想要取得较好的名词,特征基本上一定要在百位级别才比较好
你不可能单纯的为了测试这个特征有没有用,而且测试一遍数据集,显然如果对于大数据集是不可行的,必然采用其他的比较简单的方式进行判断。
可以通过画图分析的方式对该数据进行分析判断,如果该数据在时间序列上或者在空间上有着明显的区分度的话,或者这个特征对于结果的影响是呈现特定分布的时候,可以考虑进行该特征的提取。
该特征需要在不同的取值下对结果有一定的影响,要有一定的区分度。
对于这个比赛来说,这种低维稠密的特征,直接上XGBOOST就可以了。
比较常用的是averaging,这个就是加权平均
还有就是voting,这个就是投票
"总量-比例"特征