1. 引言
在企业进行工商信息登记时通常要记录企业名称、企业经营方式和经营范围等信息,通过经营范围可大致了解企业所属的行业类别。但是对于有的企业来说,由于经营范围很广、经营种类比较繁杂,填写时不够严谨,导致仅仅从经营范围的文字中很难分辨出企业所属的行业及在每个行业中所占的比重。
为了较准确的获得企业的行业类别信息,方便对企业进行画像,为后期深层次挖掘应用提供数据基础,本文结合国家发布的《国民经济行业分类》,在众多学者研究成果的基础上,围绕企业经营范围内容研究运用基于因子分析和K-means聚类算法对企业行业进行聚类分析,最终得到企业所属行业的画像。
具体研究内容包括以下四部分:1) 预处理待聚类文本和标准文本《国民经济行业分类》;2) 通过因子分析计算出标准文本对待聚类文本的贡献率,进而得到最佳聚类数量K;3) 运用K-means聚类算法实现行业聚类;4) 对聚类结果进行评价。
2. 相关工作
文本预处理是文本聚类的重要基础,其主要目的是完善和规范文本表述。本文的预处理过程如下:1) 处理待聚类文本的异常值;2) 对待聚类文本和标准文本同时进行Jieba分词,达到“归一化”;3) 构建待聚类文本和标准文本词袋,并对待聚类文本建立Tfidf模型;4) 计算待聚类文本和标准文本的相似度,以此构建聚类数据集合。
2.1. 国民经济行业分类
《国民经济行业分类》是指由国家统一制定的,按照生产的同一性,对于一个国家的国民经济的所有生产活动进行生产性质归属性分组而形成的规范标准 [1]。具有国家强制推行的标准化特征 [1]。具体内容如表1所示。
《国民经济行业分类》规定了全社会经济活动的分类与代码,能够满足国家在统计、计划、税收、工商等宏观管理中对经济活动的分类,也可用于信息处理和信息交换。
该标准是一个树形结构,总共分为四层,分别是:
第一层:门类(一级类别),总共分为20个门类,编号为A~T;
第二层:大类(二级类别),总共分为96个门类,编号为01~96;
第三层:中类(三级类别),总共分为960个门类,编号为011~960;
第四层:小类(四级类别),总共分为9600个门类,编号为0111~9600。
在对《国民经济行业分类》进行停用词处理后,将与待聚类文本共同构建聚类数据集。

Table 1. Classification and code table of national economic sectors
表1. 国民经济行业分类和代码表
2.2. 待聚类文本预处理
2.2.1. 文本来源及特点
待聚类文本是企业在相关系统中录入的经营范围内容。经营范围是企业从事经营活动的业务范围,同时也是企业所属行业类别的重要参考指标。从某系统中获得的部分企业录入的经营范围文本表示为例,其内容如表2所示。

