SECTION 1: LEARNING OBJECTIVES

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

  • Define sustainable finance and ESG investing.

  • Identify the key ESG frameworks – GRI, SASB, TCFD, ISSB.

  • Understand ESG product categories – green loans, ESG funds, green bonds.

  • Apply ESG integration in investment products.

  • Measure ESG product performance using key metrics.

  • Understand the regulatory landscape – SFDR, EU Taxonomy.

  • Develop an ESG product strategy for a digital bank.


SECTION 2: WHAT IS SUSTAINABLE FINANCE?

2.1 Definition

Sustainable finance refers to the integration of Environmental, Social, and Governance (ESG) criteria into financial services – including investment decisions, lending, and risk management – to promote long-term sustainable development.

2.2 The Three Pillars of ESG
 
 
Pillar Description Examples
Environmental (E) Impact on the natural environment. Carbon emissions, resource use, pollution, biodiversity.
Social (S) Impact on people and society. Labour standards, human rights, community relations.
Governance (G) How the organisation is run. Board structure, executive pay, transparency.
2.3 Why ESG Matters in Banking
 
 
Driver Description
Regulatory Pressure EU SFDR, CSRD, SEC climate disclosure rules.
Investor Demand ESG assets projected to reach $50T by 2025.
Risk Management Climate change poses material financial risks.
Reputation Customers and stakeholders demand corporate responsibility.
Performance Evidence that ESG integration can enhance returns.

SECTION 3: ESG FRAMEWORKS AND STANDARDS

3.1 Key ESG Frameworks
 
 
Framework Focus Use Case
GRI Comprehensive sustainability reporting. Corporate reporting.
SASB Industry-specific material ESG issues. Investor-focused disclosure.
TCFD Climate-related financial risks. Climate risk disclosure.
ISSB Global baseline for sustainability disclosure. Consolidated standards.
EU Taxonomy Classification of sustainable activities. Green investment.
SFDR Sustainable finance disclosure regulation. Fund classification.
3.2 ESG Scoring

ESG Score is a composite measure of a company’s ESG performance (e.g., 0-100). It is calculated as a weighted average of E, S, and G scores:

ESG Score=wE×E+wS×S+wG×G

Where wE+wS+wG=1


SECTION 4: ESG PRODUCT CATEGORIES

4.1 ESG Product Types
 
 
Category Description Examples
Green Loans Loans for environmentally sustainable projects. Solar financing, energy efficiency.
ESG Funds Investment funds with ESG criteria. ESG ETFs, sustainable mutual funds.
Green Bonds Bonds for environmental projects. Renewable energy, green buildings.
Impact Investing Investments with measurable social/environmental impact. Social impact bonds.
ESG Mortgages Mortgage products with ESG incentives. Energy-efficient home mortgages.
Carbon Offsetting Products that offset carbon emissions. Carbon offset cards.
4.2 ESG Investment Strategies
 
 
Strategy Description Example
Negative Screening Exclude controversial sectors. No fossil fuels, tobacco, weapons.
Positive Screening Include high ESG performers. Best-in-class ESG companies.
ESG Integration Integrate ESG into financial analysis. ESG-adjusted valuations.
Impact Investing Invest for measurable impact. Renewable energy projects.
Thematic Investing Focus on ESG themes. Clean energy, water, social equity.

SECTION 5: REGULATORY LANDSCAPE

5.1 Key Regulations
 
 
Regulation Region Requirements
SFDR EU Classify funds as Article 6, 8, or 9.
EU Taxonomy EU Classification of sustainable activities.
CSRD EU Expanded non-financial reporting.
TCFD Global Climate-related disclosure.
SEC Climate Rules US Climate risk disclosure.
ISSB Global Sustainability disclosure standards.
5.2 SFDR Fund Classification
 
 
Article Description ESG Requirements
Article 6 Standard funds. No ESG integration.
Article 8 ESG-focused funds. ESG integration, disclose environmental/social characteristics.
Article 9 Sustainability funds. Sustainable investment objective.

SECTION 6: IMPLEMENTATION IN PYTHON – ESG PRODUCTS

python
# ===================================================================
# MODULE 7, LESSON 6: SUSTAINABLE FINANCE AND ESG PRODUCTS
# ===================================================================

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

print("="*70)
print("SUSTAINABLE FINANCE AND ESG PRODUCTS")
print("="*70)

# ----------------------------------------------------------------
# PART A: ESG PRODUCT PORTFOLIO
# ----------------------------------------------------------------

print("\n" + "-"*60)
print("PART A: ESG Product Portfolio")
print("-"*60)

