二分类问题中候选集和覆盖率的概念

      最近在学习天池比赛:商场中精确定位用户所在店铺,该比赛作为新手刚开始我想到了多分类,经过学习一些人的想法后得知该问题转化为二分类去做会减少计算量同时准确度也会提升,在学习过程中接触到了“候选集”、“覆盖率”两个概念,经过查询很多资料找到相关解释,写在下面供以后查阅。


赛题类型

从领域归属划分来看:电商推荐,广告点击率预估,销量预估,贷款违约判定,癌症检测等

从任务目标划分来看:回归,分类,排序,推荐等

从数据载体划分来看:互联网日志,表单数据,文本,语音,图像等

从特征形式划分来看:原始数据,明文特征,脱敏特征等

针对该比赛先了解一下其中的数据情况:

特征工程

缺失值填充

  • 特征为连续值,且为正态分布,使用均值填充,保持期望不变
  • 特征为连续值,且为长尾分布,使用中值填充,避免异常点影响
  • 特征为离散值,使用众数填充
  • 使用模型预测,完善用户画像

特征变换

  • 对长尾分布的特征,做对数变换
  • 标准化,归一化
  • 连续值特征离散化
LR,SVM,DNN等对特征的分布和尺度是比较敏感的,归一化有助于模型收敛;
基于树的模型,具有伸缩不变性,不需要做特征变换;


ID类特征的处理

  • OneHot编码,比如,性别编码为0或者1
  • 使用每种类别的某种统计量代替该特征
  • Word Embedding,将高维稀疏特征映射成低维稠密特征

模型选择

  • 对于高维稀疏型特征(比如ID特征one hot编码)使用线性模型LR,FM模型(广告预测)
  • 对于低维稠密型特征,使用集成树模型XGBoost,GBDT,RandomForest(优惠券预测)
  • 对于图像或者语音等感官型数据,使用DNN或者CNN或者LSTM

模型融合

Averaging, Voting, Stacking , Blending


本赛题目标为在商场内精确的定位用户当前所在商铺。在真实生活中,当用户在商场环境中打开手机的时候,存在定位信号不准、环境信息不全、店铺信息缺失、不同店铺空间距离太近等等挑战,因此如何精确的判断用户所在商铺是一个难题。

本次大赛我们将提供在2017年8月份大概100家商场(复赛为2017年7-8月大概500家商场)的详细数据,包括用户定位行为和商场内店铺等数据(已脱敏),参赛队伍需要对其进行数据挖掘和必要的机器学习训练。另外,我们会提供2017年9月份的商场内用户数据来做评测,检测您的算法是否能准确的识别出当时用户所在的店铺。


任务描述

参赛者需要对我们提供的2017年8月份(复赛为2017年7-8月)数据进行店铺、用户、WIFI等各个维度进行数据挖掘和特征创建,并自行创建训练数据中的负样本,进行合适的机器学习训练。在我们提供2017年9月份的数据中,根据当时用户所处的位置和WIFI等环境信息,通过您的算法或模型准确的判断出他当前所在的店铺。

1、数据

本赛题提供两种数据

1、商场内店铺的信息数据,这个对训练和评测都是统一的。

2、真实用户在这些商场内的一段时间的到店交易数据,训练和评测将采用不同的时间段。

注意:为了保护用户和商家的隐私,所有数据均作匿名处理,同时做了必要的有偏采样、过滤等脱敏措施。某些数据的某些字段可能为NULL,请自行处理。


2、评价方式

本赛题采用准确率进行评价。详细评分算法如下:

预测正确:您给出的shop_id和标准答案的shop_id相等。

准确率 = 预测正确样本总数/总样本数

注意:如果某些row_id样本您没有给出结果,那么也会被当成错误识别。





首先通过这个问题映射出二分类问题中候选集和覆盖率的概念。

常规问题的解决思路是:


对于常规问题来说采用上述步骤进行即可,但是还有一个其中一个步骤可以穿插到其中即候选集的构建。


即在数据分析和特征工程之间加入候选集的构建。

在这个比赛当中可以采用多分类的做法以及二分类的做法。

