神奇的數據挖掘

談到BI,就會談到數據挖掘(Data mining)。數據挖掘是指用某些方法和工具,對數據進行分析,發現隱藏規律並利的一種方法。下面咱們將經過具體的例子來學習什麼是數據挖掘。
 
案例「上大學分析」-體驗什麼是數據挖掘
 
某社會機構,收集了大量的學生考大學的數據。該機構但願找出一些規律,以推進更多的學生考大學。該機構委託你來作這個分析工做,給出具體的能夠推進更多學生考大學的建議。
收集到的數據以下:
 
 
你可能會考慮用SQL語句進行查詢分析。但問題是:
1.用什麼語句查呢?要組合什麼條件呢?
2.你想查到怎樣的結果呢?這個結果對決策有幫助嗎?
 
那數據挖掘一下吧!但如何挖掘呢?
 
不瞭解數據挖掘的人,每每會認爲只須要讓計算機去挖掘一下,計算機就能幫咱們找出想要的東西。計算機哪會這樣神奇,在數據挖掘以前,咱們必需要本身好好分析一下。
1.明確挖掘的目標。
咱們看看原始需求是這樣的:該機構但願找出一些規律,以推進更多的學生考大學。
你可能會說:該目標也太大了一點吧!如今該機構委託你作這個事情,人家不是專業人士,你還期望人傢什麼都幫你作好嗎?那要你幹嗎!
咱們仔細分析一下,原始數據有姓名、性別、IQ、家庭年收入、兄弟姐妹數量、是否想上大學字段,要推進更多學生考大學,咱們無非就是要分析出:
1)有上大學計劃的人主要緣由是什麼呢?
2)無上大學計劃的人主要緣由是什麼呢?
分析出這些緣由,就能夠提出針對性的建議了。
 
2.明確因果關係
看下面這個圖:
 
對原始數據表進行分析,咱們能夠推論出:家庭收入、性別、兄弟姐妹數量、IQ這些因素,極可能會影響有否上大學計劃。至於姓名會不會影響,咱們能夠用常識判斷應該不會,故能夠排除。
這樣咱們就能夠肯定輸入列有:家庭收入、性別、兄弟姐妹數量、IQ,可預測列爲:有上大學計劃否。
數據挖掘的目標就是找出輸入列與可預測列的關係,只要找到這個規律,就能夠提出針對性的建議,也能夠利用這個規律作預測。
 
以上工做準備就緒後,咱們就須要選擇合適的分析方法來數據挖掘了。咱們選擇「決策樹」的方法,下面是決策樹的部分分析結果:
 
說明:
1.最上面的一個節點表示有55%的人有計劃上大學,45%的人沒有計劃。
2.第二層節點,以IQ爲條件進行劃分,IQ大於100的人中,有上大學計劃的人有79%之多,而IQ小於等於100的人,有上大學計劃的人只有35%,這說明IQ是很重要的影響因素。
3.第三層節點是年收入,第四層是兄弟姐妹數量。
4.決策樹算法會分析原始數據,將影響程度最大的因素排在上面,次之的因素排在後面。
 
由上面的分析,咱們能夠獲得這樣的一些信息:
1.越是IQ高的越有上大學的計劃。
2.家庭收入越高,越有上大學計劃。
3.兄弟姐妹越多,上大學計劃就越微。
4.性別沒有在這棵樹出現,說明性別對有否上大學計劃沒有明顯影響。
 
接下來咱們就能夠提出針對性的建議,以推進更多人考大學:
1.大學學位有限,目前重點應該是鼓勵更多的聰明的學生考大學。
2.聰明的學生不計劃上大學,主要緣由是家庭收入低、兄弟姐妹多,針對這樣的狀況,政府可考慮下降大學學費,或對低收入、多子女的家庭進行資助。
 
總結一下數據挖掘的過程:
1.明確你的目標,收集相關數據。
2.根據目標分析這些數據,找出輸入列、可預測列。
3.選擇合適的數據挖掘方法。
4.分析數據挖掘結果,給出建議。
第二、3步可能須要不斷地嘗試和調試,才能找到合適的分析結果。
 
怎麼樣?這個過程不簡單吧?以上這個例子已經通過個人簡化和提煉,其目標就是讓你們能容易理解什麼是數據挖掘,實際工做中的數據挖掘難度是很高的,須要具有這些能力:
1.能深徹體會業務的要求,能將客戶籠統的需求轉化爲實在的工做指導。
2.能分析出輸入列、可預測列。
3.熟悉各類數據挖掘方法,會選擇合適的方法進行分析。
4.能深刻分析數據挖掘的結果,綜合運用你的各類知識,爲客戶提出針對性的決策建議。
 
