數據洞察驅動的行銷策略:以 Python 實踐購物籃分析與產品推薦
在數位行銷時代,數據已成為企業制定策略的核心。本文旨在深入剖析購物籃分析 (Market Basket Analysis) 如何透過 Python 及其機器學習函式庫,從海量的交易數據中萃取有價值的行銷洞察。我們將探討關聯規則學習 (Association Rule Learning) 的核心概念、Python 在數據前處理與模型建構上的關鍵作用,並著重於如何將量化分析結果轉化為具體的行銷決策,涵蓋產品推薦、綑綁銷售、實體店面商品陳列優化乃至新產品開發。透過本教學導向的探討,學生將不僅習得程式實作技巧,更能培養資料導向的思維與批判性思考能力,理解「要分析什麼」與「為什麼要這樣分析」的深層意涵。
1. 購物籃分析的核心概念與行銷價值
1.1 問題的緣起:提升客單價與顧客體驗
在零售與電子商務領域,企業不斷追求兩大核心目標:提升顧客的平均客單價 (Average Order Value, AOV) 與優化整體顧客體驗 (Customer Experience, CX)。這兩者相輔相成,一個正向的購物體驗往往能促使顧客進行更多購買,進而提高客單價。然而,在數以百萬計的交易紀錄中,如何系統性地理解顧客的購買模式,進而主動引導其消費行為,是傳統人工分析難以企及的挑戰。
購物籃分析,正是一種針對此問題而生的數據挖掘技術。它將每一次的交易視為一個「購物籃」,旨在探索這些購物籃中商品之間的潛在關聯性,即顧客經常一起購買的商品組合。透過揭示這些隱藏的模式,企業得以從被動觀察轉為主動介入,以數據支持的方式優化行銷策略。
1.2 關聯規則學習 (Association Rule Learning):發掘隱藏的消費模式
購物籃分析的核心在於「關聯規則學習」。這類規則通常呈現為「如果顧客購買了商品 A,那麼他有多大機率會同時購買商品 B」的形式。要理解這些規則的強度與可靠性,我們需引入三個關鍵指標:
- 支持度 (Support):衡量一個商品組合在所有交易中出現的頻率。高支持度意味著該組合是普遍的。
- $Support(A \cup B) = \frac{\text{同時購買 A 和 B 的交易數}}{\text{總交易數}}$
- 信賴度 (Confidence):衡量當顧客購買了商品 A 時,他同時購買商品 B 的條件機率。
- $Confidence(A \to B) = \frac{\text{同時購買 A 和 B 的交易數}}{\text{購買 A 的交易數}}$
- 提升度 (Lift):衡量商品 A 和商品 B 同時出現的頻率,相對於兩者獨立出現時的頻率比值。
- $Lift(A \to B) = \frac{Confidence(A \to B)}{Support(B)}$
- 決策意涵:
- Lift > 1:表示 A 和 B 之間存在正向關聯,即購買 A 會增加購買 B 的可能性。數值越大,關聯性越強。
- Lift = 1:表示 A 和 B 之間沒有明顯關聯,兩者的購買是獨立事件。
- Lift < 1:表示 A 和 B 之間存在負向關聯,即購買 A 反而降低了購買 B 的可能性。
提升度 (Lift) 在行銷決策中尤其重要,因為它不僅考慮了兩個商品同時出現的頻率,更排除了僅僅因為兩個商品各自熱銷而同時出現的巧合,能夠更精準地識別出真正具有「協同效應」的商品組合。
1.3 行銷應用面向:從推薦到實體陳列
關聯規則學習的成果具備廣泛的行銷應用價值,例如:
- 交叉銷售 (Cross-selling) 與產品推薦引擎:當顧客將商品 A 加入購物車時,系統能立即推薦相關性高的商品 B。
- 綑綁銷售 (Bundling) 與促銷活動設計:將經常同時購買的商品設計成組合套餐,並提供微幅折扣以鼓勵購買。
- 實體店面商品陳列優化:在實體零售空間中,將具有強烈關聯性的商品擺放在相近的貨架區域,以提升顧客發現並同時購買的機率。
- 產品開發與庫存管理:洞察哪些商品經常同時被購買,可啟發開發新的組合包或衍生性商品;同時也能幫助優化庫存,確保相關聯的商品有足夠的庫存量。
2. Python 在行銷數據分析中的角色:以購物籃分析為例
在購物籃分析中,Python 的角色涵蓋了從數據的獲取、清理、轉換到模型建構與結果評估的整個流程。
2.1 資料的準備與清理:從原始數據到分析基石
本專案採用 UCI 的「線上零售 II」數據集,一個真實且龐大的交易資料。然而,原始資料通常不適合直接套用演算法,需要精細的前處理。這一步驟至關重要,它決定了後續分析結果的品質與可靠性,也體現了「要分析什麼」的初步思考。
主要的 Python 實作步驟與其背後的分析邏輯:
- 資料載入與初步篩選 (
fetch_ucirepo,dropna):- 利用
ucimlrepo函式庫直接從 UCI 資料庫獲取數據,簡化了資料獲取流程。 df.dropna(axis=0, subset=['Invoice'], inplace=True):移除發票號碼 (Invoice) 為空的交易紀錄。為什麼? 因為發票號碼是定義單次購物籃的唯一識別碼,若缺失則無法判斷是哪一次交易,對購物籃分析而言是無效數據。
- 利用
- 資料類型轉換與退貨訂單移除 (
astype,str.contains):df['Invoice'] = df['Invoice'].astype('str'):將發票號碼轉換為字串型態,便於後續的字串操作。df = df[~df['Invoice'].str.contains('C')]:移除所有發票號碼中含有字母 ‘C’ 的交易。為什麼? 在此數據集中,以 ‘C’ 開頭的發票號碼代表退貨訂單。我們的目標是分析「購買行為」,而非「退貨行為」,移除這些紀錄能確保分析結果反映真實的購買偏好。這引導學生思考:分析目的如何影響數據清理的策略?
- 數據轉換為 Apriori 演算法所需格式 (
groupby,unstack,applymap):basket = (df[df['Country'] =="France"].groupby(['Invoice', 'Description'])['Quantity'].sum().unstack().reset_index().fillna(0).set_index('Invoice')):- 首先,選擇特定國家 (如 ‘France’) 的交易紀錄,聚焦於單一市場的消費者行為。
groupby(['Invoice', 'Description'])['Quantity'].sum():計算每個發票中每種商品的總購買數量。.unstack():這是關鍵一步。它將Description從行索引轉化為列名,將資料重塑為一個「購物籃-商品」矩陣。每一行代表一個購物籃 (發票),每一列代表一種商品,單元格中的值是該商品在該購物籃中的購買數量。.fillna(0):將未購買的商品數量填補為 0。
def encode_units(x): ... basket_sets = basket.applymap(encode_units):定義一個函數將數量數據二值化 (binary)。為什麼? Apriori 演算法通常處理的是商品是否存在的布林值 (0 或 1),而非具體的購買數量。這簡化了模型複雜度,使其更專注於「商品組合」而非「購買數量」。if 'POSTAGE' in basket_sets.columns: basket_sets.drop('POSTAGE', inplace=True, axis=1):移除名為 ‘POSTAGE’ (郵費) 的欄位。為什麼? 郵費不是一個實體商品,它會存在於幾乎所有的訂單中,若不移除,將會生成許多「A 商品 + 郵費」的無意義高支持度規則,干擾對真實商品關聯性的探索。
2.2 演算法的選擇與應用:Apriori 找出頻繁項集
數據準備就緒後,我們使用 mlxtend 函式庫中的 apriori 演算法。
frequent_itemsets = apriori(basket_sets, min_support=0.07, use_colnames=True):apriori演算法會迭代地找出所有滿足最低支持度 (min_support) 的商品組合,稱為「頻繁項集」。min_support=0.07的意涵:這個參數是設定一個門檻值。我們只關心那些在至少 7% 的交易中同時出現的商品組合。為什麼需要設定? 過低的門檻會產生天文數字般的規則,其中包含大量瑣碎或偶然的關聯;過高的門檻則可能遺漏有價值的、但頻率較低的特殊關聯。這個參數的選擇往往需要業務知識與實驗來調整,體現了數據分析中的「批判性思考」。
2.3 規則的建立與評估:Support, Confidence, Lift 的詮釋
從頻繁項集中,我們進一步生成關聯規則,並利用上述提及的指標來評估其價值。
rules = association_rules(frequent_itemsets, metric="lift", min_threshold=1):association_rules函式從頻繁項集生成所有可能的關聯規則。metric="lift", min_threshold=1:我們要求生成的規則其提升度 (lift) 必須大於等於 1。為什麼? 如前所述,lift > 1才代表前提商品與結果商品之間存在正向關聯,對行銷決策才有實際價值。
這一步是將模型結果轉化為可理解的業務語言的關鍵。學生應當理解,這些數值不僅僅是數字,它們背後代表了顧客真實的購買心理與市場潛力。
3. 從數據結果到策略洞察:決策的依據與詮釋
當我們獲得關聯規則列表後,最重要的工作是將這些量化結果轉化為可行的行銷洞察與策略。這需要結合業務經驗與對數據的深刻理解。
3.1 範例規則的解讀:以「鬧鐘」與「兒童餐具」為例
讓我們分析教材中提供的幾個高價值規則:
| 顧客購買了 (A) | 也可能購買 (B) | 關聯強度 (Lift) |
|---|---|---|
| {ALARM CLOCK BAKELIKE GREEN} | {ALARM CLOCK BAKELIKE RED} | 23.9 |
| {ALARM CLOCK BAKELIKE RED} | {ALARM CLOCK BAKELIKE GREEN} | 23.9 |
| {CHILDRENS CUTLERY DOLLY GIRL} | {CHILDRENS CUTLERY SPACEBOY} | 14.3 |
| {CHILDRENS CUTLERY SPACEBOY} | {CHILDRENS CUTLERY DOLLY GIRL} | 14.3 |
| {PLASTERS IN TIN CIRCUS PARADE} | {PLASTERS IN TIN WOODLAND ANIMALS} | 11.2 |
以第一條規則為例,Lift 值高達 23.9,這是一個極其強烈的正向關聯。這意味著:
- 當顧客購買了「綠色復古鬧鐘」後,他同時購買「紅色復古鬧鐘」的可能性,遠遠高於隨機購買「紅色復古鬧鐘」的可能性 23.9 倍。
- 這不是巧合,而是真實的消費行為模式。這也暗示了這兩種顏色款式可能被視為「收藏品」或「成對」的禮物,顧客有集齊或一次性購買多個相似品的需求。
3.2 商業洞察的轉化:具體行銷策略的制定
基於上述範例規則,我們可以推導出以下具體且具可操作性的行銷策略:
- 產品推薦系統的精進:
- 策略:當顧客將
ALARM CLOCK BAKELIKE GREEN加入購物車時,系統應自動在結帳頁面或商品詳情頁面推薦ALARM CLOCK BAKELIKE RED。 - 決策意涵:這種推薦是基於數據洞察的「情境式推薦」,而非盲目推銷熱銷品。它能更精準地貼合顧客當前的購物意圖,顯著提升交叉銷售的成功率,增加單次交易的價值。
- 策略:當顧客將
- 綑綁銷售與促銷活動設計:
- 策略:針對
CHILDRENS CUTLERY DOLLY GIRL和CHILDRENS CUTLERY SPACEBOY這類強關聯商品,可以設計成「兒童餐具雙人組」或「兄妹 / 姊弟餐具套組」,並提供微小折扣。 - 決策意涵:利用綑綁銷售不僅能提升客單價,還能為顧客提供方便,增加商品的感知價值。例如,考慮到「Dolly Girl」和「Spaceboy」可能代表不同性別或主題,組合包能滿足家庭一次性購買不同款式餐具的需求。
- 策略:針對
- 實體店面商品陳列優化:
- 策略:在實體店面中,將
PLASTERS IN TIN CIRCUS PARADE和PLASTERS IN TIN WOODLAND ANIMALS擺放在相鄰的貨架或同一展示區域。 - 決策意涵:這種基於數據的貨架佈局,能夠巧妙地引導顧客的視線與購買行為,增加偶然發現並同時購買的機率,優化購物動線與購物體驗。
- 策略:在實體店面中,將
- 新產品開發的啟示:
- 策略:如果某兩種商品 A 和 B 經常同時被購買,企業可以考慮將其開發為一個預先組合的「A+B 組合包」,甚至探索基於這兩種商品概念的衍生性產品。
- 決策意涵:這將零售商的思維從單純「賣產品」提升到「經營顧客生活方式」的高度。透過理解顧客如何搭配商品,企業能預見市場需求,創新產品線,滿足顧客更深層次的生活需求,例如送禮、主題收藏等。
4. 培養資料導向思維與批判性思考
本案例不僅是 Python 程式碼的實踐,更是培養「資料導向思維」與「批判性思考能力」的絕佳場景。
4.1 「要分析什麼」與「為什麼這樣分析」
學習過程中應當進一步想想看:
- 「我們要分析什麼?」:我們真正想解決的業務問題是什麼?是提升客單價?優化推薦?還是瞭解顧客品味?明確的目標引導了數據選擇和分析方法。
- 「為什麼要這樣分析?」:每一個數據前處理步驟(例如移除退貨、二值化)、每一個參數的設定(
min_support、min_threshold)背後都有其統計或業務邏輯。理解這些「為什麼」,才能避免盲目套用工具,確保分析結果的有效性和實用性。例如,如果目標是識別捆綁銷售機會,那麼高支持度和高信賴度的規則會更有用;如果目標是發現新奇的、但潛力巨大的搭配,則可能需要適度放寬支持度門檻,並結合業務知識判斷。
4.2 參數選擇的影響:min_support, min_threshold
選擇合適的 min_support 和 min_threshold 是關聯規則分析中的藝術。
- 過低的
min_support可能會產生大量瑣碎且意義不大的規則,增加分析師的負擔。 - 過高的
min_support則可能錯失頻率較低但具有潛在價值的利基市場關聯。 min_threshold選擇不當會導致篩選出的規則缺乏實際應用價值。
透過實驗不同的參數組合,觀察結果的變化,並結合業務情境來判斷哪些規則是真正「有意義」的。這正是批判性思考的體現:不滿足於程式跑出的結果,而是質疑其背後的假設與潛在偏誤。
4.3 洞察的局限性與策略調整
關聯規則分析揭示的是「相關性」,而非「因果關係」。即使「綠色鬧鐘」與「紅色鬧鐘」同時出現的提升度很高,我們也不能斷言購買綠色鬧鐘「導致」了紅色鬧鐘的購買。行銷策略的制定應當是數據洞察的起點,而非終點。
- 後續驗證:建議通過 A/B 測試等方式,實際驗證基於關聯規則提出的策略效果。例如,真的在推薦系統中加入「紅色鬧鐘」的推薦,並觀察轉換率、客單價等指標的變化。
- 動態調整:消費行為是動態變化的,關聯規則也需要定期更新。市場趨勢、季節性因素、促銷活動等都可能影響商品之間的關聯性。因此,數據分析應是一個持續循環的過程。
結論:Python 賦能的數位行銷策略高度
購物籃分析將看似無序的交易數據轉化為清晰可辨的消費模式,為數位行銷策略的制定提供了堅實的數據基礎。從資料整理、探索性分析到模型輔助決策,Python 貫穿了整個分析流程,使得複雜的關聯規則學習變得高效且易於實踐。
透過本案例,不僅能掌握了 Python 實作購物籃分析的技能,更重要的是,培養如何從數據中提煉商業洞察、如何連結分析結果與行銷決策、以及如何以批判性眼光審視數據的綜合能力。這種「分析思維」與「行銷決策連結」的能力,正是未來數據驅動型行銷專業人才所不可或缺的核心素養。最終,數據分析將零售商從僅關注「賣產品」的傳統思維,提升到洞察「顧客生活方式」並主動「經營顧客關係」的策略新高度。(本文資料來源為周老師的教學教材,由AI輔助生成內容)
參考資料
周進華 (2025). 《購物籃分析與產品推薦》. 逢甲大學行銷學系. (本文章主要參考資料)