多分类的方法:

候选集:所在mall的所有的商店

覆盖率:100%

正负样本比:1:所在mall中的所有商店-1


二分类的方法:

候选集:通过简单的规则来构造候选样本来形成候选集

规则如下:

  • 用户访问过的商店
  • 与当前row下的wifi有交集的wifi的商店(商店wifi只取出现最多的15个)
  • 和当前用户gps最近的三个商店
  • 构造gpsKNN,与用户gps最近的100个用户的商店去重
  • 保留全部正样本,负样本中随机抽取一定比例的加入训练集

覆盖率:99.1%(正样本未出现在训练集中的样本在测试集中剔除)

正负样本比:1:负样本随机抽样之后所产生的候选集

通过不同规则产生的候选集需要进行候选集融合,因为训练的时候要保证每个样本的候选集的数量相同

候选集的融合和过滤保证候选集的数量一致


在多分类中候选集的数量为整个mall当中的所有商店

在二分类中候选集的数量为通过规则生成的少量商店


二分类中:相对于直接使用全量的商场店铺做候选,用简单规则构造的候选集样本可以在不降低模型预测精度的情况下,大大降低模型训练的复杂度

在构造候选集的过程当中,应当控制正负样本比,把正负样本比控制在合适的位置,必然,正负样本比越小,模型的覆盖率越高,但是当正负样本太大的时候,会导致模型的复杂度和模型训练时间大大增加,得不偿失。


候选集:通过数据处理之后,通过特定的规则从训练集当中筛选出来的少量的可以最大化体现数据特征的样本点

覆盖率:在验证集上面,正样本可以在候选集中命中的概率。(亦可以是在整个训练集中)

构建完候选集之后,之后模型训练以及预测都是基于候选集来完成的

所以,覆盖率可以大致表明该模型的上限

所以构造候选集的过程也是至关重要的一个步

下面给出针对该比赛比较好的方案:

认识数据

数据大致就是上图中所述的那样

在数据当中,存在如下的数据缺陷:

  1. wifi连接信息不稳定,同一个商店并不能总是能够搜索到同一个wifi(分析原因:移动wifi)
  2. wifi的强度不稳定(分析原因:信号源可能不是很稳定)
  3. wifi的数据当中很多只连接一个wifi且强度值为null(分析原因:IPhone手机权限原因)
  4. 里面的gps数据也存在较多的异常值等等

数据分析模块:

分析数据的分布(图)占坑,各种数据的分析

数据集划分

数据划分的过程通过前面的讲解,我们可以判断该类问题为时间序列推断相关的问题,我们应该采用滑窗法进行划分。



不一定要以线上测试集的窗口为准,因为特征提取的时间跨度越小越好

因为,窗口越大, 在当前窗口中的后续部分的预测可能遗漏了很多关键信息

(上述划分当以天为划分的时候效果最佳但是太过于复杂和耗时)

上述划分在训练线上训练集的时候将时间窗口进行叠加,也就是第二条线,这样可能会有小幅度的提升。

在进行比赛之前可以先不考虑模型的问题,可以先考虑通过构造简单的规则来处理这个数据,

这些规则的构建也可以为后续的特征工程做一些准备的工作。

规则可以包括如下:

  • wifi历史(通过交易信息中,当前商铺中的wifi和历史交易信息中wifi的交集)
  • 连接的wifi
  • GPS位置KNN(对经纬度去最近邻100个样本点的参考值)
  • user历史(用户之前到过的店铺)

通过上面的规则可以大致过滤出来一些店铺,上述的规则同时也可以用来构造候选集


构造完成规则之后,需要考虑使用什么样纸的模型

对于这个问题来说,这个问题肯定是一个分类的问题

那么是采用二分类还是采用多分类

就这个问题而言,二分类和多分类都是可以的


多分类的问题就是对两个以上类别的标签的数据进行分类,对于所有的店铺有一个概率预测值

二分类的问题就是对两个类别的标签的数据进行分类,通过预测结果判定该店铺到底是不是预测结果

多分类

