極簡數據分析(下) - 數據挖掘及表達進階

“ 使用上篇講述的常規的數據分析手段,能夠幫助我們快速對數據進行規整和剖析,進而總結出數字反映的客觀事實。我們常提到的數據統計及分析工作,大部分止步於此。然而是否有可能對數據進行更深層次的挖掘,去尋找一些不那麼顯著可見的事實背後隱藏的規律,甚至是一些猜想呢?答案是肯定的,爲了達成該目的,我們需要藉助一系列機器學習的算法,這也是本篇的重點內容之一。

在完成全部分析形成結論後,若要精益求精就無法繞過最終的圖表美化工作,即數據可視化,良好的表達呈現有助於觀衆更好的理解你的觀點。產品需要考慮表現層的用戶體驗,數據報告亦是如此。因此,本文最後的篇幅會留給數據可視化。”

回顧一下數據分析的5個步驟:

1. 明確目標

2. 數據預處理

3. 特徵分析

4. 算法建模

5. 數據表達

上篇(極簡數據分析(上) - 10分鐘掌握關鍵數據分析方法)介紹了前3步,本篇開始進入到最後2個步驟。

04算法建模

不少非技術出身的同學一聽到算法建模、機器學習、大數據、人工智能等概念,就開始頭大,實際上大可不必。本文其實也是定位面向於非技術人員的,因此首先可能需要對相關的技術進行去魅。

什麼是算法?可以理解成算法是計算的方法或技巧,通過合適的算法對原始數據進行加工以得出結論,是我們解決問題的核心思路。

什麼是數據挖掘?顧名思義,是對並非浮於表面的信息進行深度研究,可能是可觀察到的事實背後的規律或原因,也是我們想獲取的知識。

什麼是機器學習?其目的是讓機器可以通過學習,自主去解決問題,而並非執行一段代碼內既定的任務。

而人工智能可能是最後我們追求的美好結果,不論是數據挖掘還是機器學習,都是在實現人工智能過程中的手段,雖然其實離真正的智能還相差甚遠。

所以在數據分析範疇內對相關技術的應用,我們可以描述爲:利用機器學習的相關算法進行數據挖掘,尋找數據事實背後的規律。

一個好消息是,算法在人工智能技術和高級語言經歷了多年發展至今後,很多已經被封裝成了獨立的函數或類,可以直接調用,不少開發框架內也已經集成了大量的庫或包,大大降低了機器學習的技術門檻,也因此讓我們利用相關技術進行數據分析成爲了可能。

機器學習主要分爲監督學習和非監督學習,此外還有強化學習。這裏主要介紹監督學習和非監督學習。兩者的區別主要在於是否有已知的訓練集,即監督學習類似教學,告訴機器一些已經確定的輸入條件(特徵值)和輸出結果(標籤),然後由機器總結規律再運用到新樣本中。而非監督學習類似自學,機器需要自己從全部樣本中總結規律。

在數據分析過程中,根據分析目的和數據特徵的不同,通常會進行3類分析:迴歸分類聚類。在每類分析中還包含了多種模型,接下來我們會介紹其中常用且有代表性的模型和實現方式。

. 線性迴歸

線性迴歸可能是大家平時聽到最多的模型了,其通常被應用在對連續變量的預測中。線性迴歸會嘗試在一些已知的自變量和因變量之間尋找到一種關係,通過擬合出最佳的迴歸線去表達這種關係,進而可以預測在迴歸線上其他點的數據。如根據下面左圖的已知數據,擬合出右圖的直線函數。

在Python中可直接調用sklearn庫中的相關模型實現,簡單的一元線性迴歸實例如下,多元線性迴歸的實現類似,但會有多個自變量,即輸出的斜率值會有多個。

fromsklearn.linear_modelimportLinearRegression

# 導入線性迴歸模塊

model = LinearRegression()

model.fit(xtrain[:,np.newaxis],ytrain)

# 在模型中放入訓練集

print(model.coef_[0],model.intercept_)

# 輸出函數斜率和截距

