經驗分享:Plaid如何通過機器學習實現商家和銀行之間的交易對賬結算? - Kevin Hu
Plaid的API可幫助開發人員為北美數以千萬計的消費者提供金融服務。這些服務幫助消費者管理他們的個人財務,讓他們轉移資金和付款,並允許他們獲得貸款和抵押貸款。我們的使命是通過提供對金融系統的訪問來改善人們的生活。
我們不僅通過幫助消費者訪問其財務資料,而且通過提高資料質量來實現這一使命。通過機器學習豐富資料是我們資料科學和基礎設施團隊的目標之一,在這篇文章中,我們還將討論我們團隊建立的ML模型。
交易的待處理和已過賬(pending-posted)的難題
Plaid為傳統銀行的交易資料增加價值的一種方法是確定何時釋出來自消費者賬戶的待處理交易。當銀行正在處理消費者的交易時,交易正在等待銀行處理狀態中,在這個待處理期間,鈔票金額將從帳戶所有者的可用資金中扣除,但不會從帳戶餘額中扣除。等交易結束後,交易才從“待處理pending”變為“已過賬posted”,已過賬posted的交易最終會完成,並且已從該帳戶餘額中扣除。
當Plaid拍攝帳戶快照時,我們會收到一份包含說明、貨幣金額以及交易狀態是待處理還是已過帳的交易清單。雖然我們知道交易是否處於待處理狀態,但銀行通常不會告訴我們先前快照中的哪些待處理交易與當前快照中的新發布交易相對應。這種匹配對客戶至關重要。如果他們向每個新交易的消費者傳送通知,那麼重要的是他們不要接受到重複復通知。
不幸的是,通常不清楚銀行的哪些已釋出的交易事務對映匹配到先前消費組在商家的待處理的交易事務?一個常見的困難匹配問題是餐館賬單,當消費者的信用卡在餐館收取賬單時,餐廳會啟動待處理的交易,它不包括服務費和小費。一旦餐廳的收據被批量處理(通常在工作日結束時),他們通過在一個統一事務中來完成交易,這是事務交易成為已過賬posted狀態的時候。
在其他情況下,相應的待處理和已過帳的交易可能看起來不同。酒店通常會將較高的待處理pending費用作為暫緩incidental費用的帳戶。一旦交易過帳,即可結算到實際的賬單金額。商家,支付處理商和金融機構均可以更改這項交易的描述。
我們針對此問題的高階方法是構建一個模型來預測這種可能性或匹配分數:來自銀行和消費組的兩筆的待處理和已過賬的交易是否是同一筆?如果待處理的事務從一個帳戶快照到下一個帳戶快照時消失,我們會將其與新快照上顯示的“最有可能”的已釋出交易進行匹配。當匹配得分高於某個閾值時,貪婪地繼續匹配。
問題的關鍵是選擇一個模型來確定這個匹配分數。
決策樹演算法
為了解決這個問題,我們最初考慮的規則會告訴我們一個特定的待處理和已釋出交易的匹配程度。以下是匹配餐館發起的待處理和已釋出交易的示例規則的直觀表示:
這種基於規則的方法稱為決策樹,它對獨立變數的空間進行分段,如有關事務的資訊,並嘗試查詢可能與匹配事務相對應的此空間區域。雖然上述視覺化中的決策樹輸出布林預測,但決策樹通常用於更強大的機器學習,包括在我們的模型中,而是輸出可能性的預測。
用於訓練決策樹的演算法,在實踐中很少使用獨立樹。這是因為他們傾向於學習訓練資料背後的噪聲而不是資料中的基礎關係。決策樹可能錯誤地瞭解了無關緊要的交易描述,因為很多相互不匹配的事務卻具有相似的交易描述。此問題稱為過度擬合。
過度擬合
過多的模型複雜性導致過度擬合,因為它允許模型扭曲到訓練資料。
過度擬合被稱為“高方差”,因為過度擬合模型強烈依賴於訓練資料,輸入的微小變化將導致預測的大的變化。
另一方面,變數不足和模型複雜性不足導致欠擬合,其中模型太不靈活,無法在訓練資料中找到有意義的關係。欠擬合被稱為“高偏差”,因為欠配合模型具有顯著的系統預測誤差或偏差。
資料科學的一個基本挑戰是偏差 - 方差權衡。不小心增加模型複雜性會導致更高的方差和更低的偏差。如果我們的模型完全基於偏差測量(例如訓練集的準確度)進行優化,那麼它們將傾向於過度擬合。
Bagging
為了解決待發布的匹配問題而不過度擬合,我們的第一個模型使用bagging裝袋和feature 特徵取樣增強了決策樹的概念。讓我們先來討論bagging,這是指bootstrap aggregating。
“Bootstrapping”是在訓練資料的隨機樣本上訓練模型的過程。通過限制訓練過程中使用的資料量,bootstrapping 通過在訓練期間提供不同的噪聲分佈來對抗過度擬合。
“Aggregating”是組合許多不同引導模型的過程。對於bootstrapping 樹,聚合過程通常通過計算樹預測的可能性的平均值來對樹“投票”。由於訓練子集是隨機取樣的,因此決策樹仍然平均適合資料集,但投票給出了更穩健的預測。
結合Bootstrapping和Aggregating結果進行bagging裝袋。
如果元件模型不相關,則bagging裝袋模型會更多地減少差異。然而,僅對不同的訓練資料樣本進行Bootstrapping通常會導致樹具有高度相關的預測,因為最具資訊性的分支規則在取樣的訓練資料中通常是相似的。例如,由於交易描述是未處理和已過程交易是否匹配的強有力指標,因此我們的大多數樹木將嚴重依賴此指標。在這種情況下,bagging裝袋的能力有限,可以減少整體模型的差異。
這是特徵抽樣的來源。
隨機森林
為了減少樹的相關性,我們的模型除了隨機抽樣訓練資料外,還隨機抽樣特徵,產生隨機森林。作為資料科學家工具包的主要成分,隨機森林是具有低過度擬合風險,高效能和高易用性的強大預測因子。
這是Plaid多年來用於匹配待處理和已釋出交易的模型。隨著時間的推移,這種方法被證明是有效的,但並不是很好:當我們根據人類標記資料評估模型時,我們注意到了高假陰性率。我們需要改進模型,以便更可靠地找到匹配項。
當隨機森林失敗時
隨機森林和一般的bagging裝袋易受不合適的不平衡資料集的影響。我們對從待處理pending到已過賬posted匹配的隨機森林模型遇到了這個問題。由於每個待處理交易在訓練集中最多隻有一個已釋出的事務,因此大多數待處理和已過賬交易的候選對都不匹配。這意味著我們的訓練集存在不平衡,其中絕大多數資料“不匹配”; 因此,我們的隨機森林模型錯誤地預測了較低的匹配概率,從而導致較高的假陰性率。
Boosting
為了解決這個問題,我們使用了boost。Boosting將決策樹限制為簡單形式 - 例如,樹不是很深 - 以減少整體模型的偏差。增強演算法迭代地探索訓練資料,新增最大限度地改善聚合模型的受限樹。與bagging裝袋一樣,樹的投票決定最終的決定。
從這個過程我們最終了解到,改善少數情況下的效能 - 匹配的交易對 - 將最大化模型提升。該演算法深入研究了識別該情況的條件,通過精心調整的超引數,我們終於看到了我們的假陰性率的重大改進。
boosting的另一個優點是能夠在訓練期間靈活地定義“模型改進”度量。通過對誤報和漏報分配不對稱懲罰,我們訓練了一個模型,更加符合這些模型錯誤如何不對稱地影響消費者。
結果
與隨機森林模型相比,我們新的增強模型將假陰性率降低了96%,最終為我們的客戶和消費者提供了更高質量的交易資料。除了內部指標改進之外,我們還看到客戶提交的有關待處理到期交易票據顯著減少。
必須瞭解機器學習模型原型的特徵如何導致不同的優點和缺點。雖然我們的新模型在我們提供的資料質量方面取得了重大進步,但它還是有自己的權衡。Boosting對模型改進度量以及限制樹必須簡單的其他超引數敏感。在這種情況下,改善的消費者體驗非常值得仔細的培訓程式和細緻的調整。
還有更多我們還沒有探索。例如,考慮到我們使用大量的分類變數,哪種提升演算法最好?鑑於我們每天有四分之一的美國人使用銀行賬戶處理交易多次,我們如何確保我們的匹配演算法足夠快以便跟上?鑑於難以解釋和解釋其輸出背後的推理,深度神經網路對於這個問題是否值得投資?
相關文章
- 如何通過 JavaScript 實現機器學習和神經學網路?JavaScript機器學習
- 021 通過連結串列學Rust之實現迭代器Rust
- SpareBank網路銀行實現微服務DevOps經驗分享 - Somaiah微服務devAI
- [譯] 通過整合學習提高機器學習結果機器學習
- 008 通過連結串列學習Rust之實現Peek函式Rust函式
- 013 通過連結串列學習Rust之實現連結串列的通用函式Rust函式
- 機器學習實驗出錯總結機器學習
- 機器學習“特徵編碼”的經驗分享:魚還是熊掌?機器學習特徵
- 通過sql 計算兩經緯度之間的距離SQL
- 谷歌機器學習43條規則:機器學習工程的最佳實踐經驗谷歌機器學習
- 2018年終總結_四年計算機科班學習經驗分享+半年工作感悟計算機
- 005 通過連結串列學Rust之實現DropRust
- 經驗&教訓分享:我的第一個機器學習專案機器學習
- 如何實現瀏覽器標籤頁之間的通訊瀏覽器
- 黑客通過崩潰銀行的計算機嘗試入侵 SWIFT黑客計算機Swift
- 機器學習的教訓:5家公司分享的錯誤經驗機器學習
- 如何實現實時機器學習? - huyenchip機器學習
- 經驗教訓:Instacart 的實時機器學習之旅 - shu機器學習
- 017 通過連結串列學Rust之實現元素新增Rust
- 018 通過連結串列學Rust之實現pop frontRust
- 超簡單整合華為 HMS MLKit 機器學習服務:銀行卡識別 SDK,一鍵實現銀行卡繫結機器學習
- 沒有任何計算機經驗,如何學習好Python語言?計算機Python
- C# 學習經驗分享C#
- 分享 | OpenVINO的安裝、上手、學習路線經驗總結
- 2020計算機保研經驗分享計算機
- 過來人的自學python經驗分享Python
- 019 通過連結串列學Rust之雙連結串列實現PeekRust
- 一份經過時間檢驗的 Laravel PHPUnit 測試經驗分享LaravelPHP
- 2018年終總結_四年計算機科班學習經驗分享+半年工作感悟 | 掘金年度徵文計算機
- 計算機考研經驗總結計算機
- 經驗分享,普通本科計算機專業學長走過的一些彎路計算機
- 009 通過連結串列學習Rust之IntoIterRust
- 010 通過連結串列學習Rust之IterRust
- 011 通過連結串列學習Rust之IterMutRust
- GaussDB(for MySQL) :Partial Result Cache,通過快取中間結果對運算元進行加速MySql快取
- 機器學習分享——KNN演算法及numpy實現機器學習KNN演算法
- 通過遊戲學習計算機架構 - embeddedartistry遊戲計算機架構Dart
- AI和機器學習對量化交易領域的影響AI機器學習