「市場區隔與產品定位分析(PCA)」詳解

本案例將帶領我們學習一種非常強大的進階分析技術——降維 (Dimensionality Reduction)。當我們的資料特徵(欄位)過多時,要找出關鍵影響因素並不容易。主成分分析 (PCA) 能幫助我們從眾多相關的變數中,萃取出最核心的、最具代表性的「主成分」,以簡化問題並洞察其根本結構。

1. 環境設定:中文字型

核心概念: matplotlibseaborn 套件預設並未包含中文字型,若直接繪圖,圖表中的中文(如標題、座標軸標籤)將會顯示為無法辨識的方塊亂碼(暱稱為豆腐)。因此,繪製中文圖表前的第一步,就是手動安裝並設定字型。

本案例應用重點:

  • !wget ...: 我們在 Colab 中使用 wget 這個指令,從網路上下載一個開源的思源黑體字型檔 (.otf 檔),並將其存放在系統的字型路徑中。
  • import matplotlib.font_manager as fm: 引入字型管理器,用來讀取我們剛下載的字型檔。
  • plt.rcParams['font.family'] = ...: 這是最關鍵的一步,透過 rcParams (runtime configuration parameters) 這個設定,我們明確地告知 matplotlib:「接下來所有的圖表,請一律使用我們剛剛指定的那個中文字型來繪製。」

2. 載入數據:

  • files.upload(): 執行這行程式碼時,Colab 會在您的瀏覽器中跳出一個檔案上傳的對話視窗,讓您可以從本機電腦選擇要上傳的檔案
  • uploaded = ...: 當您選擇檔案並完成上傳後,files.upload() 會回傳一個 Python 字典 (dictionary),裡面包含了您上傳的檔案資訊(檔名作為 key,檔案內容作為 value)。這個字典會被存放在 uploaded 這個變數中。
  • try: ... except Exception as e: ...:這是一個錯誤處理的結構。
    • try:: 程式會嘗試執行 try 區塊內的所有程式碼。
    • except Exception as e:: 如果在 try 的過程中,發生任何錯誤(例如,上傳的檔案不是 CSV 格式、檔案已損毀等),程式不會因此崩潰,而是會跳到 except 區塊,執行裡面的程式碼來處理這個例外狀況。
  • file_name = next(iter(uploaded)):因為 uploaded 是一個字典,我們需要從中取出檔名。
    • iter(uploaded) 會建立一個字典鍵(也就是檔名)的迭代器。
    • next(...) 則會從這個迭代器中取出第一個項目。由於我們一次只上傳一個檔案,所以這樣就能成功取得該檔案的檔名。
如果使用本地端的編輯器執行Python腳本(例如Spyder,VSCode),只要設定好工作目錄,就可以直接使用pandas read_csv() 方法載入數據集。upload()是用在當你使用colab環境時。

3. Pandas – 資料的準備與索引設定

核心概念: 在進行 PCA 分析前,我們需要將資料整理成適合模型讀取的格式。

本案例應用重點:

  • df.set_index('Brand'): 我們將 Brand (品牌) 欄位設定為 DataFrame 的索引。這樣做的好處是,Brand 欄位不會被當成數值特徵參與後續的數學運算,它只作為每一列的標籤存在,方便我們最後在視覺化圖表上標示出各個品牌的位置。

4. Scikit-learn – 資料標準化 (Standardization)

核心概念: PCA 對資料的尺度非常敏感。與分群演算法一樣,在執行 PCA 之前,必須對資料進行標準化,以消除不同特徵因單位不同所造成的影響,確保所有特徵都在同一個基準上進行比較。

本案例應用重點:

  • StandardScaler(): 初始化標準化轉換器。
  • .fit_transform(): 對我們選定的所有數值特徵(價格、品質、創新分數等)進行標準化處理,得到一個全新的、標準化後的數據陣列。

5. Scikit-learn – 執行主成分分析 (PCA)

核心概念: PCA 是一種數學方法,它能將原始的多個特徵,線性組合成少數幾個全新的、彼此不相關的「主成分」(Principal Components),並最大程度地保留原始資料的變異性。

本案例應用重點:

  • from sklearn.decomposition import PCA: 從 scikit-learn 中匯入 PCA 模型。
  • PCA(n_components=2): 初始化 PCA 模型,並透過 n_components=2 這個重要參數,指定我們希望將原始的多個特徵降維成兩個主成分。
  • .fit_transform(): 將標準化後的資料投入 PCA 模型,執行降維。函式會回傳一個新的陣列,其中每一列代表一個品牌,而兩個欄位則分別是該品牌在「第一主成分」與「第二主成分」上的得分。

6. Matplotlib – 產品知覺圖 (Perceptual Map) 視覺化(分析產品定位)

核心概念: 產品知覺圖是 PCA 分析在行銷領域最經典的應用。它將降維後的結果繪製在一個二維平面上,讓我們能直觀地看出各品牌在消費者心目中的相對位置。

本案例應用重點:

  • plt.scatter(): 我們使用散佈圖,將 X 軸設為「第一主成分得分」,Y 軸設為「第二主成分得分」,每一個點就代表一個品牌。
  • 是在每一個代表品牌的散佈旁邊,標示出該品牌的名稱
    • plt.text(...) :在 matplotlib 繪圖中,用來在圖表的特定座標位置上,加上文字註解
    • x=df_pca.PC1[i]+0.05:設定文字標籤的 X 座標。程式會先取得第 i 個品牌在第一主成分 (PC1) 上的分數(也就是該點的 X 座標),然後加上一個微小的位移量 0.05,目的是讓文字稍微偏離點的右側,避免文字直接蓋在點上。
    • y=df_pca.PC2[i]+0.05:設定文字標籤的 Y 座標。同樣地,程式會取得第 i 個品牌在第二主成分 (PC2) 上的分數(Y 座標),並加上 0.05,讓文字稍微偏離點的上方。
    • s=df_pca.index[i]s 代表 string,也就是要顯示的文字內容。df_pca.index[i] 會取得第 i 個品牌的索引名稱(也就是我們一開始設定的 Brand 名稱)。
    • fontdict=dict(color='black', size=12)fontdict 是一個用來設定字型樣式的字典。這裡我們設定了文字的 color (顏色) 為黑色,size (大小) 為 12。
    • fontproperties=font_prop:這個參數用來指定顯示文字所使用的字型。font_prop 是我們在程式碼開頭預先設定好的中文字型屬性。加上這個參數,才能確保圖表上的中文品牌名稱能夠正常顯示,而不會變成亂碼。

Perceptual Map(知覺圖)是什麼? 它是一種行銷分析工具,用來視覺化呈現消費者如何感知不同品牌、產品或服務之間的相對位置。它幫助行銷人員理解市場上競爭者的定位、顧客對品牌的認知,以及找出可能的市場空缺。通常是一張2D平面圖,有X軸和Y軸,各代表一個消費者關心的產品屬性或形容詞維度(如「價格高低」「品質好壞」)。每個品牌或產品會根據調查結果被標示在圖上某個位置,代表它在這兩個維度上的相對感知。