既然該模型是基於已知數據擬合得出的,就可能存在過擬合或欠擬合的可能,不論哪種都會使模型失去泛化的能力,很難去進行預測。造成問題的最常見原因可能是訓練樣本量太少或者樣本的維度太少。

sklearn庫中也提供了一系列參數用於評價模型擬合水平,例如SSE(和方差)、MSE(均方差)、RMSE(均方根)、R-squre(確定係數)等。其中SSE、MSE和RMSE的邏輯類似,數值越接近0說明效果越好,R-squre取值範圍在[0,1]之間,越接近1說明效果越好。

二. 聚類

聚類是非監督學習的代表,指的是根據樣本間相似的特徵進行分類的過程。聚類中的常用算法有K-Mean算法,是典型的基於距離的聚類算法,常以歐氏距離進行測量(不理解也不重要),更適合形狀比較規則的類簇。而有些聚類效果不規則,帶狹長、拐彎(非凸樣本集),則不適合用K-Mean算法,針對這種情況會使用密度聚類的算法,例如DBSCAN。下圖可看出兩種算法的聚類區別,對於形狀不規則的聚集,DBSACN效果會更好。

但大部分時候我們遇到的聚類情況還是比較規則的,也因此K-Mean仍是更常用的聚類算法。在K-Means算法的邏輯中,要注意2點:

1. 需要事先給定類簇的數量,即聚類羣的個數

2. 需要事先給定類簇初始的中心

在Python中的實現和聚類效果如下。

fromsklearn.clusterimportKMeans

# 導入K-Means模塊

model = KMeans(n_clusters =5)# 指定類簇數量

model.fit(data)

cluster_pre = model.predict(data)

# 構建模型,並預測出樣本的類別cluster_pre

centroid = model.cluster_centers_

# kmeans.cluster_centers_:得到不同簇的中心點

plt.scatter(data[:,0],data[:,1],marker='x',cmap='Dark2',c=cluster_pre,alpha=0.5)

plt.scatter(centroid[:,0],centroid[:,1],c='black')

根據聚類結果,不僅可研究相似羣體的規律,還可以找出與大衆差異非常大的孤立點,這在例如風控行業中的應用非常普遍,孤立點很可能代表着一些刷單或有其他不良行爲的惡意用戶。

三. 分

之所以把分類放在最後,是因爲無論其重要性還是應用範圍可能都是最高最廣的。這是一種利用已知訓練集來對模型進行訓練,不斷優化分類器的過程。分類的算法也非常多,而且還有不少變種或衍生算法。我們只能列舉一些最經典也是最普適的算法,例如樸素貝葉斯、決策樹、隨機森林、SVM(支持向量機)、遺傳算法等。

接下來以非常簡單的KNN算法爲例,介紹分類的實現方式。KNN全稱K-Nearest-Neighbors,其思路簡單描述就是將待判斷的樣本放入已知訓練結果中,觀察樣本和哪個羣體的成員間最接近,就將其歸爲哪類。這次直接利用Python中的測試數據實現,該測試數據爲判斷3種花的類型,以及4個花的特徵(萼片長度、萼片寬度、花瓣長度、花瓣寬度)。

fromsklearnimportneighbors

# 導入KNN模塊

fromsklearnimportdatasets

# 導入測試數據

iris = datasets.load_iris()

model = neighbors.KNeighborsClassifier()

model.fit(iris.data,data['class'])

# 在模型中放入訓練集

data_pre = pd.DataFrame(np.random.rand(5,4)*8)

# 生成隨機待預測數據

data_pre['Class'] = model.predict(data_pre)

# 得到預測結果

data_pre

對隨機數據的判斷結果如下

0123Class

06.7144097.5002507.7133263.069975virginica

15.4850424.4472352.6649167.120735virginica

25.0988566.7298857.7527894.069898virginica

31.5210167.4713410.1628243.440336setosa

44.4214703.8061464.8906500.388381versicolor

05 數據表達

終於來到最後一步,數據表達。數據分析最終要形成具有指導性的結論,結論一定是要給他人觀看講解的,因此良好的表達十分必要。下圖是一張經典的圖表選擇決策圖,參考此圖可以快速根據表達目的選擇合適的圖表進行可視化表達。