多分类的问题当前交易订单中的商店就是该笔订单的label信息,如果将所有的数据一起进行训练的话, label的种类非常的多,十分的难以进行训练,因为数据交易信息当中给出了商场的信息,我们可以通过分mall的方式进行训练,这样的话,就可以降低训练难度


在多分类的问题当中,训练集的划分就需要按照分mall来进行,每个mall单独构造训练集的方式,候选的话就是该店铺所在mall的所有商店,之后再构建特征工程,进行预测

采用多分类的方式的话,覆盖率线下的话,可以达到100%,

但是存在相应的缺点的问题就是:

  1. 模型精确度不是很高,特征比较稀疏;
  2. 每一个商场都要训练一个模型
  3. shop作为标签之后,无法再对shop进行信息挖掘

优点就是样本的召回率特别的高,与二分类有一定的互补性。(可以将多分类的预测结果top10作为二分类的候选集)


二分类

候选集的构建的方式:

  1. 通过使用多分类的预测结果的top10作为二分类的候选集-存在的问题就是太过于麻烦
  2. 通过简单的规则构造二分类候选样本
    1. 规则1:用户访问过的商店
    2. 规则2:和当前row下的wifi有交集的wifi的商店(商店的wifi只取出现在商店中的最多的15个wifi)
    3. 规则3:和当前用户gps最近的三个商店(欧式距离)
      1. 问题1:商店给定的gps十分的不准确
      2. 解决:可以采用将交易历史信息中所有在该商店中交易的用户gps取中位数
    4. 构造gps KNN,与用户gps最近的100个用户的商店去重
      1. 每一笔交易都有gps信息,与其他所有的交易进行距离计算,得到与当前交易最近的交易订单,查看最近的100个交易订单都是发生在哪个店铺当中
  3. 训练集负样本继续采样
    1. 保留全部的正样本,负样本随机抽取一定比例加入训练集
      1. 之所以这样做,因为上述规则的构建也是比较麻烦的,规则构建的好坏直接影响候选集的好坏最终直接影响覆盖率
      2. 负样本随机抽样的意识就是:将一个mall当中的所有样本都作为候选集,但是保留正样本,将所有的负样本进行采样,采样出来的结果作为候选集
      3. 上述的抽样过程只发生在训练的过程中,预测的过程中不做抽样

一般的思路是先用规则构造候选,然后在候选集中利用模型输出概率值。这样需要同时兼顾候选集合的覆盖率和预测模型的

准确率,实现上较为复杂。直接选取目标mall中所有的shop作为候选,大大降低了模型的复杂程度。

同时,为了避免训练集数据量过大,可以在训练集中进行样本抽样。具体方法是,保留全部正样本,负样本中随机抽取一定比例加入训练集。实际测试,抽样对于模型的精度影响不大。

通过上述候选集的构建可以达到现下覆盖率99.1%(但是这个覆盖率是有一定的水分的,我们将测试集中的正样本如果没有出现在训练集当中的话,将其进行剔除)

采用二分类的优点,相对于直接用全量的商场店铺进行候选,用简单的规则构造出来的候选集样本可以在不降低模型预测精度的情况下,大大的降低模型训练的负担

采用二分类的理由:

  1. 大大的降低模型训练的负担
  2. 精度可以得以提高

二分类方案,即针对测试集中的每一条记录,构造候选shop集合,用模型输出每个候选的概率值,然后选取概率值最大的作为该条记录的预测shop。训练集和测试集的构造方法图示如下:

训练


测试


特征工程

标记特征

  1. 记录中是否有连接的wifi
  2. 记录中是含否有null
  3. 记录中wifi与候选shop出现过的wifi重合的个数

"总量-比例"特征

  1. 该mall的总历史记录数、候选shop在其中的占比
  2. 该user的总历史记录数、候选shop在其中的占比
  3. wifi历史上出现过的总次数、候选shop在其中的占比
  4. 在当前排序位置(如最强、第二强、第三强...)上wifi历史上出现过的总次数、候选shop在其中的占比
  5. 连接的wifi出现的总次数、候选shop在其中的占比
  6. 经纬度网格(将经纬度按不同精度划分成网格)中的总记录数、候选shop在其中的占比

