本发明涉及到计算机领域,具体为计算机算法模型,尤其是用于对卷烟零售客户分类计算。
背景技术:
按档位投放是中国烟草在坚持和完善专卖制度前提下,努力克服销售指标等非市场因素,遵循市场经济一般规律,建立市场决定销售自下而上的货源投放模式。例如按成都市区来计,成都市约有4万个有效的烟草零售户,遍布于商业区和大小社区,因此确保和提升零售户盈利水平,是必须承担社会责任。最主要的方式是给零售户提供品类、数量适合的商品。在卷烟商品的投放上,受到“客户分档及卷烟货源供应管理办法”的限制,确保公平和公正的原则,将客户分为1~7档,在投放时采用同档同量的原则,然而随着零售客户的不断增多,同档位内部客户同样存在很大的差异性。因此有必要在保证档位这一大前提不变的情况下,对客户进行二次细分,以实现类间异质化、类中同质化的目的。
因此有必要从客户基础信息、客户经营结构、客户经营能力三大方面出发,收集聚类算法所需的聚类因子,并进行数据归一化处理,得到算法输入数据集。
截至目前聚类的传统算法领域,主要分为:基于划分、基于层次、基于网格、基于密度、基于网格的聚类等等。
基于划分思想的聚类算法主要包括:k-means算法、k-modes算法、k-medoide算法、k-mediods算法、clara算法。以上五种算法的基本原理具体如下:
k-means算法:其聚类原理参考图1所示。
k-means算法是一种较为经典的聚类算法,运行简单快速,但其聚类效果很大程度上受初始聚类中心的选择,且对噪声点及孤立点较为敏感,很容易陷入局部最优解。k-means算法存在的一个比较大的弊端是聚类结果受初始聚类中心的选取影响,不能得到稳定的聚类情况。
根据误差最小化原则,不断将各数据点分配给对应的聚类中心,同时获取每一类中的均值,以此作为下一次迭代过程中的新聚类中心,若当前聚类中心与上一步迭代的中心点相同,则迭代终止,输出当前迭代次数及聚类结果。
k-modes算法:其原理参考图2所示。
k-modes算法在处理分类型数据中表现较好,但仅适用于无序型分类数据,对于有序型分类数据和数值型数据的聚类,往往不能达到更符合实际的聚类效果。
该算法采用汉明距离作为相似性度量标准,即:判断任意两个数据点间是否相同,相同为1,不同为0,依次计算每个数据点到聚类中心的汉明距离,得分最大,则分配到相应的类中,并在各类中计算数据点到所有数据点的汉明距离和,得分最大的数据点,作为新的聚类中心,进行下一次迭代,直至聚类中心不再发生变化为止。
k-medoide算法:其原理参考图3所示。
k-medoide算法是在k-means算法的基础上进行二次改进的算法,其与k-means算法的不同点在于每次迭代中的聚类中心生成方式不同,k-medoide算法是在每次迭代中,计算每类中各数据点到所有数据点的欧式距离误差和,取其中误差和最小的数据点作为新的聚类中心。但是,从根本上并未解决k-means算法本身存在的弊端。
k-mediods算法:其原理参考4所示。
在每次迭代中,对于聚类中心的每一个点,都遍历所有数据点以替换此时的聚类中心center(i),并计算相应的替换代价,选择误差最小的数据点作为新的center(i),得到当前比较好的聚类中心,判断新聚类中心与上一步聚类中心是否相同,不同则继续进行迭代,相同则以此聚类中心进行数据点分配,输出最终聚类情况。
clara算法:其原理参考5所示。
clara算法是在k-mediods算法的基础上,采用随机样本的思想进行聚类。即从数据集中随机抽取一定量的样本,调取k-mediods算法,得到一个较好的聚类中心,将此聚类中心应用于整个数据集中,并计算此时的总误差,进行多次迭代,选取总误差最小情况下的聚类结果作为最优化输出结果。
综合来看上述五种算法。在聚类中心的迭代方面,其中k-means算法是以类中平均值作为聚类中心进行迭代,其余四种均是基于样本点作为过程迭代的聚类中心;在相似度度量方面,其中k-modes算法是以汉明距离作为衡量相似性的指标,其余四种均以欧氏距离作为相似性计算标准。在数据处理对象方面,其中k-modes在处理无序分类型领域性能较好,其余四种算法在数值型数据聚类方面性能更佳。
因此,有必要基于上述五类算法解决卷烟零售客户分类计算问题。
技术实现要素:
为了解决上述问题,本发明提供了一种基于聚类算法的卷烟零售客户分类模型(定义为clameans改进算法),算法步骤如下:
(1)、将前期预处理后的数据集导入到matlab工作区中,并进行归一化处理,得到算法输入数据集;
(2)、从输入数据集中随机抽取样本集;
(3)、针对样本集随机生成一个初始聚类中心;
(6)、将新的聚类中心与初始聚类中心对比,并输出最终聚类中心;
(7)、将最终聚类中心作为整个输入数据集的聚类中心,并计算当前的总误差;
(8)、循环(3)~(7)步骤,选取总误差最小情况下的聚类中心;
(9)、将总误差最小情况下的聚类中心作为k-means算法的初始聚类中心;
(10)、计算数据集中所有数据点分别到k-means算法的初始聚类中心的误差值;并
分配类别;
(11)、分配类别后,获得若干类,并在每一类中,计算该类中平均值作为分类聚类中心;
(12)、判断分类聚类中心与k-means算法的初始聚类中心是否相同,
(a)若相同,则迭代终止,输出此时的聚类情况;
(b)若不同,则继续重复循环(10)、(11)步骤,直至聚类中心不再发生变化为止;
(13)、结束程序。
如上所述的基于聚类算法的卷烟零售客户分类模型,更进一步说明为,将新的聚类中心与初始聚类中心对比如下:
(1)若前后聚类中心保持不变,则输出最终聚类中心;
(2)若前后聚类中心产生变化,重复权利要求1中的(4)和(5)步骤,进行进一步聚类中心替代循环,直至聚类中心不再发生变化为止。
如上所述的基于聚类算法的卷烟零售客户分类模型,更进一步说明为,在进行归一化处理中,对于每一个属性j下,运行归一化公式:
ni(j)代表第i第i个样本第j个属性归一化的数值;
min(c(j))代表所有样本第j个属性的最小值;
max(c(j))代表所有样本第j个属性的最小值;
ci(j)代表第i第i个样本第j个属性值。
如上所述的基于聚类算法的卷烟零售客户分类模型,更进一步说明为,所述从输入数据集中随机抽取样本集;具体为,从输入数据集中随机抽取40+2k的样本集,随机抽取方法是以随机数的形式将输入数据集顺序打乱,取打乱后数据中的前40+2k个数据集作为样本。
如上所述的基于聚类算法的卷烟零售客户分类模型,更进一步说明为,所述40+2k为确定样本数量的经验公式;k代表聚类的类别数。
如上所述的基于聚类算法的卷烟零售客户分类模型,更进一步说明为,所述选取总误差最小情况下的聚类中心,总误差采用欧式距离进行计算,具体如下;
其中:
dist为欧氏距离;
n(j)代表第j个样本点数据;
centers(i)代表第i个聚类中心点数据。
如上所述的基于聚类算法的卷烟零售客户分类模型,更进一步说明为,所述的分配类别是根据误差值最小原则,分配类别。
本发明的算法的总体误差相比现有技术算法更低,性能更佳。
本发明提供了更加精准的聚类算法,针对于烟草销售行业,采用本发明的聚类算法对客户进行二次细分,得到客户类别,在保证档位不变的整体公平性下,新增了类别这一标准,实现了客户分类精准化,客观上满足了不同客户的实际需求。
附图说明
图1是现有技术k-means算法聚类原理参考图。
图2是现有技术k-modes算法原理参考图。
图3是现有技术k-medoide算法原理参考图。
图4是现有技术k-mediods算法原理参考图。
图5是现有技术clara算法原理参考图。
图6是本发明改进算法(定义为clameans)原理参考图。
图7本发明改进算法(e),以及现有算法(a-d)的过程迭代曲线。
图8本发明改进算法与现有算法的sse误差比较图。
图9是本发明改进算法多次运行sse波动曲线。
图10本发明改进算法与现有算法多次运行sse标准差比较。
图11本发明改进算法与现有算法运行时长比较图。
具体实施方式
参考图6,本发明改进算法(定义为clameans)详细步骤如下:
1、将前期预处理后的数据集c导入到matlab工作区中,并进行归一化处理,得到算法输入数据集n1,归一化公式如下:
对于每一个属性j下,运行归一化公式:
式中:
ni(j)代表第i个样本第j个属性归一化的数值;
2、从输入数据集n1中随机抽取40+2k的样本集a,随机抽取方法是以随机数的形式将输入数据集n1顺序打乱,取打乱后数据中的前40+2k个数据集作为样本(40+2k为经验公式,是确定样本数量的公式;k代表聚类的类别数;比如k=3,则样本数为:40+2*3=46)。
伪代码如下:
3、针对样本集a,随机生成一个初始聚类中心。
6、若前后聚类中心保持不变,则输出相应的聚类中心;否则便重复(4)和(5)步骤,进行进一步聚类中心替代循环,直至聚类中心不再发生变化为止。
7、输出步骤(6)结束后的最终聚类中心,将其作为整个输入数据集n2的聚类中心,并计算当前的总误差。
8、循环(3)~(7)步骤,选取总误差最小情况下的聚类中心center(iter),总误差采用欧式距离进行计算,具体如下:
以上为求各样本点到聚类中心点的欧氏距离公式,其中:
9、将总误差最小情况下的聚类中心center(iter)作为k-means算法的初始聚类中心centers(iter)。
10、计算数据集n中所有数据点分别到k-means算法的初始聚类中心centers(iter)的误差值,根据误差值最小原则,分配类别,获得若干类。
11、在每一类中,计算类中平均值作为新的分类聚类中心。
12、判断新生成的分类聚类中心与上一步与k-means算法的初始聚类中心是否相同,若相同,则迭代终止,输出此时的聚类情况;若不同,则继续重复循环(10)、(11)步骤,直至聚类中心不再发生变化为止。
13、结束程序。
示例一:
为实施本发明的clameans改进算法,先对数据进行预处理。预处理数据如下:
对客户所制定的标签。包括:业态;商圈;经营规模;市场类型;客户经营结构;客户经营结构又包括:细支烟次均订购量;细支烟次均订购额、55元以下次均订购量、55-65元次均订购量,一直到700元以上次均订购量;客户经营能力:即客户整体订购情况。包括:卷烟单条值、次均订购量、次均订购额。
获得共有4101321条数据,共计客户36763个客户,后续数据将针对清洗过后的36763个客户进行数据分析。得到最终卷烟商品232件。
考虑到算法的数据格式要求,需进一步对客户基础信息的文本数据进行数值转化,转化形式为:独热编码规则(one-hot),即采用向量化的思想,具体如下:
业态:
便利店:【1,0,0,0,0,0,0】
超市:【0,1,0,0,0,0,0】
商场:【0,0,1,0,0,0,0】
食杂店:【0,0,0,1,0,0,0】
烟酒商店:【0,0,0,0,1,0,0】
娱乐服务:【0,0,0,0,0,1,0】
其他:【0,0,0,0,0,0,1】
商圈:
工业区:【1,0,0,0,0,0,0,0,0】
居民区(村):【0,1,0,0,0,0,0,0,0】
旅客中转区:【0,0,1,0,0,0,0,0,0】
商业集贸区:【0,0,0,1,0,0,0,0,0】
学区:【0,0,0,0,1,0,0,0,0】
娱乐(旅游)区:【0,0,0,0,0,1,0,0,0】
政务(商务)区:【0,0,0,0,0,0,1,0,0】
其他:【0,0,0,0,0,0,0,1,0】
无:【0,0,0,0,0,0,0,0,1】
经营规模:
大:【1,0,0】
中:【0,1,0】
小:【0,0,1】
市场类型:
城镇:【1,0】
农村:【0,1】
通过上述数据处理,最终得到36763位客户的细分变量数据。
接下来,以聚类数k=3为例,进行算法实验:
由于k-modes算法仅针对分类性数据的聚类,因此针对除k-modes算法外的其余四种传统聚类算法和改进算法的基本原理,在matlabr2018a中编写算法程序。
将客户聚类因子数据作为聚类算法输入数据,在matlabr2018a中编写算法程序,得到各算法的过程迭代曲线。参考图7。
为验证本发明的clameans改进算法与其余几种算法的性能情况,特做三类实验。
实验一:比较各算法聚类后的sse(总误差)。
实验结果参考图8,由图8可以明显得出,新设计的clameans改进算法的总体误差sse相比其余四种算法更低,性能更佳。
实验二:本发明的clameans在多次运行下的sse波动性。
由于各种算法的初始聚类中心均为随机生成,因此需对算法程序进行多次运行,以检测算法稳定性。
本发明的clameans在连续100次运行的sse波动曲线参考图9。
由图9粗略可得,本发明clameans改进算法的误差变动明显平缓,下面对数据进行标准差求解,计算公式为:
将各算法多次运行所输出的五组sse误差数据导入到minitab中,获取五个算法的标准差值,参考图10。
从标准差数据可以明显判断出clameans改进算法运行更稳定。
结论:由以上可得,k-means算法数据波动性较高,运行不稳定,主要是因为k-means算法受初始聚类中心影响过大;总体上可以判断出本发明的改进后的算法sse标准差最低,程序运行更稳定。
实验三:比较各算法程序单次运行时长。参考图11。
聚类结果:
通过clameans改进算法后,输出的聚类数据作为客户分类结果,如下表所示:
各类别业态情况如下表所示:
各类别商圈类型情况如下表所示:
各类别经营规模情况如下表所示:
各类别市场类型情况如下表所示:
由以上数据,总体上可以看出,通过clameans改进算法,将客户聚成三类,各类别的总体特征如下:
第一类:大规模客户群,经营规模较大,即单次订购量、订购额都处于很高的位置,属于主要客户群。
第二类:一般客户群,无论从订购量还是订购额来看,都要比第一类客户群低很多,规模不大。
第三类:潜力客户群,该类客户群虽然单次总订购量和订购额与第二类客户群相差无几,总体规模较小,但卷烟单条值明显要高于其余两类,属于后期引导培养的客户群。