本節書摘來自華章社群《hadoop大資料分析與挖掘實戰》一書中的第1章,第1.4節資料挖掘模組化過程,作者張良均 樊哲 趙雲龍 李成華 ,更多章節内容可以通路雲栖社群“華章社群”公衆号檢視
1.4 資料挖掘模組化過程
從本節開始,将以餐飲行業的資料挖掘應用為例來詳細介紹資料挖掘的模組化過程,如圖1-1所示。
1.4.1 定義挖掘目标
針對具體的資料挖掘應用需求,首先要明确本次的挖掘目标是什麼?系統完成後能達到什麼樣的效果?是以必須分析應用領域,包括應用中的各種知識和應用目标,了解相關領域的有關情況,熟悉背景知識,弄清使用者需求。要想充分發揮資料挖掘的價值,必須要對目标有一個清晰明确的定義,即決定到底想幹什麼。
針對餐飲行業的資料挖掘應用,可定義如下挖掘目标:
實作動态菜品智能推薦,幫助顧客快速發現自己感興趣的菜品,同時確定推薦給顧客的菜品也是餐飲企業所期望的,實作餐飲消費者和餐飲企業的雙赢;
對餐飲客戶進行細分,了解不同客戶的貢獻度和消費特征,分析哪些客戶是最有價值的,哪些是最需要關注的,對不同價值的客戶采取不同的營銷政策,将有限的資源投放到最有價值的客戶身上,實作精準化營銷;
基于菜品曆史銷售情況,綜合考慮節假日、氣候和競争對手等影響因素,對菜品銷量進行趨勢預測,友善餐飲企業準備原材料;
基于餐飲大資料,優化新店選址,并對新店所在位置周圍的潛在顧客口味偏好進行分析,以便及時進行菜式調整。
1.4.2 資料取樣
在明确了需要進行資料挖掘的目标後,接下來就需要從業務系統中抽取出一個與挖掘目标相關的樣本資料子集。抽取資料的标準,一是相關性,二是可靠性,三是有效性,而不是動用全部企業資料。通過資料樣本的精選,不僅能減少資料處理量,節省系統資源,而且使我們想要尋找的規律性更加突顯出來。
進行資料取樣,一定要嚴把品質關。在任何時候都不能忽視資料的品質,即使是從一個資料倉庫中進行資料取樣,也不要忘記檢查其品質如何。因為資料挖掘是要探索企業運作的内在規律性,原始資料有誤,就很難從中探索規律性。若真的從中還探索出來了什麼“規律性”,再依此去指導工作,則很可能會造成誤導。若從正在運作的系統中進行資料取樣,更要注意資料的完整性和有效性。
衡量取樣資料品質的标準包括:
資料完整無缺,各類名額項齊全。
資料準确無誤,反映的都是正常(而不是異常)狀态下的水準。
對擷取的資料,可再從中作抽樣操作。抽樣的方式是多種多樣的,常見的有以下幾種方式。
随機抽樣:在采用随機抽樣方式時,資料集中的每一組觀測值都有相同的被抽樣的機率。如按10%的比例對一個資料集進行随機抽樣,則每一組觀測值都有10%的機會被取到。
等距抽樣:如按5%的比例對一個有100組觀測值的資料集進行等距抽樣,則100/5=20,等距抽樣方式是取第20、40、60、80和第100這5組觀測值。
分層抽樣:在這種抽樣操作時,首先将樣本總體分成若幹層次(或者說分成若幹個子集)。在每個層次中的觀測值都具有相同的被選用的機率,但對不同的層次可設定不同的機率。這樣的抽樣結果通常具有更好的代表性,進而使模型具有更好的拟合精度。
從起始順序抽樣:這種抽樣方式是從輸入資料集的起始處開始抽樣。抽樣的數量可以給定一個百分比,或者直接給定選取觀測值的組數。
分類抽樣:在前述幾種抽樣方式中,并不考慮抽取樣本的具體取值。分類抽樣則依據某種屬性的取值來選擇資料子集,如按客戶名稱分類、按位址區域分類等。分類抽樣的選取方式就是前面所述的幾種方式,隻是抽樣以類為機關。
基于前面定義的餐飲行業的挖掘目标,需從客戶關系管理系統、前廳管理系統、後廚管理系統、财務管理系統和物資管理系統抽取用于模組化和分析的餐飲資料,主要包括:
餐飲企業資訊:名稱、位置、規模、聯系方式,以及部門、人員、角色等;
餐飲客戶資訊:姓名、聯系方式、消費時間、消費金額等;
餐飲企業菜品資訊:菜品名稱、菜品單價、菜品成本、所屬部門等;
菜品銷量資料:菜品名稱、銷售日期、銷售金額、銷售份數;
原材料供應商資料及商品資料:供應商姓名、聯系方式、商品名稱,以及客戶評價資訊;
促銷活動資料:促銷日期、促銷内容、促銷描述;
外部資料,如天氣、節假日、競争對手以及周邊商業氛圍等資料。
1.4.3 資料探索
前面所叙述的資料取樣,多少是帶着人們對如何實作資料挖掘目的的先驗認識進行操作的。當我們拿到了一個樣本資料集後,它是否達到我們原來設想的要求;其中有沒有什麼明顯的規律和趨勢;有沒有出現從未設想過的資料狀态;屬性之間有什麼相關性;它們可區分成怎樣一些類别……,這都是要首先探索的内容。
對所抽取的樣本資料進行探索、稽核和必要的加工處理,是保證最終的挖掘模型的品質所必需的。可以說,挖掘模型的品質不會超過抽取樣本的品質。資料探索和預處理的目的是為了保證樣本資料的品質,進而為保證模型品質打下基礎。
常用的資料探索方法主要包括兩方面:資料品質分析;資料特征分析。
1.資料品質分析
資料品質分析是資料挖掘中資料準備過程的重要一環,是資料預處理的前提,也是資料挖掘分析結論有效性和準确性的基礎,沒有可信的資料,資料挖掘建構的模型将是空中樓閣。
資料品質分析的主要任務是檢查原始資料中是否存在髒資料,髒資料一般是指不符合要求,以及不能直接進行相應分析的資料。在常見的資料挖掘工作中,髒資料包括:缺失值、異常值、不一緻的值、重複資料及含有特殊符号(如#、¥、*)的資料。
(1)缺失值分析
資料的缺失主要包括記錄的缺失和記錄中某個字段資訊的缺失,兩者都會造成分析結果的不準确。使用簡單的統計分析,可以得到含有缺失值的屬性的個數,以及每個屬性的未缺失數、缺失數與缺失率等。缺失值的處理,從總體上來說分為删除存在缺失值的記錄、對可能值進行插補和不處理三種情況。
(2)異常值分析
異常值分析是檢驗資料是否有錄入錯誤以及含有不合常理的資料。忽視異常值的存在是十分危險的,不加剔除地把異常值包括進資料的計算分析過程中,會給結果帶來不良影響;重視異常值的出現,分析其産生的原因,常常成為發現問題進而改進決策的契機。異常值是指樣本中的個别值,其數值明顯偏離其餘的觀測值。異常值也稱為離群點,異常值的分析也稱為離群點分析。
圖1-2 箱形圖檢測異常值箱型圖提供了識别異常值的一個标準:異常值通常被定義為小于ql-1.5iqr或大于qu+1.5iqr的值。ql稱為下四分位數,表示全部觀察值中有1/4的資料取值比它小;qu稱為上四分位數,表示全部觀察值中有四分之一的資料取值比它大;iqr稱為四分位數間距,是上四分位數qu與下四分位數ql之差,其間包含了全部觀察值的一半。
箱型圖依據實際資料繪制,沒有對資料作任何限制性要求(如服從某種特定的分布形式),它隻是真實直覺地表現資料分布的本來面貌;另一方面,箱型圖判斷異常值的标準以四分位數和四分位距為基礎,四分位數具有一定的魯棒性:多達25%的資料可以變得任意遠而不會很大地擾動四分位數,是以異常值不能對這個标準施加影響。由此可見,箱形圖識别異常值的結果比較客觀,在識别異常值方面有一定的優越性,見圖1-2。
(3)資料一緻性分析
資料不一緻性是指資料的沖突性、不相容性。直接對不一緻的資料進行挖掘,可能會産生與實際相違背的挖掘結果。在資料挖掘過程中,不一緻資料的産生主要發生在資料內建的過程中,可能是由于被挖掘資料是來自于從不同的資料源、對重複存放的資料未能進行一緻性更新造成的。例如,兩張表中都存儲了使用者的電話号碼,但在使用者的電話号碼發生改變時隻更新了一張表中的資料,那麼這兩張表中就有了不一緻的資料。
2.資料特征分析
對資料進行品質分析以後,可通過繪制圖表、計算某些特征量等手段進行資料的特征分析。資料特征分析主要包括:分布分析、對比分析、統計量分析、周期性分析、貢獻度分析和相關性分析。
(1)分布分析
分布分析能揭示資料的分布特征和分布類型。對定量資料而言,欲了解其分布形式是對稱的還是非對稱的、發現某些特大或特小的可疑值,可做出頻率分布表、繪制頻率分布直方圖、繪制莖葉圖進行直覺地分析;對于定性分類資料,可用餅圖和條形圖直覺地顯示分布情況。比如,針對餐飲系統的銷售額、銷量可以畫出類似下面的圖,如圖1-3~圖1-5所示。
對比分析是指把兩個互相聯系的名額進行比較,從數量上展示和說明研究對象規模的大小,水準的高低,速度的快慢,以及各種關系是否協調。特别适用于名額間的橫縱向比較、時間序列的比較分析。在對比分析中,選擇合适的對比标準是十分關鍵的步驟,選擇得合适,才能做出客觀的評價。
比如,針對餐飲系統中的菜品的銷售資料,從時間的次元上分析,可以看到甜品部a、海鮮部b、素菜部c三個部門之間的銷售金額随時間的變化趨勢,了解在此期間哪個部門的銷售金額較高,趨勢比較平穩,如圖1-6所示;也可以從單一部門(如海鮮部)做分析,了解各月份的銷售對比情況,如圖1-7所示。
從總體來看,三個部門的銷售金額呈遞減趨勢;a部門和c部門的遞減趨勢比較平穩;b部門的銷售金額下降的趨勢比較明顯,可以進一步分析造成這種現象的業務原因,可能是原材料不足造成的。
(3)統計量分析
用統計名額對定量資料進行統計描述,常從集中趨勢和離中趨勢兩個方面進行分析。平均水準的名額是對個體集中趨勢的度量,使用最廣泛的是均值和中位數;反映變異程度的名額則是對個體離開平均水準的度量,使用較廣泛的是标準差(方差)、四分位間距。
(4)周期性分析
周期性分析是探索某個變量是否随着時間變化而呈現出某種周期變化趨勢。時間尺度相對較長的周期性趨勢有年度周期性趨勢、季節性周期趨勢,相對較短的有月度周期性趨勢、周度周期性趨勢,甚至更短的天、小時周期性趨勢。
例如,要對某機關用電量進行預測,可以先分析該用電機關日用電量的時序圖,來直覺地估計其用電量變化趨勢。
圖1-8是某用電機關a在2014年9月日用電量的時序圖;圖1-9是用電機關a在2013年9月日用電量的時序圖。
總體來看,用電機關a的2014年9月日用電量呈現出周期性,以一周為周期,因為周六周日不上班,是以周末用電量較低。工作日和非工作日的用電量比較平穩,沒有太大的波動。而2013年9月日用電量總體呈現出遞減的趨勢,同樣周末的用電量是最低的。
(5)貢獻度分析
貢獻度分析又稱帕累托分析,它的原理是帕累托法則(又稱20/80定律)。同樣的投入放在不同的地方會産生不同的效益。比如,對一個公司來講,80%的利潤常常來自于20%最暢銷的産品,而其他80%的産品隻産生了20%的利潤。
就餐飲企業來講,應用貢獻度分析可以重點改善某菜系盈利最高的前80%的菜品,或者重點發展綜合影響最高的80%的部門。這種結果可以通過帕累托圖直覺地呈現出來。圖1-10是海鮮系列的10個菜品a1~a10某個月的盈利額(已按照從大到小排序)。
由上圖可知,菜品a1~a7共7個菜品,占菜品種類數的70%,總盈利額占該月盈利額的85.0033%。根據帕累托法則,應該增加對菜品a1~a7的成本投入,減少對菜品a8~a10的投入以獲得更高的盈利額。
(6)相關性分析
分析連續變量之間線性相關程度的強弱,并用适當的統計名額表示出來的過程稱為相關分析。
判斷兩個變量是否具有線性相關關系的最直覺的方法是直接繪制散點圖。需要同時考察多個變量間的相關關系時,一一繪制它們間的簡單散點圖會十分麻煩。此時可利用散點圖矩陣來同時繪制各變量間的散點圖,進而快速發現多個變量間的主要相關性,這在進行多元線性回歸時顯得尤為重要。為了更加準确地描述變量之間的線性相關程度,可以通過計算相關系數來進行相關分析。在二進制變量的相關分析過程中比較常用的有pearson相關系數、spearman秩相關系數和判定系數。
1.4.4 資料預處理
當采樣資料次元過大時,如何進行降維處理、缺失值處理等都是資料預處理要解決的問題。
由于采樣資料中常常包含許多含有噪音、不完整、甚至不一緻的資料,對資料挖掘所涉及的資料對象必須進行預處理。那麼如何對資料進行預處理以改善資料品質,并最終達到完善最終的資料挖掘結果的目的呢?
常用的資料預處理主要包括:資料清洗、資料內建、資料變換、資料規約等。
1.資料清洗
資料清洗主要是删除原始資料集中的無關資料、重複資料,平滑噪音資料,篩選掉與挖掘主題無關的資料,處理缺失值、異常值等。
(1)缺失值處理
處理缺失值的方法可分為三類:删除記錄、資料插補和不處理。如果通過簡單的删除小部分記錄達到既定的目标,那麼删除含有缺失值的記錄這種方法是最有效的。然而,這種方法卻有很大的局限性。它是以減少曆史資料來換取資料的完備,會造成資源的大量浪費,丢棄了大量隐藏在這些記錄中的資訊。尤其在資料集本來就包含很少記錄的情況下,删除少量記錄就可能會嚴重影響到分析結果的客觀性和正确性。是以,很多情況下,原始資料集中的缺失值需要使用算法進行插補,典型的數值缺失值插補算法有拉格朗日插值和牛頓插值法。不過,一些模型可以将缺失值視作一種特殊的取值,允許直接在含有缺失值的資料上進行模組化。
(2)異常值處理
異常值處理将含有異常值的記錄直接删除這種方法簡單易行,但缺點也很明顯,在觀測值很少的情況下,這種删除會造成樣本量不足,可能會改變變量的原有分布,進而造成分析結果的不準确。視為缺失值處理的好處是可以利用現有變量的資訊,對異常值(缺失值)進行填補。很多情況下,要先分析異常值出現的可能原因,再判斷異常值是否應該舍棄,如果是正确的資料,可以直接在具有異常值的資料集上進行挖掘模組化。
2.資料內建
資料挖掘需要的資料往往分布在不同的資料源中,資料內建就是将多個資料源合并存放在一個一緻的資料存儲(如資料倉庫)中的過程。在資料內建時,來自多個資料源的現實世界實體的表達形式是不一樣的,有可能不比對,要考慮實體識别問題和屬性備援問題,進而将源資料在最低層上加以轉換、提煉和內建。
3.資料變換
資料變換主要是對資料進行規範化處理,将資料轉換成“适當的”形式,以适用于挖掘任務及算法的需要。常用的資料變換方法有:簡單函數變換、規範化、連續屬性離散化、屬性構造、小波變換。
(1)簡單函數變換
簡單函數變換是對原始資料進行某些數學函數變換,常用的包括平方、開方、取對數、差分運算等。簡單的函數變換常用來将不具有正态分布的資料變換成具有正态分布的資料;在時間序列分析中,有時簡單的對數變換或者差分運算就可以将非平穩序列轉換成平穩序列。在資料挖掘中,簡單的函數變換可能更有必要,比如,個人年收入的取值範圍為10000元到10億元,這是一個很大的區間,使用對數變換對其進行壓縮是常用的一種變換處理。
(2)規範化
資料标準化(歸一化)處理是資料挖掘的一項基礎工作。不同評價名額往往具有不同的量綱和量綱機關,數值間的差别可能很大,不進行處理可能會影響到資料分析的結果。為了消除名額之間的量綱和取值範圍差異的影響,需要進行标準化處理,将資料按照比例進行縮放,使之落入一個特定的區域,便于進行綜合分析。如将工資收入屬性值映射到[-1,1]或者[0,1]内。常用的規範化方法有:最小-最大規範化、零均值規範化、小數定标規範化。
(3)連續屬性離散化
一些資料挖掘算法,特别是某些分類算法(如id3算法、apriori算法等),要求資料是離散屬性形式。這樣,常常需要将連續屬性變換成離散屬性,即連續屬性離散化。連續屬性的離散化就是在資料的取值範圍内設定若幹個離散的劃分點,将取值範圍劃分為一些離散化的區間,最後用不同的符号或整數值代表落在每個子區間中的資料值。是以,離散化涉及兩個子任務:确定分類數以及如何将連續屬性值映射到這些分類值。常用的連續屬性離散化方法有:等寬法、等頻法、(一維)聚類。
(4)屬性構造
在資料挖掘的過程中,為了幫助提取更有用的資訊、挖掘更深層次的模式,提高挖掘結果的精度,需要利用已有的屬性集構造出新的屬性,并加入現有的屬性集合中。
(5)小波變換
小波變換是一種新型的資料分析工具,是近年來興起的信号分析手段。小波分析的理論和方法在信号處理、圖像處理、語音處理、模式識别、量子實體等領域得到越來越廣泛的應用,它被認為是近年來在工具及方法上的重大突破。小波變換具有多分辨率的特點,在時域和頻域都具有表征信号局部特征的能力,通過伸縮和平移等運算過程對信号進行多尺度聚焦分析,提供了一種非平穩信号的時頻分析手段,可以由粗及細地逐漸觀察信号,從中提取有用資訊。
4.資料規約
在大資料集上進行複雜的資料分析和挖掘将需要很長的時間,資料規約産生更小的但保持原資料完整性的新資料集。在規約後的資料集上進行分析和挖掘将更有效率。資料規約可以降低無效、錯誤資料對模組化的影響,提高模組化的準确性;縮減資料挖掘所需的時間;降低存儲資料的成本。
資料規約主要包括:屬性規約和數值規約。
(1)屬性規約
屬性規約通過屬性合并建立新屬性維數,或者直接通過删除不相關的屬性(維)來減少資料維數,進而提高資料挖掘的效率、降低計算成本。屬性規約的目标是尋找出最小的屬性子集并確定新資料子集的機率分布盡可能接近原來資料集的機率分布。
(2)數值規約
數值規約通過選擇替代的、較小的資料來減少資料量,包括有參數方法和無參數方法兩類。有參數方法是使用一個模型來評估資料,隻需存放參數,而不需要存放實際資料,例如,回歸(線性回歸和多元回歸)和對數線性模型(近似離散屬性集中的多元機率分布)。無參數方法就需要存放實際資料,例如直方圖、聚類、抽樣(采樣)。
1.4.5 挖掘模組化
樣本抽取完成并經預處理後,接下來要考慮的問題是:本次模組化屬于資料挖掘應用中的哪類問題(分類、聚類、關聯規則、時序模式或者智能推薦)?選用哪種算法進行模型建構?
這一步是資料挖掘工作的核心環節。針對餐飲行業的資料挖掘應用,挖掘模組化主要包括基于關聯規則算法的動态菜品智能推薦、基于聚類算法的餐飲客戶價值分析、基于分類與預測算法的菜品銷量預測、基于整體優化的新店選址。
以菜品銷量預測為例,模型建構是基于菜品曆史銷量,綜合考慮節假日、氣候和競争對手等采樣資料軌迹的概括,它反映的是采樣資料内部結構的一般特征,并與該采樣資料的具體結構基本吻合。模型的具體化就是菜品銷量預測公式,公式可以産生與觀察值有相似結構的輸出,這就是預測值。
挖掘模組化部分具體見第6章。
1.4.6 模型評價
從上面的模組化過程中會得出一系列的分析結果,模型評價的目的之一就是從這些模型中自動找出一個最好的模型出來,另外就是要根據業務對模型進行解釋和應用。
對分類與預測模型和聚類分析模型的評價方法是不同的。分類與預測模型對訓練集進行預測而得出的準确率并不能很好地反映預測模型未來的性能,為了有效判斷一個預測模型的性能表現,需要一組沒有參與預測模型建立的資料集,并在該資料集上評價預測模型的準确率,這組獨立的資料集叫測試集。模型預測效果評價,通常用相對絕對誤差、平均絕對誤差、根均方差、相對平方根誤差等名額來衡量。聚類分析僅根據樣本資料本身将樣本分組。其目标是,組内的對象互相之間是相似的(相關的),而不同組中的對象是不同的(不相關的)。組内的相似性越大,組間差别越大,聚類效果就越好。