SECTION 1: LEARNING OBJECTIVES

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

  • Understand the evolution of wealth management from traditional to digital.

  • Define robo-advisory and its role in digital banking.

  • Identify the key features of robo-advisory products.

  • Apply Modern Portfolio Theory (MPT) to robo-advisory.

  • Implement portfolio construction and rebalancing.

  • Understand the technology stack for robo-advisory.

  • Measure robo-advisory performance using key metrics.

  • Develop a robo-advisory product strategy for a digital bank.


SECTION 2: THE EVOLUTION OF WEALTH MANAGEMENT

2.1 Historical Evolution
 
 
Era Characteristics Key Developments
Traditional Wealth Management Human advisors, high-net-worth focus. Personal relationships, high fees.
Digital Wealth Management Online platforms, self-directed investing. Online trading, low-cost ETFs.
Robo-Advisory Algorithm-driven, automated investing. Automated rebalancing, tax-loss harvesting.
Hybrid Advisory Human + digital advice. Combination of human advisors and algorithms.
AI-Powered Wealth Management AI-driven personalisation. Generative AI, predictive analytics.
2.2 Wealth Management Segments
 
 
Segment Description Key Characteristics
Mass Market Everyday investors. Low assets, self-directed, low fees.
Mass Affluent Middle-income investors. Moderate assets, robo-advisory, hybrid advice.
High-Net-Worth Wealthy individuals. High assets, personalised advice, human advisors.
Ultra-High-Net-Worth Extreme wealth. Family offices, bespoke strategies.

SECTION 3: ROBO-ADVISORY

3.1 What is Robo-Advisory?

Robo-advisory is a digital platform that provides automated, algorithm-driven financial planning and investment services with little to no human supervision.

Key Features:

 
 
Feature Description Benefit
Automated Investing Algorithmic portfolio management. Low cost, accessible.
Goal-Based Planning Tailored to customer goals. Personalised, outcome-focused.
Auto-Rebalancing Maintain target asset allocation. Stay on track, reduce risk.
Tax-Loss Harvesting Offset gains with losses. Tax efficiency.
Low Fees Fraction of traditional advisor fees. Cost savings.
Low Minimums Low account minimums. Accessible to mass market.
User-Friendly Interface Intuitive app/website. Easy to use.
3.2 Robo-Advisory Market Landscape
 
 
Player Type Key Features
Betterment Pure-play robo-advisor. Goal-based investing, tax-loss harvesting.
Wealthfront Pure-play robo-advisor. Automated investing, financial planning.
Nutmeg UK-based robo-advisor. Managed portfolios, ISAs, pensions.
SoFi Invest Hybrid (bank + robo). Automated investing, active trading.
Vanguard Personal Advisor Hybrid (human + digital). Human advisors + robo capabilities.
Schwab Intelligent Portfolios Hybrid. No advisory fee, ETF portfolios.
Acorns Micro-investing. Round-up savings, automated investing.

SECTION 4: MODERN PORTFOLIO THEORY (MPT)

4.1 Key Concepts
 
 
Concept Description Formula
Expected Return Weighted average of asset returns. E(Rp)=∑wiE(Ri)
Portfolio Variance Risk of the portfolio. σp2=∑i∑jwiwjσij
Efficient Frontier Optimal portfolios with max return for given risk. Optimisation problem.
Sharpe Ratio Return per unit of risk. E(Rp)−Rfσp
4.2 Portfolio Optimisation
text
┌─────────────────────────────────────────────────────────────────────────────┐
│                    PORTFOLIO OPTIMISATION                                 │
├─────────────────────────────────────────────────────────────────────────────┤
│                                                                             │
│  ┌──────────────────────────────────────────────────────────────────────┐   │
│  │                    1. DEFINE OBJECTIVES                             │   │
│  │  (Return target, risk tolerance, investment horizon)                │   │
│  └──────────────────────────────────────────────────────────────────────┘   │
│                                    │                                        │
│                                    v                                        │
│  ┌──────────────────────────────────────────────────────────────────────┐   │
│  │                    2. ASSET CLASS SELECTION                         │   │
│  │  (Equities, bonds, real estate, commodities, alternatives)          │   │
│  └──────────────────────────────────────────────────────────────────────┘   │
│                                    │                                        │
│                                    v                                        │
│  ┌──────────────────────────────────────────────────────────────────────┐   │
│  │                    3. OPTIMISATION                                  │   │
│  │  (Mean-variance optimisation, risk parity, black-litterman)        │   │
│  └──────────────────────────────────────────────────────────────────────┘   │
│                                    │                                        │
│                                    v                                        │
│  ┌──────────────────────────────────────────────────────────────────────┐   │
│  │                    4. IMPLEMENTATION                                │   │
│  │  (Portfolio construction, rebalancing, monitoring)                  │   │
│  └──────────────────────────────────────────────────────────────────────┘   │
│                                                                             │
└─────────────────────────────────────────────────────────────────────────────┘