Table 2. Business scope of some enterprises
表2. 部分企业经营范围
由表2可以看出,文本存在以下特征:
1) 内容不多:每条信息代表一个企业的经营范围,字数大概在几个字至几百字间。
2) 标点不规范:主要体现为中英文状态下标点符号的不准确使用。
3) 书写不规范:主要体现为“规则组合(如:加工、销售:机制沙)”和“非规则组合(如:城市建设管理咨询、代理;城市环境卫生维护、道路清扫)”。
4) 内容不直接:主要体现为“凭有效的《食品生产许可证》经营”等信息。
2.2.2. 文本异常值处理
聚类算法对异常值异常敏感,所以处理好潜在的异常值会进一步提高数据质量。针对企业经营范围中的文本特点,即异常值,本文预处理流程如图1所示。
针对图1中① ②的详细处理过程如下:
待聚类文本可根据冒号分为规则组合数据及非规则组合数据:
如果为规则数据,则根据分号进一步划分;
如果没有分号但有冒号(只有冒号),则对冒号前后的动名词进行组合;
如果既有分号又有冒号,则首先按分号切分并分别保存,然后再对分号处理之后的分段数据按冒号前后的动名词进行组合;
如果为非规则数据,则对无冒号和分号及有分号无冒号两种情况,保留原始数据。
针对图1中③的详细处理过程如下:
对于类似于“(凭有效的《食品经营许可证》经营)”这样的信息,放入经营范围证书库中,因篇幅原因本文不再赘述。
经过上述处理后,得到结果如表3所示。
2.3. 中文分词的“归一化”处理
虽然异常值处理后的聚类文本增加了分词效果,但与《国民经济行业分类》还存在差别,因此需要“归一化”处理。
如果只对待聚类文本进行分词,无法完全得到与标准文本相匹配的内容,如“生产经营牛仔服装系列产品”,在《国民经济行业分类》中没有与之相符的内容,在后期聚类中可能无法匹配到对应的行业,所以将对《国民经济行业分类》和待聚类文本同时使用Jieba分词,待聚类文本会得到“生产、经营、牛仔、服装、系列”,且《国民经济行业分类》经过分词后也会出现“生产、服装”等字眼,进而可以进行匹配。
另外,可以在一定程度消除自定义词典的语义歧义,即待聚类文本和《国民经济行业分类》对每个词组采用的切分规则是一致的,由此可以避免两个文本语义不同的情况。
2.4. 建立聚类数据集
本文以1000条待聚类样本为例,首先对“归一化”后的每个待聚类样本构建词袋模型,如[生产2,销售,五金4,服务0,…],并建立Tfidf模型;然后对《国民经济行业分类》构建词袋模型;最后计算两个文本间的相似度以此构建聚类数据集,其结果如表4所示。
3. 因子分析抽取特征
因子分析是一种从变量群中提取共性因子的统计技术 [2],其本质上是一个降维的过程。因子分析法以变量为研究对象,通过分析变量间的相关性 [3],分析每个变量对信息的贡献度,进而在众多变量中找出最具有代表性的因子,使其具有较强的可解释性 [4]。
因子分析模型如式(1):
(1)
其中,
代表变量;
代表参数,即变量之间的相关系数,值越大,相关性越大;
代表公共(共性)因子,简称因子;
代表特殊因子,是不可直接观测的数据,在分析中一般省略 [5]。
3.1. 主成分法提取因子
因子提取的方法有多种,使用最多的是主成分法,此外还有最小二乘法(least squares)、极大似然法(maximum likelihood)等 [6]。本文将采用主成分法提取因子。
设观测数据为m个n维数据,其矩阵格式如式(2):
(2)
对上述矩阵进行标准化处理:
(3)
其中,对
和
如式(4)和式(5):
(4)
(5)
然后计算相关系数矩阵,其矩阵如式(6):
(6)
为表示方便,设原始数据标准化处理后仍用X表示,则标准化后的相关系数如式(7):
(7)
再用雅克比方法求解相关系数矩阵的特征值和特征向量 [7],最后得到主成分,这里贡献率就是指某个主成分的方差占全部方差的比重 [8],其贡献率C表达式如式(8):
(8)
其中,
表示单个主成分。贡献率C越大,表明该主成分所包含原始变量的信息越强 [9]。主成分个数的选取,通常可以参考累积贡献率和主成分方差两个标准 [10],即一般要求累计贡献率达到80%以上,且主成分方差尽可能大于1。
将表4中01至96列的所有数值进行上述计算,且本文预设主成分个数K = 5 (可随机设置),然后根据贡献率和主成分方差两个标准,不断调整,得到K = 18时,结果比较符合期望。数据如表5所示。

