SECTION 1: LEARNING OBJECTIVES

By the end of this lesson, you will be able to:

  • Define third-party risk and its importance in digital banking.

  • Identify the key third-party risk categories – cybersecurity, compliance, operational, reputational.

  • Apply vendor due diligence and risk assessment frameworks.

  • Implement third-party risk monitoring and ongoing management.

  • Measure third-party risk using key metrics.

  • Understand the regulatory framework – FFIEC, EBA, NYDFS.

  • Develop a third-party risk strategy for a digital bank.


SECTION 2: WHAT IS THIRD-PARTY RISK?

2.1 Definition

Third-party risk is the risk arising from the use of external vendors, partners, and service providers that support the bank’s operations, products, and services. This includes fintechs, technology vendors, payment processors, data providers, and other partners.

2.2 Why Third-Party Risk Matters
 
 
Statistic Implication
60% of data breaches involve third parties. Vendors are a major risk vector.
Banks have 200+ third-party relationships on average. Extensive vendor ecosystem.
70% of banks have experienced a third-party breach. High exposure.
80% of regulators expect enhanced third-party oversight. Regulatory focus.
2.3 Key Third-Party Risk Categories
 
 
Category Description Example
Cybersecurity Risk Vendor security vulnerabilities. Vendor data breach.
Compliance Risk Vendor regulatory violations. Vendor non-compliance.
Operational Risk Vendor service disruptions. System outage.
Reputational Risk Damage from vendor actions. Vendor misconduct.
Financial Risk Vendor financial instability. Vendor bankruptcy.
Concentration Risk Over-reliance on a single vendor. Single cloud provider.

SECTION 3: THIRD-PARTY RISK MANAGEMENT FRAMEWORK

3.1 The TPRM Lifecycle
text
┌─────────────────────────────────────────────────────────────────────────────┐
│                    THIRD-PARTY RISK MANAGEMENT LIFECYCLE                  │
├─────────────────────────────────────────────────────────────────────────────┤
│                                                                             │
│  ┌──────────────────────────────────────────────────────────────────────┐   │
│  │                    IDENTIFICATION                                  │   │
│  │  Identify third parties, classify, inventory                       │   │
│  └──────────────────────────────────────────────────────────────────────┘   │
│                                    │                                        │
│                                    v                                        │
│  ┌──────────────────────────────────────────────────────────────────────┐   │
│  │                    RISK ASSESSMENT                                  │   │
│  │  Assess inherent risk, vendor risk rating                          │   │
│  └──────────────────────────────────────────────────────────────────────┘   │
│                                    │                                        │
│                                    v                                        │
│  ┌──────────────────────────────────────────────────────────────────────┐   │
│  │                    DUE DILIGENCE                                    │   │
│  │  Vendor questionnaires, security assessments, audits              │   │
│  └──────────────────────────────────────────────────────────────────────┘   │
│                                    │                                        │
│                                    v                                        │
│  ┌──────────────────────────────────────────────────────────────────────┐   │
│  │                    CONTRACTING                                      │   │
│  │  Contracts, SLAs, security requirements                             │   │
│  └──────────────────────────────────────────────────────────────────────┘   │
│                                    │                                        │
│                                    v                                        │
│  ┌──────────────────────────────────────────────────────────────────────┐   │
│  │                    ONGOING MONITORING                               │   │
│  │  Continuous monitoring, periodic reviews, performance tracking    │   │
│  └──────────────────────────────────────────────────────────────────────┘   │
│                                    │                                        │
│                                    v                                        │
│  ┌──────────────────────────────────────────────────────────────────────┐   │
│  │                    OFFBOARDING                                      │   │
│  │  Termination, data return, contract closure                        │   │
│  └──────────────────────────────────────────────────────────────────────┘   │
│                                                                             │
└─────────────────────────────────────────────────────────────────────────────┘
3.2 Key TPRM Components
 
 
Component Description Activities
Vendor Inventory Catalogue of all third parties. Classification, risk rating.
Risk Assessment Evaluate vendor risk. Security, compliance, financial.
Due Diligence Verify vendor capabilities. Questionnaires, audits.
Contract Management Define requirements. SLAs, security clauses.
Monitoring Ongoing oversight. Performance reviews, security monitoring.
Exit Planning Offboarding. Data return, transition.

