使用文本挖掘方法精准识别电商平台上的物联网卡商品
摘要
为了打击在线上直接向公众销售物联网卡这种违规行为,我们结合网络爬虫技术和文本挖掘方法构建了机器学习模型,用以识别电商平台上的物联网卡商品、并对相关商家进行举报。分析结果显示:1. 该模型能够检出83.3%的物联网卡商品,且其检出准确率是随机检出准确率的3.62倍;2. 该模型能够使有关工作量降低到原来的1/30,每月能够节省约21个人日。
背景与目标
物联网卡是面向物联网终端推出的通信卡,能够为后者提供移动通信接入服务。与手机卡不同,物联网卡的目标用户往往不是特定的个人,因此运营商通常无法对具体的使用人进行实名1 , 2。在此背景下,如果物联网卡落入不法分子手中并被用于电信诈骗等违法行为,有关部门将难以调查取证。由于前述原因,工信部和运营商在2018年发布了《工业和信息化部办公厅关于加强源头治理 进一步做好移动通信转售企业行业卡安全管理的通知》,其中明确指出严禁网络渠道销售行业卡,对违规售卡行为应采取有效处理措施。
1 有的卡片卖家可能会要求买家提供实名信息,但这可能只是在套取、倒卖身份信息。
2 2019年下半年,中国电信开始要求开通语音、短信或非定向流量的物联网卡进行使用人实名;但实名制的全面落实需要较长的时间,因此仍需借助此模型封堵物联网卡的网上销售渠道。
尽管工信部和运营商明令禁止商家通过网络渠道向公众销售物联网卡,但其低廉的网络资费以及可以用于手机上网的特性仍然催生了较大的卡片转售市场。因此,许多电商平台上都有商家兜售物联网卡,而这也为不法分子提供了方便的购买途径3。
3 据了解,物联网卡多数从代理商渠道流出;卡片卖家常以“分销代理”或“物联网相关企业”的名义向代理商批量购入物联网卡,再通过电商平台向个人用户出售。
为了取缔电商平台上销售物联网卡的商家,中国电信天翼物联科技有限公司业务运营中心目前主要使用人工搜索、浏览的方式,从各平台中找出疑似物联网卡商品,在进行购买确认后举报相关卖家并对开卡客户进行标记和惩罚。但是这种方式效率低下、还可能遗漏很多物联网卡商品,因为:1. “物联网卡”商品存在一定隐匿性,商家一般不会直接在商品标题或描述中注明,因此难以直接通过“物联网卡”这个关键词搜索得到;2. 另一方面,使用“流量卡”、“手机卡”等关键词搜索所得的结果中必定会出现大量非物联网卡商品(例如手机卡、物联网终端等);3. 电商平台上商品商家数量众多,并且会不定期更新。
为解决上述方式的缺点,项目组打算通过网络爬虫技术定期从各大电商平台采集商品数据,并使用机器学习算法识别出最有可能是物联网卡的商品供人工确认,以便提高打击违规转售行为的成效4、使相关工作能够实现常态化。
4 由于人工确认准确率可视为100%,因此模型的意义不在于提高检索准确率,而在于提升效率、降低人工成本。
数据与方法
关于数据
此次任务主要针对苏宁易购和京东两大电商平台展开 5。我们使用“流量卡”、“上网卡”、“手机卡”、“电话卡”、“物联网卡”等关键词进行搜索 6,并通过网页爬虫技术收集前30页搜索结果中出现的商品和店铺数据。我们没有把商品评论数据纳入爬取范围,这是因为一个商品可能存在多条评论、爬取时容易触发网站反爬机制,并且其所含有的有效信息较少;另外,我们也没有把商品详情纳入爬取范围,这是因为平台上的商品详情大多以图片形式呈现,其原因可能也是为了反爬。用于存储所爬取的数据的表及字段如下:
5 淘宝、天猫、拼多多等电商平台的反爬技术较强,因此未纳入目标范围。
6 截至本文撰稿时,京东已经屏蔽了“物联网卡”这个关键词,但苏宁易购还没有屏蔽。
- shop_month: 店铺数据月表(每行代表一家店铺)
- shop_link: 店铺链接(店铺标识)
- shop_name: 店铺名称
- platform: 店铺所属电商平台
- month: 数据采集年月(备注:一家店铺可以出现在多个月份的数据中)
- prod_month: 商品数据月表(每行代表一件商品)
- prod_link: 商品链接(商品标识)
- shop_link: 店铺链接(店铺标识)
- main_title: 商品主标题
- sub_title: 商品副标题
- item_model: 商品型号;一个商品可能具有多个型号(买家在下单时可以选择任意型号),不同型号之间以半角分号分隔
- item_prop: 商品规格参数;一个商品可能具有多项参数,不同参数之间以半角分号分隔
- price: 商品价格
- month: 数据采集年月(备注:一件商品可以出现在多个月份的数据中)
为了训练能够用于识别商品类型的模型,我们需要对所爬取的商品数据集进行抽样、并标注各样本的商品类型。考虑到有的店铺可能发布多个具有相似描述的同类商品,为了减少信息重复,我们决定在第一次建模时先随机抽取一定数量的店铺、然后再在每个店铺中随机抽取若干商品作为样本。针对抽样所得的样本,我们通过人工浏览商品所在页面的方式判断商品的类型。我们将商品类型分为三类,包括“物联网卡”、“手机卡”和“其它”(例如物联网终端等)。对于“其它”商品,通常只需通过浏览商品标题、描述等信息即可确认;“物联网卡”和“手机卡”的商品描述存在较高的相似性,常常需要进行更加细致的确认:1. 观察商品详情或商品评论中给出的商品实物图片进行确认7;2. 询问店铺客户进行确认。用于存储标签数据的表及字段如下:
7 物联网卡上会有文字注明卡片仅用于物联网终端。
- label_month: 商品标签表(每行代表一件商品;一件商品只会被标注1次)
- prod_link: 商品链接(商品标识)
- label: 商品类型标签
- month: 数据采集年月
使用初次收集的数据,我们能够训练简单的模型并用其判断商品类型和概率,然后输出清单。有关同事在取到该清单后,会对清单内的商品逐一验证和标注。新标注的数据将被用于进一步评估、改善模型性能;而其中被核实为物联网卡的商品将被下单购买,以便获取卡号、查询开卡客户并对其进行标记和惩罚8。
8 进入疑似风险客户清单的客户以及与其有关联的客户在申请入网和开通新卡时,会受到限制。
关于方法
由于所获取的数据类型主要为文本,因此使用该数据判断商品类型属于文本分类问题。尽管深度学习算法以及一些无需人工干预的文本特征提取方法(例如,bag-of-words、word2vec等)能够被用于处理文本分类问题,但我们所拥有的标注数据非常有限,无法满足前述方法的基本要求。在这种情形下,我们必须紧密结合业务常识进行文本分析,并根据分析结果人工构造、选取特征(包括关键词),然后使用传统机器学习方法训练模型。
我们选用了HanLP这个工具对文本进行分词及词性标注,然后根据词性以及百度停用词库去除了分词结果中的某些不重要的词汇,以减少它们对分析过程的干扰。但在去除这些词汇之前,我们对其进行了检查,避免错误地去除重要的词汇。
考虑到“物联网卡”与“手机卡”的特征较为相似、而前两者与“其它”商品的特征较为不同,我们在构造和分析特征时主要采用了以下思路流程:1. 首先,将“物联网卡”和“手机卡”视为同一类商品(“sim卡”),寻找可以将它们与“其它”商品(“非sim卡”)区别开的特征;2. 然后,进一步寻找用于区分“物联网卡”和“手机卡”商品的特征。在前述流程中,我们主要通过数据可视化以及一些统计指标来了解和分析各类商品中含有哪些特征性词汇。
在完成初步分析后,我们将构建机器学习模型,并对模型性能进行评估。由于我们只关注待识别的商品是否为“物联网卡”(正例),因此在构建模型时我们会将“手机卡”和“其它”商品合并作“非物联网卡”(负例)对待,以便训练二分类模型,并以ROC曲线下面积作为主要的模型评价和选择指标;此外,我们还将结合查全率、查准率等其它指标对模型性能进行更全面的了解。
在训练模型前,我们从标注好的数据集中选取一定样本作为测试集,用于对模型的最终评价;对于剩下的样本,我们将采用5折交叉验证的对模型进行评价。这里需要特别指出,在切分测试集以及用于交叉验证的数据集时,我们并不以商品为单位进行随机抽样,而是以店铺为单位进行随机抽样(然后将与被选中的店铺对应的商品划入数据集中);这么做的原因在于,我们希望模型能够泛化到新店铺销售的物联网卡商品。在实际工作中,一旦我们发现某店铺在销售物联网卡,我们就会对其进行举报,使其之后无法继续销售该类商品;因此,此模型需要能够发现新店铺销售的物联网卡。通过前述数据集切分方法,我们可以更准确地评价模型在前述场景中的表现。另一方面,考虑到数据集存在样本不平衡的情况(正例较少),我们会对用于训练模型的数据集(即交叉验证中的训练集)进行升采样处理;但是,用于评价模型表现的数据集(包括测试集和交叉验证中的验证集)则不做该处理,仍保留原来的正负样本比例。
我们将使用XGBoost算法训练模型,并通过随机grid search的方式调参,再结合交叉验证的结果选择最优模型。交叉验证结果除了被用于选择模型外,还将被用于选择商品分类的概率阈值。值得一提的是,前面讲到的对数据集的升采样操作涉及一项超参数——升采样比,它代表了升采样后数量较少的分类与数量较多的分类的样本的数量之比;升采样比将作为一项公共的数据处理超参数,与算法超参数一同参与调参过程。在确定最优的算法和超参数组合后,我们会使用整个训练集重新训练模型,并使用测试集评价其表现。
数据分析、特征工程以及模型训练和评价主要通过R语言的tidymodels
系列包完成9。
9 数据分析过程中使用的文本分词功能由Python的HanLP
包提供。
结果
数据集基本情况
我们在2020年5月爬取了一批数据,最终取得店铺数据382条(已去重)、商品数据6990条(已去重)。我们随机选取了280家店铺,并对其销售的453件商品进行了标注;数据标注共花费了约2个人日的工作量10。对于所有店铺而言,被标注的商品均不超过2件。在进行数据集划分后,所获得的测试集样本量为174,其中物联网卡商品有12个(占6.90%);非测试集的样本量为279,其中物联网卡商品有28个(占10.0%)。以下是商品类型标签在各个数据集的具体分布情况:
10 客服人员每日大概能分配6小时的时间用于进行数据标注
除非特别指明,下文分析结果均来自前述279个非测试集样本。
缺失值、异常值分析及处理结果
我们在检查上述279条记录的数据缺失情况时,发现商品副标题、商品型号、商品规格参数等三个字段存在缺失值。其中有134条(占48.0%)记录缺失商品副标题;经核查,发现这些缺失值是由于爬虫程序编写不当导致的,所以需要对程序进行修正。另一方面,有126条(占45.1%)记录存在商品型号缺失、19条(占6.8%)记录存在商品规格参数缺失。经核查,有的商品页面确实没有提供商品型号、商品规格参数数据;对于这些缺失值,我们以空字符进行填补。最后,数据集中不存在前述3个字段同时缺失的记录,因此可以保留全部记录用于分析和建模。
在检查各个字段的内容时,我们未发现存在内容与字段不匹配或其它异常情况。
停用词及词性分析结果
我们首先检查了停用词在分词结果中的出现情况。词云显示“移动”和“联系”的出现频率较高;而从业务角度看,它们很可能与商品类型相关:前者可以被用于指代中国移动,而后者则可能与sim卡功能相关。因此,在去除分词结果中的停用词时,我们对这两个词进行了保留。
另一方面,我们通过常识选取了一些可能不太重要的词性,包括连词、叹词、方位词、拟声词、介词、代语素、助词、标点符号、非语素字、语气语素、语气词、状态词等,并观察有关词汇在分词结果中的出现情况(因为有的词性并未出现在分词结果中,所以词云中并没有对它们进行显示;另外,每类词汇的词频都经过了标准化,所以不同类别词汇在图上显示的大小不能被直接比较)。通过观察结果,我们认为这些词确实与商品类型没有重要联系,因此将它们与停用词一并从分词结果中剔除。
关键词分析结果
我们首先分析了销售不同类型商品的店铺在名称上有哪些特征和区别。下图显示了各个词在销售不同类型商品的店铺名称中出现的频率。图中纵横坐标均为对数尺度;为了避免使词过于密集、对观察造成不良影响,我们对重叠的词的位置进行了调整、并用半透明线指示其原来的位置;另外,图中只显示了至少在3个店铺名称中出现过的词汇。如果某个词出现在图中虚线附近,代表其在两类商品店铺名称中出现频率相当,不具备太大的区分度;如果某个词距离虚线越远(即位于图中左上角和右下角),则其在不同类型店铺中出现频率的差异越大,对店铺的区分度也就越大。
以下是从上图中归纳出的一些要点:
- 销售sim卡的店铺名称多含有“通信”、“通讯”等通信行业关键词,而销售非sim卡的店铺名称则多含有“汽车”、“车品”、“图书”、“家装”、“家居”、“五金”、“数码”、“建材”等多种行业产品的关键词;
- 销售sim卡的店铺名称多含有“电信”、“移动”、“联通”等通信运营商关键词,而销售非sim卡的店铺则少有这些关键词;
- 销售sim卡的店铺名称常含有“中国”、“北京”等地名,而销售非sim卡的店铺则较少含有地名;
- 销售sim卡的商铺名称常含有“京东”、“自营”、“旗舰”、“官方”等店铺类型关键词,而销售非sim卡的店铺则较少含有这些关键词;
- 销售手机卡的店铺多含有“旗舰”、“自营”等店铺类型关键词,而销售物联网卡的店铺名称则多含有“专卖”、“专营”等店铺类型关键词;
- 销售手机卡的店铺多含有“电信”、“移动”、“联通”等通信运营商关键词,而销售物联网卡的店铺则少有这些关键词;
- 销售手机卡的店铺多含有“北京”等地名,而销售物联网卡的店铺则较少含有地名。
类似地,我们还分析了不同类型商品的描述(由主副标题、型号、规格参数合并而来)有哪些特征和区别。
以下是从图中归纳出的一些要点:
- 在名词类关键词方面,sim卡类商品多含有“王卡”、“米粉卡”等互联网套餐关键词,以及“归属地”、“月租”、“套餐”、“资费”、“靓号”、“号码”、“语音”等相关词汇,而非sim卡类商品则包含五花八门的产品关键词;
- 在非名词类关键词方面,sim卡类商品还多含有网络制式或流量大小(“数值”+“G”)、“免流”、“定向”、“分钟”,而非sim卡类商品的关键词仍然五花八门;
- 在名词类关键词方面,物联网卡类商品多含有“GPS”、“WIFI”、“路由器”等终端产品关键词,而手机卡类商品则多含有“王卡”、“米粉卡”等号卡产品关键词,以及“卡号”、“手机号”、“靓号”等相关关键词;
- 在非名词类关键词方面,物联网卡类商品多含有“任选”、“累计”、“包年”、“充值”、“无限”、“不限”、“无线”、“0月租”等关键词,而手机卡则多含有网络制式或流量大小(“数值”+“G”)、“实名”、“专属”、“免流”、“畅享”、“通话”等关键词。
综合考虑前述发现以及业务常识,我们认为某些关键字词还存在进一步挖掘的空间。例如,前面提到“靓号”等关键词对物联网卡和手机卡商品具有一定区分度;从业务角度看,这可能是由于商家在销售手机卡时可以提供选号服务,而在销售物联网时则无法提供该服务。为了找到更多与选号相关的关键词,我们使用正则表达式从数据中提取所有符合模式.{0,2}号.{0,2}
的字符串,然后从中找到了“吉祥号”、“优质号”等近义词。又例如,通过“4G”、“5G”等网络制式关键词,我们可以联想到“NB”这种网络制式(这是物联网卡的一种常用制式,手机卡则不会有这种制式),因此可以将该关键词也纳入进来。在获取所有感兴趣的关键词后,我们根据业务常识对某些含义相近的关键词进行了合并、去掉了一难以解释其重要性的词汇,并整理出与关键词对应的正则表达式;最终得到的结果如下所示(括号内的文字是对正则表达式含义的概括):
- 店铺名称关键词的正则表达式:
通信|通讯
(通信)汽车|车品
(汽车用品)图书
家居|家装
(家居)五金
数码
建材
电信
移动
联通
旗舰
自营
专卖
专营
- 商品描述关键词的正则表达式:
靓号|吉祥号|优质号
(靓号)选号
手机号
卡号
免月租|无月租|0月租|0元月租|月租0元|零月租|零元月租|月租零元
(免月租)\\D4G
(4G)\\D5G
(5G)NB
包月
包季
包年
归属地
套餐
资费
语音|通话
(语音)免流
定向
分钟
\\d[45]G|[0-36-9]G
(流量大小)不限|无限
(不限)任选
累计
充值
无线
GPS
路由器
WIFI
MIFI
实名
专属
畅享
特征工程结果
我们使用前面列出的正则表达式,分别判断店铺名称或商品描述(由商品主标题、副标题、型号、规格参数合并得到)中是否存在特定关键词,并以判断结果作为特征(一条正则表达式的判断结果作为一项特征;1为存在,0为不存在)输入模型。
模型训练结果
在完成特征工程后,我们使用5折交叉验证拟合了多个模型并对其性能进行了评价和比较。结果显示,最优模型的ROC曲线下面积为0.943±0.0170。该模型使用了XGBoost算法,且主要算法超参数如下所示;此外,该模型在调整训练集中的正负样本比例时所用的升采样比为1.16。
Boosted Tree Model Specification (classification)
Main Arguments:
mtry = 23
trees = 253
min_n = 3
tree_depth = 9
learn_rate = 0.000143540363452053
sample_size = 1
Engine-Specific Arguments:
nthread = 5
Computational engine: xgboost
在获取最优模型的参数组合后,我们还根据交叉验证结果调整了概率分数的阈值,用于判断商品分类。从业务角度考虑,我们希望模型的查全率能够至少达到0.950;在此基础之上,模型的查准率越高越好。交叉验证结果显示,使得上述模型满足业务要求的概率分数阈值为0.493±6.40*10^-3。
我们使用上述参数组合在整个训练集上重新训练了最终模型,并在测试集上获取最终评价结果。结果显示,该模型在测试集上的ROC曲线下面积为0.931、与交叉验证结果相当。
下图显示了最终模型在测试集上的PR曲线。根据之前选择的概率分数阈值(见图中红点),模型输出的商品分类的的查全率为0.833,低于业务预期;查准率为0.250。另外,由于测试集中的物联网卡商品比例为0.0690,因此模型的提升度为0.250/0.0690=3.62。这些指标意味着模型能够检出数据集中近83.3%的物联网卡商品,且其检出准确率为25.0%、是随机检出准确率的3.62倍。
模型输出及效果追踪
在2020年6月至2020年8月,我们将每月新爬取的商品数据输入模型,得到每件商品属于物联网卡商品的概率分数;然后,再采用以下规则输出商品清单,交给有关同事验证和处理:
- 从当月全量商品中剔除曾经被列入清单的商品(如果有的话);
- 按店铺进行分组,从剩余的商品中筛选出概率分数高于0.493、且概率分数降序排名最靠前的至多2件商品作为疑似物联网卡商品,组成输出清单。
以下是各月份的监测情况:
- 2020年6月共爬取6343件商品的数据、涉及店铺277家,其中
- 清单输出的疑似物联网卡商品数量212件,涉及店铺111家;
- 清单中实际含有物联网卡商品数量57件,涉及店铺50家;
- 物联网卡商品的查准率为0.269。
- 2020年7月共爬取5076件商品的数据、涉及店铺245家,其中
- 清单输出的疑似物联网卡商品数量118件,涉及店铺69家;
- 清单中实际含有物联网卡商品数量26件,涉及店铺23家;
- 物联网卡商品的查准率为0.220。
- 2020年8月共爬取6419件商品的数据、涉及店铺299家,其中
- 清单输出的疑似物联网卡商品数量166件,涉及店铺111家;
- 清单中实际含有物联网卡商品数量34件,涉及店铺28家;
- 物联网卡商品的查准率为0.205。
最终,在上述三个月份的清单中共查得实际销售物联网卡商品的商家80家(已去重);由于模型在测试集上表现出的查全率为0.833,我们可以认为我们已经从给定的店铺中找到了共计约83.3%的销售物联网卡的店铺。由于每家店铺可能会售出成百上千、甚至更多的物联网卡,对这些店铺进行举报和处理将防止大量物联网卡流入市场。另一方面,上述监测结果还提示,在本文所介绍的方法(爬虫+模型)的帮助下,我们只需对212+118+166=496件商品进行人工验证即可找到所有目标店铺;而如果采用既往的办法,我们可能需要对约(6343+5076+6419)*0.833=14859件商品逐一进行人工验证才能达到相同的效果,工作量是前者的30.0倍。按照前述商品数量上的差异,再假设人工验证的效率是226.5件商品/人日11,那么可算得平均每月减少了约21人日的工作量。
11 参考上文提到的数据标注效率。
讨论
此次建模所用到的关键词特征主要是通过使用文本可视化方法发现的。这种方法比较简单直观,而且便于我们融入业务常识进行特征选择;但其不足之处在于无法对特征的重要性进行量化和比较,而且可视化效果会随着分词数量的增加而下降。作为另一种方法,我们可以根据每个关键词在不同类型商品描述中出现的情况计算对数比值比(log odds-ratio)、并对其进行假设检验,然后再结合相关结果和业务常识来选择关键词特征(示例)。除了前面两种方法外,我们还可以直接把所有关键词均作为特征输入具有特征选择功能的机器学习算法,让算法自行决定使用哪些特征;但这种做法缺乏业务常识的指导,在数据量较少时可能效果不佳。
此模型的一个局限性在于覆盖的电商平台数量较少。据了解,淘宝、拼多多等平台也存在物联网卡的违规转售;另外,随着短视频APP和直播带货的兴起,物联网卡的违规转售也并不再局限于传统电商平台。然而,由于爬虫技术限制,此次工作未能覆盖苏宁、京东以外的平台。在未来,团队应该努力提高爬虫技术能力,突破前述限制。
此模型的另一个局限性在于所使用的训练数据较少,并且特征的构建和选择也含有较大的主观成分,使得模型性能仍存在一定改进空间(例如,模型的查全率尚未达到业务预期要求)。以后在派发商品清单进行人工审核时,应该注意收集反馈信息,继续增加标注数据;此外,等到当数据足够多时,还可以考虑融入更多自然语言处理技术,对模型进行进一步改进。
结论
此次工作构建的模型能够有效识别苏宁、京东两个电商平台上的物联网卡商品,提高了打击违规转售的效率并降低了人工成本。但是,模型的覆盖电商平台范围以及准确度仍存在改善的空间,在未来仍应进一步开展相关工作。