李軍



摘 要: 對分類數據挖掘算法進行研究,發現隨機森林算法精度高、訓練速度快、支持在線學習,因此提出在系統中使用該算法。針對隨機森林算法抗噪聲能力一般的問題,采用Bagging方法隨機選擇幾組歷史客戶分級數據作為算法的訓練數據,通過隨機森林算法訓練出分級模型,并通過這個模型對新客戶數據進行自動分級。
關鍵詞: 隨機森林; 企業對企業; 客戶分級; 系統設計
中圖分類號: TN919.6+4?34 文獻標識碼: A 文章編號: 1004?373X(2015)15?0099?05
Design of B2B client classification system based on random forest algorithm
LI Jun
(Shaanxi Post and Telecommunication College, Xianyang 712000, China)
Abstract: The classification data mining algorithm is studied in this paper. The random forest algorithm has the advantages of high precision, fast training speed and supporting online learning, which is applied in classification system. Since random forest algorithm has general noise resisted ability, several groups classification data of history client are selected by using Bagging method randomly as the algorithm′s training data. The classification model is obtained by random forest algorithm training. New client data are classified automatically by using this model.
Keywords: random forest; business to business; client classification; system design
0 引 言
近年來,隨著全球經濟的高速發展,人民生活水品也在不斷提高,對企業的商品或服務的要求也在日益提升;而企業也認識到提高客戶的滿意度和維持客戶的忠誠度可以為企業帶來更大的利潤。于是不同領域的學者們越來越關注客戶關系管理(Customer Relationship Management,CRM)這個管理理念。在客戶關系管理中,客戶取代了產品的質量,成為企業關注的重點,如何吸引和保持有經濟價值的客戶是CRM的中心。在CRM中最核心的功能就是客戶分級,客戶分級就是指企業根據客戶的重要程度、貢獻程度以及潛在價值等指標對客戶進行衡量與分級。
電子商務中,企業面對的關系主要包括兩種:企業與客戶之間的關系(Business to Customer,B2C)和企業之間的關系(Business to Business,B2B)。在當前使用的客戶分級系統中,主要存在以下問題:
(1) 普通的B2C客戶分級系統無法處理B2B模式的客戶分級。
(2) 現有的B2B客戶分級系統分級精度較低, 抗噪聲能力一般。
(3) 目前的客戶分級系統沒有與產品銷售結合起來。
(4) 在系統使用過程中,需要有一種靈活的權限管理方式來保證系統的安全性。
本文通過對上述問題的分析,以企業的實際需求出發,采用數據挖掘中的隨機森林分類算法實現客戶分級,并通過客戶對產品滿意度模型估算產品銷售成功率。其中,隨機森林算法是分級的基礎,使系統可以在多個不同層面的分級依據上互不干擾地得到訓練模型,完成分級算法。通過使用隨機森林算法,可以使分級算法具有更強的抗噪聲能力,并能降低算法的過擬合。
1 客戶分級系統的分析
以B2B環境下企業的客戶分級作為研究對象,通過歷史的客戶分級數據建立分級模型,并按照分級模型完成對新客戶的分級,同時,系統還具有客戶對產品滿意度的分析模型,直觀地輔助用戶決策。系統具有比較高的準確性和抗噪聲能力。
1.1 客戶分級系統的需求描述
用戶使用系統后,首先將歷史輸入系統中。當需要銷售一件產品的時候,如果目標客戶已經在歷史數據中,系統可以給出推薦的客戶,選定目標客戶后,可以查看客戶的等級,針對不同的客戶準備不同的銷售手段。同時,可以根據客戶對產品、對公司的歷史滿意度、對購買產品的影響力構建客戶對產品的滿意度模型,從面積來推斷產品銷售的成功率,同時也可以找到主要爭取方向。如果目標客戶不在歷史數據中,用戶需要把客戶的信息輸入系統,通過歷史數據選擇特征值,然后按照歷史數據訓練出分級模型。
1.2 客戶分級系統的分析模型
為了明確系統與用戶之間的交互關系,本文采用用例圖來說明客戶與客戶分級系統各個用例之間的交互。
(1) 系統角色分析
根據對基于隨機森林的B2B客戶分級系統的分析,本系統的主要角色有3個:系統管理員、員工用戶、領導用戶。
系統管理員:主要負責對系統的維護;管理數據庫參數,通過系統提供的接口修改數據庫表的設置;對用戶的組織結構進行管理,通過系統提供的接口管理導航欄的顯示;設置權限并對用戶進行配置。
員工用戶:可以對客戶信息進行操作,不能刪除客戶信息;根據歷史客戶信息進行分級建模;通過建立好的分級模型對新客戶進行分級;新建產品銷售,如果審批通過可以建立產品的客戶滿意度模型。
領導用戶:可以查看所有數據信息,包括客戶信息、產品銷售信息等;審查員工用戶提出的新產品銷售申請,并做出批復。
(2) 系統管理員用例分析
系統管理員主要負責系統的一些設置,為了便于管理員對系統、數據庫進行管理,本文系統提供了一些簡單且實用的接口,使不是很了解數據庫及網站的用戶能方便地對數據庫表格、導航欄等進行操作。同時,系統管理員可以對用戶進行配置,并賦予他們權限。從角色分析中可以得到系統管理員的主要動作有:登陸,對系統進行設置,對用戶進行設置。其中系統設置包括數據庫表管理、導航欄管理;用戶配置包括權限配置和用戶組織結構管理。系統管理員的用例圖如圖1所示。
(3) 員工用戶用例分析
員工用戶是系統的主要使用者,每個用戶都可以自定義一個快速的導航欄,對客戶信息進行管理,包括數據的錄入,也可以訓練分級模型,并對新客戶進行分級,同時還可以對產品銷售進行管理,包括新建產品銷售、建立客戶滿意度模型和產品銷售分析。員工用戶的用例圖如圖2所示。
圖1 系統管理員用例圖
圖2 員工用戶的用例圖
(4) 領導用戶用例分析
領導用戶是對員工用戶提出的產品銷售方案進行審核的人員的總稱,可以查看所有產品信息和客戶信息,除此之外,還能對員工客戶提出的產品銷售方案進行審批。領導用戶的用例圖如圖3所示。
圖3 領導用戶的用例圖
(5) 系統總用例圖
通過逐個對系統角色進行用例分析后,得到系統的整體用例圖,由于登陸、自定義導航欄等都是所有角色共有的,就不在整體用例圖中體現,如圖4所示。
圖4 B2B客戶分級系統的用例圖
2 客戶分級系統的設計
通過上文對系統的需求分析,可以得出系統的設計,主要論述B2B客戶分級系統的概要設計和詳細設計,概要設計主要論述客戶分級系統的軟件體系結構和功能模塊結構,詳細設計則主要論述系統關鍵模塊設計。
2.1 客戶分級系統的概要設計
系統的概要設計主要包括系統的軟件體系架構和功能模塊。
2.1.1 客戶分級系統的軟件體系架構
針對上文所述的系統功能需求和性能需求,得出了系統的主要架構,如圖5所示。
圖5 B2B分級系統的架構圖
本文系統采用B/S框架設計,用戶在瀏覽器端進行瀏覽,通過網絡訪問到服務器上進行相關的數據操作。
通過圖5可以看出,系統主要通過管理用戶信息、客戶分析和產品銷售信息為用戶取得利益。
用戶是系統的使用者,系統采用用戶信息管理、權限管理等對用戶進行管理,確保系統的使用者。而客戶是系統關注的目標,是系統最重要的對象,系統通過客戶信息管理、客戶分級來對客戶進行管理,使用戶能得到自己想要的信息。產品銷售是關聯用戶及客戶的通道,系統通過產品信息管理、產品銷售分析對產品銷售進行管理,使用戶在得到客戶信息后能合理使用這些信息,為自己獲取更多的利益。
2.1.2 客戶分級系統的功能模塊結構
本文對系統進行了模塊設計,主要包括5個部分,如圖6所示。系統主要分成5個部分:基礎功能、系統設置、用戶配置、客戶管理和產品銷售管理。
基礎功能主要是登陸和注銷,由于是系統最基礎的功能,就不在系統功能層次模塊圖中特意畫出。
系統設置里有庫表設置、導航欄設置和數據字典。庫表設置里可以對數據庫的表格進行操作,方便用戶對數據庫進行操作。導航欄設置里可以對導航欄進行操作,導航欄數據儲存在數據庫,方便用戶對導航欄進行操作。
圖6 B2B客戶分級系統功能層次模塊圖
用戶配置是對用戶信息進行操作,包括對用戶基本數據的操作、對用戶企業組織結構的操作和對用戶權限的配置。
客戶分級是對客戶信息的操作。由于是B2B系統,系統關心的客戶有2個部分:企業客戶和個人客戶。同樣,企業客戶也包含了組織結構,企業客戶通過組織結構與個人客戶聯系在一起。訓練模型是根據已經分級的歷史數據建立分級模型,通過客戶分析功能對未分級的企業客戶進行分級。
產品銷售管理是對產品信息的操作。用戶通過新建產品銷售方案以后,可以找到客戶管理中的數據,通過對這些數據的查看輔助產品銷售正常進行。建立客戶滿意度模型是找出對銷售有影響力的客戶,建立客戶對產品的滿意度模型,通過產品銷售分析功能里的數值變遷來輔助銷售。
2.2 系統關鍵模塊設計
2.2.1 算法的總體設計
為了便于描述算法的結構,本文給出了隨機森林算法涉及的主要類圖關系,其中包括10個主要類,如圖7所示。
Classifier類是分類算法的抽象類,該類包括buildClassifier()和classifyInstance()兩個主要的方法。buildClassifier()是訓練分類模型,classifyInstance()是對測試數據進行分類。
RandomTree類是隨機樹,該類是單個隨機決策樹,包括gain(),splitData()和graph()等方法。gain()用于計算信息增益,splitData()是將數據集按屬性節點進行劃分。graph()是輸出分類決策樹圖形。
圖7 隨機森林算法類圖
RandomForest類將多個RandomTree進行Bagging組合,其中setNumTrees()方法用于設置樹的個數。setMaxDepth()方法用于設置樹的深度。
Bagging類是負責對訓練數據集進行抽樣,setBagSizePercent()方法用于設置抽樣的比例,resampleWithWeights()是帶有權重性質進行抽樣。
Instance類代表單條數據記錄,而Attribute類則是單個數據屬性。Instances類是數據集。Filter類是過濾器的抽象類,useFilter()是使用設定的過濾器對數據集進行過濾。Discretize類是正則化類,負責將連續性數據進行離散化,以便供決策樹進行分類。
Evaluation類是評估器,負責對分類算法的分類效果進行評估,其中crossValidateModel()方法是交叉驗證方法。
算法整體流程如下:
步驟1:系統從數據庫采集訓練數據,去除掉不必要的屬性。
步驟2:對數據進行預處理。
步驟3:設置隨機森林樹的個數和單個隨機樹的深度。
步驟4:設置Bagging抽樣比例。
步驟5:從樣本集中進行Bagging抽樣。
步驟6:訓練隨機樹。
步驟7:查看訓練是否完成,如果完成就繼續,如果沒有完成則回到步驟5繼續進行。
步驟8:對訓練模型進行交叉驗證,檢查模型誤差是否低于期望值,如果低于期望值則返回到步驟5重新訓練,如果不低于期望值就保存訓練模型,算法結束。
在訓練隨機森林模型過程中,首先從數據庫中讀取數據集,然后對數據集進行預處理。預處理主要包括選擇部分屬性和過濾不完全的記錄,然后對數據集進行正則離散化,離散化的目的是為了讓決策樹能夠處理連續性數據。預處理之后,需要對訓練參數進行設置,包括設置隨機決策樹個數,樹的最大深度以及Bagging抽樣比例等。根據Bagging抽樣比例和隨機種子,計算出抽取的記錄集,然后再針對該抽樣子集進行訓練單個決策樹。在預定的[M]個隨機決策樹都訓練完成后,對訓練后的模型進行交叉驗證,如果模型誤差小于期望誤差范圍,則保存訓練后的隨機森林模型,否則重新訓練模型。
2.2.2 數據獲取和訓練模型建立
客戶信息有很多,形式也多種多樣。在小型企業中,客戶信息主要靠人員去記憶,大部分的客戶相關信息都是由客戶經理去記憶整理,客戶與公司之間的關系主要靠客戶經理去維持;而在大型企業中,客戶信息通過紙質和電子信息記錄下來,所有有權限的人員都可以查看這些信息。
正是由于客戶信息的多樣性,獲取客戶信息的方式也具有多樣性。在本文系統中,客戶信息的獲取是依靠獲取數據庫中的客戶信息得到的,所以將客戶信息記錄進數據庫中也是系統成立的關鍵。
數據獲取和訓練模型建立是客戶分級的基礎,只有建立了正確的模型,客戶分級才能正確地進行。由于這是系統最核心的部分,如果要滿足系統的性能需求,必須提高這部分過程的性能。所以,數據獲取和訓練模型建立部分需要滿足以下條件:
(1) 正確率
系統采用隨機森林算法,由多棵隨機樹構成,特征值的選取和訓練模型都是采用多數投票的方式得出,可以避免一些個別現象的發生,從而提高分級的正確率。
(2) 抗噪聲能力
系統采用Bagging方法隨機獲取數據的屬性,而隨機森林算法是隨機獲取數據,本身就有較強的抗噪聲能力,避免了個別現象的發生,還防止隨機樹的過擬合,提高了分級算法的抗噪聲能力。
(3) 分級速度
系統把訓練分級模型和客戶分級獨立開來,只有首次運行、經過一段時間使用后分級正確度下降或者用戶覺得要重新建模的時候才進行分級模型的訓練,訓練得到的分級模型保存在服務器上,等到對新客戶分級的時候可以直接調用,從而提高分級速度。
(4) 處理規模能力
系統采用隨機森林算法,數據獲取全部都是隨機的,對大規模數據的處理也是比較優秀的,對于使用系統的企業來說,系統對數據的處理能力完全能符合他們的要求。針對系統的需求,結合隨機森林分類算法和Bagging方法,對系統的數據獲取和訓練模型建立進行了設計。
客戶信息主要從數據庫中獲取,但是為了提高分級算法的效率,系統需要對數據進行一些處理,去除一些不需要的屬性。然后,系統要對數據進行預處理,把線性數據離散化,通過填寫缺失的值、光滑噪聲數據、識別或刪除離群點并解決不一致性來“清理”數據,達到格式標準化,異常數據清除,錯誤糾正,重復數據的清除,并通過平滑聚集,數據概化,規范化等方式將數據轉換成適用于數據挖掘的形式。所有數據達到挖掘的標準后,就進行特征值的選擇,按照Bagging方法,有放回地取出相當于屬性總個數數量的屬性,并隨機選擇數據進行建模,分裂方法采用信息增益的方法。當節點的數據都屬于同一類的時候,就成功生成一棵隨機樹,經過數棵隨機樹的多數投票方式決定最后的分級模型,最后把這個模型導出,保存在服務器上。
2.2.3 客戶分級
客戶分級是指通過訓練出來的分級模型,對新客戶進行分級,同時,系統還負責對錯誤率進行統計,及時進行反饋。系統主要關注的是分級的正確率,系統統計錯誤的分級結果,將錯誤的分級結果進行反饋,然后對訓練模型進行調整。在性能方面,由于這是用戶使用頻率最高的功能之一,所以要求響應時間要短。針對系統的需求,對系統的客戶分級模塊進行了設計。
分級模型保存在服務器上。系統讀取服務器上的分級模型,如果沒有找到模型,會對用戶進行提示。然后系統會讓用戶選擇需要分級的新客戶,如果沒有可分級的客戶,系統則對用戶進行提示。客戶分級以后,系統會記錄分級的結果,并顯示在瀏覽器上。用戶瀏覽分級結果以后,發現結果有錯誤,可以進行修改,系統自動記錄修改情況,如果錯誤率達到預設值,就會反饋給訓練器,重新進行訓練。
以下針對具體每一步進行設計:
(1) 讀取訓練模型
分級速度是系統重要的一個性能,每次分級都重新建立一次分級模型會消耗很多時間,所以系統把分級模型保存在服務器中,要進行對新客戶的分級必須先從服務器上讀取分級模型。
系統采用JAVA文件管理讀取文件的形式讀取文件,讀取后將模型載入系統中,準備開始分級。讀取代碼如下所示:
RandomForest rs=(RandomForest) SerializationHelper.read("D:\\train.model");
其中,RandomForest就是隨機森林類;rs是類中的一個實體;D:\\train.model是模型在服務器中的保存地址。
在讀取的過程中,如果發現保存地址中沒有分級模型,系統會提示用戶還沒有進行訓練,并跳轉至訓練模型界面。
(2) 挑選分級客戶
挑選還沒有分級的客戶以進行分級。系統經過數據庫查找后返回未分級的客戶數據,如果系統中不存在未分級的客戶數據,就提示用戶不存在未分級客戶。客戶數據以列表的形式顯示在瀏覽器上,系統支持多個客戶數據,有復選框和全選的選項。
(3) 客戶分級
對挑選的客戶進行分級。系統讀取訓練模型后,對傳入的客戶數據進行分級,系統支持多個客戶數據,具有處理多個數據的功能。
(4) 記錄分級結果
系統記錄分級結果,并將結果展示。系統得到了分級結果后,將結果記錄進入數據庫,并將結果展示給用戶,使用戶看到自己想得到的結果。
(5) 反饋錯誤
如果分級出現錯誤,并且錯誤率達到一定數值以上,系統自動把錯誤反饋給訓練器。
由于客戶分級是對新客戶進行預測,所以發生錯誤在所難免。用戶在發現錯誤之后,可以通過直接修改的方式對分級結果進行操作,但是在操作的同時,系統自動將分級錯誤記錄進數據庫,并查看數據庫中同樣的錯誤記錄數量是否已經達到一定數值,如果已經達到,就把信息反饋給訓練器,并提醒用戶應該重新建立新的分級模型。
3 結 語
本文從企業的實際需求出發,進行了客戶分級分析,采用數據挖掘中的隨機森林分類算法實現客戶分級,給出了基于隨機森林的B2B客戶分級系統的總體結構圖,并對關鍵模塊中的客戶分級模塊進行了詳細設計。
參考文獻
[1] 姜斌,羅阿理,趙永恒.基于隨機森林的激變變星候選體的數據挖掘[J].光譜學與光譜分析,2012,32(2):510?513.
[2] 李寶東,宋瀚濤.數據挖掘在客戶關系管理(CRM)中的應用[J].計算機應用研究,2002,19(10):71?74.
[3] 張喆,常桂然,黃小原.數據挖掘技術在CRM中的應用[J].中國管理科學,2003,11(1):53?59.
[4] 王海波,仲秋雁.基于數據挖掘的客戶關系管理體系結構研究[J].大連理工大學學報:社會科學版,2004,25(2):42?46.
[5] 傅翠曉,黃麗華.我國B2B電子商務服務模式的分類探討[J].中國科技論壇,2010(10):100?106.
[6] 陳衛華,朱仲英.數據挖掘在CRM中的應用[J].微型電腦應用,2001,17(10):26?28.
[7] 陳海珍,黃德才,郭海東,等.數據挖掘技術在CRM中的應用[J].計算機工程,2003,29(7):189?191.
[8] 趙小歡,夏靖波,李明輝.基于隨機森林算法的網絡流量分類方法[J].中國電子科學研究院學報,2013(2):184?190.
[9] 馬昕,王雪,楊洋.基于隨機森林算法的大學生移動情況的預測[J].江蘇科技大學學報:自然科學版,2012,26(1):86?90.
[10] 胡宏,陳彥萍.基于隨機森林算法的混合入侵檢測系統研究[J].西安文理學院學報:自然科學版,2013,16(3):68?71.
[11] 張洪強,劉光遠,賴祥偉.隨機森林算法在肌電的重要特征選擇中的應用[J].計算機科學,2013,40(1):200?202.