Tutorial 1: Data Generation
Learn to generate synthetic loan portfolios and macro scenarios.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
| from privatecredit.data import LoanTapeGenerator
generator = LoanTapeGenerator(
n_loans=10000,
n_months=60,
n_vintages=24,
asset_class_weights={
'corporate': 0.40,
'consumer': 0.25,
'realestate': 0.25,
'receivables': 0.10
},
random_seed=42
)
|
Step 2: Generate Loan Tape
1
2
3
4
5
6
7
8
9
10
11
12
| # Generate static features
loans_df = generator.generate_static_features()
print(loans_df.columns.tolist())
# ['loan_id', 'origination_date', 'maturity_date', 'original_balance',
# 'interest_rate', 'rate_type', 'asset_class', 'ltv_origination', ...]
print(loans_df['asset_class'].value_counts())
# corporate 4000
# consumer 2500
# realestate 2500
# receivables 1000
|
Step 3: Generate Macro Scenarios
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
| from privatecredit.data import MacroScenarioGenerator
macro_gen = MacroScenarioGenerator(
n_months=60,
start_date='2020-01-01'
)
# Generate different scenarios
baseline = macro_gen.generate_scenario('baseline')
adverse = macro_gen.generate_scenario('adverse')
severe = macro_gen.generate_scenario('severely_adverse')
print(baseline.columns.tolist())
# ['reporting_month', 'gdp_growth_yoy', 'unemployment_rate', 'inflation_rate',
# 'policy_rate', 'yield_10y', 'credit_spread_ig', 'credit_spread_hy', ...]
|
Step 4: Generate Full Panel
1
2
3
4
5
6
7
8
9
10
11
12
13
| # Generate complete loan tape with performance history
loans_df, panel_df = generator.generate(macro_df=baseline)
print(f"Loans: {len(loans_df)}")
print(f"Loan-month observations: {len(panel_df)}")
# Check final states
final_states = panel_df.groupby('loan_id')['loan_state'].last()
print(final_states.value_counts())
# performing 7500
# prepaid 1200
# default 800
# matured 500
|
Step 5: Explore Asset Class Parameters
1
2
3
4
5
6
7
8
| from privatecredit.data import ASSET_CONFIGS
for name, config in ASSET_CONFIGS.items():
print(f"\n{name.upper()}")
print(f" Balance: {config.balance_range}")
print(f" Rate: {config.rate_range}")
print(f" Default rate: {config.annual_default_rate}")
print(f" LGD: {config.lgd_range}")
|
Next Steps