2023年10月26日 星期四

提高銀行電話行銷活動的效果(AI 手把手教學系列)

依據中華民國銀行公會制定之「銀行業電話行銷應遵循原則」第三條用詞定義的解釋,電話行銷指的是銀行業透過電話或其他類似之語音互動設備,為從事推廣金融商品或服務爭取交易機會之行為。作為銀行業最重要的第一線單位,電話行銷團隊透過主動與既有消費金融客戶的聯繫,試圖找出對相關金融商品或服務有興趣的客戶。然而,在政府越來越重視消費者意識的社會氛圍下,有關電話行銷的規範與限制將會越來越嚴格。這意味著銀行業有必要優化其電話行銷策略來提高電話行銷活動的效果,除了擬定更有效的行銷計畫與更吸引人的產品促銷方案之外,結合 AI 與機器學習技術找出成功率更高的客戶名單也將是個值得嘗試的做法。



話說從頭
  將人工智慧應用在企業營運的各個環節中,這是現代化企業數位轉型必須思考的重要課題。就我的經驗,很多客戶的第一個問題都是 AI 有什麼實際應用場景,不然就是很想一頭栽進 ChatGPT 的世界。生成式 AI 的成熟發展確實為企業帶來許多新的機會,它在知識問答、文章摘要、本文生成、程式碼生成與除錯等應用領域確實表現非常優異。然而,傳統的機器學習(或稱之為資料探勘)技術還是值得我們細細品味,畢竟 AI 應用的發展是逐步累積而來的成果。AI 手把手教學系列文章最主要的目的就是希望與各位朋友分享實務上的 AI 應用場景,除了解釋 WHY(目的與用途)之外,同時也告訴大家 HOW(如何實作),更重要是希望能夠建立與培養 AI 的思維。我通常都會建議客戶先從一個 MVP 專案開始(MVP = Minimum Valuable Project = 選定單一主題並建立具有實際效益的成功專案),接著逐步複製成功經驗擴大 AI 應用場景,以穩健踏實的方式來拉近與企業 AI 之間的距離。
  為了降低人工智慧與機器學習實作上的困難度,我的系列文章都會以 IBM SPSS Modeler 軟體作為工具來解釋 AI 建模的過程。如同玉山登頂這件事,每個人的體能與登山經驗各有不同,要享受登上玉山主峰那種成就感,有些朋友選擇獨自單攻,有些朋友則會組隊並尋求嚮導與山青的協助。因此,換位思考,如果我們的目的是快速建立企業的 MVP 專案,那麼選擇合適的工具或許也是個合理且聰明的做法。


MVP 專案目標:提高銀行電話行銷活動的效果

本篇文章以銀行業電話行銷業務作為 AI 應用的場景,我們預期的 MVP(最小可行性專案)目標為運用 AI 與機器學習技術來提高銀行電話行銷活動的效果。有效運用銀行累積的大量歷史資料,分析客戶的特徵屬性、銀行往來記錄、以及客戶過去對於電話行銷活動的接受度,讓 AI 有辦法從歷史資料中學習並識別出哪種類型的客戶更有可能選擇銀行即將推出的定期存款方案。這樣的做法不僅能夠更有效地確保定存商品的電話行銷成功率,還可以透過降低某些客戶對於電話行銷的反感來提高整體客戶滿意度以及銀行在市場中的正向聲量。

文章目錄:




1.理解訓練資料集

本篇文章使用的資料集是一家葡萄牙銀行於 2008 年 5 月至 2010 年 11 月間進行電話行銷活動的成果,這個行銷活動的目的是希望在既有客戶中推廣銀行定期存款商品。資料集公開在 UCI Machine Learning Repository 中,下載的檔案名稱為 bank-full-training.csv,有興趣的朋友可以從以下網址取得:http://archive.ics.uci.edu/ml/datasets/Bank+Marketing#

這個資料集共包含 45,211 筆資料,每筆資料代表該銀行透過電話聯繫既有客戶的實際成果。每筆資料包含了 16 個輸入變數(Features),代表了客戶的定性與定量特徵,例如年齡、職業、房貸和信貸申請狀況、帳戶餘額以及行銷活動期間的聯繫次數等。資料集有一個二元輸出變數(Target),代表“是(yes)”或“否(no)”,也就是該客戶最終是否選擇銀行定期存款商品。

欄位定義:
# 欄位名稱 角色 型別 欄位定義
1 age Feature Integer 客戶年齡
2 job Feature Categorical 職業類型(admin.、blue-collar、entrepreneur、housemaid、management、retired、self-employed、services、student、technician、unemployed、unknown)
3 marital Feature Categorical 婚姻狀態(divorced、married、single)
4 education Feature Categorical 教育程度(primary、secondary、tertiary、unknown)
5 default Feature Binary 是否發生貸款違約(yes、no)
6 balance Feature Integer 平均年存款餘額(單位:歐元)
7 housing Feature Binary 是否有房貸(yes、no)
8 loan Feature Binary 是否有個人信貸(yes、no)
9 contact Feature Categorical 聯繫方式(cellular、telephone、unknown)
10 day Feature Integer 上一次聯繫客戶的日曆天
11 month Feature Categorical 上一次聯繫客戶的月份(jan、feb、mar、…、nov、dec)
12 duration Feature Integer 上一次聯繫客戶的通話秒數
13 campaign Feature Integer 在行銷活動期間與客戶進行的聯繫次數
14 pdays Feature Integer 從上次行銷活動中最後一次聯繫客戶後經過的天數
15 previous Feature Integer 在本次行銷活動之前與客戶進行的聯繫次數
16 poutcome Feature Categorical 之前對客戶進行行銷活動的結果(failure、other、success、unknown)
17 y Target Binary 客戶最終是否選購行銷活動推薦的定期存款商品(yes、no)