esg_products = pd.DataFrame({
    'Product': [
        'ESG ETF',
        'Green Bond Fund',
        'Clean Energy Fund',
        'Sustainable Savings Account',
        'Green Mortgage',
        'ESG Robo-Advisor',
        'Carbon Offset Card'
    ],
    'Category': [
        'Investment', 'Investment', 'Investment', 'Deposit',
        'Lending', 'Investment', 'Payments'
    ],
    'ESG Focus': [
        'Integrated', 'Environmental', 'Environmental', 'Environmental',
        'Environmental', 'Integrated', 'Environmental'
    ],
    'Assets ($M)': [500, 300, 200, 100, 150, 250, 50],
    'Growth (%)': [25, 30, 35, 20, 15, 40, 45],
    'Fee (%)': [0.30, 0.40, 0.50, 0.10, 1.00, 0.35, 0.05]
})

print("ESG Product Portfolio:")
print(esg_products.to_string(index=False))

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

# Assets by Product
ax = axes[0]
esg_sorted = esg_products.sort_values('Assets ($M)', ascending=True)
ax.barh(esg_sorted['Product'], esg_sorted['Assets ($M)'], color='green', alpha=0.7)
ax.set_xlabel('Assets ($M)')
ax.set_title('ESG Assets by Product')
ax.grid(True, alpha=0.3)

# Growth vs Assets
ax = axes[1]
scatter = ax.scatter(esg_products['Assets ($M)'], esg_products['Growth (%)'], 
                     s=esg_products['Assets ($M)'] * 0.5, alpha=0.7)
for i, row in esg_products.iterrows():
    ax.annotate(row['Product'], (row['Assets ($M)'] + 5, row['Growth (%)'] + 0.5))
ax.set_xlabel('Assets ($M)')
ax.set_ylabel('Growth (%)')
ax.set_title('ESG Product Growth vs Assets')
ax.grid(True, alpha=0.3)

plt.tight_layout()
plt.savefig('esg_products.png', dpi=300, bbox_inches='tight')
plt.show()
print("ESG product visualisation saved as 'esg_products.png'")

# ----------------------------------------------------------------
# PART B: ESG SCORING FRAMEWORK
# ----------------------------------------------------------------

print("\n" + "-"*60)
print("PART B: ESG Scoring Framework")
print("-"*60)

# Define company ESG scores
companies = pd.DataFrame({
    'Company': [
        'Company A', 'Company B', 'Company C', 'Company D', 'Company E'
    ],
    'Sector': [
        'Technology', 'Energy', 'Finance', 'Healthcare', 'Consumer'
    ],
    'E_Score': [85, 45, 65, 70, 55],
    'S_Score': [80, 50, 70, 75, 60],
    'G_Score': [90, 60, 75, 80, 65]
})

# Calculate ESG score (weighted average)
weights = {'E': 0.4, 'S': 0.3, 'G': 0.3}
companies['ESG_Score'] = (
    companies['E_Score'] * weights['E'] +
    companies['S_Score'] * weights['S'] +
    companies['G_Score'] * weights['G']
).round(2)

print("Company ESG Scores:")
print(companies.to_string(index=False))

# Visualise
fig, ax = plt.subplots(figsize=(10, 6))
companies.set_index('Company')[['E_Score', 'S_Score', 'G_Score', 'ESG_Score']].plot(kind='bar', ax=ax)
ax.set_ylabel('Score')
ax.set_title('ESG Scores by Company')
ax.legend(loc='best')
ax.grid(True, alpha=0.3)
plt.tight_layout()
plt.savefig('esg_scores.png', dpi=300, bbox_inches='tight')
plt.show()
print("ESG scores visualisation saved as 'esg_scores.png'")

# ----------------------------------------------------------------
# PART C: ESG PORTFOLIO CONSTRUCTION
# ----------------------------------------------------------------

print("\n" + "-"*60)
print("PART C: ESG Portfolio Construction")
print("-"*60)

# Generate synthetic ESG portfolio data
np.random.seed(42)
n_companies = 100

esg_portfolio = pd.DataFrame({
    'company_id': range(1, n_companies + 1),
    'esg_score': np.random.normal(65, 15, n_companies).clip(20, 95),
    'return_expected': np.random.normal(0.08, 0.03, n_companies).clip(0.02, 0.15),
    'volatility': np.random.normal(0.15, 0.05, n_companies).clip(0.05, 0.35),
    'sector': np.random.choice(['Technology', 'Energy', 'Finance', 'Healthcare', 'Consumer', 'Utilities'], n_companies)
})

# ESG screening: include companies with ESG score > 60
esg_portfolio['pass_esg'] = esg_portfolio['esg_score'] > 60