7. PCA 結果解讀:解釋變異與主成分負荷

核心概念: 降維後,我們需要透過觀察 “主成分負荷 (Loadings)” 來理解這兩個新的「主成分」分別代表什麼意義。

本案例應用重點:

  • pca.components_: 這是解讀主成分意義的關鍵。它儲存了每一個原始特徵對於構成新主成分的「貢獻度」或「權重」,也稱為主成分負荷 (Component Loadings)。透過觀察這些負荷值,我們可以為新的主成分命名(例如:高價格、高品質、高創新負荷 -> 或許可命名為「專業性能維度」) 。
  • pca.explained_variance_ratio_: 這是 PCA 模型的一個重要屬性,它會告訴我們每一個主成分分別「解釋」了原始資料多少百分比的變異(資訊量)。例如,[0.75, 0.15] 代表第一主成分解釋了 75% 的資訊,第二主成分解釋了 15%。
  • loadings = pca.components_.T * np.sqrt(pca.explained_variance_) :計算並縮放主成分的負荷量 (Loadings)。
    • pca.components_:這本身儲存了主成分的「方向」或「權重」。它告訴我們,每一個原始特徵(如’價格’、’品質’)是如何組合 C 成新的主成分軸線的。
    • .T:這是轉置 (Transpose) 的意思。它將 pca.components_ 的行和列對調,使其結構變為每一列 (row) 代表一個原始特徵,方便後續的計算。
    • pca.explained_variance_:這代表每一個主成分所能「解釋」的原始資料變異量。您可以將其理解為該主成分的重要性或影響力。
    • np.sqrt(...)np.sqrt() 是計算平方根。對變異量取平方根,得到的就是該主成分的標準差。這可以被視為該主成分軸線的「尺度」。
    • * (相乘):最後,程式將代表「方向」的 pca.components_.T 與代表「尺度」的 np.sqrt(pca.explained_variance_) 相乘。
這行程式碼的物理意義,就像是將一個只有方向的單位向量,乘上一個代表其重要性的長度

總結來說,這個案例的學習路徑是:

準備資料 -> 標準化 -> 執行 PCA 降維 -> 繪製產品定位圖 -> 解讀主成分

「顧客分群」詳解

本案例將帶領我們進入「非監督式學習 (Unsupervised Learning)」的領域。與之前的預測模型不同,這次我們的資料沒有「正確答案」(如 Churn 欄位)。我們的目標是讓機器自動從數據中找出潛在的結構與群體,這個過程稱為分群 (Clustering)

1. 環境設定:中文字型

核心概念: matplotlibseaborn 套件預設並未包含中文字型,若直接繪圖,圖表中的中文(如標題、座標軸標籤)將會顯示為無法辨識的方塊亂碼(暱稱為豆腐)。因此,繪製中文圖表前的第一步,就是手動安裝並設定字型。

本案例應用重點:

  • !wget ...: 我們在 Colab 中使用 wget 這個指令,從網路上下載一個開源的思源黑體字型檔 (.otf 檔),並將其存放在系統的字型路徑中。
  • import matplotlib.font_manager as fm: 引入字型管理器,用來讀取我們剛下載的字型檔。
  • plt.rcParams['font.family'] = ...: 這是最關鍵的一步,透過 rcParams (runtime configuration parameters) 這個設定,我們明確地告知 matplotlib:「接下來所有的圖表,請一律使用我們剛剛指定的那個中文字型來繪製。」

2. 載入數據

  • files.upload(): 執行這行程式碼時,Colab 會在您的瀏覽器中跳出一個檔案上傳的對話視窗,讓您可以從本機電腦選擇要上傳的檔案
  • uploaded = ...: 當您選擇檔案並完成上傳後,files.upload() 會回傳一個 Python 字典 (dictionary),裡面包含了您上傳的檔案資訊(檔名作為 key,檔案內容作為 value)。這個字典會被存放在 uploaded 這個變數中。
  • try: ... except Exception as e: ...:這是一個錯誤處理的結構。
    • try:: 程式會嘗試執行 try 區塊內的所有程式碼。
    • except Exception as e:: 如果在 try 的過程中,發生任何錯誤(例如,上傳的檔案不是 CSV 格式、檔案已損毀等),程式不會因此崩潰,而是會跳到 except 區塊,執行裡面的程式碼來處理這個例外狀況。
  • file_name = next(iter(uploaded)):因為 uploaded 是一個字典,我們需要從中取出檔名。
    • iter(uploaded) 會建立一個字典鍵(也就是檔名)的迭代器。
    • next(...) 則會從這個迭代器中取出第一個項目。由於我們一次只上傳一個檔案,所以這樣就能成功取得該檔案的檔名。
如果使用本地端的編輯器執行Python腳本(例如Spyder,VSCode),只要設定好工作目錄,就可以直接使用pandas read_csv() 方法載入數據集。upload()是用在當你使用colab環境時。

3. Scikit-learn – 資料標準化 (Standardization)

核心概念: K-Means 演算法是透過計算「距離」來進行分群的。如果我們的特徵單位或尺度差異過大(例如「年收入」的數值遠大於「消費分數」),那麼尺度較大的特徵將會主導整個分群過程,導致結果失準。因此,在進行分群前,我們必須先將所有特徵「標準化」,讓它們處於同一個比較基準上。

本案例應用重點:

  • from sklearn.preprocessing import StandardScaler: 從 scikit-learn 中匯入標準化工具。
  • StandardScaler(): 初始化一個標準化轉換器。
  • .fit_transform(): 這是標準化的核心步驟。它會自動計算資料的平均值與標準差,然後對資料進行轉換,讓轉換後的資料平均值為 0,標準差為 1。

4. Scikit-learn – 使用 K-Means 演算法進行分群

核心概念: K-Means 是最經典的分群演算法之一。一旦我們決定了 k 值,就可以用它來訓練模型並找出分群結果。

本案例應用重點:

  • from sklearn.cluster import KMeans: 從 scikit-learn 中匯入 K-Means 模型。
  • KMeans(n_clusters=5, ...): 初始化 K-Means 模型,其中最重要的參數 n_clusters 就是我們直接指定(本案例為5),會是透過手肘法 (elbow) 決定的最佳分群數。
  • .fit_predict(): 這個方法會一次性完成兩件事:首先,它會根據資料訓練模型,找出 5 個最佳的群體中心點 (fit);接著,它會為資料中的每一個顧客,分配一個所屬的群組編號(0, 1, 2, 3, 或 4),並回傳這個結果 (predict)。
決定分群數 (k值) ,除了主觀設定一個值之外,也可以利用 Elbow方法,請看本文最後說明。

5. Matplotlib – 分群結果的視覺化

核心概念: 視覺化是驗證與解讀分群結果最直觀的方式。

