信賴度與提升度

Python 的 Market Basket Analysis

Isaiah Hull

Visiting Associate Professor of Finance, BI Norwegian Business School

當支持度造成誤導

TID 交易
1 咖啡、牛奶
2 麵包、牛奶、柳橙
3 麵包、牛奶
4 麵包、牛奶、砂糖
5 麵包、果醬、牛奶
... ...

 

  1. 牛奶與麵包經常一起被購買。
    • 支持度:{Milk} $\rightarrow$ {Bread}
  2. 這條規則對行銷不夠有用。
    • 牛奶與麵包本來就很熱門。
Python 的 Market Basket Analysis

信賴度(confidence)

  1. 可用更多指標改進僅看 支持度 的做法。
  2. 加入 信賴度 可得到更完整的觀點。

 

$$\frac{Support(X \& Y)}{Support(X)}$$

Python 的 Market Basket Analysis

如何解讀信賴度

這張圖顯示雜貨店的交易清單。其中一筆包含果醬與麵包。

$$Support(Milk\&Coffee) = 0.20$$

這張圖顯示雜貨店的交易清單。其中一筆包含果醬與麵包。

$$Support(Milk) = 1.00$$

Python 的 Market Basket Analysis

如何解讀信賴度

  $$\frac{Support(Milk\&Coffee)}{Support(Milk)} = \frac{0.20}{1.00} = 0.20$$

  $$\frac{Support(Milk\&Coffee)}{Support(Milk)} = \frac{0.20}{0.80} = 0.25$$

  $$\frac{Support(Milk\&Coffee)}{Support(Milk)} = \frac{0.20}{0.20} = 1.00$$

Python 的 Market Basket Analysis

提升度(lift)

 

  • 提升度提供另一個評估品項關係的指標。
    • 分子:同時含有 X 與 Y 的交易比例。
    • 分母:若 X 與 Y 隨機且獨立指派時的比例。

 

$$\frac{Support(X \& Y)}{Support(X) Support(Y)}$$

Python 的 Market Basket Analysis

資料前處理

from mlxtend.preprocessing import TransactionEncoder
import pandas as pd

# Split library strings into lists
libraries = data['Library'].apply(lambda t: t.split(','))

# Convert to list of lists
libraries = list(libraries)

# One-hot encode books
books = TransactionEncoder().fit(libraries).transform(libraries)

# Convert one-hot encoded data to DataFrame
books = pd.DataFrame(books, columns = encoder.columns_)
Python 的 Market Basket Analysis

計算信賴度與提升度

# Print first five items
print(books.head())
       Hunger           Gatsby
0      False            True
1      False            True
2      False            False
3      False            True
4      False            True

資料集:GoodBooks-10K。

Python 的 Market Basket Analysis

計算信賴度與提升度

# Computing support.
supportHG = np.logical_and(books['Hunger'],books['Gatsby']).mean()
supportH = books['Hunger'].mean()
supportG = books['Gatsby'].mean()
# Compute and print confidence and lift.
confidence = supportHG / supportH
lift = supportHG / (supportH * supportG)
# Print results.
print(supportG, confidence, lift)
(0.30, 0.16, 0.53)
Python 的 Market Basket Analysis

一起來練習吧!

Python 的 Market Basket Analysis

Preparing Video For Download...