SECTION 4: VENDOR RISK ASSESSMENT

4.1 Risk Categories and Scoring
 
 
Category Risk Factors Assessment Criteria
Security Data protection, access controls. SOC2, ISO 27001.
Compliance Regulatory compliance. GDPR, PCI DSS.
Financial Financial stability. Financial statements.
Operational Service reliability. SLAs, uptime.
Reputational Brand reputation. Public records.
4.2 Vendor Risk Scoring
 
 
Score Risk Level Description Action
1-2 Low Minimal risk. Standard monitoring.
3-4 Medium Moderate risk. Enhanced monitoring.
5-6 High Significant risk. Frequent monitoring.
7-8 Critical Severe risk. Immediate action, exit planning.

SECTION 5: REGULATORY FRAMEWORK

5.1 Key Regulations
 
 
Regulation Region Requirements
FFIEC US Third-party risk management guidelines.
EBA Guidelines EU Outsourcing and third-party risk.
NYDFS US (NY) Third-party risk management.
GDPR EU Data processor requirements.
PCI DSS Global Third-party access control.
5.2 Regulatory Expectations
 
 
Expectation Description Implementation
Risk Assessment Assess third-party risks. Vendor risk assessments.
Due Diligence Conduct vendor due diligence. Security questionnaires.
Contractual Requirements Include security requirements. Security clauses, SLAs.
Ongoing Monitoring Continuously monitor vendors. Performance reviews.
Exit Planning Plan for vendor termination. Exit strategies.

SECTION 6: IMPLEMENTATION IN PYTHON – TPRM TOOLS

python
# ===================================================================
# MODULE 8, LESSON 7: THIRD-PARTY RISK MANAGEMENT
# ===================================================================

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
from datetime import datetime, timedelta
import warnings
warnings.filterwarnings('ignore')

print("="*70)
print("THIRD-PARTY RISK MANAGEMENT IN DIGITAL BANKING")
print("="*70)

# ----------------------------------------------------------------
# PART A: VENDOR INVENTORY
# ----------------------------------------------------------------

print("\n" + "-"*60)
print("PART A: Vendor Inventory")
print("-"*60)

np.random.seed(42)
n_vendors = 50

vendor_data = pd.DataFrame({
    'vendor_id': range(1, n_vendors + 1),
    'vendor_name': [f'Vendor_{i}' for i in range(1, n_vendors + 1)],
    'category': np.random.choice(['Technology', 'Payment', 'Data', 'Cloud', 'Consulting', 'Other'], n_vendors),
    'criticality': np.random.choice(['Critical', 'High', 'Medium', 'Low'], n_vendors, p=[0.2, 0.3, 0.3, 0.2]),
    'risk_score': np.random.randint(1, 8, n_vendors),
    'last_assessment': [datetime.now() - timedelta(days=np.random.randint(0, 365)) for _ in range(n_vendors)],
    'next_assessment': [datetime.now() + timedelta(days=np.random.randint(30, 180)) for _ in range(n_vendors)],
    'status': np.random.choice(['Active', 'Under Review', 'Approved', 'Terminated'], n_vendors, p=[0.7, 0.1, 0.15, 0.05])
})

print("Vendor Inventory:")
print(vendor_data.head(10).to_string(index=False))

# Visualise
fig, axes = plt.subplots(2, 2, figsize=(14, 10))

# Category Distribution
ax = axes[0, 0]
category_counts = vendor_data['category'].value_counts()
ax.bar(category_counts.index, category_counts.values, color='teal', alpha=0.7)
ax.set_xlabel('Category')
ax.set_ylabel('Count')
ax.set_title('Vendors by Category')
ax.tick_params(axis='x', rotation=45)
ax.grid(True, alpha=0.3)

# Criticality Distribution
ax = axes[0, 1]
criticality_counts = vendor_data['criticality'].value_counts()
colors = {'Critical': 'red', 'High': 'orange', 'Medium': 'yellow', 'Low': 'green'}
ax.bar(criticality_counts.index, criticality_counts.values, 
       color=[colors.get(c, 'gray') for c in criticality_counts.index], alpha=0.7)