《 回到文章目錄 》



2.前置資料處裡(一):初步資料清理與過濾

影響預測模型準確性有非常多的因素,其中最重要同時也是最不易掌握的就是訓練資料集的品質。初步觀察這個資料集並沒有缺失的資料。然而,部分欄位卻存在像「unknown」、「others」這樣的值,它們與缺失值一樣無法對建模提供幫助。因此,我們需要將這些不明確的值從資料集中移除。

SPSS Modeler 工具簡述
SPSS Modeler 是一個 AI 與機器學習建模工具(過去稱之為資料探勘),它可以讓資料分析人員更有效地揭露資料中隱藏的樣態並建立預測模型,以滿足關鍵的業務決策需求。使用 SPSS Modeler 進行的 AI/ML 建模的重點在於透過一系列節點進行資料處理與分析的過程,我們將這個過程稱為串流。這一系列的節點代表要對資料執行的操作,而節點之間的鏈結則代表了資料流程的方向。例如,您可以將來源資料載入 SPSS Modeler,透過一系列資料準備及建模操作,最後將結果傳送至某個目的地,例如檢視資料內容或執行模型效能分析。
透過 SPSS Modeler,您可以基於串流畫布的設計模式,以視覺化的方法完成 AI 與機器學習建模任務。基本上,建置資料串流包含以下三個簡單步驟:
  1. 將節點新增到串流畫布。
  2. 連接節點以形成串流。
  3. 執行串流並檢視執行成果。


在 SPSS Modeler 串流畫布中使用「變數檔案」節點載入 bank-full-training.csv 檔案,並於此資料來源節點後方鏈結「資料稽核」與「表格」節點,完成後執行串流。

透過資料品質分析的結果,我們可以快速觀察到整個測試資料集 45,211 筆資料中確實並沒有缺失的資料,其中 7 個數值型的欄位都有出現有離群值與極端值的資料。

繼續觀察資料剖析的結果,我們可以從每個欄位的敘述統計量了解資料的分佈狀況。在前置資料處理階段,我們期望的是可以過濾對建模沒有幫助的變數與資料,因此搭配圖形是一種最直覺的方法(點擊樣本圖表欄位的小圖示)。
  • 樣本圖表分析:job(特徵變數)

  • 資料值 unknown 可視為缺失資料,因此需要捨棄。
  • 樣本圖表分析:education(特徵變數)

  • 資料值 unknown 可視為缺失資料,因此需要捨棄。
  • 樣本圖表分析:contact(特徵變數)

  • 此欄位代表的是聯繫方式,由於對建模沒有直接幫助,因此需要排除該欄位。
  • 樣本圖表分析:month(特徵變數)

  • 在那個月份與客戶聯繫雖然對建模並無直接幫助,然而對於資料視覺化分析上還是有其必要,因此需要將資料值轉換為以數值代表的類別型欄位。
  • 樣本圖表分析:poutcome(特徵變數)

  • 由於欄位值 unknown 佔比超過八成,為避免對建模造成不良影響,因此需要排除該欄位。
  • 樣本圖表分析:y(目標變數)

  • 目標變數是監督式學習中必要的標記資料,這些資料是提供給機器(演算法)進行學習時使用的標準答案。當機器完成學習並找出隱藏在資料中的特定模式後,它就有辦法針對未知結果的資料進行預測。
    經觀察欄位值的數量分配,可以觀察到這是一個典型的不平衡資料集,簡單來說就是 yes 僅佔全體資料的 11.7%,屬於小類別樣本。有關平衡樣本資料集的方法,我們留在後面章節再進行說明。
完成了變數欄位分析後,我們將開始著手進行初步的資料清理與過濾,首先是捨棄 job 與 education 欄位中的 unknown 值。在 SPSS Modeler 串流的資料表輸出視窗中以滑鼠點擊選取 job 與 education 欄位中的 unknown 值,點擊「產生」並於選單中點擊「選取節點(或)」,該節點會自動產生在畫布中。

將資料來源節點鏈結到自動產生的「選取」節點,開啟設定視窗,模式選擇「捨棄」,下方條件公式為自動產生的結果。完成後點擊「確定」。

接著要排除 contact 與 poutcome 欄位。在「選取」節點後方鏈結一個新的「過濾器」節點,開啟設定視窗將 contact、poutcome 的過濾器欄位值設定為「X」。完成後點擊「確定」。