常見的數據挖掘方法
常見的數據挖掘方法有分類、聚類、關聯、迴歸、時間序列分析、離散序列分紅、誤差分析、貝葉斯、神經網絡等等。這些內容都涉及到深厚的數學知識,下面只是一些膚淺的介紹,讓你們有個大概的認識,爲你們進一步學習打好基礎。
 
數據挖掘算法之分類
例:某銀行天天收到不少信用卡辦理的申請,爲提升效率和準確性,想應用數據挖掘技術來改善工做,你會怎樣考慮呢?
該銀行有大量的歷史數據,將申請者分爲高、中、低三種風險類型,這樣輸入列就是申請者的學歷、收入、職業等信息,而可預測列就是風險類型。這樣對歷史數據進行數據挖掘後,當有新的申請者提交資料,系統就能夠判斷該申請者風險類型爲高、中仍是低了。
以上的算法就是「分類」,該挖掘方法需人工指定類別,而後找出一組屬性與該類別的關係,利用這些關係來預測新的狀況。
 
數據挖掘算法之聚類
「聚類」與「分類」很類似,一樣是找出一組屬性與類別的關係,不一樣的是這類別不是事先指定的,而是由數據挖掘本身找出分類。
例:某公司收集了不少客戶的資料,記錄了客戶的年齡和收入。該公司相對這些數據進行分析,找出能夠重點營銷的客戶對象。咱們可指定輸入列爲年齡和收入,通過聚類數據挖掘後,發現客戶羣能夠劃分爲三個羣體:低收入年輕客戶、高收入中年客戶、收入相對低的年老客戶。根據這樣的分析結果,公司可採起決策,重點針對高收入中年客戶進行營銷活動。
 
數據挖掘算法之關聯
例:在一家超市裏,有一個有趣的現象:尿布和啤酒赫然擺在一塊兒出售。可是這個奇怪的舉措卻使尿布和啤酒的銷量雙雙增長了。這不是一個笑話,而是發生在美國沃爾瑪連鎖店超市的真實案例,並一直爲商家所津津樂道。原來,美國的婦女們常常會囑咐她們的丈夫下班之後要爲孩子買尿布。而丈夫在買完尿布以後又要順手買回本身愛喝的啤酒,所以啤酒和尿布在一塊兒購買的機會仍是不少的。
上述這個例子常常會被人拿來講,但不多人會觸類旁通地應用這個例子。咱們有不少超市記錄了大量的交易數據,只要對這些交易數據作一下關聯分析,就極可能會獲得很多價值巨大的商業機會。上述這個「尿布+啤酒」的例子,就是應用了關聯分析,發現尿布和啤酒兩個東西常常被一塊兒賣掉。關聯分析主要用來找出某些東西「擺在一塊兒「的機會。咱們上網上商城購買東西,你每選擇一個商品,就可能會向你推銷一堆別的商品,這極可能就是關聯分析在「做怪」。
 
數據挖掘算法之迴歸
變量X、Y可能存在關係,咱們能夠將大量的(X、Y)繪製到一張圖上,造成一張散點圖。若是這些散點更好都在一條直線附近,那麼這條直線的方程就能夠近似表明X與Y的關係。
所謂的迴歸,就是要找到一個函數表明變量X1,X2,X3,...與Y的關係,該函數所繪製出來的曲線,能儘可能擬合這些「散點」。
下圖是某軟件公司某項目測試時間與發現缺陷數量的關係圖:
迴歸可分爲線性迴歸和非線性迴歸,線性迴歸比較容易操做,但通常狀況下數據很難是線性的,而非線性迴歸就超複雜了。
上圖的線性模型採用的是多階段的線性迴歸,指數模型採用的是多階段的指數迴歸,而黑色曲線表明的是真實數據,從圖中看,彷佛指數模型的吻合度更高一點。
 
數據挖掘算法之時間序列分析
例1:炒股的人都想預測明天是漲仍是跌,實際上咱們已經積累了大量的歷史數據,說不定仍是能夠預測的!某股票已經連續漲了3天,明天會不會再漲呢?某股票連續跌了7天了,明天應該不會再跌了吧?
例2:不少商家會在某些節假日時,重點銷售某些產品,以求能夠賣出更多,聖誕節快到了,應該主推什麼產品好呢?實際上各商家的收款系統中,記錄了大量的與時間相關的銷售數據,若是對這些數據作一下時間序列分析,說不定能找到重大商機。
時間序列分析,輸入列都是與時間相關的數據,同時須要考慮季節、歷史等因素,這樣就能夠預測某個時間會怎樣了。
 