ax.set_xlabel('Criticality')
ax.set_ylabel('Count')
ax.set_title('Vendor Criticality')
ax.grid(True, alpha=0.3)

# Risk Score Distribution
ax = axes[1, 0]
risk_scores = vendor_data['risk_score'].value_counts().sort_index()
ax.bar(risk_scores.index, risk_scores.values, color='blue', alpha=0.7)
ax.set_xlabel('Risk Score (1-8)')
ax.set_ylabel('Count')
ax.set_title('Vendor Risk Scores')
ax.grid(True, alpha=0.3)

# Status Distribution
ax = axes[1, 1]
status_counts = vendor_data['status'].value_counts()
ax.pie(status_counts.values, labels=status_counts.index, autopct='%1.1f%%')
ax.set_title('Vendor Status')

plt.tight_layout()
plt.savefig('vendor_inventory.png', dpi=300, bbox_inches='tight')
plt.show()
print("Vendor inventory visualisation saved as 'vendor_inventory.png'")

# ----------------------------------------------------------------
# PART B: VENDOR RISK SCORING
# ----------------------------------------------------------------

print("\n" + "-"*60)
print("PART B: Vendor Risk Scoring")
print("-"*60)

# Define risk factors and weights
risk_factors = {
    'Security': {'weight': 0.30},
    'Compliance': {'weight': 0.20},
    'Financial': {'weight': 0.15},
    'Operational': {'weight': 0.15},
    'Reputational': {'weight': 0.10},
    'Geopolitical': {'weight': 0.10}
}

# Simulate vendor risk scores
np.random.seed(42)
vendor_risk = pd.DataFrame({
    'vendor_id': range(1, n_vendors + 1),
    'security_score': np.random.uniform(1, 8, n_vendors),
    'compliance_score': np.random.uniform(1, 8, n_vendors),
    'financial_score': np.random.uniform(1, 8, n_vendors),
    'operational_score': np.random.uniform(1, 8, n_vendors),
    'reputational_score': np.random.uniform(1, 8, n_vendors),
    'geopolitical_score': np.random.uniform(1, 8, n_vendors)
})

# Calculate overall risk score
weights = {'security_score': 0.30, 'compliance_score': 0.20, 'financial_score': 0.15,
           'operational_score': 0.15, 'reputational_score': 0.10, 'geopolitical_score': 0.10}

vendor_risk['overall_risk'] = (
    vendor_risk['security_score'] * weights['security_score'] +
    vendor_risk['compliance_score'] * weights['compliance_score'] +
    vendor_risk['financial_score'] * weights['financial_score'] +
    vendor_risk['operational_score'] * weights['operational_score'] +
    vendor_risk['reputational_score'] * weights['reputational_score'] +
    vendor_risk['geopolitical_score'] * weights['geopolitical_score']
).round(2)

# Add risk category
def risk_category(score):
    if score <= 2.5: return 'Low'
    elif score <= 4.5: return 'Medium'
    elif score <= 6.5: return 'High'
    else: return 'Critical'

vendor_risk['risk_category'] = vendor_risk['overall_risk'].apply(risk_category)

print("Vendor Risk Scores:")
print(vendor_risk.head(10).to_string(index=False))

risk_summary = vendor_risk['risk_category'].value_counts()
print("\nRisk Category Summary:")
print(risk_summary)

# ----------------------------------------------------------------
# PART C: VENDOR DUE DILIGENCE CHECKLIST
# ----------------------------------------------------------------

print("\n" + "-"*60)
print("PART C: Vendor Due Diligence Checklist")
print("-"*60)