最後則是轉換 month 欄位值的內容。在「過濾器」節點後方鏈結一個新的「導出」節點,開啟設定視窗將將模式設定為「單個」,導出欄位名稱設定為「month_new」,導出為選擇「公式」,欄位類型選擇「列名」,完整公式如下圖所示。完成後點擊「確定」。

使用「表格」節點檢視初步資料清理與過濾的成果,可以觀察到資料筆數從 45,211 筆下降到 43,193 筆, contact 與 poutcome 欄位已被移除,同時新增了一個 month_new 欄位。

《 回到文章目錄 》



3.前置資料處理(二):選擇合適的特徵變數

特徵變數的好壞是決定機器學習建模品質的關鍵因素,一般來說,決定合適的特徵變數會發生在當特徵變數的數量過多而需要進行維度縮減(Dimensionality Reduction)處理,也就是盡可能在維持模型性能的情況下,減少資料集中特徵變數(或維度)數量的過程。逐一對大量特徵變數進行分析是一件繁瑣且耗時的工作,在 SPSS Modeler 中,我們可以直接使用「變數選取」節點,依據我們選擇的統計檢定方法,對所有特徵變數進行重要性排序,並給予我們最佳的建議。下圖是使用「變數選取」節點分析的結果,在 Pearson 卡方獨立性檢定的方法下,僅 default(是否發生貸款違約)被排除,原因是單一種類值太大。


除了以自動化的方式進行特徵變數選擇之外,透過圖表視覺化方式進行特徵變數分析也是常見的作法,以下我們挑選幾個重要的變數進行特徵變數與目標變數之間的相關性分析。

  • age(客戶年齡)

  • 首先我們以 10 歲作為組距將客戶年齡分為 9 個分組,接著衍生出分組人數、占比、已訂閱數以及訂閱率等欄位,最後使用 SPSS Modeler 的動態圖表功能繪製以下的圖形。從下圖中,我們大致可以觀察到 20 歲以下與 60 歲以上客戶的訂閱率較高,人數占比較高的 20 歲以上到 60 歲以下客戶的訂閱率明顯偏低。此外,若將客戶年齡分組與目標變數進行卡方檢定分析,得出機率值為 0,也就是這兩個欄位之間存在顯著的相關性。
  • job(職業類型)

  • 若以客戶職業類型進行分析,可以從以下圖形觀察到,學生與退休族群對於定存商品的接受度較高。如果再把年齡分組加進來交叉比對,也會發現到學生族群對應到的正是 20 歲以下的分組,退休族群則是對應到 60 歲以上的分組。從資料分析的角度進行推論,可以解釋為學生族群對投資理財的專業度較不足,退休族群則著重在風險承受度較低的商品,因此這二個族群對於定存商品的偏好度相較其他族群來的高。
  • duration(聯繫客戶的通話秒數)

  • 直覺來說,就電話行銷的行為分析,通話時間短通常代表客戶對商品的興趣不大因而拒絕與電訪人員繼續通話,較長的通話時間則有可能是客戶願意進一步了解商品的內容,按經驗而言最終成交的機率亦較高。針對 duration 這個連續型數值變數,我們採用箱形圖(Box Plot)進行資料的分析。根據下圖觀察,左邊代表客戶未選購定存商品的通話秒數明顯小於右邊已選購的客戶。此外,右邊箱形圖的資料相對左邊較為分散,二邊的箱形圖中皆包含了大量的離群值。

    理解 duration 變數的資料分布後,我們繪製一張組距為 60 秒的 duration 次數分配圖,並將焦點放在最左邊通話低於 60 秒的資料中。透過分配圖可以觀察到,通話時間低於一分鐘的 4,405 筆資料中,僅有 8 筆被標記為已選購的客戶。由於在上一個章節對目標變數的分析,我們觀察到這是一個小樣本的資料集,為了初步對樣本資料進行平衡處理,我們決定排除通話低於 60 秒的資料。
  • campaign(行銷活動期間與客戶的聯繫次數)

  • 我們接著分析代表行銷活動期間與客戶聯繫次數的 campaign 變數,觀察下圖左邊的箱型圖,無論客戶最終是否選購銀行定存商品,在行銷活動期間大部分的客戶都被聯繫 1 至 3 次,這算是個合理的現象,然而二邊的箱形圖中仍然包含了大量的離群值。下圖右邊是 campaign 與 duration 這二個變數的散布圖,從圖中可以隱約看出已選購定存商品(yes)與未選購定存商品(no)形成了二個獨立的集群。與未選購(no)客戶相比,已選購(yes)客戶被聯繫的次數較少且通話時間較長。更重要的是,除非通話時間較長,否則聯繫客戶超過 10 次以上,客戶更有可能拒絕銀行的推銷行為。換句話說,銀行應該盡可能將與客戶的聯繫次數控制在 10 次以下,否則可能會造成客戶的不滿意度提升。
  • month(聯繫客戶的月份)

  • 最後,我們來分析一個與客戶特徵較無關聯的 month 變數,下圖是一個透過 SPSS Modeler 動態圖表功能繪製的多重數列圖形,其中深藍色與淺藍色的柱狀圖分別代表該月份的通話秒數與聯繫次數,綠色的折線圖則代表該月份的電話行銷成交率(訂閱率)。在這個圖形中我們發現了一個有趣的現象,成交率較高的時間點均發生在銀行與客戶聯繫次數及通話秒數較少的月份(3 月、9 月、10 月與 12 月)。這樣的結果是否隱含著季節和聯繫時間等外部因素可能會影響電話行銷的成交率,還需要更多的數據進行分析與佐證。由於測試資料集並未包含年度的資料,我們無法再進一步地分析外部因素對電話行銷活動的影響,因此在建模時,day、month 等欄位將一併排除。

