案例-基于Apriori關(guān)聯(lián)規(guī)則的商品購物列表分析

一.背景與挖掘目的

數(shù)據(jù)解釋

本數(shù)據(jù)源來自某零售企業(yè)的購物列表數(shù)據(jù),有大約9000多條數(shù)據(jù)滚婉,數(shù)據(jù)來源有2張表图筹,Goods Orders、Goods Types让腹。
主要包含3個(gè)屬性:id远剩、Goods、Types哨鸭。

id 商品所屬類別的編號(hào)
Goods 具體商品名稱
Goods 具體商品名稱
Types 商品類別

購物列商品.png

購物籃分析是通過發(fā)現(xiàn)顧客在一次購買行為中放入購物籃中不同商品之間的關(guān)聯(lián)民宿,根據(jù)商品之間的關(guān)聯(lián)規(guī)則制定銷售策略。
本案例的探索分析查看數(shù)據(jù)特征以及對(duì)商品熱銷情況像鸡、熱銷結(jié)構(gòu)進(jìn)行分析活鹰,希望發(fā)現(xiàn)規(guī)律并采取有效行動(dòng)哈恰,以增加銷量獲取最大利潤。

挖掘目的

1.構(gòu)建零售商品的Apriori關(guān)聯(lián)規(guī)則模型志群,分析商品之間的關(guān)聯(lián)性着绷。
2.根據(jù)模型給出銷售策略。

1.1 數(shù)據(jù)讀取

import pandas as pd
import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = 'SimHei'
import warnings
warnings.filterwarnings('ignore')

GoodsOrder = pd.read_csv('data/GoodsOrder.csv',encoding='gbk')
GoodsTypes = pd.read_csv('data/GoodsTypes.csv',encoding='gbk')

GoodsOrder_ = GoodsOrder.merge(GoodsTypes,how='left',left_on='Goods',right_on='Goods')

最終讀取的數(shù)據(jù)如下.


image.png

1.2 熱銷產(chǎn)品分析

看一下熱銷產(chǎn)品前十有哪些.并且看看前十產(chǎn)品占訂單量的比例是多少.

best_sale = GoodsOrder_.groupby(['Goods']).agg({'id':'count'}).reset_index().sort_values('id',ascending=False).rename(columns={'id':'salesVolume'})

best_sale_TOP['occupy'] = best_sale_TOP['salesVolume']/best_sale['salesVolume'].sum()
best_sale_TOP = best_sale_TOP.reset_index()
best_sale_TOP['occupy'] = best_sale_TOP['occupy'].map(lambda x:'{:.2%}'.format(x))
image.png

給熱銷產(chǎn)品畫個(gè)條形圖.

# 排名前十的商品條形圖
plt.figure(figsize = (8, 4))
plt.rcParams['font.sans-serif'] = 'SimHei'
sns.barplot(y="Goods", x="salesVolume", data=best_sale_TOP)
image.png

1.3 產(chǎn)品的結(jié)構(gòu)分析

對(duì)每類商品的熱銷程度進(jìn)行分析锌云,有利于商家制定商品在貨架上的擺放策略和位置荠医,以方便顧客的選購。
或者將熱銷商品放在商場深處桑涎,使顧客在購買熱銷商品前經(jīng)過非熱銷商品彬向,增加在非熱銷商品處的停留時(shí)間,促進(jìn)整體銷量攻冷。

#每種Types商品的銷量
sort_link = GoodsOrder_.groupby(['Types']).agg({'id':'count'}).reset_index().sort_values('id',ascending=False).rename(columns={'id':'salesVolume'})
sort_link['occupy'] = sort_link['salesVolume']/sort_link['salesVolume'].sum()
sort_link['percent'] = sort_link['salesVolume']/sort_link['salesVolume'].sum()
sort_link['occupy'] = sort_link['occupy'].map(lambda x:'{:.2%}'.format(x))

結(jié)構(gòu)展示如圖.


image.png

畫個(gè)餅圖,展示銷量占比.