本案例應用重點:

  • 使用 seaborn 函式庫來繪製一個進階且美觀的彩色散點圖,目的是將分群結果視覺化。
    • sns.scatterplot()snsseaborn 函式庫的通用縮寫。scatterplot 是專門用來繪製散點圖的函式。
    • data=df:告訴函式「請從我們整理好的 df 這張資料表來抓取數據。」
    • x='Annual Income (k$)':設定圖表的 X 軸(水平軸)要對應到 df 資料表中,名為「Annual Income (k$)」的那個欄位。
    • y='Spending Score (1-100)':設定圖表的 Y 軸(垂直軸)要對應到名為「Spending Score (1-100)」的那個欄位。
    • hue='Cluster':這是繪製分群圖的最關鍵參數。hue 的意思是「色調」。這個參數會指示 seaborn 根據 Cluster 欄位中的數值(例如 0, 1, 2, 3, 4)來為每一個點上不同的顏色。這使得我們能夠一眼就看出不同群體的分佈位置。
    • palette='viridis'palette 是調色盤的意思。這個參數用來設定 hue 上色時的顏色主題。'viridis' 是一個專業且美觀的漸層色盤。
    • s=100s 代表 size,用來設定散點圖上每個點的大小。
    • alpha=0.8:設定每個點的透明度。0.8 代表 80% 的不透明度,當點重疊時,顏色會加深,有助於觀察資料的密度。
    • edgecolor='k':設定每個點的邊框顏色。'k' 是黑色 (black) 的縮寫,為點加上黑色邊框可以讓視覺效果更清晰。
  • kmeans.cluster_centers_: 這是 K-Means 模型訓練完後,用來儲存各個群體中心點座標的屬性。我們會再用一次 plt.scatter(),將這些中心點以不同的樣式(如紅色的星號)標示在地圖上。
    • plt.scatter():呼叫 scatter 函式,代表我們要在同一張圖上,再畫一層新的散佈圖。
    • centers[:, 0]centers[:, 1]centers 是一個儲存了所有群組中心點座標的陣列(Array)。centers[:, 0] 是一種陣列切片 (slicing) 的語法,意思是「取出所有列的第 0 個欄位」,也就是所有中心點的 X 座標。
    • 同理,centers[:, 1] 就是取出所有中心點的 Y 座標。
    • c='red'c 代表 color。將這些中心點的顏色設定為紅色,使其在圖上非常顯眼。
    • s=250s 代表 size。將中心點的大小設定為 250,比一般的資料點大很多,以凸顯其重要性。
    • alpha=0.9:設定點的透明度為 90%(接近不透明),讓中心點的顏色更飽和。
    • marker='X'marker 代表標記樣式。將中心點的形狀設定為 ‘X’,以區別於代表個別顧客的圓點。
    • label='群組中心':為這些紅色的 ‘X’ 標記設定一個圖例名稱,叫做「群組中心」。當我們稍後呼叫 plt.legend() 時,圖例上就會顯示「X 群組中心」的說明。

手肘法 (The Elbow Method)

核心概念: 在使用 K-Means 之前,我們需要先決定到底要將顧客分成幾群 (k 值)。「手肘法」是一種常用的、透過視覺化來輔助判斷最佳 k 值的方法。

重點說明:

  • for k in range(1, 11):: 使用一個 for 迴圈,來依序測試將顧客分為 1 群、2 群、… 直到 10 群的各種情況。
  • kmeans.inertia_: inertia 是 K-Means 模型的一個屬性,它代表了「群內點到其中心點的距離平方和」。這個值越小,代表分群效果越緊密。也稱為WCSS(within-cluster sum of squares)組內評分和。
  • wcss.append(kmeans.inertia_): 在迴圈中,將每種 k 值算出來的 inertia_ 存入一個名為 wcss 的列表中,以便後續繪製「手肘圖」。
  • 以下是一段程式碼範例:
# 假設 X_scaled 是已經標準化後的資料
# X_scaled = scaler.fit_transform(df[['Annual Income (k$)', 'Spending Score (1-100)']])

wcss = [] # Within-Cluster Sum of Squares, 用來存放每個 k 值的 inertia_

# 測試 k 從 1 到 10 的情況
for k in range(1, 11):
    kmeans = KMeans(n_clusters=k, init='k-means++', random_state=42)
    kmeans.fit(X_scaled)
    wcss.append(kmeans.inertia_)

# 繪製手肘圖
plt.figure(figsize=(10, 6))
plt.plot(range(1, 11), wcss, marker='o', linestyle='--')
plt.title('手肘法 (The Elbow Method)')
plt.xlabel('分群數量 (k)')
plt.ylabel('WCSS (群內平方和)')
plt.xticks(range(1, 11))
plt.grid(True)
plt.show()

總結來說,這個案例的學習路徑是:

資料標準化 -> 直接指定K值,或用手肘法找出最佳 K 值 -> 訓練 K-Means 模型 -> 視覺化分群結果

「客戶流失預測模型」詳解

本案例將帶領我們進入「分類 (Classification)」的世界,這是機器學習中另一大核心任務。我們將學習如何建立一個模型,來預測一個類別型結果——顧客「是」或「否」會流失。課程的重點在於分類模型獨有的資料前處理技巧,以及如何評估模型的預測成效。

1. 環境設定:中文字型

核心概念: matplotlibseaborn 套件預設並未包含中文字型,若直接繪圖,圖表中的中文(如標題、座標軸標籤)將會顯示為無法辨識的方塊亂碼(暱稱為豆腐)。因此,繪製中文圖表前的第一步,就是手動安裝並設定字型。

本案例應用重點:

  • !wget ...: 我們在 Colab 中使用 wget 這個指令,從網路上下載一個開源的思源黑體字型檔 (.otf 檔),並將其存放在系統的字型路徑中。
  • import matplotlib.font_manager as fm: 引入字型管理器,用來讀取我們剛下載的字型檔。
  • plt.rcParams['font.family'] = ...: 這是最關鍵的一步,透過 rcParams (runtime configuration parameters) 這個設定,我們明確地告知 matplotlib:「接下來所有的圖表,請一律使用我們剛剛指定的那個中文字型來繪製。」

2. 載入數據

  • files.upload(): 執行這行程式碼時,Colab 會在您的瀏覽器中跳出一個檔案上傳的對話視窗,讓您可以從本機電腦選擇要上傳的檔案
  • uploaded = ...: 當您選擇檔案並完成上傳後,files.upload() 會回傳一個 Python 字典 (dictionary),裡面包含了您上傳的檔案資訊(檔名作為 key,檔案內容作為 value)。這個字典會被存放在 uploaded 這個變數中。
  • try: ... except Exception as e: ...:這是一個錯誤處理的結構。
    • try:: 程式會嘗試執行 try 區塊內的所有程式碼。
    • except Exception as e:: 如果在 try 的過程中,發生任何錯誤(例如,上傳的檔案不是 CSV 格式、檔案已損毀等),程式不會因此崩潰,而是會跳到 except 區塊,執行裡面的程式碼來處理這個例外狀況。
  • file_name = next(iter(uploaded)):因為 uploaded 是一個字典,我們需要從中取出檔名。
    • iter(uploaded) 會建立一個字典鍵(也就是檔名)的迭代器。
    • next(...) 則會從這個迭代器中取出第一個項目。由於我們一次只上傳一個檔案,所以這樣就能成功取得該檔案的檔名。