最後,我們將前置資料處理階段對所有變數的處裡歸納如下表,資料集中 16 個特徵變數最終保留 10 個用於後續的建模,其中 job、education、duration 等三個欄位捨棄了對建模沒有幫助的資料,資料集大小由 45,211 筆縮減到 38,788 筆資料。目標變數中 yes 的比例由 11.7% 提升到 12.9%。

欄位處理方式:
# 欄位名稱 角色 型別 欄位定義及處理方式
1 ◎ age Feature Integer 客戶年齡(保留用於建模,不做任何處理)
2 △ job Feature Categorical 職業類型(保留用於建模,捨棄 unknown 資料)
3 ◎ marital Feature Categorical 婚姻狀態(保留用於建模,不做任何處理)
4 △ education Feature Categorical 教育程度(保留用於建模,捨棄 unknown 資料)
5 X default Feature Binary 是否發生貸款違約(排除)
6 ◎ balance Feature Integer 平均年存款餘額(保留用於建模,不做任何處理)
7 ◎ housing Feature Binary 是否有房貸(保留用於建模,不做任何處理)
8 ◎ loan Feature Binary 是否有個人信貸(保留用於建模,不做任何處理)
9 X contact Feature Categorical 聯繫方式(排除)
10 X day Feature Integer 上一次聯繫客戶的日曆天(排除)
11 X month Feature Categorical 上一次聯繫客戶的月份(排除)
12 △ duration Feature Integer 上一次聯繫客戶的通話秒數(保留用於建模,捨棄通話低於 60 秒的資料)
13 ◎ campaign Feature Integer 在行銷活動期間與客戶進行的聯繫次數(保留用於建模,不做任何處理)
14 X pdays Feature Integer 從上次行銷活動中最後一次聯繫客戶後經過的天數(排除)
15 ◎ previous Feature Integer 在本次行銷活動之前與客戶進行的聯繫次數(保留用於建模,不做任何處理)
16 X poutcome Feature Categorical 之前對客戶進行行銷活動的結果(排除)
17 ◎ y Target Binary 客戶最終是否選購行銷活動推薦的定期存款商品(目標變數)



下圖為前置資料處理階段使用 SPSS Modeler 設計的資料串流成果:

《 回到文章目錄 》



4.解決訓練資料集不平衡的問題

在特徵變數分析與前置處理階段,我們一直提到目標變數資料不平衡的問題,這個問題究竟對機器學習建模造成什麼影響,我們直接用資料來進行說明。延續第三章的結果,資料集大小由 45,211 筆縮減到 38,788 筆資料,目標變數中 yes 的比例由 11.7% 提升到 12.9%,換言之,目標變數中 no 的比例為 87.1%。在監督式機器學習中,演算法係透過我們提供的標記資料進行訓練學習,接近九成的 no 可能會讓演算法傾向於學習 no 的結果,這會對模型區隔 yes 與 no 的能力造成影響。用一個極端的例子,如果模型直接將全部的資料預測為 no,那麼它將得到一個高達 87.1% 的預測正確率,但這並不是我們期望的結果,因為我們的目標是要找出可能會銀行定存商品感興趣的客戶,也就是標記為 yes 的資料。


在機器學習的世界裡,解決樣本資料不平衡的問題可以分為 Over-sampling 與 Under-sampling 等二種方法,前者係將小類別樣本數量生成變多,後者則是將大類別樣本數量變少。在學術領域中,有多種實作 Over-sampling 的技術,以下分別說明在 SPSS Modeler 中可以用來解決樣本資料不平衡問題的節點。

  • 「平衡 (Balance)」節點

  • 平衡節點可以依據指定的樣本值條件設定其平衡因子。以下圖為例,假設我們期望將目標變數(y)的 yes 樣本比例由 12.9% 提升到 20%,只需要將 y = “no” 條件的平衡因素設定為 0.59 即可。平衡因素代表對符合條件的樣本資料進行放大與縮小的比例,大於 1 為放大(Over-sampling);等於 1 維持不變;小於 1 則為縮小(Under-sampling)。由於平衡節點的 Over-sampling 無法進行細部設定,因此我個人的習慣只會將它用於 Under-sampling 的處理。
  • 「SMOTE」節點

  • Synthetic Minority Oversampling Technique(SMOTE)是知名 Oversampling 方法之一,它的原理是隨機找出一個樣本與其最鄰近樣本之間的差異,將這個差異數乘上一個介於 0 與 1 之間的亂數值並將此做為新生成的樣本。Borderline SMOTE 則是基於 SMOTE 所發展出的改進方法,主要是避免隨機抽取出屬於離群的樣本,提升演算法的區隔能力。以下圖為例,假設我們期望將目標變數(y)的 yes 樣本比例由 12.9% 提升到 20%,僅需在 SMOTE 節點使用 Borderline1 SMOTE 演算法,並將超額取樣比例設定為 0.25,最終 SMOTE 節點會自動生成 3,430 筆 yes 的樣本,在 no 樣本數量維持不變的條件下,將 yes 的樣本比例放大到 20%。