數據挖掘算法之離散序列分析
某網站對訪問者的操做進行了統計,以下:
 
說明:
1.訪問者進入首頁後,有20%會進入天氣頁面,40%進入新聞頁面,20%進入商業頁面。
2.從首頁進入新聞頁面的機會是40%,而從天氣進入新聞的機會是10%。
以上的分析對於優化網站是頗有幫助的,上述的分析用到了離散序列分析技術。
離散序列分析,輸入列是一系列有「次序」的數據,經過這一系列有次序的數據預測另一個數據狀況。
 
數據挖掘算法之誤差分析
例:某銀行有信用卡異常使用狀況的監控系統,若是發現某些用卡行爲與客戶往常習慣不同時,會發出警告。
信用卡每次使用狀況,包括時間、地點、金額、商戶等信息都會記錄下來。利用正常的歷史數據對系統進行訓練,告訴系統這些是「正常」的使用狀況,當出現新的用卡記錄與這些正常使用的特徵不符時,則能夠發出警告。誤差分析的原理就是用正常的數據去訓練系統,由系統去判斷新數據是否在正常範圍?有沒有誤差?
軟件項目管理若是達到CMMI4級或以上的層次,就會使用基線來管理項目,基線上下限範圍內可認爲是「正常」的,若是超出上下限,則認爲是「誤差」,須要分析緣由並採起措施。這種用基線來管理項目,其實也是一種數據挖掘算法-誤差分析。
 
數據挖掘算法之貝葉斯
貝葉斯算法是一種根據歷史事件發生的機率來推測未來的算法,由偉大的數學家Thomas Bayes所建立的。Thomas Bayes,1702年出生於英國倫敦。
該算法的原理是這樣的:若是事情A、事情B、事情C、...、這些事情發生了,那麼事情X發生的概率是多少。前面這些事情叫作前提事情,能夠是一個到多個,前提事情越多分析起來就越複雜但會更加準確。
舉個例子:聽說麥當勞當年發現,若是顧客購買了漢堡包和薯條,那麼顧客再購買可樂的機會是70%,因而麥當勞就將這三個產品捆綁在一塊兒做爲套餐,因而銷量大增。對於這個案例,前提事件就是購買漢堡包和購買薯條,要預測的是顧客會不會買可樂,預測結果就是有70%機會會買。咱們能夠利用貝葉斯原理來進行數據挖掘。
 
數據挖掘算法之神經網絡
人腦實際上是由數量龐大的神經細胞組成的,神經細胞龐大的數量及複雜的結構,讓人類充滿了智慧。人一出世,腦殼是一片空白的,當咱們學會了某樣東西的時候,咱們會對起進行推演和概括。比方說咱們認識了這是一條狗,當咱們見到另一條不一樣品種狗的時候,咱們會判斷這也是一條狗。而計算機的判斷通常來講就比較死板了,若是有細微的誤差就會認不出來。
神經網絡算法其實就是經過計算機來構造相似於人腦的神經細胞網絡(固然該網絡不管如何不能跟人腦相比),經過一些訓練,能讓該網絡能識別某一類事物。文字識別、指紋識別等都是應用了神經網絡技術的。
經過數據訓練,咱們能夠在輸入列與可預測列之間找到合適的神經網絡,而後經過這個網絡對新狀況進行判斷。
 
數據挖掘技術
數據挖掘涉及到不少知識,涉及到數學、機器學習、數據庫等領域。
數學方面的知識只要是機率與統計方面的知識,迴歸、時序、決策樹、貝葉斯等數據挖掘算法都是依賴於這些數學知識的。
電腦的發展讓機器學習發揮出無窮的威力,神經網絡、遺傳算法是兩種倚賴於計算機學習的算法。
數據倉庫、數據集市、數據立方體的存儲技術等數據庫技術的發展,讓數據挖掘能夠處理愈來愈大量的數據。
你若是對數據挖掘感興趣,那麼請努力學習以上提到的知識吧!
 
數據挖掘是高精尖的技術,是改變世界的一種技術,但願咱們能涌現出一批批實實在在的數據挖掘精英,改變咱們的生活,改變咱們的世界!
 
 
 

做者:張傳波php

創新工場創業課堂(敏捷課程)講師算法

軟件研發管理資深顧問數據庫

《火球——UML大戰需求分析》做者網絡

www.umlonline.org 創辦人機器學習

相關文章
相關標籤/搜索