# Portfolio options
normal_portfolio = esg_portfolio.sample(frac=0.3, random_state=42)
esg_portfolio_selected = esg_portfolio[esg_portfolio['pass_esg']].sample(frac=0.3, random_state=42)

print("ESG Portfolio Summary:")
print(f"Total Companies: {len(esg_portfolio)}")
print(f"ESG Pass Rate: {esg_portfolio['pass_esg'].mean():.2%}")
print(f"Normal Portfolio: {len(normal_portfolio)} companies")
print(f"ESG Portfolio: {len(esg_portfolio_selected)} companies")

# Compare portfolios
normal_return = normal_portfolio['return_expected'].mean()
normal_volatility = normal_portfolio['volatility'].mean()
esg_return = esg_portfolio_selected['return_expected'].mean()
esg_volatility = esg_portfolio_selected['volatility'].mean()

comparison = pd.DataFrame({
    'Portfolio': ['Normal', 'ESG'],
    'Expected Return (%)': [normal_return * 100, esg_return * 100],
    'Volatility (%)': [normal_volatility * 100, esg_volatility * 100],
    'Avg ESG Score': [
        normal_portfolio['esg_score'].mean(),
        esg_portfolio_selected['esg_score'].mean()
    ]
})

print("\nPortfolio Comparison:")
print(comparison.to_string(index=False))

# ----------------------------------------------------------------
# PART D: GREEN LOAN PRODUCT SIMULATION
# ----------------------------------------------------------------

print("\n" + "-"*60)
print("PART D: Green Loan Product Simulation")
print("-"*60)

class GreenLoanProduct:
    """Simulate a green loan product."""
    
    def __init__(self):
        self.loans = []
        self.green_projects = []
    
    def create_loan(self, customer_id, amount, term, purpose):
        """Create a green loan."""
        loan = {
            'loan_id': len(self.loans) + 1,
            'customer_id': customer_id,
            'amount': amount,
            'term': term,
            'purpose': purpose,
            'interest_rate': self.calculate_rate(purpose),
            'green': self.is_green(purpose),
            'created_at': datetime.now().isoformat(),
            'status': 'Active'
        }
        self.loans.append(loan)
        return loan
    
    def calculate_rate(self, purpose):
        """Calculate interest rate based on purpose."""
        base_rate = 0.05
        if purpose in ['Solar Panels', 'EV', 'Energy Efficiency', 'Green Building']:
            return base_rate - 0.01  # Green discount
        return base_rate
    
    def is_green(self, purpose):
        """Check if the loan is green."""
        green_purposes = ['Solar Panels', 'EV', 'Energy Efficiency', 'Green Building', 
                         'Sustainable Agriculture', 'Water Conservation']
        return purpose in green_purposes
    
    def get_portfolio_stats(self):
        """Get green loan portfolio statistics."""
        if not self.loans:
            return {'total_loans': 0}
        
        green_loans = [l for l in self.loans if l['green']]
        total_amount = sum(l['amount'] for l in self.loans)
        green_amount = sum(l['amount'] for l in green_loans)
        
        return {
            'total_loans': len(self.loans),
            'green_loans': len(green_loans),
            'total_amount': total_amount,
            'green_amount': green_amount,
            'green_ratio': green_amount / total_amount if total_amount > 0 else 0
        }

# Test green loan product
green_loan = GreenLoanProduct()

# Create loans
green_loan.create_loan('CUST001', 25000, 60, 'Solar Panels')
green_loan.create_loan('CUST002', 15000, 48, 'EV')
green_loan.create_loan('CUST003', 30000, 72, 'Home Renovation')
green_loan.create_loan('CUST004', 50000, 84, 'Energy Efficiency')
green_loan.create_loan('CUST005', 10000, 36, 'Car Purchase')

stats = green_loan.get_portfolio_stats()
print("Green Loan Portfolio:")
print(f"  Total Loans: {stats['total_loans']}")
print(f"  Green Loans: {stats['green_loans']}")
print(f"  Green Ratio: {stats['green_ratio']:.2%}")

# ----------------------------------------------------------------
# PART E: ESG PRODUCT METRICS
# ----------------------------------------------------------------

print("\n" + "-"*60)
print("PART E: ESG Product Metrics Dashboard")
print("-"*60)