due_diligence = pd.DataFrame({
    'Domain': ['Security', 'Security', 'Security', 'Compliance', 'Compliance', 
               'Financial', 'Financial', 'Operational', 'Operational', 'Reputational'],
    'Check': [
        'SOC2 Type II Report',
        'ISO 27001 Certification',
        'Security Incident Response Plan',
        'GDPR Compliance',
        'PCI DSS Compliance',
        'Financial Statements (3 years)',
        'Insurance Coverage',
        'Service Level Agreements',
        'Disaster Recovery Plan',
        'Reputation Assessment'
    ],
    'Status': ['✅', '✅', '🟡', '✅', '🟡', '🟡', '✅', '✅', '🟡', '🟡'],
    'Priority': ['High', 'High', 'High', 'High', 'High', 'Medium', 'Medium', 'High', 'High', 'Medium']
})

print("Vendor Due Diligence Checklist:")
print(due_diligence.to_string(index=False))

# ----------------------------------------------------------------
# PART D: VENDOR RISK DASHBOARD
# ----------------------------------------------------------------

print("\n" + "-"*60)
print("PART D: Vendor Risk Dashboard")
print("-"*60)

# Merge vendor data with risk scores
vendor_summary = vendor_data.merge(vendor_risk[['vendor_id', 'overall_risk', 'risk_category']], on='vendor_id')

# Summary statistics
dashboard = {
    'Total Vendors': len(vendor_summary),
    'Critical Vendors': len(vendor_summary[vendor_summary['risk_category'] == 'Critical']),
    'High Risk Vendors': len(vendor_summary[vendor_summary['risk_category'] == 'High']),
    'Vendors with Breaches': np.random.randint(0, 5),
    'Average Risk Score': vendor_summary['overall_risk'].mean(),
    'Compliance Rate': len(vendor_summary[vendor_summary['status'] == 'Approved']) / len(vendor_summary) * 100
}

print("Vendor Risk Dashboard:")
for key, value in dashboard.items():
    if isinstance(value, float):
        print(f"  {key}: {value:.2f}")
    else:
        print(f"  {key}: {value}")

# Visualise risk by category
fig, ax = plt.subplots(figsize=(10, 6))
risk_by_category = vendor_summary.groupby('category')['overall_risk'].mean().sort_values()
ax.barh(risk_by_category.index, risk_by_category.values, color='teal', alpha=0.7)
ax.set_xlabel('Average Risk Score')
ax.set_title('Average Risk Score by Vendor Category')
ax.grid(True, alpha=0.3)
plt.tight_layout()
plt.savefig('vendor_risk_by_category.png', dpi=300, bbox_inches='tight')
plt.show()
print("Vendor risk by category visualisation saved as 'vendor_risk_by_category.png'")

# ----------------------------------------------------------------
# PART E: THIRD-PARTY RISK METRICS
# ----------------------------------------------------------------

print("\n" + "-"*60)
print("PART E: Third-Party Risk Metrics Dashboard")
print("-"*60)

tprm_metrics = pd.DataFrame({
    'Metric': [
        'Vendor Risk Assessment Coverage',
        'Critical Vendor Risk Score',
        'Vendor Compliance Rate',
        'Third-Party Incidents',
        'Vendor Due Diligence Completion',
        'Contractual Security Compliance',
        'Vendor Performance Score',
        'Vendor Offboarding Rate'
    ],
    'Current Value': [
        '72%',
        '6.2/8',
        '68%',
        '8/year',
        '65%',
        '58%',
        '75/100',
        '5%'
    ],
    'Target Value': [
        '> 95%',
        '< 4/8',
        '> 95%',
        '0/year',
        '> 95%',
        '> 90%',
        '> 85/100',
        '< 10%'
    ],
    'Status': ['🟡', '🟡', '🔴', '🟡', '🔴', '🔴', '🟡', '🟡']
})

print("Third-Party Risk Metrics Dashboard:")
print(tprm_metrics.to_string(index=False))

# ----------------------------------------------------------------
# PART F: TPRM ROADMAP
# ----------------------------------------------------------------

print("\n" + "-"*60)
print("PART F: Third-Party Risk Roadmap")
print("-"*60)