Table 5. Variance, proportion and cumulative rate of eigenvalues of correlation coefficient (P = 18)
表5. 相关系数特征值的方差、占比及累积率(P = 18)
3.2. 因子旋转
因子旋转是为了让因子载荷两极分化 [11],要么接近0,要么接近1,这样有助于分析因子的属性,便于后期因子命名。常用的方法有:方差最大正交旋转法和斜交旋转法 [12]。本文采用方差最大正交旋转法进行因子旋转,其计算公式如式(9):
(9)
每个公共因子的载荷系数
平方和就是该公共因子的方差,本文运用Spider得到因子的旋转结果如图2所示:
图2包括Raw Components和Varimax Rotated Components两部分,各部分含义如下:
① Raw Components (主成分分析图):该图峰值围绕0.0的中轴线上下浮动,每个峰值表示每个主成分在每个变量上的权重值大小,但峰值比较不够明显。
② Varimax Rotated Components (因子旋转图):该图峰值集中围绕在0.0中轴线以上,且每个峰值大的越大,小的越小,可较清楚地看出峰值间的差别。
4. 聚类实现过程与结果
K-means聚类算法是一个迭代的过程 [12],其具体步骤如下:
1) 在样本中选取K个点作为初始质心,即每个K代表一个聚类中心;
2) 对每个样本点,本文通过欧式距离计算方式按照距离最近的原则将每个数据点划分到离它最近的聚类中心K所对应的类别中 [13];
3) 经过步骤2)后,形成了K个集合,即K个类别,然后重新计算每个类别的质心,更新聚类中心的位置;
4) 在3)中,如果新质心和旧质心间的距离小于某一阈值,则判断达到预期效果,算法终止,否则迭代2)~3)步骤 [14]。
通过聚类得到的数据类别如图3所示。
图3中,每个索引对应一个企业,“原始数据”表示样本原始文本内容,“类别编号”是聚类得到的结果,“行业类别”是通过人工评价得到的企业具体所属的行业类别。
5. 评论与分析
每个企业经营范围包含多个行业类别,因此聚类结果中的每个类别是多个行业类别的融合。故本文对类别结果用0~17个数字表示,结果如图4所示。
其中属于类别7 (销售业和零售业)的类别占比最大,为29.76%,其次是第8类(销售业,金属制品业,橡胶和塑料制品业及电气机械和器材制造业),占比为16.74%,
本文对聚类结果的评价方式是内部评价和人工评价 [15]。
内部评价是通过某些模型生成聚类的参数,来统一判别聚类效果。本文采用戴维森堡丁指数(DBI)判定聚类结果。戴维森堡丁指数(Davies Bouldin index, DBI)是由大卫L·戴维斯和唐纳德·堡丁提出的一种评估聚类算法优劣的指标 [16],其公式如式(10):
(10)
其中,
表示簇。首先计算两个簇Si、Sj各自样本间的平均距离avg(S)之和及两个簇中心点
之间的距离,然后统计所有簇的相似度的最大值,对其求均值即可得到DBI指数。DBI最小值为0,DBI指数越小,相同类别内元素之间距离越小,不同类别间距离越大,代表聚类效果越好 [16]。本文的DBI指数为0.21,证明聚类效果较好。
人工评价是指聚类分析的结果与人工评价越接近越好 [16]。本文通过小范围的调查验证,对类别结果正确率进行判定。具体数据如表6所示。

Table 6. Artificial evaluation by factor analysis
表6. 因子分析法人工评价
6. 结束语
本文打破了传统聚类的思路,以《国民经济行业分类》作为标准文本,通过因子分析计算出标准文本对企业经营范围的贡献率,进而得到最佳聚类个数,最后进行聚类分析。
通过评价结果证明本文的聚类结果较好,但由于企业经营范围数据是企业实际经营中填写的数据,在一定程度上会与《国民经济行业分类》有一定的区别,因此后续可以根据本次聚类结果适当的构建词库,进一步提高聚类的准确性。
基金项目
国家自然科学基金项目(No. 61771347);广东省基础与应用基础研究基金(No. 2019A1515010716);广东省普通高校基础研究与应用基础研究重点项目(No. 2018KZDXM073)。