plt.figure(figsize=(5,5))
plt.pie(sort_link['percent'], labels = sort_link['Types'],autopct='%1.2f%%',wedgeprops = {'width' : 0.4})
plt.show()
image.png

從銷量占比情況來看娃胆,非酒精飲料、西點(diǎn)里烦、果蔬三類產(chǎn)品的銷量差距不大胁黑,占總銷量的50%左右州泊。其余商品可能并非銷售的主力軍。

二.建立Apriori模型

2.1 訂單表處理

在進(jìn)行Apriori關(guān)聯(lián)規(guī)則建模之前遥皂,需要處理訂單表渴肉,訂單表的id有重復(fù)項(xiàng)仇祭,同一個(gè)id表示同一個(gè)訂單颈畸。


image.png

也就是說眯娱,假如id=1的訂單里面有["水果","牛奶"徙缴,"面包"]三種商品,在GoodsOrder所呈現(xiàn)的是三條記錄[id=1,goods="水果"],[id=1,goods="牛奶"],[id=1,goods="面包"]。

現(xiàn)在需要做的就是這個(gè)過程的反向潘靖,這三條記錄按照同一個(gè)id蚤蔓,整合成一串商品列。

GoodsOrder_concat = GoodsOrder.groupby(['id'])['Goods'].apply(lambda x:x.str.cat(sep=',')).reset_index()
GoodsOrder_concat = GoodsOrder_concat[['Goods']]

最終得出的數(shù)據(jù)整合類GoodsOrder_concat如下.


image.png

2.2 找出頻繁項(xiàng)集

先將數(shù)據(jù)集處理成模型可以處理的格式.list格式.

dataset_a = GoodsOrder_concat['Goods'].str.split(',').tolist()
dataset_a
image.png

接下來引入算法模型.傳入數(shù)據(jù)集.

from mlxtend.frequent_patterns import apriori, association_rules
from mlxtend.preprocessing import TransactionEncoder
te = TransactionEncoder()
te_ary = te.fit_transform(dataset_a)
df = pd.DataFrame(te_ary, columns=te.columns_)

接下來調(diào)整頻繁項(xiàng)集的支持度,因?yàn)槭状握页龅念l繁項(xiàng)集較少,所以我不斷降低支持度吐辙,從0.2,0.1,到0.02.

frequent_itemsets = apriori(df, min_support=0.02, use_colnames=True)
frequent_itemsets['length'] = frequent_itemsets['itemsets'].apply(lambda x:len(x))#增加一列存儲(chǔ)項(xiàng)集的長度
frequent_itemsets

最終找出的頻繁項(xiàng)集表格如下.


image.png

2.3 找關(guān)聯(lián)規(guī)則

在找關(guān)聯(lián)規(guī)則中,不斷調(diào)整置信度參數(shù)疲扎,從0.9逐漸降低到0.4左右捷雕,大約找出26條關(guān)聯(lián)規(guī)則。

association_rules(frequent_itemsets,metric='confidence',min_threshold=0.35)

26條關(guān)聯(lián)規(guī)則里面壶熏,提升度lift都大于1.2浦译,是合格的。關(guān)聯(lián)規(guī)則的表格如下.


image.png

根據(jù)關(guān)聯(lián)規(guī)則作如下分析帽哑。
(根莖類蔬菜, 其他蔬菜)→(全脂牛奶)妻枕,這個(gè)規(guī)則的支持度約為2.3%粘驰,置信度約為48.9%,說明購買了根莖類蔬菜, 其他蔬菜之后蝌数,然后繼續(xù)購買全脂牛奶的概率為48.9%。這種情況發(fā)生的概率為2.3%饵撑。

(其他蔬菜)→(全脂牛奶),這個(gè)規(guī)則的支持度約為7.48%肄梨,置信度約為38.7%,說明購買了其他蔬菜之后侨赡,然后繼續(xù)購買全脂牛奶的概率為38.7%粱侣。這種情況發(fā)生的概率為7.48%。

(根莖類蔬菜)→(全脂牛奶)油猫,這個(gè)規(guī)則的支持度約為4.89%柠偶,置信度約為44.87%,說明購買了根莖類蔬菜之后毡证,然后繼續(xù)購買全脂牛奶的概率為44.87%蔫仙。這種情況發(fā)生的概率為4.89%。