實務上,對於目標變數樣本的比例並無標準的規則,此外平衡樣本的方法無論是 Over-sampling 或 Under-sampling 都各有其優缺點。因此,在最終的資料準備階段,我們先使用「分割區」節點快速地將資料及分割為訓練集(90%)與測試集(10%),接著使用「SMOTE」節點生成 30% 的 yes 樣本,讓樣本數量由 4,510 筆放大到 5,863 筆資料。最後在預期 yes 與 no 為 20% 與 80% 的比例前提下,使用「平衡」節點將 no 樣本縮減為原來樣本數量的 75%(縮減 25%)。這樣的理由是不要過去放大小樣本的資料,同時也避免縮減過多大樣本的資料,儘量讓新的資料集貼近於原始資料集,確保預測模型可以有效地區隔 yes 與 no 的資料。

到目前為止,我們完成了二個階段的資料準備與清理,同時也針對不平衡的目標變數樣本進行了處理。下圖是我們將 SPSS Modeler 資料串流重新排版與美化後的成果,上半部為前置資料準備流程,包含對特徵變數的分析與資料清理,透過 SPSS Modeler 的超級節點功能,可以將多個節點封裝為一個單一的節點,讓整個串流畫布更佳簡潔。下半部則是樣本資料處理流程,包含對原始資料集的分割與樣本平衡的處理,最終的資料集故包含 32,590 筆資料,其中 28,554 筆資料將用於建模訓練,3,943 筆資料將用於模型測試。 使用 SPSS Modeler「分割區」節點的好處是,在後續的建模流程中,模型會自動選擇訓練集資料進行建模,並使用測試集資料對已建立的模型進行測試。包含最終的模型效能分析與評估圖表都會自動以訓練集與測試集的資料分別呈現。

《 回到文章目錄 》



5.建立分類模型與驗證模型準確性

我們花了很多的篇幅說明前置資料處理階段的工作,包含對原始資料的理解、初步資料清理與過濾、分析及選擇合適的變數,同時也試圖解決目標變數樣本不平衡的問題。在實務建模專案中,前置資料處理確實是個攏長的過程,尤其是面對到特徵變數過多且資料品質偏低的情況,資料科學家都得要花上不少的時間才能把最終建模的特徵變數與資料集準備完成。縮短資料準備與清理的時間,降低機器學習技術門檻並提升工作效率,這對於將人工智慧應用於企業經營環節而言是件重要的事,這也正是我們積極推廣使用工具的主要原因。

