© 2016. Capital One Bank - All Rights Reserved.
Loan Decisioning Transformation
Project IDEAL
(Intelligent Decisioning Engine for Auto Lending)
Fred Crable, Director, Software Engineering
Fredrick.Crable@CapitalOne.com
2© 2016. Capital One Bank - All Rights Reserved.
About Capital One
• A leading diversified bank
– One of the largest Credit Card companies
– Top 10 bank in US
– Nation’s largest digital bank
– 3rd largest independent auto loan provider in US
– Largest consumer and commercial banking institution
headquartered in the Washington, DC region
• Major operations in 15 US cities, Canada,
UK
• More than 70 million customer accounts
• Business & Leadership
– Ranked #127 on the Fortune 500
– Ranked #128 on Forbes
“Most Reputable Companies” list
– Listed on The Financial Times “Global 500” (#278)
– Ranked Training magazine's “Top 125” companies for
employer-sponsored workforce training and
development
2
3Confidential
Loan Decisioning
4Confidential
Pull Credit
• Equifax
• Transunion
• Experian
Lexis Nexis
*Analytic
Models
• Customer
FICO, Debt
• Collateral
Loan to Value
• Back/Front-
End
• Pricing Tiers
*Policy Engine
• Max $
Financed
• Tiers
• Limits
• Fees
• Exceptions
Pick Best
• Cash Down
• Sales Price
• Warranty
• APR
IDEAL - Fast Data Use Case
*Run 1000’s in Parallel and pick the best
5© 2016. Capital One Bank - All Rights Reserved.
Big Data Use Case 1 – Analyze and Adjust
• Customer
• CollateralApplication
• Credit Report
• Driver
Variables
Credit
• In/Out of
Policy
• Offers
• Scores
Model /
Policy
• Accept / Reject
• APR, Finance
Amount...
Outcome
• Adjust
• AvoidAnalyze
Refit/Test
6© 2016. Capital One Bank - All Rights Reserved.
Big Data Use Case #2 – Inventory Search & Scoring
•Inventory
•Book ValueSearch
•Model Scoring
•Policy Checks
Model /
Policy
•In/Out of
Policy
•APR, Finance
Amount...
Outcome
7© 2016. Capital One Bank - All Rights Reserved.
Our Implementation over AKKA
• A system that loads a set of services and uses these services in order specified
– Operations can run in parallel or in sequence ( if they have dependencies )
• The sequence of operations and order of operations are configuration driven
• The initial operation is evaluated and the result set tested to continue
• System takes input from Queue or API and kicks-off the sequence
• Operation chains can be expressed as data condition tests or model/mathematical
operations (expressed as configuration yaml or json)
8© 2016. Capital One Bank - All Rights Reserved.
Open Source Scoring Platform with Basic Decisioning Workflow
• Runs 10s of thousands of models per second on
a single server (4 cores).
• This will scale out with more cores or servers. As
they are added this number increases.
• We can add additional actor systems for other
asynchronous activities (e.g. Bureaus or external
data sources)
9© 2016. Capital One Bank - All Rights Reserved.
AKKA basics
• AKKA helps implement parallel computing easier. Through Actor model.
• AKKA helps to implement distributed parallel computing easier.
• Develop code as actor and message handling – (Loosely a java thread).
10Confidential
Using an Actor (Java)
public class Calculator implements Receiver {
LoggingAdapter log = Logging.getLogger(TypedActor.context().system(), this);
public void onReceive(Object msg, ActorRef actor) {
log.info("Received Message Q> {}", msg);
}
}
//Get access to the ActorRef
ActorRef calActor =
TypedActor.get(_system).getActorRefFor(calculator);
//pass message
calActor.tell("Hi'there");
11© 2016. Capital One Bank - All Rights Reserved.
Actor Flow Development – JSON Defined Workflow
API
Initiates / Blocks
Parallel
Operation
Group 1 Element 1
Parallel
Operation
Group 1 Element 2
Parallel
Operation
Group 1 Element 3
Serial
Operation
Group 2 Element 1
Serial
Operation
Group 2 Element 2
Message
Handler
Supervisor
{
"actorSystemName": ”SimpleSystem",
"context": {
"type": "Define",
"supervision": "Escalate",
"router": "RandomPool",
"lowerCount": 1,
"upperCount": 1,
"childrenMode": "Sequential”
},
"messageHandler": [
{
"name": "MessageHandler1",
"desc": "MessageHandler1",
"clazz": ”Class1",
"group": [
{
"name": "g1",
"desc": "g1",
"order": 1,
"context": {
"type": "Inherit",
"childrenMode": ”Parallel"
},
"element": [
{
"id": 1,
"name": "group1-element1",
"desc": ”first actor in sequence",
"order": 1,
"clazz": [
”MessageInput"
],
"bean": ”Class1Bean"
}
interface Class1Bean <MessageInput, MessageOutput>
extends ServiceInterface {
…
public MessageOutput execute(MessageInput M1)
12© 2016. Capital One Bank - All Rights Reserved.
Actor Workflow Supervisor Pattern
13© 2016. Capital One Bank - All Rights Reserved.
Supervisor Actor Patterns
14© 2016. Capital One Bank - All Rights Reserved.
Actor Workflow Mechanics – Operation and Service Definition
"messageHandler": [
{
"name": "ApplicationScoringService",
"desc": "ApplicationScoringService",
"clazz": "com.capitalone.auto.lo.business.Application",
"context": {
"group": [
{
"name": "ideal",
"desc": "ideal credit pull and decisioning workflow",
"order": 1,
"context": {
"childrenMode": "Sequential",
"carryoverRequest": "true"
},
"element": [
{
"name": "dataService",
"desc": ”get credit data and alternate data",
"clazz": [ "CurrentMessage" ],
"bean": ”DataService"
},
on receive
Handler
Bean
Output
Rules
Define service
Bean and
relative order of
execution
15© 2016. Capital One Bank - All Rights Reserved.
Actor Workflow Mechanics – Conditional Rules
"conditions": [
{
"id": 1,
"name": "Exception",
"reference": "any executionElementId",
"watch": {
"values": ["throws java.lang.Exception”]
}
},
{
"id": 2,
"name": "PrescoreResponse",
"reference": "executionElementId:1.1.1",
"watch": {
"values":
["com.capitalone.auto.lo.response.PreScoreResponse[getAppDecision notEquals A]"]
}
},
on receive
Handler
Bean
Output
Rules
Define service
Bean and
relative order of
execution
16© 2016. Capital One Bank - All Rights Reserved.
Actor Workflow Mechanics – Conditional Flow
"consequences": [
{
"id": 1,
"order": 1,
"name": "Exception",
"action": {
"whenMatched": [ "Exception”],
"thenGoto": "executionElementId:1.3.1"
}
},
{
"id": 2,
"order": 2,
"name": "PreScoreDecline",
"action": {
"whenMatched": [”ModelScoringResponse"],
"thenGoto": "executionElementId:1.2.1"
}
},
on receive
Handler
Bean
Output
Rules
Define service
Bean and
relative order of
execution
17© 2016. Capital One Bank - All Rights Reserved.
Decisioning Workflow
18© 2016. Capital One Bank - All Rights Reserved.
Best Practices
• Plan out your logging strategy with MDC (thread local variable) and use
tools like Splunk
• Identify actors like a person, with state and identity
• Limit granularity of fan-out or scatter-gather operations
• Make sure all actors have the data they need to do their jobs w/o calling
external resources
• Make sure actor operations are idempotent
• Take checkpoints and use AKKA persistence where applicable

Loan Decisioning Transformation

  • 1.
    © 2016. CapitalOne Bank - All Rights Reserved. Loan Decisioning Transformation Project IDEAL (Intelligent Decisioning Engine for Auto Lending) Fred Crable, Director, Software Engineering Fredrick.Crable@CapitalOne.com
  • 2.
    2© 2016. CapitalOne Bank - All Rights Reserved. About Capital One • A leading diversified bank – One of the largest Credit Card companies – Top 10 bank in US – Nation’s largest digital bank – 3rd largest independent auto loan provider in US – Largest consumer and commercial banking institution headquartered in the Washington, DC region • Major operations in 15 US cities, Canada, UK • More than 70 million customer accounts • Business & Leadership – Ranked #127 on the Fortune 500 – Ranked #128 on Forbes “Most Reputable Companies” list – Listed on The Financial Times “Global 500” (#278) – Ranked Training magazine's “Top 125” companies for employer-sponsored workforce training and development 2
  • 3.
  • 4.
    4Confidential Pull Credit • Equifax •Transunion • Experian Lexis Nexis *Analytic Models • Customer FICO, Debt • Collateral Loan to Value • Back/Front- End • Pricing Tiers *Policy Engine • Max $ Financed • Tiers • Limits • Fees • Exceptions Pick Best • Cash Down • Sales Price • Warranty • APR IDEAL - Fast Data Use Case *Run 1000’s in Parallel and pick the best
  • 5.
    5© 2016. CapitalOne Bank - All Rights Reserved. Big Data Use Case 1 – Analyze and Adjust • Customer • CollateralApplication • Credit Report • Driver Variables Credit • In/Out of Policy • Offers • Scores Model / Policy • Accept / Reject • APR, Finance Amount... Outcome • Adjust • AvoidAnalyze Refit/Test
  • 6.
    6© 2016. CapitalOne Bank - All Rights Reserved. Big Data Use Case #2 – Inventory Search & Scoring •Inventory •Book ValueSearch •Model Scoring •Policy Checks Model / Policy •In/Out of Policy •APR, Finance Amount... Outcome
  • 7.
    7© 2016. CapitalOne Bank - All Rights Reserved. Our Implementation over AKKA • A system that loads a set of services and uses these services in order specified – Operations can run in parallel or in sequence ( if they have dependencies ) • The sequence of operations and order of operations are configuration driven • The initial operation is evaluated and the result set tested to continue • System takes input from Queue or API and kicks-off the sequence • Operation chains can be expressed as data condition tests or model/mathematical operations (expressed as configuration yaml or json)
  • 8.
    8© 2016. CapitalOne Bank - All Rights Reserved. Open Source Scoring Platform with Basic Decisioning Workflow • Runs 10s of thousands of models per second on a single server (4 cores). • This will scale out with more cores or servers. As they are added this number increases. • We can add additional actor systems for other asynchronous activities (e.g. Bureaus or external data sources)
  • 9.
    9© 2016. CapitalOne Bank - All Rights Reserved. AKKA basics • AKKA helps implement parallel computing easier. Through Actor model. • AKKA helps to implement distributed parallel computing easier. • Develop code as actor and message handling – (Loosely a java thread).
  • 10.
    10Confidential Using an Actor(Java) public class Calculator implements Receiver { LoggingAdapter log = Logging.getLogger(TypedActor.context().system(), this); public void onReceive(Object msg, ActorRef actor) { log.info("Received Message Q> {}", msg); } } //Get access to the ActorRef ActorRef calActor = TypedActor.get(_system).getActorRefFor(calculator); //pass message calActor.tell("Hi'there");
  • 11.
    11© 2016. CapitalOne Bank - All Rights Reserved. Actor Flow Development – JSON Defined Workflow API Initiates / Blocks Parallel Operation Group 1 Element 1 Parallel Operation Group 1 Element 2 Parallel Operation Group 1 Element 3 Serial Operation Group 2 Element 1 Serial Operation Group 2 Element 2 Message Handler Supervisor { "actorSystemName": ”SimpleSystem", "context": { "type": "Define", "supervision": "Escalate", "router": "RandomPool", "lowerCount": 1, "upperCount": 1, "childrenMode": "Sequential” }, "messageHandler": [ { "name": "MessageHandler1", "desc": "MessageHandler1", "clazz": ”Class1", "group": [ { "name": "g1", "desc": "g1", "order": 1, "context": { "type": "Inherit", "childrenMode": ”Parallel" }, "element": [ { "id": 1, "name": "group1-element1", "desc": ”first actor in sequence", "order": 1, "clazz": [ ”MessageInput" ], "bean": ”Class1Bean" } interface Class1Bean <MessageInput, MessageOutput> extends ServiceInterface { … public MessageOutput execute(MessageInput M1)
  • 12.
    12© 2016. CapitalOne Bank - All Rights Reserved. Actor Workflow Supervisor Pattern
  • 13.
    13© 2016. CapitalOne Bank - All Rights Reserved. Supervisor Actor Patterns
  • 14.
    14© 2016. CapitalOne Bank - All Rights Reserved. Actor Workflow Mechanics – Operation and Service Definition "messageHandler": [ { "name": "ApplicationScoringService", "desc": "ApplicationScoringService", "clazz": "com.capitalone.auto.lo.business.Application", "context": { "group": [ { "name": "ideal", "desc": "ideal credit pull and decisioning workflow", "order": 1, "context": { "childrenMode": "Sequential", "carryoverRequest": "true" }, "element": [ { "name": "dataService", "desc": ”get credit data and alternate data", "clazz": [ "CurrentMessage" ], "bean": ”DataService" }, on receive Handler Bean Output Rules Define service Bean and relative order of execution
  • 15.
    15© 2016. CapitalOne Bank - All Rights Reserved. Actor Workflow Mechanics – Conditional Rules "conditions": [ { "id": 1, "name": "Exception", "reference": "any executionElementId", "watch": { "values": ["throws java.lang.Exception”] } }, { "id": 2, "name": "PrescoreResponse", "reference": "executionElementId:1.1.1", "watch": { "values": ["com.capitalone.auto.lo.response.PreScoreResponse[getAppDecision notEquals A]"] } }, on receive Handler Bean Output Rules Define service Bean and relative order of execution
  • 16.
    16© 2016. CapitalOne Bank - All Rights Reserved. Actor Workflow Mechanics – Conditional Flow "consequences": [ { "id": 1, "order": 1, "name": "Exception", "action": { "whenMatched": [ "Exception”], "thenGoto": "executionElementId:1.3.1" } }, { "id": 2, "order": 2, "name": "PreScoreDecline", "action": { "whenMatched": [”ModelScoringResponse"], "thenGoto": "executionElementId:1.2.1" } }, on receive Handler Bean Output Rules Define service Bean and relative order of execution
  • 17.
    17© 2016. CapitalOne Bank - All Rights Reserved. Decisioning Workflow
  • 18.
    18© 2016. CapitalOne Bank - All Rights Reserved. Best Practices • Plan out your logging strategy with MDC (thread local variable) and use tools like Splunk • Identify actors like a person, with state and identity • Limit granularity of fan-out or scatter-gather operations • Make sure all actors have the data they need to do their jobs w/o calling external resources • Make sure actor operations are idempotent • Take checkpoints and use AKKA persistence where applicable