|
前言 不幸的是,這個案例很可能是數(shù)據(jù)領(lǐng)域的傳奇,然而,它是數(shù)據(jù)挖掘得到實用的經(jīng)典說明。雖然這些數(shù)據(jù)通常用于查看銷售交易,不過一些基本的分析也可以應(yīng)用于其他情況,例如點擊流跟蹤,備件訂購和在線推薦引擎 等。 如果你對Python數(shù)據(jù)科學(xué)世界有一些基本的了解,或許你的第一個想法就是使用scikit-learn完成一個現(xiàn)成的算法。然而,scikit-learn不支持這種算法。不過由Sebastian Raschka開發(fā)的MLxtend庫可以用于提取復(fù)雜數(shù)據(jù)來實現(xiàn)進(jìn)一步的數(shù)據(jù)分析。 本文接下來將演示一個使用此庫分析在線零售數(shù)據(jù)集的示例,并嘗試查找有趣的購買組合。讀完本文您應(yīng)該熟悉將其應(yīng)用于自己的數(shù)據(jù)集的基本方法。 為什么要進(jìn)行關(guān)聯(lián)分析? 在當(dāng)今世界,有許多復(fù)雜的數(shù)據(jù)分析方法(聚類,回歸,神經(jīng)網(wǎng)絡(luò),隨機(jī)森林,SVM等)。這些方法的難點在于它們需要相當(dāng)多的數(shù)據(jù)準(zhǔn)備和功能特性來獲得好的結(jié)果。換句話說,它們可以非常強(qiáng)大,但是需要很多知識才能完成。 數(shù)據(jù)關(guān)聯(lián)分析的數(shù)學(xué)概念非常容易理解,易于向非技術(shù)人員解釋。此外,它是一種無監(jiān)督的學(xué)習(xí)工具,可以查找出隱藏的模式,因此對數(shù)據(jù)準(zhǔn)備和功能特性的要求很低。對于某些數(shù)據(jù)探索案例來說,這是一個很好的開始,并且可以使用其他方法深入挖掘數(shù)據(jù)。 此外,MLxtend中的python代碼對于經(jīng)常接觸scikit-learn和pandas的人來說非常容易理解。綜上所述,我認(rèn)為這是一個非常有用的工具用以熟悉并幫助您解決數(shù)據(jù)分析問題。 一個簡單的說法 - 在技術(shù)上,市場籃子分析只是一個關(guān)聯(lián)分析的應(yīng)用,本文將會互換使用關(guān)聯(lián)分析和市場籃子分析這兩個術(shù)語。 關(guān)聯(lián)分析101 這有幾個術(shù)語對于理解關(guān)聯(lián)分析很重要。這里的內(nèi)容對那些想理解背后數(shù)學(xué)原理及算法細(xì)節(jié)的人來說是一個很好的參考。 關(guān)聯(lián)規(guī)則通常如下:{尿布} - > {啤酒},這代表在同一筆交易中購買尿布的客戶和購買啤酒之間存在很強(qiáng)的關(guān)系。 在上面的例子中,{尿布}是前提,{啤酒}是結(jié)果。前提和后果可以有多個項目。換句話說,{尿布,膠囊} - > {啤酒,芯片}是一個有效的規(guī)則。 支持度用以確定規(guī)則可以用于給定數(shù)據(jù)集的頻繁程度。在許多情況下,您可能希望尋求高的支持度以確保它是一個有用的關(guān)系。但是,在“隱藏”關(guān)系中,則可能會出現(xiàn)低支持度的情況。 置信度是對規(guī)則可靠性的度量。上述例子中的0.5的置信度意味著在購買了尿布和膠囊的情況下,有50%的可能性購買啤酒和芯片。對于產(chǎn)品推薦來說,50%的置信度可能是完全可以接受的,但在醫(yī)療情況下,這還是有點低的。 提升度是兩個獨立規(guī)則下支持度的比率。基本的經(jīng)驗法則是提升度接近1表示規(guī)則完全獨立。提升度大于 1可以指示出有用的規(guī)則模式。 最后一個注意事項與數(shù)據(jù)有關(guān)。此分析要求將交易的所有數(shù)據(jù)包含在1行中,并且項目應(yīng)為一位有效編碼,具體的可以看MLxtend文檔示例: 本文的具體數(shù)據(jù)來自UCI機(jī)器學(xué)習(xí)存儲庫,代表了2010-2011年英國零售商的交易數(shù)據(jù)。這主要代表對批發(fā)商的銷售,所以它與消費者購買模式略有不同,但這仍然是一個有用的案例研究。 代碼 MLxtend可以使用pip安裝,在嘗試執(zhí)行以下代碼之前需要完成MLxtend的安裝。一旦安裝完畢,下面的代碼顯示了如何讓它運行。我已經(jīng)記錄下詳細(xì)的過程。 首先導(dǎo)入pandas和MLxtend并讀取數(shù)據(jù): 開始之前先做一些處理。刪掉一些描述用的空格和沒有發(fā)票編號的行,并刪除信用交易(發(fā)票編號包含C)。 完成之后,我們需要將每個產(chǎn)品進(jìn)行一位有效編碼,將每個項目合并為一個事務(wù)。為了使數(shù)據(jù)集小一些,我只看法國的銷售。然而,在下面的其他代碼中,我將這些結(jié)果與德國的銷售進(jìn)行比較。進(jìn)一步的與其它國家之間比較將是一件有趣的調(diào)查。 以下是前幾列的樣子(注意,我在列中添加了一些數(shù)字來說明這個概念 - 這個例子中的實際數(shù)據(jù)全是0): 數(shù)據(jù)中有很多零,但是我們需要確保將任何正值轉(zhuǎn)換為1,而將小于0的值設(shè)置為0。此步驟將完成數(shù)據(jù)的一位有效編碼,并刪除郵資列(因為收費不是我們希望探討的): 現(xiàn)在數(shù)據(jù)結(jié)構(gòu)正確,我們可以生成支持至少7%的頻繁項目集(使用這個數(shù)字以便我可以得到足夠的實例): 最后一步是生成相應(yīng)的支持度,置信度和提升度規(guī)則。 以上就是所有,用apriori表示頻繁項目,association_rules構(gòu)建規(guī)則。 現(xiàn)在,棘手的部分是弄清楚這告訴我們什么。例如,我們可以看到有很多規(guī)則具有很高的提升度,這意味著它的發(fā)生頻率要高于交易和產(chǎn)品組合數(shù)量的預(yù)期值。我們也可以看到幾個置信度也很高的地方。這部分分析是專業(yè)知識將派上用場的地方,不過我不具備這方面的知識,只是想找?guī)讉€說明性的例子而已。 我們可以使用標(biāo)準(zhǔn)的pandas代碼來過濾數(shù)據(jù)。在這種情況下,尋找一個大提升度(6)和高置信度(.8):
在查看規(guī)則時,似乎綠色和紅色鬧鐘是一起購買的,紅紙杯,餐巾紙和紙板是以總體概率提高的方式一起購買的。 這時,你可能想知道,我們有多少機(jī)會可以通過推薦關(guān)聯(lián)商品來促進(jìn)商品的銷售。例如,我們可以看到,銷售340個綠色鬧鐘,但只有316個紅色鬧鐘,所以也許我們可以通過推薦帶動更多的紅色鬧鐘的銷售?
有趣的是國家的變化會影響購買組合,我們來看看德國有什么流行的組合呢?
似乎除了David Hasselhoff以外,德國人喜歡Plaster和Woodland Animails。 在正規(guī)的項目中,熟悉數(shù)據(jù)的分析師可能會有十幾個不同的問題。我沒有將此分析復(fù)制到其它的國家或客戶組合,但是有了上述的基本pandas代碼,其他分析過程也很容易完成。 總結(jié) 關(guān)聯(lián)分析非常好的一方面是它很容易運行,相對容易解釋。如果您無法實現(xiàn)MLxtend和關(guān)聯(lián)分析,則使用基本Excel分析找到這些模式將非常困難。使用python和MLxtend,分析過程相對簡單,在Python中,您可以訪問python生態(tài)系統(tǒng)中的所有其他可視化技術(shù)和數(shù)據(jù)分析工具。 最后,我建議您查看MLxtend庫的其余部分。如果您在做關(guān)于sci-kit的工作,可以了解如何熟悉MLxtend,以及如何增加數(shù)據(jù)科學(xué)工具包中的一些現(xiàn)有工具。 英文原文:http:///market-basket-analysis.html |
|
|