進入到建模的階段,這對於資料科學家而言又是個繁瑣且重複性的工作。從挑選演算法開始,逐一撰寫建模程式,逐一分析與比較各個模型的優劣,直到最終找到一個最合適的模型,這同樣也是個攏長的過程。回顧文章開頭的 MVP 專案目標:我們希望建立一個可以提高銀行電話行銷活動效果的預測模型,因此接下來的文章重點在於,如何更有效率地找出合適的預測模型。目前,坊間有很多自動建模的工具(例如:IBM AutoAI),這對於程式撰寫與統計專業度較不足的朋友來說確實是個福音。當然 SPSS Modeler 本身也提供許多全自動化的功能,諸如資料稽核、自動資料準備、變數選取、自動建模等節點。需要特別強調 SPSS Modeler 的自動建模功能是將繁瑣的建模流程自動化而非簡化建模的流程,因此,使用工具的主要目的是降低學習的門檻,在快速獲得成果之餘,最好還是花點時間適度理解統計與數學的理論與應用,畢竟這些技術才是人工智慧與機器學習的核心基礎。

  • 找出最佳候選模型

  • 為了更有效率地找出最佳候選模型,我們選擇以 SPSS Modeler 內建的「自動分類器」節點加速建模的工作。自動建模的原理不複雜,主要就是從選定的演算法清單中逐一進行建模,最後以指定的評量標準進行優劣排序,然後選擇出前 N 個模型作為最佳候選模型。 如前所述,SPSS Modeler 的自動建模功能是將繁瑣的建模流程自動化而非簡化建模的流程,因此,諸如交叉驗證(Cross Validation)、模型優劣排序指標、利潤準則、提升準則、甚至個別演算法參數都可以視需求進行配置。此外,由於自動建模還是會針對我們選定的演算法逐一找出最佳解,以二元分類為例,SPSS Modeler 共提供 17 種演算法,若選擇將全部的演算法都拿來建模則需花費較長的時間。

    下圖是我們將已分割的訓練資料集(經平衡樣本後)與測試資料集執行二元分類自動建模的結果,由於最終我們會使用 PMML 格式實作模型部署及推論評分,因此僅選擇 12 個支援匯出為 PMML 格式的演算法(包含 C5.0、Logistic 迴歸、決策清單、KNN、LSVM、隨機樹狀結構、SVM、Tree-AS、CHAID、QUEST、C&RT 樹狀結構、神經網路)進行建模,模型優劣排序指標為測試集模型精確度(Precision),最終保留前五名演算法作為候選模型。

    透過自動建模的方式,SPSS Modeler 幫我們從 12 個演算法中,依據測試集模型精確度(Precision)挑選出最佳的前五名模型,依序分別是:SVM、Logistic 迴歸、C5.0 決策樹、神經網路、以及 Tree-AS 決策樹。這五個候選模型的整體正確性介於 87.04% 至 86.33%,表現都不錯,至於我們較關注的模型精確度(Precision)也都有接近五成的水準,召回率(Recall)則是 SVM 與 Logistic 迴歸較不理想。接下來我們將個別以這 5 個演算法進行建模並挑選出一個最合適的模型,不過在開始建模之前,我們先說明幾個評估二元分類模型較常用的指標。

  • 二元分類模型評估指標

  • 在二元分類問題中,目標變數共有二種結果:代表 Ture 值的 Positive(客戶已購買定存商品 Yes)與 False 值的 Negative(客戶未購買定存商品 No),我們可以將這個二元分類模型預測值與實際值的結果繪製為下圖左邊的混淆矩陣表(Confusion Matrix)。二元分類模型常用的評估指標,諸如正確率(Accuracy)、精確度(Precision)與召回率(Recall)均衍生自混淆矩陣表,F-1 Score 則是綜合考量精確度和召回率的的情況下所計算出的調和平均值,這四個評估指標的定義如下圖右邊。

    對於一個二元分類模型,若資料集中的 True 與 False 樣本的比例極不平衡,在正確率(Accuracy)無法有效評估模型準確性的前提下,可以使用 Precision(精確度)與 Recall(召回率)這二個指標來輔助驗證。
    • 整體正確率(Accuracy)比較好理解,簡單來說就是分類模型成功把對的答案預測出來的比率。然而,對於一個樣本不平衡的資料集,正確率很容易被大量的 False 樣本所誤導,因此我們還需要使用其他的評估指標來輔助驗證。

    • Precision(精確度)是分類模型所有預測為 True 樣本中實際上屬於 True 樣本的比率,精確度低代表預測結果有太多誤報案例(False Positive,把 False 樣本錯誤預測為 True)。對於找出對的客戶並提高銀行電話行銷成功率而言,過多誤報恐怕會增加顧客抱怨的情況,因此這也是我們在自動建模時以測試集模型精確度作為模型優劣排序指標的主要原因。

    • Recall(召回率)是所有標記為 True 的樣本中被分類模型成功預測為 True 樣本的比率,召回率低代表預測結果有太多漏報案例(False Negative,把 True 樣本錯誤預測為 False)。對於我們的案例情境,漏報的發生也就是失去了可能成交的商機,但如果在特定應用領域,例如疾病預測,漏報的成本代價極高,因此在評估模型預測能力時就必須考量較高的召回率,那怕會犧牲一部分的精確度。

    • F1-Score 是一個綜合精確度與召回率的分類模型評估指標,它代表在同時注重這二個指標的前提下,精確度與召回率的調和平均值。一般情況下, F1-Score 越高(趨近於 1)則該分類模型的預測準確性越好。因此,在挑選模型時,若需要一個精確度與召回率較平衡的模型,則可以透過 F1-Score 進行綜合比較。

  • 整合模型(Ensemble Model)

  • 在我的《人工智慧 28 堂基礎課程》中有提到過一種實務上常用的整合學習方法(Ensemble Method),其基本原理是將多個演算法的預測結果組合再一起,試圖形成一個能夠做出更準確預測的單一模型,我們稱之為整合模型(Ensemble Model)。檢視 SPSS Modeler「自動分類器」節點建置完成的模型,我們可以個別分析與評估單一演算法的預測能力,同時也可以觀察個別演算法所整合出單一模型的預測結果。例如下圖中,左邊的預測結果($XF-y)分配圖就是將 SVM、Logistic 迴歸、C5.0 決策樹、神經網路、以及 Tree-AS 決策樹這五個演算法整合為單一模型的成果。

    在 SPSS Modeler 中評估模型的預測性能,除了將 Accuracy、Precision、Recall 以及 F-1 Score 等四個指標列出來比較之外,還可以使用「分析」以及「評估」節點進行模型預測能力的數值指標分析與圖表比較分析(Gains、Lift、Response、Profit、ROI、ROC)。觀察整合模型的分析結果,就整體表現而言,整合模型的整體正確性與精確度確實較個別五個模型來的更好(AUC 指標與 ROC 曲線亦證實這一點),美中不足之處在於測試集模型召回率 0.376 僅優於 SVM 與 Logistic 迴歸(這二個演算法的召回率本來就不理想)。
  • 獨立建模並選擇最佳模型

  • 既然 SPSS Modeler 的自動建模功能已經幫我們從 12 個分類演算法中挑選出前五名最佳模型,接下來我們將直接使用 SVM、Logistic 迴歸、C5.0 決策樹、神經網路、以及 Tree-AS 決策樹這五個演算法進行獨立建模,透過調整不同的參數配置,嘗試建置比自動建模更為出色的模型。下圖是五個演算法獨立建模結果的彙整表,同樣包含測試集與訓練集的各種預測能力評估指標,同時我們也將自動建模的指標列在右邊作為比較。平均而言,獨立建模的結果在各項評估指標上均優於自動建模的結果,五個模型的測試集整體正確性介於 87.3% 至 86.6%,精確度(Precision)介於 50.5% 至 47.7%,召回率(Recall)還是 SVM 與 Logistic 迴歸表現較差。到了最終抉擇的時刻,仔細觀察這五個模型的精確度其實差異不大,因此,我們將以 F1-Score 最高者 C5.0 決策樹作為最佳模型。

    除了比較評估指標,透過圖表比較模型的預測能力在實務上也是常見的作法,在 SPSS Modeler 中繪製多個模型的比較圖非常簡單,僅需要將建置完成的模型節點串接再一起,後方鏈結一個「評估」節點即可快速完成。下圖是我們將整合模型與五個獨立建模的模型串接並產生 ROC 曲線比較圖的結果,ROC 曲線是衡量分類模型性能的一個重要指標,中間的紅色線代表隨機猜測的結果,分類模型的 ROC 曲線越遠離紅色線且越貼近左上角,表示該模型的預測能力較好。
  • 平衡樣本資料的效益

  • 最後,我們來談一下平衡樣本資料的效益。在第四個章節,我們為了解決訓練資料集不平衡的問題,對資料進行了放大與縮小的處理,或許大家會很好奇平衡樣本資料究竟對建模有什麼實際影響。下圖是我們以 C5.0 決策樹為例,將平衡前後的資料進行建模的評估比較,如果單就整體正確性、AUC、Gini 這三個指標來觀察,平衡樣本後建模提升的效益較不明顯。然而,若仔細分析精確度、召回率與 F1-Score 這三個指標,應該就可以觀察到數據有顯著的提升,用於綜合評估的 F1-Score 無論在訓練集或是測試集均有 10% 以上的提升。這樣的結果表示,平衡樣本資料將有助於我們找出對的客戶(降低誤報與漏報),這對於滿足 MVP 專案目標而言,可以算是一個非常具體的效益。

