數據挖掘的目的,就是從數據中找到更多的優質用戶。接著上篇繼續探討有指導數據挖掘方法模型。什么是有指導的數據挖掘方法模型,以及數據挖掘如何構建模型。在構建一個有指導的數據挖掘模型,首先要理解和定義一些模型試圖估計的目標變量。一個典型的案例,二元響應模型,如為直接郵寄和電子郵件營銷活動選擇客戶的模型。模型的構建選擇歷史客戶數據,這些客戶響應了以前類似的活動。有指導數據挖掘的目的就是找到更多類似的客戶,以提高未來活動的響應。
這構造有指導的數據挖掘模型的過程中,首先要定義模型的結構和目標。二、增加響應建模。三、考慮模型的穩定性。四、通過預測模型、剖析模型來討論模型的穩定性。下面我們將從具體的步驟談起,如何構造一個有指導的數據挖掘模型。
有指導數據挖掘方法:
把業務問題轉換為數據挖掘問題選擇合適的數據認識數據創建一個模型集修復問題數據轉換數據以揭示信息構建模型評估模型部署模型評估結果重新開始
(有指導數據挖掘方法模型)
步驟:
1、把業務問題轉換為數據挖掘問題
《愛麗絲夢游仙境》中,愛麗絲說“我不關心去哪兒”。貓說:“那么,你走哪條路都沒什么問題”。愛麗絲又補充到:只要我能到達某個地方。貓:“哦,你一定能做到這一點,只要你能走足夠長的時間。”
貓可能有另外一個意思,如果沒有確定的目的地,就不能確定你是否已經走了足夠長的時間。
有指導數據挖掘項目的目標就是找到定義明確的業務問題的解決方案。一個特定項目的數據挖掘目標不應該是廣泛的、通用的條例。應該把那些廣泛的目標,具體化,細化,深入觀察客戶行為可能變成具體的目標:
確定誰是不大可能續訂的客戶為以家庭為基礎的企業客戶設定一個撥打計劃,該計劃將減少客戶的退出率確定那些網絡交易可能是欺詐如果葡萄酒和啤酒已停止銷售,列出處于銷售風險的產品根據當前市場營銷策略,預測未來三年的客戶數量
有指導數據挖掘往往作為一個技術問題,即找到一個模型以解釋一組輸入變量與目標變量的關系。這往往是數據挖掘的中心,但如果目標變量沒有正確的定義以及沒有確定適當的輸入變量。反過來,這些任務又取決于對要解決的業務問題的理解程度。沒有正確的理解業務問題就沒辦法把數據轉化為挖掘任務。在技術開始之前,必須認識兩個問題:如何使用結果?以何種方式交付結果?
上述兩個問題,都是建立在客戶的真正需求是什么?而不是作為數據挖掘工程師認為的什么是有用的數據,什么對客戶最好的數據。這些結果看似有利于客戶提高銷售額,但是我們交付的結果是什么,我們有理解客戶的需求嗎?所有前提,不要著急急著動手,先理解真正需求,不可盲目主斷。
1.1如何使用結果?
例如:許多數據挖掘工作旨在提高客戶保留
主動向高風險或高價值的客戶提供一個優惠,挽留他們改變獲取渠道的組合,以利于那些能帶來最忠實客戶的渠道預測未來幾個月的客戶數量改變會影響客戶的滿意度的產品的缺陷
這些目標都會對數據挖掘過程產生影。響。通過電話或直接郵寄的營銷活動接觸現有客戶,意味著除了確定客戶風險之外,你要了解為什么他們處于風險中,從而可以構造一個有吸引力的優惠。電話,不能過早或過遲。預測意味著除了確定那些客戶可能離開,確定有多少新客戶加入,以及他們會停留多久。而新客戶的加入,不只是意味著預測模型要解決的問題,還是被納入到業務目標和預算之中。
1.2如何交付結果?
有指導的數據挖掘項目可能會產生幾個不同類型的交付形式。交付形式往往是一個報表或充滿圖標和圖形的簡報。交付形式會影響數據挖掘的結果。當我們的目的是提醒銷售驚雷時,產生一個營銷測試的客戶列表是不夠的。所謂的如何交付結果,就是在挖掘結果產生之后,我們要如何給用戶提供這個結果,目的是好的,但實際的過程中會遇到,會遇到我們沒有辦法去交付這個結果。因為,你交付的結果,可能會導致一些本不該流失的客戶,卻流失了。這也是在具體工作之前,我們要考慮的問題。
數據挖掘人員的作用是確保業務問題的最后表述可以被轉換成一個技術問題。前提是正確的業務問題。
2、擇合適的數據 2.1什么數據可用?
尋找客戶數據的首要地方就是企業數據倉庫。倉庫中的數據已經被清洗和核實過,并且多個數據源被整合到一起。一個單一的數據模型有望確保命名相似的字段在整個數據庫和兼容的數據類型中都有相同的含義。企業數據庫是一個歷史數據庫,新數據不斷的被追加,但歷史數據一直不變。從這一點更有利于做決策支持。
問題在于,在許多企業組織中,這樣的數據倉庫實際上并不存在,或者存在一個或多個數據倉庫,不符合直接作為規范的數據用來挖掘。在這種情況下,挖掘人員,必須尋求來自不同的部門的數據庫和業務系統內的數據。業務系統數據是指執行一個特定的任務,如網站運行,索賠處理,完成呼叫或賬單處理。它們的目標是快速、準確的處理事務,數據可以保存成任何格式。而這些對于沒有數據倉庫的一些企業來說,這些數據往往是隱藏的很深,需要大量的企業調度和規劃來整理這些數據。這也就談到了一個問題:就是數據倉庫對一家企業的重要性,而建立企業級數據倉庫,需要的決策不是一個經理就可以完成的,這可能需要企業級最高領導下令,下面的所有部門全部配合。
在企業總確定哪些數據可用是相當困難的。因為許多的文檔會丟失或過時。通常情況下,沒有一個人可以提供所有答案。確定什么數據可用,需要遍歷數據字典,了解具體的業務,溝通每個部門,訪問用戶和DBA,審查現有的報告以及查找數據本身是否有用。還有些問題,不僅需要有關客戶的數據,還需要潛在的客戶的數據。當需要這些數據的時候,外部資源和業務系統,如Web日志、呼叫詳細記錄、呼叫中心系統、有時甚至是郵件或電子表格,這些都是數據信息的來源。
數據挖掘工作的方式并不是一直等到完美和干凈的數據才進行下一步工作。雖然需要額外干凈的數據,但是受挖掘必須能夠使用目前的數據,提前入手,開始工作。
2.2多少數據才足夠?
一、數據越多越好,更多意味著更好。在建模期間,必須對模型集進行平衡,使得每個結果的數目都相等。如果在一個大規模的樣本中有一個比例很小的稀有數據,則一個較小的、均衡的樣本會更受歡迎。
二、當模型集足以建立良好的、穩定的模型時,使它更大將會產生相反的作用,因為這時需要更長時間在更大的模型上去運行,由于數據挖掘是一個反復的過程,這就導致時間的浪費。如果一次建模例程的運行都需要數小時而不是數分鐘,這個時間的消耗就耗不起的。這就導致,在模型確定后,數據并不是越多越好。
2.3需要多久的歷史?
數據挖掘使用過去的數據預測未來。但是,數據需要來自多久的過去?這個沒有定性的回答,這要考慮很多的因素。另一方面,歷史上太久的數據未必對數據挖掘有用,因為市場環境在變化,特別是當一些外部事件(如監管制度的變化)進行了干預時尤其如此。對于許多以客戶為中心的應用,2-3年的歷史是合適的。然而,在這種情況下,客戶關系確實存在有效才被證明是有價值的,那么重要的是什么:最初的渠道是什么?最初的報價是什么?客戶最初怎么支付的等。
多少變量:
不熟練數據挖掘的人員有時太急于拋出不太可能有意義的變量,且只保存了他們認為重要的幾個精心挑選的變量。數據挖掘方法要求數據本身能揭示它重要或不重要。
通常情況下當與其他變量結合使用時,原先被忽視的變量會具有預測價值。例如:一個信用卡者從未把把現金刷沒又繼續刷,通過數據挖掘發現他們僅在11月和12月才會使用用信用卡墊付。據推測,這些人非常謹慎,大部分時間他們都避免因多刷而產生的高利息,謹慎也推斷出一個結論(他們比習慣使用現金墊款的人更加不太可能選擇拖欠欠款),但在假期,他們需要一些額外的現金,并愿意為此付出較高的利息。
2.4數據必須包含什么?
最低限度,數據必須包含有可能有意義的結果的例子。有指導數據挖掘的目的是預測一個特定目標變量的值,但在有指導的數據挖掘中,模型集必須由分類好的數據組成。要區分哪些人拖欠貸款哪些人不可能拖欠,模型集的每個類都需要有成千上萬的例子。當一個新的申請產生時,他的申請會與過去的客戶的申請進行對比,可以直接把新的申請歸類。這其中隱含的意思:數據可用來形容過去發生了什么事情,從錯誤總吸取教訓,首先我們必須識別我們已經犯了什么錯。
3、認識數據
在數據用于構建模型之前,在探索數據上花費時間的重要性通常沒有得到足夠的重視。后面我們會抽出絕對的篇幅來說明這個問題。優秀的數據挖掘工程師似乎非常依賴直覺——例如,某種程度上能夠猜測將要派生的變量結果如何。要在陌生的數據集中利用直覺來感應發生了什么事情,唯一辦法就是陷入數據之中,你會發現許多數據質量的問題,并能夠得到啟發提出在其他情況下不容易被發現的問題。
3.1檢查分布
在數據庫的初步探索階段,數據可視化工具非常有益,如:散列圖、條形圖、地理地圖、Excel等可視化工具對觀察數據提供了強大的支持。
當你開始著手一個新數據源中的數據文件,就應該剖析數據了解到底發生了什么,包括計數和每個字段的匯總統計,分類變量不同值的數量,并在適當的情況下,需要基于產品和區域的交叉統計表。除了提供對數據的了解,剖析工作可能會產生不一致問題或定義問題的警告,這些問題可能會對后面的分析造成麻煩。
3.2值與描述的比較
觀察每個變量的值,并把它們與現有文件中的變量描述進行比較。這項工作可以發現不準確或不完整的數據描述。其實是,你記錄的數據,是否和你要描述的數據一致,這個要先確定。目的是什么?在實際的數據挖掘過程中,你要去揣測這個字段的數據到底是什么意思?如果業務人員知道,那是最好的了。如果業務人員都不知道,這個時候,可能就需要憑借經驗去揣測了,而且這種情況經常發生,字段定義不明確。
3.3詢問大問題
如果數據看上去似乎不明智或者不如所愿,記錄下來。數據探索過程的一個重要輸出是對提供該數據的人給出一個問題列表。通常,這些問題將需要進一步研究,因為很少有用戶像數據挖掘工程師一樣仔細地觀察數據。對數據的探索的前期工作,判斷字段,含義,是否有用,是否缺失,是否有問題等一系列問題,需要大量的工作,同時也是一件心細的過程。
4、創建一個模型集
模型集包含建模過程中使用的所有數據。模型集中的一些數據被用來尋找模式,對于一些技術,模型集中的一些數據被用來驗證該模型是否穩定。模型集也可用來評估模型的性能。創建一個模型集需要從多個數據源聚合數據以形成客戶簽名,然后準備數據進行分析。
4.1聚合客戶簽名
模型集是一個表或一系列表,每一行表示一個要研究的項目,而字段表示該項目有利于建模的一切。當數據描述客戶時,模型集的行通常稱為客戶簽名。客戶簽名,每個客戶都由他離開的蹤跡唯一確定,你可以利用蹤跡充分的了解每個客戶。
從關系型數據庫中聚合客戶簽名旺旺需要復雜的查詢,這些查詢往往需要關聯很多的表去查詢的數據,然后利用其他來源的數據增強結果。聚合數據的一部分過程是使數據位于正確的匯總層次,然后每一行都包含先關客戶的所有信息。
4.2創建一個平衡的樣本
在標準的統計分析中,一種常見的做法是拋棄離群點——遠遠超出正常范圍的觀測值。然而在數據挖掘的過程中,這些利群點可能正是你要找的。或許他們帶有欺詐行為,可能是你的業務中的一些錯誤,或一些利潤驚人的市場商機。在這種情況下,我們不希望拋出離群點,認識和了解他們。
知識發現算法需通過實例來進行學習。如果沒有足夠數量的關于某個特定類或行為模型的例子,數據挖掘工具無法得出一個預測該類或模式的模型。在這種情況下,利用罕見事件的例子豐富該模型集,提高建模中該事件的概率。如果比較罕見,有兩種方法可以平衡樣本:一、分層抽樣。二、權重。
例如:銀行要建立一個模型,以確定哪些客戶是私人銀行計劃的潛在客戶。這些計劃只針對非常富有的客戶,他們在一個相當大的銀行客戶樣本中也是非常稀少的。如何構建一個能發現這類用戶的模型,該模型集可能需要有50%的私人銀行的客戶,即使他們代表所有支票份額中還不到1%。另外私人銀行客戶可能被賦予一個值為1的權重,其他客戶的權重為0.01,所以浙西專有客戶的總權重等于其余客戶的總權重。通過增加一些孤立點客戶的權重,從而達到模型對數據的合理梳理。
4.3時間幀
基于一個時間段內的數據建立模型會增加風險,即學習的知識不真實。結合模型集中的多個時間幀可以消除季節性因素的影響。由于季節性影響如此重要,因此應該把它們明確地添加到客戶簽名中。還有假日購物模式也非常重要。把客戶的信息按照時間細分,或是在相應的數據上打上標簽。
4.4創建一個預測模型
當模型集用來預測時,另一個問題,模型集應包含多長時間,時間段該如何劃分。任何客戶標簽在預測變量和目標變量之間都應該有一個時間差。時間可分為,過去、現在、將來。當然所有數據都來自過去,過去又分為三個時期:遙遠的過去、不太遙遠的過去和最近。預測模型就是要發現遙遠的過去的模型,用來解釋最近的輸出。當部署模型時,它能夠使用最近的數據預測未來。如果構建一個模型來利用6月份(不太遙遠的過去)的數據對7月份(最近)進行預測,那么在8月份之前的數據是可用的,但它不能用來對9月份進行預測。但是8月份的數據是可用的嗎?肯定不是,因為這時,數據仍在產生數據。也不會是9月份的第一周,因為這些數據需要被收集、清洗、加載、測試和認可。8月份的數據可能要懂啊9月份中旬或10月才能用,到這個時候,沒人會擔心9月份的預測了。解決的辦法是在模型集中跳過1個月。
4.5創建一個剖析模型集
剖析模型集與測試模型相似,但有一點:目標的時間幀與輸入的時間幀重疊。看微小的差別對建模工作的影響卻很大。因為輸入可能會“污染”目標模式。例如:銀行,擁有投資賬戶的客戶在儲蓄賬戶中往往有非常低的結余——因為他們能從投資賬戶中得到更好的回報。這是否意味著銀行要為了投資賬戶而識別低存儲賬戶余額的客戶呢?可能不需要,因為這些客戶的資產很少。
解決這個問題的一種方法是非常仔細得選擇剖析模型的輸入。把所有賬戶余額組合到“儲蓄”,“貸款”兩組。儲蓄組包括所有類型的儲蓄和投資。這種方法非常有效,事實證明模型是穩定的。一個更好的辦法:開通投資賬戶之前對賬戶產生一個模型。一個并發的問題是:由于每一個客戶的時間幀都取決于客戶開通賬戶的時間,建立這樣一個模型集面臨更多的困難。
當目標變量的時間幀與輸入變量的時間幀相同時,那么該模型是一個剖析模型,并且這個輸入可能會引入一些似是而非的模式,而這些模式可能會混淆數據挖掘技術。你需要非常小心地選擇輸入或者重建模型集來產生預測模型。
4.6劃分模型集
當你從適當的時間幀中獲得預分好的數據后,有指導數據挖掘房峰輝把它分為三個部分。一、訓練集,用戶建立初始模型。二、驗證集,用于調整初始模型,減少其與訓練集特性的額綁定,從而更具一般性。三、測試集,用來衡量吧模型應用與未知的數據時可能產生的效果。三個數據集是必要的,因為若某個數據已在此過程中的某一步使用過,那么它包含的信息就已經成為模型的一部分。因此,它不能用來修正或判斷模型。
我們往往很難理解為什么訓練集和驗證集被用來建立模型之后就會成為“污點”。這就好比你參加考試,你認為這題你做的是正確的,老師讓你去預測考試成績,你顯然認為分數很高,因為你認為,如果沒有答案,第二天在參加同樣的考試,你的想法不會改變。這時候,你的系統中沒有一個新的標準,這時,你需要的是一個驗證集。
現在,想象一下測試結果以后,估分之前老師讓你看看你同學的幾個試卷。如果他們都和你的結果不一樣,這時候,你可能會把你自己的答案標記為一個錯誤的答案。如果第二天老師給出了正確的結果,這個時候讓你再去做同樣的的試卷,你可能得出的就是不同的結果。這就是為什么驗證集應該不同于測試集的原因。
對于預測模型,一個好主意是測試集所在的時間段與訓練集和驗證集的時間段不同。一個模型的穩定性證據在于它在連續的月份中都能夠良好的運行。來自不同的時間段的測試集,也稱為不合時宜的測試集,雖然這樣的測試集并不總是可用,但是它是驗證模型穩定性的一個很好的方法。