SECTION 5: ROBO-ADVISORY TECHNOLOGY STACK

5.1 Robo-Advisory Architecture
text
┌─────────────────────────────────────────────────────────────────────────────┐
│                    ROBO-ADVISORY TECHNOLOGY STACK                         │
├─────────────────────────────────────────────────────────────────────────────┤
│                                                                             │
│  ┌──────────────────────────────────────────────────────────────────────┐   │
│  │                    CUSTOMER INTERFACE                               │   │
│  │  (Mobile App, Web Portal, Chatbot)                                  │   │
│  └──────────────────────────────────────────────────────────────────────┘   │
│                                    │                                        │
│                                    v                                        │
│  ┌──────────────────────────────────────────────────────────────────────┐   │
│  │                    INVESTMENT ALGORITHM                             │   │
│  │  (Asset allocation, rebalancing, tax-loss harvesting)              │   │
│  └──────────────────────────────────────────────────────────────────────┘   │
│                                    │                                        │
│                                    v                                        │
│  ┌──────────────────────────────────────────────────────────────────────┐   │
│  │                    PORTFOLIO MANAGEMENT                             │   │
│  │  (Portfolio construction, optimisation, monitoring)                │   │
│  └──────────────────────────────────────────────────────────────────────┘   │
│                                    │                                        │
│                                    v                                        │
│  ┌──────────────────────────────────────────────────────────────────────┐   │
│  │                    TRADING AND EXECUTION                            │   │
│  │  (Order placement, trade execution, settlement)                    │   │
│  └──────────────────────────────────────────────────────────────────────┘   │
│                                    │                                        │
│                                    v                                        │
│  ┌──────────────────────────────────────────────────────────────────────┐   │
│  │                    DATA AND ANALYTICS                               │   │
│  │  (Market data, customer data, analytics, risk management)          │   │
│  └──────────────────────────────────────────────────────────────────────┘   │
│                                                                             │
└─────────────────────────────────────────────────────────────────────────────┘
5.2 Key Technology Components
 
 
Component Technology Purpose
Customer Onboarding KYC, risk profiling Assess customer risk tolerance.
Portfolio Optimisation Mean-variance optimisation Construct optimal portfolios.
Trading API integration Execute trades.
Rebalancing Automated algorithms Maintain target allocation.
Reporting Analytics, dashboards Performance reporting.
Security Encryption, IAM Protect customer data.

SECTION 6: IMPLEMENTATION IN PYTHON – ROBO-ADVISORY

python
# ===================================================================
# MODULE 7, LESSON 5: WEALTH MANAGEMENT AND ROBO-ADVISORY
# ===================================================================

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

print("="*70)
print("WEALTH MANAGEMENT AND ROBO-ADVISORY PRODUCTS")
print("="*70)

# ----------------------------------------------------------------
# PART A: ASSET CLASS CHARACTERISTICS
# ----------------------------------------------------------------

print("\n" + "-"*60)
print("PART A: Asset Class Characteristics")
print("-"*60)

# Define asset classes
asset_classes = ['US Equities', 'International Equities', 'US Bonds', 
                 'International Bonds', 'Real Estate', 'Commodities', 'Cash']

# Expected returns (annual %)
returns = [0.09, 0.08, 0.04, 0.03, 0.06, 0.05, 0.02]

# Risk (volatility %)
volatilities = [0.18, 0.20, 0.06, 0.08, 0.12, 0.15, 0.02]

# Correlation matrix (simplified)
correlations = np.array([
    [1.00, 0.70, 0.10, 0.05, 0.40, 0.20, 0.00],
    [0.70, 1.00, 0.15, 0.08, 0.35, 0.25, 0.00],
    [0.10, 0.15, 1.00, 0.60, 0.20, 0.05, 0.05],
    [0.05, 0.08, 0.60, 1.00, 0.15, 0.05, 0.05],
    [0.40, 0.35, 0.20, 0.15, 1.00, 0.30, 0.05],
    [0.20, 0.25, 0.05, 0.05, 0.30, 1.00, 0.00],
    [0.00, 0.00, 0.05, 0.05, 0.05, 0.00, 1.00]
])