到目前為止,我們已經將如何運用機器學習技術來提高銀行電話行銷活動的效果作了完整的說明。透過機器學習技術,我們從過去的歷史經驗中學習並建立出一個可以預測客戶是否會購買銀行定存商品的分類模型,這個模型將有助於電話行銷部門篩選出有效的目標客戶名單,提高電話行銷人員的推廣成功率。下圖為使用 SPSS Modeler 設完整計資料串流成果,我們為每個建模的串流加上了色塊與註解以提升識別度,這有助於在協同工作環境中,不同資料科學家彼此都能夠知道對方做了些什麼。

分類模型在實務上的應用場景非常廣泛,在我們的案例中,分類模型用於區隔會買與不會買的客戶(二元分類),類似的場景還有客戶會不會違約(風險預測)、客戶會續約還是離開我們(流失預測)、機器設備會不會發生故障(設備異常偵測)、癌症會不會復發(疾病預測)等等。AI 與機器學習是一種統計與數學的技術,要將它融入於企業日常營運流程中,最重要的就是具備 AI 的思維,簡單來說就是如何將企業營運發生的問題轉換為統計與數學的問題,只要問題對了,要找出答案就不會是一件困難的事。


《 回到文章目錄 》



6.部署模型(即時與批次評分)

我們一直強調將 AI 與機器學習融入企業的日常營運流程中,以我們的案例情境作為例子,假設銀行的資料科學團隊成功開發好 C5.0 決策樹模型,那麼行銷團隊該如何運用這個模型呢?通常情況下,銀行的行銷部門會透過特定的資訊系統產生行銷活動的目標客戶名單(我們暫且稱這個系統叫自主行銷平台),只需將 C5.0 決策樹模型整合到自主行銷平台,使用者即可透過這個系統產生模型預測出的目標客戶名單。

整合的方式有兩種,第一種需要自主行銷平台的軟體開發團隊將模型的推論邏輯改寫為自主行銷平台可執行的程式功能。然而,這並非一個明智的作法。因此,我們通常會選擇第二種方式,即另外建立一個獨立的資訊系統來執行資料科學團隊開發的模型,並提供應用程式連結介面(API)供自主行銷平台使用。一般而言,這個獨立的系統被稱為模型推論或評分伺服器(Model Inference Server 或 Scoring Server)。完成機器學習模型的建置後,只需要將其部署到評分伺服器上,自主行銷平台的軟體開發團隊即可透過 API 快速開發程式功能,並提供給行銷部門的使用者來產生目標客戶名單。