如果使用本地端的編輯器執行Python腳本(例如Spyder,VSCode),只要設定好工作目錄,就可以直接使用pandas read_csv() 方法載入數據集。upload()是用在當你使用colab環境時。

3. Pandas – 分類模型的預處理 (Preprocessing)

核心概念: 機器學習模型只能理解數字,無法直接處理文字類型的類別資料(例如 Gender 欄位的 ‘Male’/’Female’)。因此,在訓練模型前,我們必須將這些文字轉換為數值格式。

本案例應用重點:

  • le.fit_transform(df_processed['Churn']) :將文字類型的目標變數轉換為數值
    • LabelEncoder: 這是 scikit-learn 函式庫中的一個工具,中文稱為「標籤編碼器」。它的唯一功能,就是將文字標籤(例如 ‘Yes’, ‘No’ 或 ‘蘋果’, ‘香蕉’)轉換成數字編碼(例如 0, 1, 2)。
    • le = ...: 這行程式碼的作用是建立一個 LabelEncoder 的實例,您可以想像成我們準備好了一台「標籤編碼機」,並將它命名為 le
    • 整個轉換的核心做了兩件事情:fit (學習) 和 transform (轉換)。
    • fit (學習):
      • fit_transform 會先掃描 df_processed['Churn'] 這個欄位,找出裡面所有不重複的文字標籤。在這個案例中,它會找到 'No''Yes' 這兩種。
      • 接著,它會在內部建立一個對應的規則,通常是按照字母順序來編碼,例如:‘No’ -> 0, ‘Yes’ -> 1。這個過程就是 fit,代表編碼機已經「學會」了轉換的規則。
    • transform (轉換):
      • 學會規則後,編碼機會再次遍歷 Churn 欄位中的每一個值,並根據剛剛學會的規則,將所有的 'No' 都換成 0,所有的 'Yes' 都換成 1
  • pd.get_dummies(): 這是本案例最關鍵的資料前處理步驟,稱為 One-Hot Encoding。它會自動將所有文字類型的欄位(如 Gender, Contract, HasSupportTicket)轉換成多個 0 和 1 的新欄位,讓機器學習模型能夠理解這些類別資訊。
    • drop_first=Truepd.get_dummies() 函式中一個非常重要的參數,它的主要目的是為了避免「多重共線性」(Multicollinearity),也常被稱為虛擬變數陷阱 (Dummy Variable Trap)。用一個簡單的例子來解釋:假設我們有一個 Gender 欄位,裡面只有 ‘Male’ 和 ‘Female’ 兩種值。
    • 如果「不使用」drop_first=True
      • pd.get_dummies() 會產生兩個新的欄位:Gender_MaleGender_Female
      • 如果某位客戶是男性,那 Gender_Male 會是 1,Gender_Female 會是 0。
      • 如果某位客戶是女性,那 Gender_Male 會是 0,Gender_Female 會是 1。
      • 問題:這兩個新欄位是完全相關的。只要我們知道 Gender_Male 的值,就能 100% 推斷出 Gender_Female 的值(例如 Gender_Male 是 0,Gender_Female 必定是 1)。這種完美的線性關係會對某些機器學習模型(特別是線性迴歸)造成干擾,讓模型難以穩定地估計出各個特徵的影響力。
    • 如果「使用」了 drop_first=True
      • pd.get_dummies() 會先產生 Gender_FemaleGender_Male 兩個欄位,然後丟棄第一個(在此例中是 Gender_Female),只留下 Gender_Male 這一個欄位。
      • 現在,模型的解讀方式變成:
        • 如果 Gender_Male 是 1,代表該客戶是男性。
        • 如果 Gender_Male 是 0,代表該客戶不是男性,也就是女性(這就是被丟棄的那個基準類別)。
      • 好處:我們只用一個欄位,就完整地保留了原始的性別資訊,同時完全避免了欄位間的完美相關性,讓模型能更穩定地運作。
    • 總結來說,drop_first=True 的目的就是在進行 One-Hot Encoding 時,自動捨棄掉一個多餘的參考欄位,以避免多重共線性的問題,讓後續的機器學習模型更穩健。
  • pd.to_numeric(errors='coerce'): 在資料清理階段,確保費用相關的欄位都是數值型態。errors='coerce' 是一個重要的參數,它會自動將任何無法轉換為數字的值變為 NaN (缺失值),方便我們後續統一處理。
  • 用中位數填補空值:
    • df_processed['TotalCharges']:
    • 首先,程式碼選定了我們正在處理的 DataFrame df_processed 中,名為 TotalCharges (總消費金額) 的這個欄位。
    • .median():
    • 接著,它計算了 TotalCharges 這個欄位中所有現存數值的中位數。中位數是指將所有數值由小到大排序後,位於最中間的那個數。使用中位數來填補空值,是一種比平均數更穩健的方法,因為它不容易受到極端值(非常高或非常低的消費金額)的影響。
    • .fillna(...):
    • 這個函式的名字是 “fill na” 的縮寫,也就是「填補空值 (NA/NaN)」。它的作用是找到 TotalCharges 欄位中所有空白或無效的儲存格。
    • inplace=True:
    • 這是一個非常重要的參數。inplace=True 的意思是:「請直接在原始的 df_processed 資料表上進行修改」。如果沒有這個參數(或設為 False),fillna 會回傳一個修改過後的新資料表,但原始的 df_processed 不會改變。
機器學習模型(如決策樹、迴歸模型等)的運算基礎是數學,它們只能理解數字,無法直接處理 'Yes','No','Male' 或 'Female' 這樣的文字。因此,在訓練模型之前,我們必須將這些文字標籤轉換成模型可以理解的數值格式。這個過程就是「標籤編碼」(Labe Encodidng)。

4. Scikit-learn – 建立決策樹分類模型

核心概念: 我們將使用 scikit-learn 來建立一個決策樹 (Decision Tree) 分類器,這是一種直觀且易於理解的分類演算法。

本案例應用重點:

  • 定義特徵 (X) 與目標 (y): 我們需要明確地將資料集分為兩部分:X 是用來預測的特徵(例如客戶合約類型、月費等),而 y 則是我們要預測的目標——Churn 欄位。
  • train_test_split(): 與迴歸模型相同,我們將資料切分為訓練集與測試集,以客觀地評估模型成效。
  • DecisionTreeClassifier(): 從 scikit-learn 中選擇並初始化一個決策樹分類模型。
  • .fit().predict(): 同樣使用 .fit() 進行訓練,並用 .predict() 來對測試集進行流失預測。

5. Scikit-learn – 分類模型的成效評估

核心概念: 分類模型的評估指標比迴歸模型更豐富,我們不只關心「答對率」,更關心「模型錯在哪裡」。

