This document performs exploratory data analysis (EDA) on the Freddie Mac panel dataset, including missingness, class imbalance, feature distributions, macro trends, and summary statistics.
library(data.table)
library(ggplot2)
library(stargazer)
library(patchwork)
OUTPUT_DIR <- "/Users/amalianimeskern/Library/CloudStorage/OneDrive-ErasmusUniversityRotterdam/Freddie Mac Data"
panel <- readRDS(file.path(OUTPUT_DIR, "freddie_mac_panel.rds"))
panel[, uniqueN(loan_sequence_number)]
## [1] 240565
setdiff(unique(panel$property_state),
c("AL","AK","AZ","AR","CA","CO","CT","DE","FL","GA",
"HI","ID","IL","IN","IA","KS","KY","LA","ME","MD",
"MA","MI","MN","MS","MO","MT","NE","NV","NH","NJ",
"NM","NY","NC","ND","OH","OK","OR","PA","RI","SC",
"SD","TN","TX","UT","VT","VA","WA","WV","WI","WY","DC"))
## character(0)
missingness <- data.frame(
feature = names(panel),
missing_pct = sapply(panel, function(x) round(100 * mean(is.na(x)), 2))
)
missingness <- missingness[order(-missingness$missing_pct), ]
missingness
## feature missing_pct
## zero_balance_code zero_balance_code 98.64
## first_default_index first_default_index 94.65
## orig_dti orig_dti 6.19
## orig_loan_term orig_loan_term 0.09
## credit_score credit_score 0.07
## num_borrowers num_borrowers 0.03
## orig_cltv orig_cltv 0.01
## orig_ltv orig_ltv 0.01
## property_state property_state 0.00
## monthly_reporting_period monthly_reporting_period 0.00
## loan_sequence_number loan_sequence_number 0.00
## current_upb current_upb 0.00
## current_delinquency_status current_delinquency_status 0.00
## loan_age loan_age 0.00
## current_deferred_upb current_deferred_upb 0.00
## delta_interest_rate delta_interest_rate 0.00
## mod_flag_12m mod_flag_12m 0.00
## month_index month_index 0.00
## default_next_12m default_next_12m 0.00
## first_payment_date first_payment_date 0.00
## first_time_homebuyer first_time_homebuyer 0.00
## mi_pct mi_pct 0.00
## occupancy_status occupancy_status 0.00
## orig_upb orig_upb 0.00
## orig_interest_rate orig_interest_rate 0.00
## channel channel 0.00
## amortization_type amortization_type 0.00
## property_type property_type 0.00
## loan_purpose loan_purpose 0.00
## io_indicator io_indicator 0.00
## orig_year orig_year 0.00
## orig_month orig_month 0.00
## orig_quarter orig_quarter 0.00
## unemployment_rate_lag1 unemployment_rate_lag1 0.00
## unemployment_rate_lag2 unemployment_rate_lag2 0.00
## unemployment_rate_lag3 unemployment_rate_lag3 0.00
## unemployment_rate_lag4 unemployment_rate_lag4 0.00
## hpi_qoq_qlag1 hpi_qoq_qlag1 0.00
## hpi_qoq_qlag2 hpi_qoq_qlag2 0.00
## hpi_qoq_qlag3 hpi_qoq_qlag3 0.00
## hpi_qoq_qlag4 hpi_qoq_qlag4 0.00
key_vars <- c("credit_score", "orig_ltv", "orig_cltv", "orig_dti",
"orig_interest_rate", "current_upb", "current_deferred_upb",
"delta_interest_rate", "mod_flag_12m",
paste0("unemployment_rate_lag", 1:4),
paste0("hpi_qoq_qlag", 1:4))
missingness[missingness$feature %in% key_vars, ]
## feature missing_pct
## orig_dti orig_dti 6.19
## credit_score credit_score 0.07
## orig_cltv orig_cltv 0.01
## orig_ltv orig_ltv 0.01
## current_upb current_upb 0.00
## current_deferred_upb current_deferred_upb 0.00
## delta_interest_rate delta_interest_rate 0.00
## mod_flag_12m mod_flag_12m 0.00
## orig_interest_rate orig_interest_rate 0.00
## unemployment_rate_lag1 unemployment_rate_lag1 0.00
## unemployment_rate_lag2 unemployment_rate_lag2 0.00
## unemployment_rate_lag3 unemployment_rate_lag3 0.00
## unemployment_rate_lag4 unemployment_rate_lag4 0.00
## hpi_qoq_qlag1 hpi_qoq_qlag1 0.00
## hpi_qoq_qlag2 hpi_qoq_qlag2 0.00
## hpi_qoq_qlag3 hpi_qoq_qlag3 0.00
## hpi_qoq_qlag4 hpi_qoq_qlag4 0.00
table(panel$default_next_12m)
##
## 0 1
## 7295197 17768
prop.table(table(panel$default_next_12m)) * 100
##
## 0 1
## 99.7570343 0.2429657
panel[, .(ever_default = max(default_next_12m)),
by = loan_sequence_number][, mean(ever_default) * 100]
## [1] 7.385946
panel[, .N, by = loan_sequence_number][, summary(N)]
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 1.0 18.0 28.0 30.4 41.0 72.0
setorder(panel, loan_sequence_number, monthly_reporting_period)
cols_to_keep <- c("orig_year", "credit_score", "orig_ltv", "orig_cltv",
"orig_dti", "orig_interest_rate", "orig_upb", "orig_loan_term",
"num_borrowers", "mi_pct", "occupancy_status", "amortization_type",
"loan_purpose", "channel", "property_type",
"first_time_homebuyer", "io_indicator")
loan_level <- panel[, .(ever_default_12m = max(default_next_12m, na.rm = TRUE)),
by = loan_sequence_number]
first_obs <- panel[panel[, .I[1], by = loan_sequence_number]$V1,
c("loan_sequence_number", cols_to_keep), with = FALSE]
loan_level <- merge(loan_level, first_obs, by = "loan_sequence_number")
default_by_year <- loan_level[, .(
n_loans = .N,
default_rate = round(100 * mean(ever_default_12m), 2)
), by = orig_year][order(orig_year)]
default_by_year
## orig_year n_loans default_rate
## <int> <int> <num>
## 1: 2006 41258 12.12
## 2: 2007 49688 13.74
## 3: 2008 49999 9.02
## 4: 2009 49638 1.82
## 5: 2010 49982 1.05
ggplot(default_by_year, aes(x = orig_year, y = default_rate)) +
geom_line() +
geom_point() +
labs(title = "Default Rate by Origination Year",
x = "Origination Year",
y = "Default Rate (%)") +
theme_classic()
continuous_orig <- c("credit_score", "orig_ltv", "orig_dti", "orig_interest_rate")
feature_stats_orig <- rbindlist(lapply(continuous_orig, function(var) {
loan_level[, .(
variable = var,
mean_default = round(mean(get(var)[ever_default_12m == 1], na.rm = TRUE), 2),
mean_no_default = round(mean(get(var)[ever_default_12m == 0], na.rm = TRUE), 2),
sd_default = round(sd(get(var)[ever_default_12m == 1], na.rm = TRUE), 2),
sd_no_default = round(sd(get(var)[ever_default_12m == 0], na.rm = TRUE), 2)
)]
}))
feature_stats_orig
## variable mean_default mean_no_default sd_default sd_no_default
## <char> <num> <num> <num> <num>
## 1: credit_score 690.72 745.61 55.62 51.54
## 2: orig_ltv 77.99 68.54 13.42 18.08
## 3: orig_dti 40.96 34.37 11.40 12.14
## 4: orig_interest_rate 6.41 5.70 0.55 0.81
continuous_behav <- c("current_delinquency_status", "current_upb",
"delta_interest_rate", "mod_flag_12m",
"current_deferred_upb",
"unemployment_rate_lag1", "hpi_qoq_qlag1")
feature_stats_behav <- rbindlist(lapply(continuous_behav, function(var) {
panel[, .(
variable = var,
mean_default = round(mean(get(var)[default_next_12m == 1], na.rm = TRUE), 2),
mean_no_default = round(mean(get(var)[default_next_12m == 0], na.rm = TRUE), 2),
sd_default = round(sd(get(var)[default_next_12m == 1], na.rm = TRUE), 2),
sd_no_default = round(sd(get(var)[default_next_12m == 0], na.rm = TRUE), 2)
)]
}))
feature_stats_behav
## variable mean_default mean_no_default sd_default
## <char> <num> <num> <num>
## 1: current_delinquency_status 0.12 0.01 0.37
## 2: current_upb 198189.42 176828.25 98538.34
## 3: delta_interest_rate -0.01 0.00 0.15
## 4: mod_flag_12m 0.00 0.00 0.02
## 5: current_deferred_upb 4.57 3.91 537.48
## 6: unemployment_rate_lag1 7.77 7.96 2.53
## 7: hpi_qoq_qlag1 -1.76 -0.98 2.40
## sd_no_default
## <num>
## 1: 0.12
## 2: 102407.95
## 3: 0.09
## 4: 0.01
## 5: 653.89
## 6: 2.52
## 7: 1.87
ggplot(panel[!is.na(orig_dti)], aes(x = orig_dti)) +
geom_histogram(binwidth = 2, fill = "orange", color = "white") +
labs(title = "DTI Distribution", x = "DTI", y = "Count") +
theme_classic()
ggplot(panel[!is.na(current_delinquency_status)],
aes(x = factor(current_delinquency_status),
fill = factor(default_next_12m))) +
geom_bar(position = "fill") +
scale_fill_manual(values = c("steelblue", "orange"),
labels = c("No Default", "Default")) +
labs(title = "Default Rate by Delinquency Status",
x = "Delinquency Status",
y = "Proportion",
fill = "") +
theme_classic()
macro_time <- panel[, .(
unemp_lag1 = mean(unemployment_rate_lag1, na.rm = TRUE),
unemp_lag2 = mean(unemployment_rate_lag2, na.rm = TRUE),
unemp_lag3 = mean(unemployment_rate_lag3, na.rm = TRUE),
unemp_lag4 = mean(unemployment_rate_lag4, na.rm = TRUE),
hpi_lag1 = mean(hpi_qoq_qlag1, na.rm = TRUE),
hpi_lag2 = mean(hpi_qoq_qlag2, na.rm = TRUE),
hpi_lag3 = mean(hpi_qoq_qlag3, na.rm = TRUE),
hpi_lag4 = mean(hpi_qoq_qlag4, na.rm = TRUE)
), by = monthly_reporting_period][order(monthly_reporting_period)]
macro_time[, date := as.Date(paste0(
substr(as.character(monthly_reporting_period), 1, 4), "-",
substr(as.character(monthly_reporting_period), 5, 6), "-01"
))]
unemp_long <- melt(macro_time, id.vars = "date",
measure.vars = paste0("unemp_lag", 1:4),
variable.name = "lag", value.name = "unemployment_rate")
hpi_long <- melt(macro_time, id.vars = "date",
measure.vars = paste0("hpi_lag", 1:4),
variable.name = "lag", value.name = "hpi_qoq")
p1 <- ggplot(unemp_long, aes(x = date, y = unemployment_rate)) +
geom_line(color = "steelblue") +
facet_wrap(~lag) +
theme_classic()
p2 <- ggplot(hpi_long, aes(x = date, y = hpi_qoq)) +
geom_line(color = "darkorange") +
geom_hline(yintercept = 0, linetype = "dashed") +
facet_wrap(~lag) +
theme_classic()
p1 / p2
# (kept exactly as your original — safe to run)
# Writes CSV to OUTPUT_DIR
orig_vars <- c("credit_score", "orig_ltv", "orig_cltv", "orig_dti",
"orig_interest_rate", "orig_upb", "orig_loan_term",
"num_borrowers", "mi_pct")
stargazer(as.data.frame(loan_level[, ..orig_vars]),
type = "html",
out = file.path(OUTPUT_DIR, "summary_origination.html"))
##
## <table style="text-align:center"><tr><td colspan="6" style="border-bottom: 1px solid black"></td></tr><tr><td style="text-align:left">Statistic</td><td>N</td><td>Mean</td><td>St. Dev.</td><td>Min</td><td>Max</td></tr>
## <tr><td colspan="6" style="border-bottom: 1px solid black"></td></tr><tr><td style="text-align:left">credit_score</td><td>240,443</td><td>741.559</td><td>53.799</td><td>300</td><td>850</td></tr>
## <tr><td style="text-align:left">orig_ltv</td><td>240,552</td><td>69.239</td><td>17.946</td><td>6</td><td>125</td></tr>
## <tr><td style="text-align:left">orig_cltv</td><td>240,546</td><td>71.336</td><td>18.798</td><td>6</td><td>193</td></tr>
## <tr><td style="text-align:left">orig_dti</td><td>220,093</td><td>34.873</td><td>12.212</td><td>1</td><td>65</td></tr>
## <tr><td style="text-align:left">orig_interest_rate</td><td>240,565</td><td>5.752</td><td>0.816</td><td>3.250</td><td>9.790</td></tr>
## <tr><td style="text-align:left">orig_upb</td><td>240,565</td><td>196,477.300</td><td>107,205.800</td><td>9,000</td><td>1,095,000</td></tr>
## <tr><td style="text-align:left">orig_loan_term</td><td>240,357</td><td>326.925</td><td>68.191</td><td>60</td><td>360</td></tr>
## <tr><td style="text-align:left">num_borrowers</td><td>240,491</td><td>1.563</td><td>0.496</td><td>1</td><td>2</td></tr>
## <tr><td style="text-align:left">mi_pct</td><td>240,562</td><td>3.173</td><td>8.591</td><td>0</td><td>40</td></tr>
## <tr><td colspan="6" style="border-bottom: 1px solid black"></td></tr></table>
panel_cor <- panel[!is.na(default_next_12m)]
all_vars <- c("current_delinquency_status", "loan_age", "current_upb",
"delta_interest_rate", "mod_flag_12m", "current_deferred_upb",
paste0("unemployment_rate_lag", 1:4),
paste0("hpi_qoq_qlag", 1:4),
"credit_score", "orig_ltv", "orig_cltv", "orig_dti",
"orig_interest_rate", "orig_upb", "orig_loan_term",
"num_borrowers", "mi_pct", "default_next_12m")
cor_matrix <- cor(panel_cor[, ..all_vars],
use = "pairwise.complete.obs")
round(cor_matrix, 2)
## current_delinquency_status loan_age current_upb
## current_delinquency_status 1.00 0.06 -0.01
## loan_age 0.06 1.00 -0.15
## current_upb -0.01 -0.15 1.00
## delta_interest_rate -0.01 0.01 -0.01
## mod_flag_12m 0.00 0.00 0.00
## current_deferred_upb 0.00 0.00 0.00
## unemployment_rate_lag1 0.02 0.31 0.05
## unemployment_rate_lag2 0.02 0.32 0.04
## unemployment_rate_lag3 0.02 0.33 0.04
## unemployment_rate_lag4 0.02 0.33 0.04
## hpi_qoq_qlag1 -0.01 -0.07 -0.09
## hpi_qoq_qlag2 -0.01 -0.15 -0.08
## hpi_qoq_qlag3 -0.01 -0.16 -0.08
## hpi_qoq_qlag4 -0.01 -0.14 -0.09
## credit_score -0.11 -0.11 0.06
## orig_ltv 0.02 0.03 0.12
## orig_cltv 0.02 0.03 0.13
## orig_dti 0.03 0.04 0.11
## orig_interest_rate 0.06 0.27 -0.19
## orig_upb -0.01 -0.11 0.96
## orig_loan_term 0.02 0.04 0.20
## num_borrowers -0.02 -0.04 0.15
## mi_pct 0.02 0.04 -0.04
## default_next_12m 0.05 0.01 0.01
## delta_interest_rate mod_flag_12m
## current_delinquency_status -0.01 0.00
## loan_age 0.01 0.00
## current_upb -0.01 0.00
## delta_interest_rate 1.00 -0.18
## mod_flag_12m -0.18 1.00
## current_deferred_upb -0.29 0.04
## unemployment_rate_lag1 -0.02 0.00
## unemployment_rate_lag2 -0.02 0.00
## unemployment_rate_lag3 -0.02 0.00
## unemployment_rate_lag4 -0.02 0.00
## hpi_qoq_qlag1 0.00 0.00
## hpi_qoq_qlag2 0.01 0.00
## hpi_qoq_qlag3 0.01 0.00
## hpi_qoq_qlag4 0.01 0.00
## credit_score 0.02 -0.01
## orig_ltv -0.01 0.00
## orig_cltv -0.01 0.00
## orig_dti -0.02 0.00
## orig_interest_rate -0.02 0.00
## orig_upb -0.01 0.00
## orig_loan_term -0.01 0.00
## num_borrowers 0.00 0.00
## mi_pct -0.01 0.00
## default_next_12m 0.00 0.00
## current_deferred_upb unemployment_rate_lag1
## current_delinquency_status 0.00 0.02
## loan_age 0.00 0.31
## current_upb 0.00 0.05
## delta_interest_rate -0.29 -0.02
## mod_flag_12m 0.04 0.00
## current_deferred_upb 1.00 0.01
## unemployment_rate_lag1 0.01 1.00
## unemployment_rate_lag2 0.01 1.00
## unemployment_rate_lag3 0.01 0.99
## unemployment_rate_lag4 0.01 0.98
## hpi_qoq_qlag1 0.00 -0.25
## hpi_qoq_qlag2 0.00 -0.37
## hpi_qoq_qlag3 0.00 -0.45
## hpi_qoq_qlag4 0.00 -0.52
## credit_score 0.00 0.12
## orig_ltv 0.00 -0.06
## orig_cltv 0.00 -0.07
## orig_dti 0.00 -0.04
## orig_interest_rate 0.01 -0.30
## orig_upb 0.00 0.07
## orig_loan_term 0.00 -0.03
## num_borrowers 0.00 0.00
## mi_pct 0.00 -0.04
## default_next_12m 0.00 0.00
## unemployment_rate_lag2 unemployment_rate_lag3
## current_delinquency_status 0.02 0.02
## loan_age 0.32 0.33
## current_upb 0.04 0.04
## delta_interest_rate -0.02 -0.02
## mod_flag_12m 0.00 0.00
## current_deferred_upb 0.01 0.01
## unemployment_rate_lag1 1.00 0.99
## unemployment_rate_lag2 1.00 1.00
## unemployment_rate_lag3 1.00 1.00
## unemployment_rate_lag4 0.99 1.00
## hpi_qoq_qlag1 -0.23 -0.22
## hpi_qoq_qlag2 -0.34 -0.32
## hpi_qoq_qlag3 -0.44 -0.42
## hpi_qoq_qlag4 -0.51 -0.49
## credit_score 0.12 0.12
## orig_ltv -0.06 -0.06
## orig_cltv -0.07 -0.07
## orig_dti -0.05 -0.05
## orig_interest_rate -0.32 -0.33
## orig_upb 0.07 0.06
## orig_loan_term -0.04 -0.04
## num_borrowers 0.00 0.00
## mi_pct -0.04 -0.04
## default_next_12m 0.00 -0.01
## unemployment_rate_lag4 hpi_qoq_qlag1 hpi_qoq_qlag2
## current_delinquency_status 0.02 -0.01 -0.01
## loan_age 0.33 -0.07 -0.15
## current_upb 0.04 -0.09 -0.08
## delta_interest_rate -0.02 0.00 0.01
## mod_flag_12m 0.00 0.00 0.00
## current_deferred_upb 0.01 0.00 0.00
## unemployment_rate_lag1 0.98 -0.25 -0.37
## unemployment_rate_lag2 0.99 -0.23 -0.34
## unemployment_rate_lag3 1.00 -0.22 -0.32
## unemployment_rate_lag4 1.00 -0.20 -0.31
## hpi_qoq_qlag1 -0.20 1.00 0.53
## hpi_qoq_qlag2 -0.31 0.53 1.00
## hpi_qoq_qlag3 -0.39 0.21 0.61
## hpi_qoq_qlag4 -0.48 0.43 0.34
## credit_score 0.12 -0.02 -0.05
## orig_ltv -0.06 0.08 0.08
## orig_cltv -0.07 0.09 0.09
## orig_dti -0.05 -0.02 -0.01
## orig_interest_rate -0.34 0.01 0.07
## orig_upb 0.06 -0.09 -0.09
## orig_loan_term -0.04 -0.03 -0.02
## num_borrowers 0.00 0.01 0.00
## mi_pct -0.05 0.04 0.05
## default_next_12m -0.01 -0.02 -0.02
## hpi_qoq_qlag3 hpi_qoq_qlag4 credit_score orig_ltv
## current_delinquency_status -0.01 -0.01 -0.11 0.02
## loan_age -0.16 -0.14 -0.11 0.03
## current_upb -0.08 -0.09 0.06 0.12
## delta_interest_rate 0.01 0.01 0.02 -0.01
## mod_flag_12m 0.00 0.00 -0.01 0.00
## current_deferred_upb 0.00 0.00 0.00 0.00
## unemployment_rate_lag1 -0.45 -0.52 0.12 -0.06
## unemployment_rate_lag2 -0.44 -0.51 0.12 -0.06
## unemployment_rate_lag3 -0.42 -0.49 0.12 -0.06
## unemployment_rate_lag4 -0.39 -0.48 0.12 -0.06
## hpi_qoq_qlag1 0.21 0.43 -0.02 0.08
## hpi_qoq_qlag2 0.61 0.34 -0.05 0.08
## hpi_qoq_qlag3 1.00 0.63 -0.06 0.08
## hpi_qoq_qlag4 0.63 1.00 -0.07 0.08
## credit_score -0.06 -0.07 1.00 -0.16
## orig_ltv 0.08 0.08 -0.16 1.00
## orig_cltv 0.09 0.08 -0.15 0.94
## orig_dti 0.00 0.00 -0.18 0.15
## orig_interest_rate 0.10 0.12 -0.33 0.18
## orig_upb -0.10 -0.10 0.07 0.11
## orig_loan_term -0.01 -0.01 -0.08 0.27
## num_borrowers 0.00 0.00 0.02 -0.05
## mi_pct 0.05 0.05 -0.13 0.49
## default_next_12m -0.01 -0.01 -0.04 0.02
## orig_cltv orig_dti orig_interest_rate orig_upb
## current_delinquency_status 0.02 0.03 0.06 -0.01
## loan_age 0.03 0.04 0.27 -0.11
## current_upb 0.13 0.11 -0.19 0.96
## delta_interest_rate -0.01 -0.02 -0.02 -0.01
## mod_flag_12m 0.00 0.00 0.00 0.00
## current_deferred_upb 0.00 0.00 0.01 0.00
## unemployment_rate_lag1 -0.07 -0.04 -0.30 0.07
## unemployment_rate_lag2 -0.07 -0.05 -0.32 0.07
## unemployment_rate_lag3 -0.07 -0.05 -0.33 0.06
## unemployment_rate_lag4 -0.07 -0.05 -0.34 0.06
## hpi_qoq_qlag1 0.09 -0.02 0.01 -0.09
## hpi_qoq_qlag2 0.09 -0.01 0.07 -0.09
## hpi_qoq_qlag3 0.09 0.00 0.10 -0.10
## hpi_qoq_qlag4 0.08 0.00 0.12 -0.10
## credit_score -0.15 -0.18 -0.33 0.07
## orig_ltv 0.94 0.15 0.18 0.11
## orig_cltv 1.00 0.16 0.18 0.13
## orig_dti 0.16 1.00 0.17 0.11
## orig_interest_rate 0.18 0.17 1.00 -0.20
## orig_upb 0.13 0.11 -0.20 1.00
## orig_loan_term 0.27 0.14 0.29 0.18
## num_borrowers -0.03 -0.11 -0.10 0.16
## mi_pct 0.43 0.09 0.19 -0.04
## default_next_12m 0.02 0.02 0.03 0.01
## orig_loan_term num_borrowers mi_pct default_next_12m
## current_delinquency_status 0.02 -0.02 0.02 0.05
## loan_age 0.04 -0.04 0.04 0.01
## current_upb 0.20 0.15 -0.04 0.01
## delta_interest_rate -0.01 0.00 -0.01 0.00
## mod_flag_12m 0.00 0.00 0.00 0.00
## current_deferred_upb 0.00 0.00 0.00 0.00
## unemployment_rate_lag1 -0.03 0.00 -0.04 0.00
## unemployment_rate_lag2 -0.04 0.00 -0.04 0.00
## unemployment_rate_lag3 -0.04 0.00 -0.04 -0.01
## unemployment_rate_lag4 -0.04 0.00 -0.05 -0.01
## hpi_qoq_qlag1 -0.03 0.01 0.04 -0.02
## hpi_qoq_qlag2 -0.02 0.00 0.05 -0.02
## hpi_qoq_qlag3 -0.01 0.00 0.05 -0.01
## hpi_qoq_qlag4 -0.01 0.00 0.05 -0.01
## credit_score -0.08 0.02 -0.13 -0.04
## orig_ltv 0.27 -0.05 0.49 0.02
## orig_cltv 0.27 -0.03 0.43 0.02
## orig_dti 0.14 -0.11 0.09 0.02
## orig_interest_rate 0.29 -0.10 0.19 0.03
## orig_upb 0.18 0.16 -0.04 0.01
## orig_loan_term 1.00 -0.07 0.13 0.02
## num_borrowers -0.07 1.00 -0.04 -0.02
## mi_pct 0.13 -0.04 1.00 0.02
## default_next_12m 0.02 -0.02 0.02 1.00