表達目的在圖中主要分爲4種:分佈、對比、相關性、構成,並對應了不同的圖表,相信在工作中絕大部分的數據表達需求都已經可以對號入座。雖然圖表並非信息量越大越好,表現形式越酷炫越好,但恰到好處的豐富程度和展現形式還是能更高效地提供更多有價值的信息,也確實比過於簡單的圖表更加專業。因此接下來本文會展示一些包含更多細節和不同形式的圖表並輔以解釋,希望能夠給你提供參考,帶來啓發。

一. 分佈數據可視化

直方圖+密度圖:該組合可以很好的展示數據的整體分佈趨勢,密度圖曲線是對分佈趨勢的擬合,可以調節擬合程度。還可以用線段代表具體樣本,展示絕對分佈情況。

多維度密度圖:通常是2個維度,例如表達地理位置的經緯度。通過該密度圖能反映數據的聚集情況,還可以在密度圖基礎上繪製散點圖來標註出原始數據。看上去是不是很像地理課上學的等高線?

散點圖:針對基礎的散點圖,我們可以在橫軸座標上輔以直方圖或密度圖以反映數據在單個維度上的分佈情況。

甚至還能運用前面講到的線性迴歸,對數據進行迴歸分析,給出擬合結果和置信區間。

散點圖的表達形式也不僅限於散點,還可以用類似蜂巢的六邊形,根據顏色深淺可以看出分佈情況。

散點圖矩陣:在上篇已經有介紹過散點圖矩陣了,利用該矩陣可快速對樣本間的關係進行初判。而在數據表達階段給出的矩陣是已經完成判斷後的結果展示,表達的形式也會更豐富。例如還是利用前面提到的花朵分類的測試數據,分別對3種花在不同特徵維度上進行分析。

二. 分類數據可視化

統計圖:這應該是對分類數據最常見的表達方式,統計圖主要反映的是一些統計值,例如求和、計數、平均數等,用於瞭解數據所代表的業務整體情況,在總結匯報中會經常使用,但無法幫助閱讀者瞭解更多細節。柱狀圖、折線圖等形式都可以反映這類數據,例如下圖反映了一家餐廳每天的平均客單價情況。

散點圖:散點圖可用於反映分類數據內的分佈情況,例如還是該餐廳的經營數據,利用散點圖可以看出客單價的分佈情況,每一個點代表了一個真實訂單。

在該圖的基礎上,還可以再根據特定的某一參數在散點內進行分類,例如下圖對付款的消費者進行了性別區分。

在分析特定類別時,將類別內的子類拆分顯示,視覺表達效果更明確。例如下圖重點觀察週五和週六兩天不同性別消費者的消費金額數據。

箱型圖:又稱作盒須圖,每一個分類是一個箱子,箱型圖在觀察數據分佈和測量統計數據上有重要意義。箱型圖的構成要素較多,信息量豐富,導致初看起來比較麻煩,但確實能反映很多問題。先介紹下箱型圖中的重點要素:

1)中位數(Q2):首先要知道箱型圖中的數據也是從小到大排序的,中位數即二分之一分位數

2)下四分位數(Q1):即數據由小到大排列後,在1/4節點處的數

3)上四分位數(Q3):即數據由小到大排列後,在3/4節點處的數

4)四分位距(IQR):即Q3-Q1的差,在圖中就是箱子的高度

5)上限:是容許範圍內的最大值,通常爲Q3+1.5*IQR

6)下限:是容許範圍內的最小值,通常爲Q1-1.5*IQR

7)內限:即圖中的上限和下限,在內限中的數據是正常值,在內限外的數據可以認爲是異常值(注意上篇提到的,異常值不代表就是錯誤的值)

8)外限:外限通常代表Q3+3*IQR處和Q1-3*IQR處,外限一般不會在圖中畫出,除非需要單獨分析以內外限分隔的數據。處於內外限之間的值被看作是溫和的異常值,處於外限之外的值被看作是極端的異常值

下圖是一個簡單的箱型圖示例。