对于特征3、4,每条记录中的10个wifi由强到弱排列,可生成10个特征。

差值特征

  1. wifi强度 - 候选shop的历史记录中该wifi的平均强度
  2. wifi强度 - 候选shop的历史记录中该wifi的最小强度
  3. wifi强度 - 候选shop的历史记录中该wifi的最大强度

三个wifi强度差值特征,按照信号强度由强到弱排列,可生成10个特征。

距离特征

  1. 与候选shop位置的GPS距离(L2)
  2. 与候选shop历史记录中心位置的GPS距离(L2)
  3. 与候选shop对应wifi信号强度历史均值的距离(L1、L2)

离散化是将强度值取整(就是将后续的个位数部分去除,因为可能在同一个方面的不同位置强度值也是不同的,但是是表示的同一个店铺,应该表示的是同一个店铺才对)


数据挖掘比赛当中,如果想要取得较好的名词,特征基本上一定要在百位级别才比较好

如何判定一个特征是否有用:

你不可能单纯的为了测试这个特征有没有用,而且测试一遍数据集,显然如果对于大数据集是不可行的,必然采用其他的比较简单的方式进行判断。

可以通过画图分析的方式对该数据进行分析判断,如果该数据在时间序列上或者在空间上有着明显的区分度的话,或者这个特征对于结果的影响是呈现特定分布的时候,可以考虑进行该特征的提取。


该特征需要在不同的取值下对结果有一定的影响,要有一定的区分度。


模型选择

对于这个比赛来说,这种低维稠密的特征,直接上XGBOOST就可以了。

模型融合

比较常用的是averaging,这个就是加权平均

还有就是voting,这个就是投票

Stacking和Blending用的比较少


NULL数据的问题

在这个比赛复赛里面还有一个问题存在就是复赛阶段有很多的wifi信息为null的数据,

如何消除null数据对模型的干扰是一个很大的问题。

前面的问题提到了可以通过gps knn的方式来缓解null数据带来的模型不稳定

还有一个解决方式就是通过将null数据和非null数据进行分离

分别训练两个模型


因为如果是数据导致的分布差距或者特征组合上面的差距的话,应该考虑将数据分开来进行训练,最后再将其融合在一起。这样的效果会好一些。

模型融合阶段,将二分类和多分类进行融合,或者多分类与多分类进行融合,二分类与二分类进行融合

在进行模型融合的时候,因为多分类的概率加权是1,所以我们也将二分类的概率进行了归一化使得其概率相加等于1。这样模型融合起来会方便很多,效果也会好一些。

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在Apriori算法候选指的是可能成为频繁项合。在Apriori算法候选的生成分为两个步骤: 1. 生成大小为1的候选:扫描数据集,统计每个项的出现次数,将出现次数大于等于最小支持度阈值的项作为大小为1的候选。 2. 生成大小为k的候选:通过频繁项生成候选。具体做法是,将大小为k-1的频繁项两两合并,得到大小为k的候选,然后对候选进行剪枝,去掉其不可能成为频繁项合,得到真正的候选。 例如,假设我们要找到最小支持度为2的频繁项。首先,扫描数据集,统计每个项的出现次数,得到如下项及其出现次数: ``` {A}: 4 {B}: 3 {C}: 2 {D}: 3 {E}: 2 ``` 由于{C}和{E}的出现次数小于最小支持度阈值2,因此它们不是频繁项,无法成为候选。因此,我们可以将大小为1的频繁项作为初始候选: ``` {A}, {B}, {D} ``` 接下来,我们通过频繁项生成候选。假设我们已经找到了大小为2的频繁项: ``` {A, B}, {A, D}, {B, D} ``` 现在,我们希望通过频繁项{A, B}和{A, D}生成大小为3的候选。具体做法是将它们合并,得到: ``` {A, B, D} ``` 然后,我们对候选{A, B, D}进行剪枝,去掉其不可能成为频繁项合,得到真正的候选: ``` {A, B, D} ``` 因此,我们得到了大小为3的候选{A, B, D}。同样的方法可以用于生成更大的候选

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值