盛劍+樊紅+龔天任+程幸福
[摘 要] 為準確了解市場庫存和需求,減小商業庫存壓力,實現對零售戶進行按需供貨,發現零售戶群體共性特征,通過考察零售戶的年銷售量和年庫存量,基于Spark+MLlib的kmeans++算法實現對零售戶行為的聚類,并根據收集所得的卷煙銷售掃碼數據采用KMeans+進行聚類分析,將客戶分為三大類別,得到了較為合適的分類結果,給出了相應的銷售和庫存的管理策略,這為卷煙銷售和庫存管理策略的制定提供決策支持。
[關鍵詞] K-Means算法;卷煙零售戶;庫存聚類分析
[中圖分類號] F272 [文獻標識碼] A
[文章編號] 1009-6043(2017)03-0128-02
Abstract: In order to accurately understand the market inventory and demand, reduce the pressure of business inventories, implement the on-demand supply to retailers and find out the common features of retailers groups, the study investigates their annual sales and inventory level. The customer can be divided into three categories based on the kmeans++ algorithm of Spark + MLlib and clustering analysis of collected the code data of cigarette sales by means of KMeans +. The appropriate classification results, and corresponding management strategy of sales and inventory, which provide decision support.
Key words: K-Means algorithm, cigarette retailers, inventory clustering analysis
一、前言
KMeans算法是聚類分析中的常用算法,它是數據劃分或者分組處理的重要方式,目前在電子商務、生物科學、圖像處理、Web文檔分類等領域都得到了有效的應用,如許多文獻利用KMeans進行聚類分析將客戶細分特定的類型,同時根據其所屬類別進行群組協同推薦。論文根據收集所得的卷煙銷售掃碼數據采用KMeans進行聚類分析,以期更為準確了解市場銷售和庫存情況,減小商業庫存壓力,實現對零售戶進行按需供貨,發現零售戶群體共性特征,為制定合理的卷煙銷售和庫存管理策略提供決策支持。
二、實驗平臺選擇
Spark是一個基于內存的分布式計算系統,是由UCBerkeley AMPLab實驗室于2009年開發的開源數據分析集群計算框架,是BDAS(Berkeley Data Analytics Stack)中的核心項目,被設計用來完成交互式的數據分析任務。MLlib是建立在Apache Spark上的分布式機器學習庫,Spark的機器學習有分類和回歸、協同過濾、聚類、降維和特征提取和變換等[2]。Spark將分布式內存抽象成彈性分布式數據集(Resilient Distributed Datasets,RDD)。RDD允許用戶在執行多個查詢時顯式地將工作集緩存在內存中,以便后續的查詢能夠重用,這極大地提升了查詢速度[2]。故論文選擇了Spark+MLlib作為K-means算法的運行平臺。
三、卷煙零售戶銷售量和庫存的聚類分析
(一)原始數據及數據預處理
煙草公司在以往的經營中產生了海量的柜臺掃碼交易數據,本文數據來自貴陽市紅華煙草公司零售門店在2014年1月1日至2015年3月20日之間產生的柜臺掃碼銷售及庫存數據,共有2014年1月1日至2015年3月20日的1797371條銷售數據,有銷售碼、執照-代號、交易時間、商品代號、交易數量、單價、交易金額、門店名等字段,265071條庫存數據,有庫存數量、日期、時間、門店名等字段。本實驗通過spark集群計算出每個零售門店在2014年1月1日至2015年3月20日之間日庫存量之和與日銷售量之和,最終得到了各零售戶的年銷售量(單位:箱)和年庫存量(單位:箱)。例如,零售戶1的銷售量(單位:箱)和年庫存量(單位:箱)分別為18706箱和57705箱,在數據進入模型之前進行了標準化。
(二)實驗過程、結果及分析
1.Spark MLlib對經典K-means算法的改進
經典K-means聚類算法有兩個典型的缺陷:(1)聚類數K的值是預先給定的,未必就是最優解;(2)初始聚類中心是隨機選擇的,可能會得到一個局部最優聚類,具有較高的平方誤差。
對于經典K-means聚類算法的上述缺陷,許多學者提出了不同的改進方法,本文通過計算不同聚類數K的輪廓系數來確定最優聚類數K,輪廓系數結合了聚類的凝聚度和分離度,用于評估聚類的效果。該值介于-1-1之間,值越大,表示聚類效果越好[8]。
對于初始聚類中心的選擇,Spark MLlib采用了kmeans++算法,所謂kmeans++算法其實就是在進行標準kmeans優化算法之前執行一個初始化聚類中心的過程,其具體計算步驟如下[9]:
(1)在數據點中隨機選擇一個聚類中心。
(2)對于每個數據點x,計算x到已選出的所有聚類中心的距離的最小值D(x)。
(4)重復(2)和(3)直到選出K個聚類中心。
(5)執行標準的K-means聚類算法。
2.聚類數K的選取
輪廓線是一種簇內數據一致性的檢驗和解釋的方法,輪廓系數值取值區間為[-1,1],它代表一個對象屬于它所在組的合理的程度及屬于臨近組的不合理程度。當大多數對象都有一個比較高的輪廓系數值時,我們認為這個聚類效果很好。對不同的聚類數K,分別計算其聚類結果的輪廓系數,我們選取K=6來進行聚類。
3.聚類結果分析
下圖給出了卷煙零售戶銷量和庫存數據標準化后聚類分析的可視化結果,從圖中可以看出,Kmeans很好的把零售門店區分開了,結果是比較合理的。
依據上述結果,煙草公司可以制定如下的銷售優化策略。
(1)如圖,參看12個X形點,21個下三角點和5個菱形點,該三類店面銷量要明顯低于其他三類,而菱形店面存量最多,說明供求關系最不緊張,記作六類店面,下三角形店面平均存量次之,記作五類店面,X形店面平均存量最少,記作四類店面。
(2)12個十字店面銷量要明顯高于上述三類,供求緊張度1.403也低于上述三類。
(3)相互比較5個圓點店面和11個上三角店面,前者的銷量雖然高于后者,但前者的存量卻遠比后者充裕,因此相比于前者,后者更迫切地需要補充存貨。
四、結論
本文根據收集所得的卷煙銷售掃碼數據采用KMeans+進行聚類分析,將客戶分為三大類別,得到了較為合適的分類結果,同時,針對客戶的三個類別,給出了相應的銷售和庫存的管理策略,論文的實踐可以為卷煙銷售和庫存管理策略的制定提供決策支持。
[參 考 文 獻]
[1]晁源.互聯網思維下的卷煙消費跟蹤方法探究[J].中國商貿,2015(24)
[2]黎文陽.大數據處理模型ApacheSpark研究[J].現代計算機(普及版),2015(3)
[3]陳虹君.基于Spark框架的聚類算法研究[J].電腦知識與技術,2015(4),武漢大學學報(理學版),2003,49(5):571-574
[4]唐振坤.基于Spark的機器學習平臺設計與實現[D].廈門大學碩士論文,2014
[5]吳哲夫,張彤,肖鷹.基于Spark平臺的K-means聚類算法改及并行化實現[J].互聯網天地,2016(1)
[6]李彥廣.LIYan-guang基于Spark+MLlib分布式學習算法的研究[J].商洛學院學報,2015(2)2000,892:29-46
[7]Feller W. An introduction to probability theory and its applications (3rd ed.)[M]. New York: Wiley, 1969
[8]Silhouette (clustering). (2016, March 25). In Wikipedia, The Free Encyclopedia. Retrieved 16:39, March30, 2016, fromhttps: // en. wikipedia. org / w / index. php? title = Silhouette _ (clustering) & oldid=711931734
[9]K-means++. (2016, March 21). In Wikipedia, The Free Encyclopedia. Retrieved 16:37, March 30,2016,from https://en. wikipedia. org / w / index. php ? title = K-means %2 B% 2B & oldid = 711225275
[責任編輯:王鳳娟]