至於要如何將 SPSS Modeler 開發好 C5.0 決策樹模型部署到評分伺服器,同樣也是二種方法。第一種需要搭配 IBM 的 SPSS 評分伺服器軟體,只需要透過一鍵部署的方式即可快速完成模型部署及使用。第二種方法是將 C5.0 決策樹模型匯出為 PMML 檔案(一種 XML 格式的檔案),這個檔案描述了模型的輸入/輸出變數定義以及其推論邏輯,接著將這個 PMML 檔案部署到自行開發的評分伺服器即可。下圖是在 SPSS Modeler 模型節點匯出 PMML 檔案的功能選單位置。

要實作一個簡單的模型評分伺服器並不難,網路上有很多範例程式可以參考,由於這並非是本篇文章的重點,因此我們選擇以 Github 上的 openscoring 專案作為範例來說明。openscoring 係使用 Java 程式開發的軟體,因此僅需要下載伺服器 JAR 檔案(openscoring-server-executable-2.1.1.jar)即可透過 Java 來執行。在 Windows 作業系統的「命令提示字元」視窗啟動 openscoring 模型評分伺服器的方法如下圖所示。

要與 openscoring 模型評分伺服器溝通必須透過標準的 HTTP 通訊協定與 REST API 指令,因此我們在 Windows 作業系統中透過 curl 這個小工具來實現接下來的各項操作。首先,我們需要將已匯出的 PMML 檔案部署到 openscoring 模型評分伺服器。指令: curl -X PUT --data-binary @C5.0.xml -H “Content-type: text/xml” http://localhost:8080/openscoring/model/CampaignResponse,其中 C5.0.xml 是 PMML 檔案的名稱, CampaignResponse 則是我們指定的模型名稱。部署指令完成後,伺服器會以 JSON 格式回覆模型的相關定義資訊,包含輸入與輸出變數規格,如下圖所示。

模型部署完成後,我們可以先進行即時評分(Real-time Scoring)。想像一下,如果使用者在自主行銷平台中想要立即知道客戶會不會購買銀行即將推出的定存商品,她或他只需要從客戶清單中勾選一個或多個客戶,然後點擊「執行預測」按鈕(假設系統功能均已整合完成),接下來自主行銷平台就會將客戶資料透過指令傳送給評分伺服器,然後評分伺服器會將模型預測結果回傳給主行銷平台並顯示在系統畫面中。

在 openscoring 模型評分伺服器環境中,我們需要輸入的指令是:curl -X POST --data-binary @CampaignResponseSingle.json -H “Content-type: application/json” http://localhost:8080/ openscoring/model/CampaignResponse,其中 CampaignResponseSingle.json 是一個 JSON 格式的文字檔,在我們的範例中只放了一筆客戶的資料,如下圖所示。最後模型回覆目標變數(y)的預測結果為 no,也就是說 customer-001 這位客戶並不是我們的目標客戶。

在大部分的實際使用情境中,使用者會在自主行銷平台中依據某些條件先過濾出一批潛在客戶名單,然後執行批次評分(Batch Scoring)的功能。由於批次評分是針對大量且多筆客戶資料進行預測,因此需要一段時間才能知道結果,當自主行銷平台送出客戶資料給評分伺服器之後,它會等待評分伺服器對整批資料的預測結果,當它收到結果後就會以電郵或是其他方式通知使用者。使用者回到自主行銷平台後,即可在系統介面中檢視預測結果,或是直接將結果匯出為 CSV 檔案,並將這個檔案提供給電話行銷部門使用。

在 openscoring 模型評分伺服器環境中,我們需要輸入的指令是:curl -X POST --data-binary @bank-full-training-api_test.csv -H “Content-type: text/plain; charset=UTF-8” http://localhost:8080/ openscoring/model/CampaignResponse/csv > bank-full-training-api-output.csv,其中 bank-full-training-api_test.csv 是一個 CSV 格式的文字檔,這個檔案會包含大量且多筆客戶資料(我們的範例只放了十筆客戶資料),如下圖所示。此外,在指令中我們要求評分伺服器伺服器執行 CSV 格式的批次評分,因此除了輸入的客戶資料是 CSV 格式之外,預測結果輸出的格式也會是 CSV 格式。備註: openscoring 亦支援 JSON 格式的批次評分,但由於 JSON 格式較不易閱讀,因此我們選擇 CSV 格式。

開啟 bank-full-training-api-output.csv 檔案,我們可以看到模型對 customer-001 ~ customer-010 這十筆客戶資料的預測結果,若同時將 bank-full-training-api_test.csv 作為來源資料檔使用 SPSS Modeler 執行 C5.0 決策樹模型的評分,基本上可以發現這二者是一致的,因此我們可以不用擔心匯出的 PMML 檔案中的模型推論邏輯會與 SPSS Modeler 中的模型有差異。


《 回到文章目錄 》



版權聲明
文章內容未經授權,請勿進行任何形式的複製、修改或發佈本文內容,如需轉載或引用,請在使用時注明出處並取得授權。本文中提及的特定公司、產品、品牌名稱等僅為描述目的,其版權歸屬於相應的公司或擁有者。

沒有留言:

張貼留言