<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          5 分鐘掌握 Python 關(guān)聯(lián)規(guī)則分析

          共 2965字,需瀏覽 6分鐘

           ·

          2021-03-12 10:03

          1. 關(guān)聯(lián)規(guī)則

          大家可能聽說過用于宣傳數(shù)據(jù)挖掘的一個案例:啤酒和尿布;據(jù)說是沃爾瑪超市在分析顧客的購買記錄時,發(fā)現(xiàn)許多客戶購買啤酒的同時也會購買嬰兒尿布,于是超市調(diào)整了啤酒和尿布的貨架擺放,讓這兩個品類擺放在一起;結(jié)果這兩個品類的銷量都有明顯的增長;分析原因是很多剛生小孩的男士在購買的啤酒時,會順手帶一些嬰幼兒用品。
          不論這個案例是否是真實的,案例中分析顧客購買記錄的方式就是關(guān)聯(lián)規(guī)則分析法Association Rules。
          關(guān)聯(lián)規(guī)則分析也被稱為購物籃分析,用于分析數(shù)據(jù)集各項之間的關(guān)聯(lián)關(guān)系。

          1.1 基本概念

          • 項集:item的集合,如集合{牛奶、麥片、糖}是一個3項集,可以認為是購買記錄里物品的集合。
          • 頻繁項集:顧名思義就是頻繁出現(xiàn)的item項的集合。如何定義頻繁呢?用比例來判定,關(guān)聯(lián)規(guī)則中采用支持度和置信度兩個概念來計算比例值
          • 支持度:共同出現(xiàn)的項在整體項中的比例。以購買記錄為例子,購買記錄100條,如果商品A和B同時出現(xiàn)50條購買記錄(即同時購買A和B的記錄有50),那邊A和B這個2項集的支持度為50%
          • 置信度:購買A后再購買B的條件概率,根據(jù)貝葉斯公式,可如下表示:
          • 提升度:為了判斷產(chǎn)生規(guī)則的實際價值,即使用規(guī)則后商品出現(xiàn)的次數(shù)是否高于商品單獨出現(xiàn)的評率,提升度和衡量購買X對購買Y的概率的提升作用。如下公式可見,如果X和Y相互獨立那么提升度為1,提升度越大,說明X->Y的關(guān)聯(lián)性越強

          1.2 關(guān)聯(lián)規(guī)則Apriori算法

          關(guān)聯(lián)規(guī)則方法的步驟如下:
          • 發(fā)現(xiàn)頻繁項集
          • 找出關(guān)聯(lián)規(guī)則
          Apriori算法是經(jīng)典的關(guān)聯(lián)規(guī)則算法。Apriori算法的目標(biāo)是找到最大的K項頻繁集。Apriori算法從尋找1項集開始,通過最小支持度閾值進行剪枝,依次尋找2項集,3項集直到?jīng)]有更過項集為止。
          下面是一個案例圖解:
          • 圖中有4個記錄,記錄項有1,2,3,4,5若干
          • 首先先找出1項集對應(yīng)的支持度(C1),可以看出4的支持度低于最小支持閾值,先剪掉(L1)。
          • 從1項集生成2項集,并計算支持度(C2),可以看出(1,5)(1,2)支持度低于最小支持閾值,先剪掉(L2)
          • 從2項集生成3項集,(1,2,3)(1,2,5)(2,3,5)只有(2,3,5)滿足要求
          • 沒有更多的項集了,就定制迭代

          2. mlxtend實戰(zhàn)關(guān)聯(lián)規(guī)則

          關(guān)聯(lián)規(guī)則目前在scikit-learn中并沒有實現(xiàn)。這里介紹另一個python庫mlxtend。

          2.1 安裝

          pip install mlxtend

          2.2 簡單的例子

          • 來看下數(shù)據(jù)集:
            import pandas as pd

            item_list = [['牛奶','面包'],
                ['面包','尿布','啤酒','土豆'],
                ['牛奶','尿布','啤酒','可樂'],
                ['面包','牛奶','尿布','啤酒'],
                ['面包','牛奶','尿布','可樂']]

            item_df = pd.DataFrame(item_list)
          • 數(shù)據(jù)格式處理,傳入模型的數(shù)據(jù)需要滿足bool值的格式
            from mlxtend.preprocessing import TransactionEncode

            te = TransactionEncoder()
            df_tf = te.fit_transform(item_list)
            df = pd.DataFrame(df_tf,columns=te.columns_)

          • 計算頻繁項集
            from mlxtend.frequent_patterns import apriori

            # use_colnames=True表示使用元素名字,默認的False使用列名代表元素, 設(shè)置最小支持度min_support
            frequent_itemsets = apriori(df, min_support=0.05, use_colnames=True)

            frequent_itemsets.sort_values(by='support', ascending=False, inplace=True)

            # 選擇2頻繁項集
            print(frequent_itemsets[frequent_itemsets.itemsets.apply(lambda x: len(x)) == 2])  

          • 計算關(guān)聯(lián)規(guī)則
            from mlxtend.frequent_patterns import association_rules

            # metric可以有很多的度量選項,返回的表列名都可以作為參數(shù)
            association_rule = association_rules(frequent_itemsets,metric='confidence',min_threshold=0.9)

            #關(guān)聯(lián)規(guī)則可以提升度排序
            association_rule.sort_values(by='lift',ascending=False,inplace=True)    
            association_rule
            # 規(guī)則是:antecedents->consequents

          選擇出來關(guān)聯(lián)規(guī)則之后,根據(jù)提升度排序后,可能最高提升度的規(guī)則是在我們常識范圍內(nèi),那這個規(guī)則的價值就不高。所以我們要在產(chǎn)生的規(guī)則中根據(jù)業(yè)務(wù)特點進行篩選,像開篇提到(啤酒->尿布)完全不同的品類之間的關(guān)聯(lián)。
          筆者最近用關(guān)聯(lián)規(guī)則分析用戶的體檢報告記錄,也得出了關(guān)于各個病癥的有意義的關(guān)聯(lián),如并發(fā)癥,不同病癥相互影響等。

          3. 總結(jié)

          本分介紹關(guān)聯(lián)規(guī)則的基本概念和經(jīng)典算法Apriori,以及python的實現(xiàn)庫mlxtend使用。
          總結(jié)如下:
          • 關(guān)聯(lián)規(guī)則用于分析數(shù)據(jù)集各項之間的關(guān)聯(lián)關(guān)系,想一想啤酒和尿布的故事
          • 三個重要概念:支持度,置信度和提升度
          • Apriori通過迭代先找1項集,用支持度過濾項集,逐步找出所有k項集
          • 用置信度或提升度來選擇滿足的要求的規(guī)則
          • mlxtend對數(shù)據(jù)要求轉(zhuǎn)換成bool值才可用


          作者簡介:wedo實驗君, 數(shù)據(jù)分析師;熱愛生活,熱愛寫作


          贊 賞 作 者


          更多閱讀



          谷歌 AI 團隊用 GAN 模型合成異形生物體


          英偉達研究出用較少數(shù)據(jù)集訓(xùn)練GAN的方法


          Python 中圖像標(biāo)題生成的注意力機制實戰(zhàn)

          特別推薦




          點擊下方閱讀原文加入社區(qū)會員

          瀏覽 101
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  水蜜桃91 | 靠逼网站在线观看 | 91操操干| 操笔视频 | 精品国产午夜福利 |