本案例應用重點:

  • confusion_matrix (混淆矩陣): 這是評估分類模型最重要的工具。它能清楚地顯示出模型在「預測流失,且實際也流失 (True Positive)」和「預測未流失,但實際已流失 (False Negative)」等四種情況下的表現,幫助我們了解模型的具體錯誤類型。
  • classification_report: 這個函式會一次性回報多個關鍵指標,包含準確率 (Precision)召回率 (Recall)F1-score,讓我們能更全面地評估模型的好壞。
  • accuracy_score: 整體預測的正確率,也就是「答對的題數 / 總題數」。

6. Matplotlib & Seaborn – 分類結果的視覺化

核心概念: 我們將評估指標與模型洞察,透過視覺化圖表呈現出來。

本案例應用重點:

  • seaborn.heatmap(): 我們使用熱力圖來視覺化「混淆矩陣」,透過顏色的深淺,讓模型的預測結果一目了然。
  • model.feature_importances_: 這是決策樹模型的一個重要屬性,它儲存了每一個特徵對於預測結果的「重要性分數」。
  • sns.barplot(x='重要性', y='特徵', data=feature_importance_df, palette='viridis') 這行程式碼是使用 seaborn 函式庫來繪製一個水平長條圖,目的是將「特徵重要性」這個分析結果視覺化。。

總結來說,這個案例的學習路徑是:

資料清理 -> One-Hot Encoding -> 切分資料集 -> 訓練分類模型 -> 評估分類模型 -> 視覺化”特徵重要性”

「顧客終身價值 (LTV) 預測」詳解

本案例將帶領我們進入「預測性分析」的領域。我們將學習如何使用機器學習中的迴歸 (Regression) 演算法,來預測一個連續的數值——顧客未來的消費總額。課程的重點不僅在於訓練模型,更在於如何從原始數據中提煉出有意義的特徵 (Feature Engineering)。

1. 環境設定:中文字型

核心概念: matplotlibseaborn 套件預設並未包含中文字型,若直接繪圖,圖表中的中文(如標題、座標軸標籤)將會顯示為無法辨識的方塊亂碼(暱稱為豆腐)。因此,繪製中文圖表前的第一步,就是手動安裝並設定字型。

本案例應用重點:

  • !wget ...: 我們在 Colab 中使用 wget 這個指令,從網路上下載一個開源的思源黑體字型檔 (.otf 檔),並將其存放在系統的字型路徑中。
  • import matplotlib.font_manager as fm: 引入字型管理器,用來讀取我們剛下載的字型檔。
  • plt.rcParams['font.family'] = ...: 這是最關鍵的一步,透過 rcParams (runtime configuration parameters) 這個設定,我們明確地告知 matplotlib:「接下來所有的圖表,請一律使用我們剛剛指定的那個中文字型來繪製。」

2. 載入數據

  • files.upload(): 執行這行程式碼時,Colab 會在您的瀏覽器中跳出一個檔案上傳的對話視窗,讓您可以從本機電腦選擇要上傳的檔案
  • uploaded = ...: 當您選擇檔案並完成上傳後,files.upload() 會回傳一個 Python 字典 (dictionary),裡面包含了您上傳的檔案資訊(檔名作為 key,檔案內容作為 value)。這個字典會被存放在 uploaded 這個變數中。
  • try: ... except Exception as e: ...:這是一個錯誤處理的結構。
    • try:: 程式會嘗試執行 try 區塊內的所有程式碼。
    • except Exception as e:: 如果在 try 的過程中,發生任何錯誤(例如,上傳的檔案不是 CSV 格式、檔案已損毀等),程式不會因此崩潰,而是會跳到 except 區塊,執行裡面的程式碼來處理這個例外狀況。
  • file_name = next(iter(uploaded)):因為 uploaded 是一個字典,我們需要從中取出檔名。
    • iter(uploaded) 會建立一個字典鍵(也就是檔名)的迭代器。
    • next(...) 則會從這個迭代器中取出第一個項目。由於我們一次只上傳一個檔案,所以這樣就能成功取得該檔案的檔名。
如果使用本地端的編輯器執行Python腳本(例如Spyder,VSCode),只要設定好工作目錄,就可以直接使用pandas read_csv() 方法載入數據集。upload()是用在當你使用colab環境時。

3. Pandas – 進階資料處理與特徵工程

核心概念: 特徵工程是將原始數據轉換為能更好地代表問題潛在規律的特徵,以供機器學習模型使用的過程。在本案例中,我們將從交易記錄中建構出經典的 RFM 模型指標。

本案例應用重點:

  • pd.to_datetime(): 將文字格式的日期轉換為 Python 的時間物件,這是進行時間相關計算的基礎。
  • pd.Timedelta(): 用於進行日期的加減運算,例如在本案例中,我們用它來定義分析的基準日。
  • df.groupby('...'): 再次運用分組功能,這次是根據 CustomerID 將所有交易記錄歸戶到每一位顧客身上。
  • .agg()lambda 函式: 這是本案例的特徵工程核心。我們使用 .agg() 對分組後的資料進行多重彙總計算,並在其中巧妙地運用 lambda 匿名函式,來快速定義「計算最近一次消費天數」這樣客製化的計算邏輯。

4. Scikit-learn – 建立你的第一個機器學習模型

核心概念: scikit-learn 是 Python 最主流的機器學習函式庫。我們將學習一套標準的模型建立流程:切分資料 -> 初始化模型 -> 訓練模型 -> 進行預測。

本案例應用重點:

  • 資料切分 train_test_split(): 這是機器學習的關鍵步驟。我們將資料集分為「訓練集」(用來訓練模型) 和「測試集」(用來評估模型成效)。test_size=0.2 代表我們保留 20% 的資料作為從未見過的考試題目,以檢驗模型的真實預測能力。
  • 模型初始化 LinearRegression(): 從 scikit-learn 中選擇並建立一個線性迴歸模型的「空白模具」。
  • 模型訓練 .fit(): 這是機器「學習」的過程。我們將訓練集的特徵 (X_train) 與答案 (y_train) 交給模型,.fit() 方法會自動找出特徵與答案之間的數學關係。
  • 模型預測 .predict(): 使用訓練完成的模型,對測試集的特徵 (X_test) 進行預測,得出模型的預測結果。

5. Scikit-learn – 模型的成效評估

核心概念: 模型的好壞不能憑感覺,必須要有客觀的評估指標。

本案例應用重點:

  • from sklearn.metrics import ...: 從 metrics 模組中,我們匯入了兩個常用的迴歸模型評估工具。
  • mean_squared_error (MSE): 均方誤差,用來衡量模型預測值與真實值之間的平均誤差程度,數值越小代表模型越準確。
  • r2_score (R²): R-squared 值,代表模型對資料變異的解釋能力,其值越接近 1,表示模型的解釋力越強。

6. Matplotlib – 迴歸結果的視覺化

核心概念: 對於迴歸模型,最直觀的評估方式就是比較「預測值」與「真實值」的差異。