(根莖類蔬菜)→(其他蔬菜)恤煞,這個(gè)規(guī)則的支持度約為4.74%施籍,置信度約為43.47%,說明購買了根莖類蔬菜之后丑慎,然后繼續(xù)購買其他蔬菜的概率為43.47%苔货。這種情況發(fā)生的概率為4.74%。

2.4 總結(jié)

對(duì)于模型結(jié)果姻灶,從購物者角度進(jìn)行分析:隨著生活質(zhì)量的提高和健康意識(shí)的增加产喉,蔬菜和牛奶均為現(xiàn)代家庭每日飲食必需品敢会。

還可以得出結(jié)論:顧客在購買其他商品時(shí)鸥昏,會(huì)很大概率同時(shí)購買全脂牛奶姐帚。因此,set場在做陳列擺放時(shí)可以把牛奶放在最里面罐旗,讓顧客有足夠多的時(shí)間經(jīng)過上市表格左列商品九秀。

另外,顧客同時(shí)購買根莖類蔬菜痹换、其他蔬菜娇豫、set奶油、豬肉锤躁、黃油系羞、本地蛋類霸琴、多種水果的概率較高,因此可以考慮捆綁銷售澎迎。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末夹供,一起剝皮案震驚了整個(gè)濱河市哮洽,隨后出現(xiàn)的幾起案子弦聂,更是在濱河造成了極大的恐慌氛什,老刑警劉巖枪眉,帶你破解...
    沈念sama閱讀 211,743評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件贸铜,死亡現(xiàn)場離奇詭異树绩,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)渤早,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,296評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門鹊杖,熙熙樓的掌柜王于貴愁眉苦臉地迎上來骂蓖,“玉大人川尖,你說我怎么就攤上這事”环迹” “怎么了馍悟?”我有些...
    開封第一講書人閱讀 157,285評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵锣咒,是天一觀的道長毅整。 經(jīng)常有香客問我,道長悼嫉,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,485評(píng)論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮辛臊,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘伐割。我一直安慰自己隔心,他們只是感情好尚胞,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,581評(píng)論 6 386
  • 文/花漫 我一把揭開白布笼裳。 她就那樣靜靜地躺著躬柬,像睡著了一般。 火紅的嫁衣襯著肌膚如雪允青。 梳的紋絲不亂的頭發(fā)上颠锉,一...
    開封第一講書人閱讀 49,821評(píng)論 1 290
  • 那天皆串,我揣著相機(jī)與錄音眉枕,去河邊找鬼。 笑死谤牡,一個(gè)胖子當(dāng)著我的面吹牛翅萤,可吹牛的內(nèi)容都是我干的腊满。 我是一名探鬼主播培己,決...
    沈念sama閱讀 38,960評(píng)論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼玷室!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起敌蜂,我...
    開封第一講書人閱讀 37,719評(píng)論 0 266
  • 序言:老撾萬榮一對(duì)情侶失蹤章喉,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后快耿,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體囊陡,經(jīng)...
    沈念sama閱讀 44,186評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,516評(píng)論 2 327
  • 正文 我和宋清朗相戀三年掀亥,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了撞反。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,650評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡搪花,死狀恐怖遏片,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情撮竿,我是刑警寧澤吮便,帶...
    沈念sama閱讀 34,329評(píng)論 4 330
  • 正文 年R本政府宣布,位于F島的核電站幢踏,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜咧擂,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,936評(píng)論 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望舅逸。 院中可真熱鬧堡赔,春花似錦灼捂、人聲如沸悉稠。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,757評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至署浩,卻和暖如春筋栋,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背肴颊。 一陣腳步聲響...
    開封第一講書人閱讀 31,991評(píng)論 1 266
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人徒欣。 一個(gè)月前我還...
    沈念sama閱讀 46,370評(píng)論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像粗梭,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子鉴嗤,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,527評(píng)論 2 349

推薦閱讀更多精彩內(nèi)容