# Calculate covariance matrix
cov_matrix = np.diag(volatilities) @ correlations @ np.diag(volatilities)

# Create DataFrame
asset_df = pd.DataFrame({
    'Asset Class': asset_classes,
    'Expected Return (%)': returns,
    'Volatility (%)': volatilities
})

print("Asset Class Characteristics:")
print(asset_df.to_string(index=False))

# Visualise correlations
fig, ax = plt.subplots(figsize=(10, 8))
sns.heatmap(correlations, annot=True, fmt='.2f', cmap='coolwarm', 
            xticklabels=asset_classes, yticklabels=asset_classes, ax=ax)
ax.set_title('Asset Class Correlation Matrix')
plt.tight_layout()
plt.savefig('roboadvisor_correlations.png', dpi=300, bbox_inches='tight')
plt.show()
print("Correlation matrix visualisation saved as 'roboadvisor_correlations.png'")

# ----------------------------------------------------------------
# PART B: PORTFOLIO OPTIMISATION
# ----------------------------------------------------------------

print("\n" + "-"*60)
print("PART B: Portfolio Optimisation")
print("-"*60)

def portfolio_performance(weights, returns, cov_matrix):
    """Calculate portfolio return, volatility, and Sharpe ratio."""
    port_return = np.sum(returns * weights)
    port_volatility = np.sqrt(weights.T @ cov_matrix @ weights)
    return port_return, port_volatility

def negative_sharpe(weights, returns, cov_matrix, risk_free_rate=0.02):
    """Calculate negative Sharpe ratio for optimisation."""
    port_return, port_volatility = portfolio_performance(weights, returns, cov_matrix)
    return -(port_return - risk_free_rate) / port_volatility

# Optimise for maximum Sharpe ratio
n_assets = len(asset_classes)
constraints = ({'type': 'eq', 'fun': lambda x: np.sum(x) - 1})
bounds = tuple((0, 1) for _ in range(n_assets))

# Initial guess (equal weight)
initial_weights = np.ones(n_assets) / n_assets

# Optimise
result = minimize(negative_sharpe, initial_weights, 
                  args=(returns, cov_matrix, 0.02),
                  method='SLSQP', bounds=bounds, constraints=constraints)

optimal_weights = result.x

# Calculate optimal portfolio performance
opt_return, opt_volatility = portfolio_performance(optimal_weights, returns, cov_matrix)
opt_sharpe = (opt_return - 0.02) / opt_volatility

# Create DataFrame with optimal weights
weights_df = pd.DataFrame({
    'Asset Class': asset_classes,
    'Weight (%)': optimal_weights * 100
}).sort_values('Weight (%)', ascending=False)

print("Optimal Portfolio (Max Sharpe Ratio):")
print(weights_df.to_string(index=False))
print(f"\nExpected Return: {opt_return*100:.2f}%")
print(f"Volatility: {opt_volatility*100:.2f}%")
print(f"Sharpe Ratio: {opt_sharpe:.3f}")

# ----------------------------------------------------------------
# PART C: EFFICIENT FRONTIER
# ----------------------------------------------------------------

print("\n" + "-"*60)
print("PART C: Efficient Frontier")
print("-"*60)

# Generate efficient frontier
target_returns = np.linspace(0.02, 0.12, 100)
efficient_volatilities = []

for target in target_returns:
    constraints = (
        {'type': 'eq', 'fun': lambda x: np.sum(x) - 1},
        {'type': 'eq', 'fun': lambda x: x @ returns - target}
    )
    result = minimize(lambda x: x @ cov_matrix @ x, initial_weights,
                      method='SLSQP', bounds=bounds, constraints=constraints)
    if result.success:
        efficient_volatilities.append(np.sqrt(result.fun))
    else:
        efficient_volatilities.append(np.nan)

efficient_volatilities = np.array(efficient_volatilities)
valid_idx = ~np.isnan(efficient_volatilities)

# Visualise efficient frontier
fig, ax = plt.subplots(figsize=(12, 8))