本案例應用重點:

  • plt.scatter(): 我們使用散點圖,將 X 軸設為「真實值」,Y 軸設為「模型預測值」。
  • 繪製對角線 plt.plot(): 我們額外繪製一條 y=x 的虛線。如果模型預測完美,所有的點都會落在這條線上。因此,我們可以透過觀察散點的分佈與這條線的貼近程度,來直觀判斷模型的預測效果。

總結來說,這個案例的學習路徑是:

資料前處理 -> 特徵工程 (計算 RFM) -> 切分資料集 -> 訓練迴歸模型 -> 評估模型成效 -> 視覺化預測結果

顧客分群模型:方法、應用與最新發展

顧客分群(Customer Segmentation)是現代行銷與客戶關係管理的核心技術,透過將顧客依據行為、特徵或價值分組,企業能更精準地制定行銷策略、提升客戶滿意度與利潤。隨著數據量與複雜度提升,機器學習與深度學習等先進方法已成為分群模型的主流。

主要分群方法與技術

  • 傳統分群法:K-means、層次式聚類(Hierarchical Clustering)、Fuzzy C-Means 等,適用於基於行為、人口統計或地理特徵的分群 (V.Vijilesh et al., 2021; Tabianan et al., 2022; Christy et al., 2018; Sun et al., 2021; Saxena et al., 2024)。
  • RFM模型:以Recency(最近消費)、Frequency(消費頻率)、Monetary(消費金額)為基礎,常結合K-means進行分群,部分研究加入多元參數(如產品多樣性)提升預測力 (Smaili & Hachimi, 2023; Christy et al., 2018; Madhiraju et al., 2024)。
  • 進階機器學習與深度學習:如自組織映射(SOM)、強化學習結合K-means、主成分分析(PCA)降維、DBSCAN等,能處理高維與複雜行為數據,提升分群精度 (Shah, 2024; Tabianan et al., 2022; Wani et al., 2023; Wang, 2022; Wang, 2025; Sun et al., 2021; Saxena et al., 2024)。

應用場景與效益

  • 精準行銷與資源分配:分群後可針對高價值客戶、潛在流失客戶等制定差異化策略,提升行銷效率與客戶忠誠度 (Balpande et al., 2025; Kumari, 2022; V.Vijilesh et al., 2021; Tabianan et al., 2022; Xiahou & Harada, 2022; Madhiraju et al., 2024)。
  • 動態市場追蹤:部分模型可追蹤分群隨時間變化,協助企業即時調整策略 (Böttcher et al., 2009)。
  • 反洗錢、風險管理:在金融領域,分群有助於風險分級與異常行為監控 (, 2020)。

顧客分群常用方法與應用比較

方法/模型適用場景優勢代表文獻
K-means聚類一般行為/屬性分群簡單高效,易於解釋(V.Vijilesh et al., 2021; Tabianan et al., 2022; Christy et al., 2018)
RFM分析零售、電商聚焦消費價值,易於行動(Smaili & Hachimi, 2023; Christy et al., 2018; Madhiraju et al., 2024)
深度學習/強化學習大數據、複雜行為分析處理高維數據,精度高(Wang, 2022; Wang, 2025)
動態分群快速變動市場可追蹤分群變化(Böttcher et al., 2009)

Figure 1: 顧客分群常用方法與應用場景比較

研究趨勢與未來方向

  • 多源數據融合:結合行為、評論、社群等多元數據,提升分群細緻度 (Kulkarni et al., 2022; Wang, 2022)。
  • 自動化與智能化:強化學習、群體智能等AI方法提升分群自適應能力 (Wang, 2022; Wang, 2025)。
  • 分群與預測結合:分群結果結合流失預測、回應預測等,提升行銷決策價值 (Smaili & Hachimi, 2023; Xiahou & Harada, 2022; Madhiraju et al., 2024)。

結論

顧客分群模型已從傳統統計方法進化到結合機器學習與深度學習的智能系統,能有效提升行銷精準度、客戶關係管理與企業利潤。未來趨勢將聚焦於多源數據融合與自動化分群,協助企業在競爭激烈的市場中持續創新與成長。

References

Balpande, S., Kolhe, J., Neware, A., & Gharjale, P. (2025). Customer Segmentation. International Journal of Innovative Research in Engineering & Multidisciplinary Physical Sciences. https://doi.org/10.37082/ijirmps.v13.i2.232353

Kumari, P. (2022). customer segmentation. The Fairchild Books Dictionary of Fashion. https://doi.org/10.1002/9780470685815.ch5

Shah, I. (2024). Customer Segmentation. International Journal for Research in Applied Science and Engineering Technology. https://doi.org/10.22214/ijraset.2024.58144

, V., , A., Dharshini, M., & , R. (2021). Customer Segmentation Using Machine Learning. Elementary Education Online. https://doi.org/10.17051/ilkonline.2021.03.335

Kulkarni, S., Lokhande, V., Bhalerao, N., Tajane, Y., & Kharat, J. (2022). Advance Customer Segmentation. **.

Tabianan, K., Velu, S., & Ravi, V. (2022). K-Means Clustering Approach for Intelligent Customer Segmentation Using Customer Purchase Behavior Data. Sustainability. https://doi.org/10.3390/su14127243

Smaili, M., & Hachimi, H. (2023). New RFM-D classification model for improving customer analysis and response prediction. Ain Shams Engineering Journal. https://doi.org/10.1016/j.asej.2023.102254

Christy, A., Umamakeswari, A., Priyatharsini, L., & Neyaa, A. (2018). RFM ranking – An effective approach to customer segmentation. J. King Saud Univ. Comput. Inf. Sci., 33, 1251-1257. https://doi.org/10.1016/J.JKSUCI.2018.09.004

Wani, A., Priyanka, M., & Prasath, R. (2023). Unleashing Customer Insights: Segmentation Through Machine Learning. 2023 World Conference on Communication & Computing (WCONF), 1-5. https://doi.org/10.1109/WCONF58270.2023.10235136

Wang, C. (2022). Efficient customer segmentation in digital marketing using deep learning with swarm intelligence approach. Inf. Process. Manag., 59, 103085. https://doi.org/10.1016/j.ipm.2022.103085

Wang, G. (2025). Customer segmentation in the digital marketing using a Q-learning based differential evolution algorithm integrated with K-means clustering. PLOS ONE, 20. https://doi.org/10.1371/journal.pone.0318519

(2020). Customer Segmentation. Anti‐Money Laundering Transaction Monitoring Systems Implementation. https://doi.org/10.1002/9781119381877.ch8

Xiahou, X., & Harada, Y. (2022). B2C E-Commerce Customer Churn Prediction Based on K-Means and SVM. J. Theor. Appl. Electron. Commer. Res., 17, 458-475. https://doi.org/10.3390/jtaer17020024

Madhiraju, B., Reddy, S., & Sasikala, G (2024). CUSTOMER SEGMENTATION USING RFM ANALYSIS. EPRA International Journal of Economic and Business Review. https://doi.org/10.36713/epra17685

Sun, Z., Zuo, T., Liang, D., Ming, X., Chen, Z., & Qiu, S. (2021). GPHC: A heuristic clustering method to customer segmentation. Appl. Soft Comput., 111, 107677. https://doi.org/10.1016/J.ASOC.2021.107677