箱型圖可以直觀的識別數據中的異常值,還可以觀察整體數據集中趨勢、偏態、尾重等重要信息。下圖還是以前面餐廳的經營數據爲例,利用箱型圖既能觀察客單價的分佈情況,還能根據需求展現相關統計值,比散點圖直觀了不少,一些重點信息得到了直接呈現。

箱型圖同樣可以在單個分類內再區分子類,例如我們還是用性別來區分。

在箱型圖的基礎上,還可能衍生出LV圖,或者小提琴圖的變種,以適用於一些更有針對性的場景,這裏就不多介紹了,有興趣的同學可以自己百度。

三. 線性關係數據可視化

在前面已經講解過了通過線性迴歸去尋找變量間的線性關係,現在補充一下同時對不同分類進行線性迴歸並進行對比的方式。仍以上述餐廳經營數據爲例,我們試圖尋找賬單金額和小費之間是否存在線性相關,如果還想同時觀察不同性別消費者的表現差異,可針對不同性別消費者的數據進行迴歸分析。從結果上看,首先賬單金額和小費金額之間是存在正相關的,而性別差異對該線性相關的影響似乎不大。

有沒有更高效的展現方式呢?回想下前面介紹的散點矩陣圖,其實矩陣的思想可以用在很多地方,在這裏自然也是適用的。下圖依然以性別作爲分類,但上下兩行代表了另一個屬性:消費者是否吸菸,每列代表了每一天的數據情況。且不考慮數據和結論是否正確,似乎週六用餐的男性傾向於給更多的小費,不吸菸者尤甚。(可能週六約會的人比較多,通過付更多小費能給另一半留下更好的印象?)

到這裏本文的內容基本講述完了,最後再附一個熱力圖的例子,熱力圖主要用於報告中加強閱讀者對數據變化或聚集情況的感受。例如下圖反映了從1949~1960年間某航班每月的旅客數量,可以得出結論旅客數基本逐年增長,特別在1956年後增長迅速,同時每年的夏季是出行的高峯期。

總結

本篇介紹了數據分析工作的後2步:算法建模數據表達

在算法建模中,可利用一系列的AI算法幫助我們進行迴歸聚類分類的工作,讓我們有能力挖掘數據底層隱藏的價值。而掌握簡單的線性迴歸算法K-Means算法KNN算法,已經能讓你的數據分析結果深入一個層次。

在對數據分析結果的表達中,要根據表達目的選擇合適的展現形式,包括反映分佈情況分類對比情況數據相關性情況構成情況等。圖表本身是工具,沒有絕對的優劣之分,只是在不同表達目的下有不同的合適程度。就如不同的刀具對應不同的食材,砍刀最適合砍骨頭,可並不代表它就完全不能用來切菜。所以我們也要根據實際情況進行選擇,有時候甚至要多次比對挑出最好的展現方式。

文中重點介紹了表達分佈數據的直方圖、密度圖(單維度/多維度)、散點圖(矩陣),表達分類數據的統計圖(柱狀圖/折線圖)、散點圖、箱型圖,以及表達相關性數據的線性相關圖(矩陣)和增強數據變化視覺效果的熱力圖,希望對大家日後的工作有啓發和幫助。

其實寫這篇文章最初的目的是概括數據分析的流程,並介紹這條線上某些具有代表性的點,讓大家有全局的認識,因此不可能通過一篇文章便講解清楚具體如何實操。事實上這裏的每一步都可以單獨寫很多內容。可這些內容,只要你需要,在網上都能查到,比我寫的要專業多了。所以本文更希望是能提供作爲一個系統的價值,幫助你把點串成線。

也許你看完後會覺得在面對一堆數據時仍不知道如何下手,繪製圖表時仍猶豫如何展示,這很正常,因爲數據分析的能力不是靠學習來提升的,而是訓練,相信這個道理大家都懂。

文章、書本或課程都只是幫你導航的工具,爲你指出正確的方向,避免走彎路。

但 路 還 是 得 自 己 走


歡迎關注公衆號:羅老師別這樣

公衆號將持續更新深度學習筆記及個人心得,不輕易更新,但更新一定保證價值,望你和作者共同進步

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章