# Plot efficient frontier
ax.plot(efficient_volatilities[valid_idx] * 100, target_returns[valid_idx] * 100, 
        'b-', linewidth=2, label='Efficient Frontier')

# Plot optimal portfolio
ax.scatter(opt_volatility * 100, opt_return * 100, 
           color='red', s=100, zorder=5, label='Optimal Portfolio (Max Sharpe)')

# Plot individual assets
for i, asset in enumerate(asset_classes):
    ax.scatter(volatilities[i] * 100, returns[i] * 100, 
               label=asset, s=50)

ax.set_xlabel('Volatility (%)')
ax.set_ylabel('Expected Return (%)')
ax.set_title('Efficient Frontier')
ax.legend(loc='best')
ax.grid(True, alpha=0.3)

plt.tight_layout()
plt.savefig('efficient_frontier_roboadvisor.png', dpi=300, bbox_inches='tight')
plt.show()
print("Efficient frontier visualisation saved as 'efficient_frontier_roboadvisor.png'")

# ----------------------------------------------------------------
# PART D: CLIENT RISK PROFILING
# ----------------------------------------------------------------

print("\n" + "-"*60)
print("PART D: Client Risk Profiling")
print("-"*60)

def risk_profile(age, income, investment_horizon, risk_tolerance, financial_goals):
    """Determine client risk profile."""
    # Simple scoring model
    score = 0
    
    # Age factor
    if age < 30:
        score += 3
    elif age < 45:
        score += 2
    elif age < 60:
        score += 1
    else:
        score += 0
    
    # Income factor
    if income > 150000:
        score += 2
    elif income > 75000:
        score += 1
    
    # Investment horizon factor
    if investment_horizon > 10:
        score += 3
    elif investment_horizon > 5:
        score += 2
    elif investment_horizon > 2:
        score += 1
    
    # Risk tolerance factor
    score += risk_tolerance  # 1-5 scale
    
    # Financial goals factor
    if financial_goals.lower() in ['growth', 'aggressive']:
        score += 3
    elif financial_goals.lower() in ['balanced', 'moderate']:
        score += 2
    else:
        score += 1
    
    # Determine profile
    if score >= 10:
        profile = 'Aggressive'
        equity_allocation = 0.80
        bond_allocation = 0.10
        alternative_allocation = 0.10
    elif score >= 7:
        profile = 'Moderate'
        equity_allocation = 0.60
        bond_allocation = 0.30
        alternative_allocation = 0.10
    else:
        profile = 'Conservative'
        equity_allocation = 0.30
        bond_allocation = 0.60
        alternative_allocation = 0.10
    
    return {
        'Profile': profile,
        'Equity Allocation': equity_allocation,
        'Bond Allocation': bond_allocation,
        'Alternative Allocation': alternative_allocation,
        'Score': score
    }

# Example clients
clients = [
    {'name': 'Young Professional', 'age': 28, 'income': 85000, 'horizon': 20, 'tolerance': 4, 'goals': 'Growth'},
    {'name': 'Family Person', 'age': 40, 'income': 120000, 'horizon': 15, 'tolerance': 3, 'goals': 'Balanced'},
    {'name': 'Near Retiree', 'age': 58, 'income': 95000, 'horizon': 7, 'tolerance': 2, 'goals': 'Preservation'}
]

print("Client Risk Profiles:")
for client in clients:
    profile = risk_profile(client['age'], client['income'], client['horizon'], 
                          client['tolerance'], client['goals'])
    print(f"\n{client['name']}:")
    print(f"  Profile: {profile['Profile']}")
    print(f"  Equity Allocation: {profile['Equity Allocation']*100:.0f}%")
    print(f"  Bond Allocation: {profile['Bond Allocation']*100:.0f}%")
    print(f"  Alternative Allocation: {profile['Alternative Allocation']*100:.0f}%")

# ----------------------------------------------------------------
# PART E: ROBO-ADVISORY METRICS
# ----------------------------------------------------------------

print("\n" + "-"*60)
print("PART E: Robo-Advisory Metrics Dashboard")
print("-"*60)