Böttcher, M., Spott, M., Nauck, D., & Kruse, R. (2009). Mining changing customer segments in dynamic markets. Expert Syst. Appl., 36, 155-164. https://doi.org/10.1016/j.eswa.2007.09.006

Saxena, A., Agarwal, A., Pandey, B., & Pandey, D. (2024). Examination of the Criticality of Customer Segmentation Using Unsupervised Learning Methods. Circular Economy and Sustainability, 4, 1447-1460. https://doi.org/10.1007/s43615-023-00336-4

Medium精選-Confused? Don’t Worry, Your Marketing Model Is Too. Here’s How a Confusion Matrix Can Help

超越準確度:運用混淆矩陣洞察行銷決策模型的策略價值

在當今數據驅動的行銷時代,企業無不積極運用資料科學與機器學習模型,以期更精準地理解顧客、預測市場趨勢並優化行銷策略。從預測顧客流失、識別高價值潛在客戶,到評估行銷活動響應,分類模型(Classification Models)已成為行銷分析師與策略制定者不可或缺的工具。然而,當我們談論這些模型的「表現」時,往往會直覺地以「準確度」(Accuracy)作為唯一的判斷標準。但僅依賴準確度,如同只看見冰山一角,將錯失模型背後更深層、更具策略意義的洞察。

本文將借鑒 Joe Domaleski 的文章內容,深入探討「混淆矩陣」(Confusion Matrix)這個看似簡單卻極其強大的工具,並結合理論與實務,闡述其在行銷領域的應用價值,與此議題的行銷洞察與批判性觀點,期能提升對數據驅動行銷的理解層次。


I. 數據驅動行銷的基石:分類模型

在行銷實務中,我們經常面臨許多二元(或多元)分類問題:

  • 顧客流失預測 (Churn Prediction): 顧客會流失 (Yes) 或不會流失 (No)?
  • 行銷活動響應預測 (Campaign Response Prediction): 顧客會點擊廣告/購買產品 (Yes) 或不會 (No)?
  • 潛在顧客評分 (Lead Scoring): 潛在客戶是否會轉化為實際顧客 (Yes) 或不會 (No)?
  • 詐欺偵測 (Fraud Detection): 交易是否為詐欺 (Yes) 或非詐欺 (No)?

這些問題的核心都是透過歷史數據,訓練一個模型來預測未來事件的「類別」。模型的目標是盡可能地做出正確的預測,但現實是,任何模型都無法達到100%完美。因此,如何客觀且全面地評估模型的預測能力,並理解其錯誤的類型與成本,對於制定有效的行銷策略非常重要。


II. 洞悉模型盲點:混淆矩陣的解析

混淆矩陣,顧名思義,是用來呈現一個分類模型在預測時「混淆」程度的表格。它將模型的預測結果與真實標籤(true label)進行比對,並將所有預測歸類為四種基本情境,這四個象限是理解所有後續指標的基礎:

假設我們的目標是預測「顧客是否會流失」(Positive:會流失,Negative:不會流失)。

實際結果 \ 預測結果預測為「不會流失」 (Negative)預測為「會流失」 (Positive)
實際為「不會流失」真陰性 (True Negative, TN)
模型正確預測顧客不會流失。
偽陽性 (False Positive, FP)
模型錯誤預測顧客會流失 (實際不會)。
實際為「會流失」偽陰性 (False Negative, FN)
模型錯誤預測顧客不會流失 (實際會)。
真陽性 (True Positive, TP)
模型正確預測顧客會流失。

情境解讀:

  • 真陽性 (TP): 模型成功識別出真正會流失的客戶。這是我們希望模型做到的「命中」。
  • 真陰性 (TN): 模型成功識別出真正不會流失的客戶。這也是我們希望模型做到的「命中」。
  • 偽陽性 (FP): 模型錯誤地將不會流失的客戶預測為會流失。這是一種「誤報」,可能導致資源浪費(例如對本來就不會流失的客戶發送挽留訊息)。
  • 偽陰性 (FN): 模型錯誤地將會流失的客戶預測為不會流失。這是一種「漏報」,可能導致潛在的顧客流失和收益損失。

III. 從混淆矩陣延伸的關鍵評估指標

從這四個基本元素,我們可以衍生出多種更具洞察力的模型評估指標,它們各自在不同情境下具有獨特的策略意義:

  1. 準確度 (Accuracy):
    • 計算方式:(TP + TN) / (TP + TN + FP + FN)
    • 解讀:模型整體預測正確的比例。
    • 限制:當數據集存在類別不平衡(例如,絕大多數客戶都不會流失,只有極少數會流失)時,準確度會產生誤導。即使模型將所有客戶都預測為「不會流失」,也能達到很高的準確度,但卻毫無實際價值。
  2. 精確度 (Precision):
    • 計算方式:TP / (TP + FP)
    • 解讀:在所有模型預測為「Positive」(例如:會流失)的樣本中,實際也為「Positive」的比例。
    • 策略意義:當「偽陽性(FP)」的成本很高時,精確度尤其重要。例如,若對每個被預測為流失的客戶發送昂貴的挽留禮品,我們會希望這些禮品盡可能地發給真正會流失的客戶,避免資源浪費。
  3. 召回率 (Recall / Sensitivity):
    • 計算方式:TP / (TP + FN)
    • 解讀:在所有實際為「Positive」(例如:會流失)的樣本中,模型成功識別出「Positive」的比例。
    • 策略意義:當「偽陰性 (FN)」的成本很高時,召回率尤其重要。例如,若一個高價值的客戶流失會導致巨大損失,我們會希望模型能盡可能地找出所有可能流失的高價值客戶,即使會有一些誤報(FP)也無妨。
  4. F1-分數 (F1-Score):
    • 計算方式:2 * (Precision * Recall) / (Precision + Recall)
    • 解讀:精確度與召回率的調和平均數。
    • 策略意義:當我們希望在精確度和召回率之間取得一個平衡時,F1-分數是一個很好的綜合指標。它適用於那些不希望過度犧牲任一指標的情境。

 你也可以參考這篇文章,說明更多關於使用這些評估指標在非平衡資料集的應用

IV. 行銷策略中的應用與洞察

理解了混淆矩陣及其衍生指標後,現在讓我們將其應用於實際行銷情境,探討如何在不同決策目標下,選擇最合適的評估指標。

A. 顧客流失預測 (Churn Prediction)

  • 情境分析: 預測哪些客戶可能流失,以便及時進行挽留。
  • 錯誤成本:
    • FP (偽陽性): 模型預測會流失,但實際不會。這導致企業對本來就不會流失的客戶投入挽留資源(例如提供折扣、專人服務),造成資源浪費和潛在的客戶反感(覺得被打擾)。
    • FN (偽陰性): 模型預測不會流失,但實際會。這意味著企業錯失了挽留一個真正可能流失客戶的機會,導致失去該客戶的未來價值(Life-Time Value, LTV)。
  • 策略取捨:
    • 如果企業的挽留資源有限,且挽留成本高昂(例如,提供高額折扣或專屬服務),則應優先考慮提高精確度 (Precision),確保每一份資源都投入到最有機會流失的客戶身上。
    • 如果失去高價值客戶的成本極高,或者市場競爭激烈,哪怕有一點點挽留機會都不想放過,則應優先考慮提高召回率 (Recall),確保盡可能多地識別出所有會流失的客戶,即使會多做一些無效挽留(FP)也值得。