roadmap = {
    "Phase 1 (0-6 months) – Foundation": {
        "Focus": "Build TPRM foundation.",
        "Activities": [
            "Create vendor inventory and classification.",
            "Implement vendor risk assessment framework.",
            "Establish vendor due diligence process.",
            "Implement contract security requirements."
        ],
        "Success Metrics": ["Vendor inventory complete", "Risk assessment coverage > 80%"]
    },
    "Phase 2 (6-12 months) – Scale": {
        "Focus": "Scale TPRM capabilities.",
        "Activities": [
            "Implement automated vendor risk monitoring.",
            "Establish vendor performance metrics.",
            "Conduct regular vendor security assessments.",
            "Implement vendor incident response."
        ],
        "Success Metrics": ["Risk assessment coverage > 90%", "Vendor incidents < 5/year"]
    },
    "Phase 3 (12-24 months) – Advanced": {
        "Focus": "Advanced TPRM capabilities.",
        "Activities": [
            "Implement AI-powered vendor risk scoring.",
            "Deploy vendor risk analytics.",
            "Establish vendor risk dashboards.",
            "Build vendor risk culture."
        ],
        "Success Metrics": ["Risk assessment coverage > 95%", "Vendor incidents < 2/year"]
    },
    "Phase 4 (24+ months) – Leadership": {
        "Focus": "Industry-leading TPRM.",
        "Activities": [
            "Implement predictive vendor risk analytics.",
            "Build autonomous vendor risk management.",
            "Achieve industry leadership.",
            "Establish TPRM culture."
        ],
        "Success Metrics": ["Industry-leading TPRM", "Continuous improvement"]
    }
}

for phase, details in roadmap.items():
    print(f"\n{phase}:")
    print(f"  Focus: {details['Focus']}")
    print("  Activities:")
    for activity in details['Activities']:
        print(f"    • {activity}")
    print("  Success Metrics:")
    for metric in details['Success Metrics']:
        print(f"    • {metric}")

# ----------------------------------------------------------------
# PART G: SUMMARY AND RECOMMENDATIONS
# ----------------------------------------------------------------

print("\n" + "="*70)
print("PART G: Summary and Recommendations")
print("="*70)

print("""
Third-Party Risk Management – Key Takeaways:

1. Third-party risk is a major concern for digital banks (60% of breaches involve third parties).
2. Risk categories: cybersecurity, compliance, operational, reputational, financial, concentration.
3. TPRM lifecycle: identification → risk assessment → due diligence → contracting → monitoring → offboarding.
4. Vendor risk scoring: Low, Medium, High, Critical.
5. Regulatory requirements: FFIEC, EBA, NYDFS, GDPR, PCI DSS.
6. Key metrics: risk assessment coverage, critical vendor risk, compliance rate, third-party incidents.
7. Roadmap: foundation → scale → advanced → leadership.

Recommendations:
  - Create a complete vendor inventory.
  - Implement vendor risk assessment framework.
  - Conduct regular due diligence and monitoring.
  - Include security requirements in contracts.
  - Track and report TPRM metrics.
  - Continuously improve vendor risk management.
""")

print("="*70)
print("END OF LESSON 7 – MODULE 8")
print("="*70)

SECTION 7: SUMMARY FOR THE DATA PRACTITIONER

  • Third-party risk is a major concern for digital banks, with 60% of breaches involving third parties.

  • Risk categories include cybersecurity, compliance, operational, reputational, financial, and concentration risks.

  • TPRM lifecycle includes identification, risk assessment, due diligence, contracting, ongoing monitoring, and offboarding.

  • Vendor risk scoring categorises vendors as Low, Medium, High, or Critical risk.

  • Regulatory requirements include FFIEC, EBA, NYDFS, GDPR, and PCI DSS.

  • Key metrics include risk assessment coverage, critical vendor risk score, compliance rate, and third-party incidents.

  • Roadmap progresses from foundation to scaling, advanced, and leadership phases.


SECTION 8: RECOMMENDED NEXT STEPS

  1. Create a complete vendor inventory.

  2. Implement vendor risk assessment framework.

  3. Conduct regular due diligence and monitoring.

  4. Include security requirements in contracts.

  5. Track and report TPRM metrics.

  6. Continuously improve vendor risk management.

  7. Prepare for Lesson 8: Risk Culture and Governance.


[END OF LESSON 7 – MODULE 8]