roboadvisor_metrics = pd.DataFrame({
    'Metric': [
        'AUM (Assets Under Management)',
        'Client Accounts',
        'Average Account Size',
        'Annual Return',
        'Client Retention',
        'NPS',
        'Average Fee',
        'Automation Rate'
    ],
    'Current Value': [
        '$1.5B',
        '45,000',
        '$33,000',
        '8.5%',
        '92%',
        '62',
        '0.25%',
        '95%'
    ],
    'Target Value': [
        '$5.0B',
        '100,000+',
        '$50,000+',
        '> 10%',
        '> 95%',
        '> 70',
        '< 0.20%',
        '> 98%'
    ],
    'Status': ['🟡', '🟡', '🟡', '🟡', '🟡', '🟡', '🟡', '🟡']
})

print("Robo-Advisory Metrics Dashboard:")
print(roboadvisor_metrics.to_string(index=False))

# ----------------------------------------------------------------
# PART F: ROBO-ADVISORY ROADMAP
# ----------------------------------------------------------------

print("\n" + "-"*60)
print("PART F: Robo-Advisory Roadmap")
print("-"*60)

roadmap = {
    "Phase 1 (0-6 months) – Foundation": {
        "Focus": "Build robo-advisory foundation.",
        "Activities": [
            "Develop risk profiling algorithm.",
            "Build portfolio optimisation engine.",
            "Implement core banking integration.",
            "Launch MVP with basic portfolios."
        ],
        "Success Metrics": ["MVP launched", "100+ clients"]
    },
    "Phase 2 (6-12 months) – Scale": {
        "Focus": "Scale robo-advisory capabilities.",
        "Activities": [
            "Add tax-loss harvesting.",
            "Implement goal-based planning.",
            "Enhance reporting and analytics.",
            "Launch mobile app."
        ],
        "Success Metrics": ["AUM > $500M", "Client retention > 90%"]
    },
    "Phase 3 (12-24 months) – Advanced": {
        "Focus": "Advanced wealth management.",
        "Activities": [
            "Launch hybrid advisory (human + digital).",
            "Add ESG and sustainable investing.",
            "Implement AI-powered personalisation.",
            "Launch institutional offering."
        ],
        "Success Metrics": ["AUM > $2B", "ESG assets > 25%"]
    },
    "Phase 4 (24+ months) – Leadership": {
        "Focus": "Industry-leading wealth management.",
        "Activities": [
            "Launch full-service wealth management.",
            "Build global capabilities.",
            "Achieve industry leadership.",
            "Continuous innovation."
        ],
        "Success Metrics": ["Industry-leading robo-advisory", "Continuous innovation"]
    }
}

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("""
Wealth Management and Robo-Advisory – Key Takeaways:

1. Robo-advisory provides automated, algorithm-driven investment management.
2. Modern Portfolio Theory (MPT) underpins portfolio optimisation.
3. Key features: automated investing, rebalancing, tax-loss harvesting, low fees.
4. Risk profiling determines appropriate asset allocation.
5. Technology stack: customer interface, investment algorithm, portfolio management, trading.
6. Key metrics: AUM, client accounts, return, retention, NPS.
7. Roadmap: foundation → scale → advanced → leadership.

Recommendations:
  - Build risk profiling and portfolio optimisation capabilities.
  - Launch MVP with core robo-advisory features.
  - Scale with tax-loss harvesting and goal-based planning.
  - Offer hybrid advisory for mass affluent clients.
  - Add ESG and sustainable investing options.
  - Continuously improve personalisation and performance.
""")

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

SECTION 7: SUMMARY FOR THE DATA PRACTITIONER

  • Robo-advisory provides automated, algorithm-driven investment management with low fees and low minimums.

  • Modern Portfolio Theory (MPT) underpins portfolio optimisation, balancing risk and return.

  • Key features include automated investing, auto-rebalancing, tax-loss harvesting, and goal-based planning.

  • Risk profiling determines appropriate asset allocation based on age, income, horizon, tolerance, and goals.

  • Technology stack includes customer interface, investment algorithm, portfolio management, trading, and data analytics.

  • Key metrics include AUM, client accounts, average account size, annual return, client retention, and NPS.

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


SECTION 8: RECOMMENDED NEXT STEPS

  1. Build risk profiling and portfolio optimisation capabilities.

  2. Launch MVP with core robo-advisory features.

  3. Scale with tax-loss harvesting and goal-based planning.

  4. Offer hybrid advisory for mass affluent clients.

  5. Add ESG and sustainable investing options.

  6. Continuously improve personalisation and performance.

  7. Prepare for Lesson 6: Sustainable Finance and ESG Products.


[END OF LESSON 5 – MODULE 7]