esg_metrics = pd.DataFrame({
    'Metric': [
        'ESG Assets Under Management',
        'Green Loan Portfolio',
        'ESG Fund Performance',
        'Carbon Reduction Impact',
        'ESG Client Adoption',
        'SFDR Article 8/9 Funds',
        'ESG NPS',
        'Regulatory Compliance'
    ],
    'Current Value': [
        '$1.2B',
        '$250M',
        '8.2%',
        '15,000 tonnes',
        '35%',
        '12',
        '58',
        '92%'
    ],
    'Target Value': [
        '$5.0B',
        '$1.0B',
        '> 10%',
        '50,000 tonnes',
        '> 60%',
        '25+',
        '> 70',
        '100%'
    ],
    'Status': ['🟡', '🟡', '🟡', '🟡', '🔴', '🟡', '🟡', '🟡']
})

print("ESG Product Metrics Dashboard:")
print(esg_metrics.to_string(index=False))

# ----------------------------------------------------------------
# PART F: ESG PRODUCT ROADMAP
# ----------------------------------------------------------------

print("\n" + "-"*60)
print("PART F: ESG Product Roadmap")
print("-"*60)

roadmap = {
    "Phase 1 (0-6 months) – Foundation": {
        "Focus": "Build ESG product foundation.",
        "Activities": [
            "Launch ESG ETF and green bond funds.",
            "Develop ESG scoring framework.",
            "Implement green loan product.",
            "Comply with SFDR Article 8 requirements."
        ],
        "Success Metrics": ["ESG AUM > $500M", "Green loan portfolio > $100M"]
    },
    "Phase 2 (6-12 months) – Scale": {
        "Focus": "Scale ESG products.",
        "Activities": [
            "Launch ESG robo-advisory.",
            "Add sustainable savings account.",
            "Implement green mortgage product.",
            "Achieve SFDR Article 9 for select funds."
        ],
        "Success Metrics": ["ESG AUM > $1.5B", "ESG client adoption > 40%"]
    },
    "Phase 3 (12-24 months) – Expansion": {
        "Focus": "Expand ESG product range.",
        "Activities": [
            "Launch impact investing products.",
            "Implement carbon offset products.",
            "Build ESG analytics platform.",
            "Achieve industry-leading ESG credentials."
        ],
        "Success Metrics": ["ESG AUM > $3B", "Carbon reduction > 30,000 tonnes"]
    },
    "Phase 4 (24+ months) – Leadership": {
        "Focus": "Industry-leading ESG products.",
        "Activities": [
            "Launch full ESG banking suite.",
            "Build global ESG capabilities.",
            "Achieve sustainability leadership.",
            "Continuous innovation."
        ],
        "Success Metrics": ["Industry-leading ESG products", "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("""
Sustainable Finance and ESG Products – Key Takeaways:

1. Sustainable finance integrates ESG criteria into financial services.
2. ESG pillars: Environmental, Social, Governance.
3. Key frameworks: GRI, SASB, TCFD, ISSB, EU Taxonomy, SFDR.
4. ESG products: green loans, ESG funds, green bonds, impact investing.
5. Investment strategies: negative screening, positive screening, ESG integration, impact investing.
6. Regulatory landscape: SFDR, EU Taxonomy, CSRD, TCFD.
7. Key metrics: ESG AUM, green loan portfolio, ESG performance, carbon reduction.

Recommendations:
  - Launch ESG ETF and green bond funds.
  - Implement green loan products.
  - Develop ESG scoring and analytics.
  - Comply with SFDR and EU Taxonomy.
  - Build ESG robo-advisory capabilities.
  - Continuously innovate and improve ESG products.
""")

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

SECTION 7: SUMMARY FOR THE DATA PRACTITIONER

  • Sustainable finance integrates Environmental, Social, and Governance (ESG) criteria into financial services.

  • ESG pillars: Environmental (carbon, pollution), Social (labour, human rights), Governance (board, transparency).

  • Key frameworks include GRI, SASB, TCFD, ISSB, EU Taxonomy, and SFDR.

  • ESG products include green loans, ESG funds (ETFs, mutual funds), green bonds, impact investing, and carbon offset products.

  • Investment strategies include negative screening, positive screening, ESG integration, and impact investing.

  • Regulatory landscape includes SFDR (fund classification), EU Taxonomy (sustainable activities), CSRD (reporting), and TCFD (climate disclosure).

  • Key metrics include ESG AUM, green loan portfolio, ESG fund performance, carbon reduction impact, and ESG client adoption.


SECTION 8: RECOMMENDED NEXT STEPS

  1. Launch ESG ETF and green bond funds.

  2. Implement green loan products.

  3. Develop ESG scoring and analytics.

  4. Comply with SFDR and EU Taxonomy.

  5. Build ESG robo-advisory capabilities.

  6. Continuously innovate and improve ESG products.

  7. Prepare for Lesson 7: Product Innovation and Lifecycle Management.