DM中一个热门问题的解惑
?? 宇宙之大,萬事萬物概莫變化無常。模型作為一種抽象的工具,遠在幾千年前我們的老祖宗就已經意識到其作用,人們制造瓷器、陶器、銅器、金器、銀器等等,都要首先制作各種“模子”。進而推廣之,自古以來,人們就提出了各種非實物的形式模型。中國古代人們提出的“陰陽互補模式”、“五行生克模式”、“天人合一模式”、“易經卦象模式”等等,用這些思維模式去嘗試解決多種多樣的問題。
?? 數據挖掘作為近年來新興的一門計算機邊緣學科,在我國也逐漸引起了越來越多人的關注,各種學術及應用文章如汗牛充棟,令人眼花繚亂。但數據挖掘究竟是什么?人們常常掛在嘴邊的數據挖掘建模本質上又指的什么?筆者得到的反饋常是模棱兩可、凌亂抽象的時髦詞匯的堆砌。本文及后續的系列專欄文章無意也無力于澄清所有的概念,僅作為拋磚引玉,為渴望入門或跟作者一樣曾經陷于學界高深莫測的概念泥潭中不能自拔的理想青年盡微薄之力。我將從以下五個方面探討。
???? (一)數據挖掘是什么
???? (二)數據挖掘不是什么
???? (三)數據挖掘建模的任務
???? (四)數據挖掘建模的思維框架
???? (五)數據挖掘VS統計學
后序將介紹數據挖掘常用的研究方法;建模的技巧;常用的工具;權威的教材與論文及該領域目前活躍的研究人員。
(一)數據挖掘是什么
定義某個名詞特別是某個學科總是特別容易引起爭論的事情,不同的教材、不同的學者從不同的關注角度和研究領域出發總會側重不同的理解。為了不糾纏于細枝末節,我引用了David Hand在“Principles of Data Mining”中的定義:
???? 數據挖掘就是對觀測到數據集合進行分析,目的是發現未知的關系和以數據擁有者可以理解并對其有價值的新穎方式來總結數據。
注腳:上述定義中有幾個問題需要思考。第一,對觀測到的數據進行分析。什么樣的數據?如何分析?化學試驗的數據及分析也是觀測到的數據及分析,這里的數據有什么不同?分析有什么特別?實際上,沒什么不同,數據挖掘本身是高于具體的領域的一種方法論,物理的,化學的問題都可以套到這個定義上,用這個方法去“分析”
?????? 第二,未知的關系。這是關鍵所在。如果一個模型分析得到的結果是已知的東西,那是驗證。而數據挖掘重在“探索”,也就是一種unsupervised learning。我舉個自己的切身例子,某次,本人的移動話費出奇地高,在朋友規勸下,索取了話費的清單,定神一看,密密麻麻叁張打印紙全是通話記錄。有這么多電話嗎?打給誰的。我自己都搞不清楚了,也就是說,我首先知道這里肯定有問題,但問題在哪,到底是因為哪些因素導致我這個月話費不“正常”我是不清楚的。在定睛一看,每天是午夜的時候都有一個同樣的電話,時間點變動很小,號碼偶爾變化,但稀奇古怪,拿朱筆重重一圈,再看,問題就清楚了。(略去若干字......)
????? 第三,以數據擁有者可以理解并對其有價值的新穎方式來總結數據。通俗一點說,就是最終的模型還得回歸到具體問題來展示其結果。比如,無論你是聚類算法還是分類算法,還是關聯規則分析,最終無非要回答:哪些商品售出的時候最有可能也售出其它哪些商品?哪些人最容易買了手機很快又換?
???? 文章結束的時候講一個笑話,筆者的一個朋友,為某大型通迅公司作一個數據挖掘項目時,分析得出這樣一個結論:16-24歲年齡段的人最容易流失。聰明的讀者,你笑了嗎?為什么笑?
???? 待續.....
(二)數據挖掘不是什么
???????? 提出這個問題很容易,回答卻沒有看起來那么簡單。比如,我可以說,數據挖掘不是售貨機,投入一個硬幣,吐出來一筒可樂-輸入一堆數據,產生一個方程......等等都無助于正確回答這個問題。那我們就索性從前文“數據挖掘是什么”,數據挖掘能干什么入手看看雙刃劍的另一面。
??????? 第一部分“數據挖掘是什么”實際上寫的比我計劃要寫的簡單。僅僅給出了一個定義及幾條注腳而已。但不管怎樣最核心的東西畢竟寫出來了。數據挖掘說到底是一種方法,“對觀測到數據集合進行分析,目的是發現未知的關系和以數據擁有者可以理解并對其有價值的新穎方式來總結數據。”也就是說,它是對觀測數據的次級處理,往往是數據的副產品。比如,物流中心的批銷單(可以理解成訂單)歷史數據,本身的目的是為了處理發貨和配送,但用數據挖掘,可以對客戶進行分類或聚類,進而也許有助于銷售預測。這樣,“不是什么”的問題也就來了,它的確不是專門性進行的一項完整工作,也就是說,沒有人會說:老王,我們準備預測一下下個月營業高峰什么時候出現,你弄些數據來挖一挖。沒有數據,挖掘是扯淡的。很多數據挖掘項目失敗,不在于實施者不懂算法,也往往不在于模型建立不合理不正確,而在于源頭的數據就不準確不“原始”,為挖掘而挖掘。
??????? 定義的后一部分要求產生的結果是“新穎的”,那我們不多說,又一條“不是什么”可以這么理解:數據挖掘不是你先看一眼批銷單,然后說我猜買《克林頓與萊溫斯基》的人一定會買《希拉里自傳》,我們挖一挖批銷單庫看看。當然這么說有的時候不能完全算錯,因為畢竟科學探索還得要有想像力-但數據挖掘一般說來結果都可能會讓你大跌眼鏡,不是你想當然想出來然后驗證。
最后再從另一個維度“數據挖掘能作什么”出發回答“數據挖掘不是什么”。
任何嚴肅的數據挖掘教科書(我列幾本,大家可以找找。J.Han ,Micheline Kambr,"Data Mining-Concepts and Techniques";David Hand "Principles of Data Mining"; Michael J.A.Berry,"Mastering Data Mining-The Art and Science of Customer Relationship Management";Adriaans,P.,and Zantige "Data Mining")都覆蓋到以下幾個區域(后續文章會詳細闡述):
1 分類(Classification)
分類首先要對一個新的客觀事物特征進行描述,然后將客觀事物的觀察值分配到事先確定的類別之中。
因此,數據挖掘不是先知,能預知新的類別(異常探測是另一個話題),必須是事先明確的類別,經過訓練后將待分類數據歸到類別標簽下去。
2 估計(estimaiton)
分類處理的是離散的結果:如“是”與“不是”,“中國”,“日本”,而估計處理的是連續的結果,因此也可以看成分類的擴展,二者在實踐中常常結合使用,比如銀行要決定該給哪些顧客貸款,考慮的做法是將所有顧客放入一個模型,給每個客戶一個從0到1的分數,即對貸款的響應概率。分類的任務轉換成建立一個分數臨界數值,根據對顧客響應概率的估計來對他分類。
因此這一點不再闡述。
3 預測(Prediction)
有人認為預測不是一種獨立的方法,任何預測都是分類或者估計,關鍵在于你強調什么。我的理解是區別點在于檢驗。分類理論上你是可以檢驗的,而預測你只能等到事情發生之后。
但記住,數據挖掘同樣不是未卜先知,一切的神秘都在數據里,玄機是跟分類和估計一樣,都得通過訓練數據建立先驗的某種模型(如樹或貝葉斯網絡),然后在此基礎和前提下預測。想想也是有道理的,現實生活中,我們太相信一些專家,學者的話,老吃啞巴虧,人家說今年房價一定升,咱就把攥的緊緊的錢拿出來去買房,結果好像別人的升,你的房子按兵不動啊。“專家”們的預測也是有前提和模型的,只是他的模型,只在書本或他腦子里,我們這些老百姓無緣聽到,也可能人家根本不屑講給我們這些聽不懂的人。
4 關聯(AssociationRules)
這是數據挖掘中最常見的一類問題。幾乎所有的介紹數據挖掘概念的文章中動輒都拿這個為例,“啤酒和尿布”,“菜籃子分析”,“購物車”分析都是這一類問題的通俗說法。
我先提醒大家一句,數據挖掘運算的結果,即便是frequent item(也就是有意義的那些關聯項目)也可能是數目非常龐大的,需要進一步分析。不是挖一通然后眼睛一亮淚流滿面向全世界宣布:買香煙最多的人買打火機也最多!!
5 聚類(clustering)
聚類跟分類不同,對于數據會歸于哪一“類”,事先是不知道的,完全是unsupervised學習過程,自然也就沒有什么樣本的概念。但同樣提醒大家的是,學習的時候注意,任何的聚類方法仍然有隱性的前提在里面,就是聚類的依據,總
歸是某種“長度”,“距離”,“相似性”之類的概念或角度,而絕不是挖出來白人黑人黃種人一目了然。不同的計算方法結果會有不同。
待續.......
三 數據挖掘建模的任務
??? 數據挖掘功能可能是目標性的,也可以是描述性的,其差異取決于指導數據挖掘實踐的目標。目標性數據挖掘的首要任務是創建一個可以預測,指定標記,以及估計數值的預測模型,從而可以自動實現決策過程。通常目標性挖掘的結果可以直接應用在行動中,例如
依照預測模型的結果,可以決定是否給某個申請貸款客戶發放貸款。在這種情況下,模型的好壞與否主要在于其判斷的準確性。
??? 但多數情況下數據挖掘是描述性的。所謂“描述”的任務是通過各種直觀或有效的方式對數據得到更深入的理解,進而了解數據所反映的領域背景情況。當然描述性的數據挖掘也產生一些挖掘結果,但這些結果并非由模型自動生成。此時,模型的好壞并不取決于預測的準確與否,而在于通過模型所得到的對數據的認知。
???? 我們來看兩個數據挖掘的例子,數據挖掘在這兩個項目中用來分析用戶對某移動運營服務商促銷活動的響應程度。兩個項目所輸入的原始數據幾乎相同:客戶所在地域、身份、年齡段、性別等,某些客戶已標明加入了該公司網絡。第一個項目的任務是建立一個模型,從未來類似的潛在客戶中找出可能加入該公司網絡的群體,根據新客戶接受服務的可能性進行打分,得分高于一定閥值的選定為最可能接受服務的重點客戶群體。另一個項目的任務不同,目的是尋找那些已經選擇該公司網絡客戶的特征及原因,以改進日后的促銷活動。由于兩個項目的建模目標不同,因而處理過程采用的技術和方法也大不一樣。
???? 兩個項目都是對潛在客戶的研究,對于移動公司來說,可用的數據只有客戶的姓名和地址(不包括那些不需要實名入網的客戶)及是否通過促銷入網的標記。通常的處理方法是將這些數據轉到第三方通過一些人口資料和生活形態等變量加以豐富和擴展。但生活形態(如每月購買奢侈品占消費額比例等消費習慣)變量中的噪聲和缺失現象非常嚴重,因此很難利用這個變量來構造理想的模型。不管用神經網絡還是決策樹模型,都很難從這種稀疏數據中發現有價值的規律,因而模型的預測能力很差。
???? 但在第二個項目中,類似消費習慣這樣的變量就比較有用。盡管這類變量分布比較稀疏,但對于稀有案例的預測較為準確。原因就在于第一個項目假定用來訓練的樣本數據是潛在客戶總體的代表,而第二個項目從另一個角度看問題:如果有異常興趣和習慣的人對促銷感興趣的話,那么我們所應作的就是找出這個新的群體,從該群體中找出未來客戶的特征。第二個項目對有意象的客戶進行聚類,并且把這些類的變量與總體變量進行比較。不管總體的稀少程度如何,只要有特殊興趣和習慣,公司就會與相關的機構或組織聯系從中找出有關的列表提供進一步信息,這樣該群體的比例就可能上升。
四 數據挖掘學科的分析框架
各個成熟的學科都有其分析、解決問題的框架和方法論,一般稱之為分析框架。譬如研究經濟學,常使用的分析框架有交易成本、博弈論、代理人等等。在數據挖掘學科當中,由于不同問題領域的背景不同,因此不存在一個放之四海都皆準的研究框架。因此這里我們給出一個抽象的一般性框架僅供參考。
1 理解商業問題
這個階段在我看來是整個分析處理過程中最重要最關鍵的一環,但往往被很多人輕視了。 這個環節的根本目的在于理解業務問題,可以通過以下問題列表來幫助你明確目標:
???? 是否有必要選用數據挖掘?
???? 是否有一些感興趣的客戶群資料?
???? 在了解客戶資料的時候應該注意哪些約束性問題?
???? 領域專家對數據的了解程度如何?是否存在無效的數據資源?某些特別的數據可以從哪里得到?
???? 根據領域專家的意見,哪些問題是最重要的?
???? 哪些數據現在得不到,但一旦得到就可以立即行動?
2 數據準備
????? (1)確認和獲取數據。構建模型的第一步是確認是獲取數據。通常情況下,所謂合適的數據是可用于分析的、邏輯清楚的、易獲取的數據。其次,數據應當盡可能完整,使用抽樣調查之類的數據集合顯然不行。當然不排除個別應用當中專門針對抽樣調查數據進行挖掘,但此時就不能簡單將結果模型用于未回答調查問卷的對象。
??? 如果進行數據挖掘分析的目的是進行預測,則數據中應包括預期的輸出。舉以前的一個老案例,某通訊公司準備為其客戶制定一份促銷優惠的服務政策列表,例如月通話時長超過100小時折扣比例、團體入網折扣比例等等。該公司目前擁有下列數據資料:對所有客戶的銷售資料;按促銷政策清單入網接受相應服務的客戶名單;反映客戶購買情況的詳細資料。但恰恰遺漏的是到底哪些客戶收到(或看到)促銷清單這個數據,因此根據這些數據構建預測響應模型毫無意義。
?
??? (2)生成有效數據、探索數據(Data Exploring)、數據清潔(Data Cleaning)?
??? 數據挖掘成功與否取決于數據質量的好壞。考慮下列問題列表:
??? 字段是否充分?
?? 缺失數據是否嚴重?
??? 字段值是否合法?
?? 字段值是否符合邏輯?
?? 單個字段的分布是否有說明?
??? 引起數據不準確的原因有很多,在通常的商業活動里,重要字段比如價格、數量會比較準確。但一些不太常用的數據,如性別、所在區域可能不準確。
????? 數據探索是指在清潔數據、正式建模前通過各種方法查看數據的分布,以了解數據的質量和特性。常用的方法有散點圖、卡方檢驗等工具。在常用數據挖掘工具如SAS的Enterprise Miner、CART中都有Data Explorer工具。
???? 如果發現數據中存在缺失、錯誤、冗余等不合理現象,應通過數據清潔手段進行處理。具體的方法可參閱相關文獻,不一一列舉。
(3)粒度轉換
????? 粒度是建模數據的級別大小。通常情況下我們都針對原始數據的行級別進行分析。例如同一客戶的資料放入一行進行分析;但另外一種情形下,如有關車輛保險的分析中,每輛車雖然都有其型號、索賠次數、索賠金額、設備估價等數據,但保險公司不大可能對每輛車感興趣,此時會將以年-車輛形式生成數據,轉換成按報單格式匯總的數據。
如:
???? 報單?? 年份?? 車輛?? 理賠次數 金額
???????? 00001 1998 京GF0001 1????? 1000
???????? 00001?? 1998 京GF0002
???????? 00002?? 1998 京GF0003
???????? 00002?? 1999 京GF0004
???????? 00002?? 1999 京GF0002
合并后
???? 報單?? 幾年期?? 車齡?? 理賠次數 金額
???????? 00001?? 1????? 1????????? 1?????? 1000
???????? 00002?? 2????? 2???????? 0??????? 0
(4)加入衍生變量。衍生變量值是合并原始數據生成的結果。例如
??? 所有交易數量和交易資金的總額;通話費用為0的月份總數;從開始使用到使用完畢使用率的變化;國際長途、普通長途、市話分布比例等。
?????? 通過OLAP系統可以生成這些衍生變量,從這點也可以理解OLAP與數據挖掘之間的關系。
(5)準備建模數據集
???? 也就是用于建立數據挖掘模型的數據。在數據清理、數據轉換及添加衍生變量后還有一些問題需要考慮。當根據歷史數據建立預測模型的時候,在建模數據集中,稀疏數據的比例是多少?通常我們選取15-30%的比例來建模。又比如欺詐診測模型的建立中,那些有欺詐記錄的數據所占比例不到1%。不難推測,由這樣的數據集建立的幾乎所有模型中,預測成功的可能性達到99%-成功預測沒有欺詐的可能性。模型非常精確,但可能完全沒有用。因此,我們需要將建模數據集分成三部分:訓練數據集、測試數據集、評估數據集。
3 建模。
待續
總結
以上是生活随笔為你收集整理的DM中一个热门问题的解惑的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Data Mining的十种分析方法
- 下一篇: 如何发表顶级期刊论文