學術方面的參考文獻:機器學習在流失預測中的應用與發展
運用機器學習預測客戶流失:從數據科學到行銷策略的深度融合

B. 精準行銷活動響應預測 (Campaign Response Prediction)

  • 情境分析: 預測哪些客戶會對特定行銷活動(例如促銷郵件、折扣碼)產生回應,以避免對不感興趣的客戶發送訊息。
  • 錯誤成本:
    • FP (偽陽性): 模型預測客戶會回應,但實際不會。這導致行銷費用浪費(例如郵寄成本、簡訊費用),並可能引起客戶不滿(覺得收到垃圾訊息)。
    • FN (偽陰性): 模型預測客戶不會回應,但實際會。這意味著企業錯失了向這些潛在客戶推廣的機會,導致潛在銷售額的損失。
  • 策略取捨:
    • 對於成本高昂或敏感度較高的行銷活動(例如客製化贈品、限量貴賓邀請),企業應優先考慮精確度 (Precision),確保只向最有可能響應的客戶發送,避免浪費並維護品牌形象。
    • 對於成本較低且希望廣泛觸及的行銷活動(例如普通郵件、社交媒體廣告),企業可能願意承擔一些FP的風險,轉而優先考慮召回率 (Recall),以最大化潛在響應者的覆蓋面。

C. 潛在顧客評分 (Lead Scoring)

  • 情境分析: 評估新進潛在顧客的品質,並分配給銷售團隊進行追蹤。
  • 錯誤成本:
    • FP (偽陽性): 模型將「劣質潛客」錯誤地評為「優質潛客」。這會導致銷售團隊將寶貴的時間和精力花費在低轉化率的潛客身上,降低銷售效率。
    • FN (偽陰性): 模型將「優質潛客」錯誤地評為「劣質潛客」。這會導致企業錯失潛在的銷售機會,將高質量的潛客遺漏。
  • 策略取捨:
    • 如果銷售團隊資源緊張,或銷售週期長、成本高,企業會更注重精確度 (Precision),以確保分配給銷售團隊的都是高品質、高轉化潛力的潛客。
    • 如果企業在擴張期,希望不錯過任何銷售機會,或者潛客池龐大且篩選成本低,則可能更注重召回率 (Recall),以確保所有潛在優質潛客都能被篩選出來。

V. 觀點與批判性思考

鼓勵大家在學習數據分析工具時,不僅要掌握其技術層面,更要深入思考其背後的行銷意涵與策略取捨。混淆矩陣並非僅僅是評估模型的技術指標,它更是連結模型表現與商業目標的橋樑。

  1. 成本效益分析的重要性: 模型的錯誤並非等價。一個偽陽性的成本,可能遠低於一個偽陰性的成本,反之亦然(要將實際的情境考慮進去,同學們可以思考Covid19的確診案例,或是醫院檢查乳癌的偽陽性/偽陰性所付出的代價)。
    成功的行銷策略,需要將這些不同類型的錯誤成本納入考量。例如,流失一個年消費百萬的高價值客戶(FN),其成本可能遠超過對十個低價值客戶發送無效的挽留訊息(FP)。因此,在選擇模型評估指標時,行銷決策者必須與數據科學家緊密合作,量化不同錯誤類型的商業成本和效益。這是一場基於數據的「取捨」遊戲。
  2. 數據不平衡問題 (Data Imbalance) 的盲點: 如前所述,當數據集存在嚴重不平衡時(例如,流失客戶只佔總客戶的5%),單純追求高準確度是危險的。一個將所有客戶都預測為「不會流失」的模型,也能輕易達到95%的準確度,但卻對預測流失毫無幫助。
    在這種情況下,精確度、召回率和F1-分數提供了更真實、更有意義的模型表現圖像。作為行銷策略師,你必須能夠識別這種「虛高」的準確度,並要求數據團隊使用更穩健的指標。(參考這篇文章的說明)
  3. 跨部門協作的關鍵: 模型評估不應僅是數據科學家的職責。行銷經理、產品經理乃至高階主管,都必須參與到定義「什麼樣的錯誤可以接受,什麼樣的錯誤絕對不能發生」的討論中。例如,決定在顧客流失預測中是優先挽留更多潛在流失者(高召回),還是避免資源浪費(高精確),這是一個純粹的商業決策,而非技術決策
    數據團隊負責提供工具和洞察,而業務團隊則需要提供業務目標和錯誤成本的量化標準。
  4. 模型目標的動態調整: 行銷策略並非一成不變。在市場擴張期,企業可能更注重市場佔有率和用戶增長,此時模型可能偏向高召回率以捕捉更多潛在客戶;而在利潤優先期,則可能偏向高精確度以優化資源配置。
    因此,模型評估的優先級也應隨著行銷目標的變化而動態調整。這要求我們不能一次性地設定模型評估標準,而需要定期回顧和校準。
  5. 超越二元分類的思考: 雖然本文主要以二元分類為例,但混淆矩陣的概念同樣適用於多元分類問題。對於每個類別,我們都可以計算其TP、FP、FN,進而計算出該類別的精確度、召回率等指標。這對於多階段的顧客旅程分析、多品類的產品推薦等複雜行銷問題同樣具有指導意義。

結論

在數據驅動的行銷世界裡,擁有強大的預測模型固然重要,但更重要的是擁有批判性思維,能夠深入理解這些模型的優勢與局限。混淆矩陣提供了一個清晰的框架,幫助我們從不同的維度評估模型表現,特別是在錯誤類型具有不同商業成本時。

作為未來的行銷專業人士,期許各位不僅能夠操作數據分析工具,更要能將冰冷的數字轉化為具備策略意義的洞察。學會使用混淆矩陣,不僅是提升數據素養的表現,更是讓您能夠在複雜的商業情境中做出更明智、更有影響力決策的關鍵能力。讓我們一同超越準確度的迷思,運用更精準的數據評估,引領行銷策略邁向成功。(本文由周老師規劃選讀,並輔以 AI 協助生成,另透過文中連結提供更完整與深入的相關說明)

原始文章

Domaleski, J. (2025, February 25). Confused? Don’t worry, your marketing model is too. Here’s how a confusion matrix can help. Medium. https://medium.com/@marketingdatascience/confused-dont-worry-your-marketing-model-is-too-here-s-how-a-confusion-matrix-can-help-63c017375de4?source=email-5ab308163c92-1753381290360-digest.weekly–63c017375de4—-8-98——————3c5fbb65_e252_4964_b162_b04c3f579603-1