Brief Explanation: These curves show the entire set of prosper loan broken down by credit grade and lined up along the x axis on their origination date… As a loan goes late (1 month or worse) it is counted (either by amount or by count) as late against the population… The curves stop when the loan population falls below 250 (ie there are 249 or less loans that age or older)…
Recently a study from the University of Maryland claimed a peak default date around month 10 of a Prosper loan. This would translate into the largest delta in this graph over a month period. Does this graph confirm or deny that statement? Is it conclusive? Please leave a comment.
Here is the vintage curves by count (click graph for larger version)…
Here is the vintage curves by amount (larger loan go late at a higher rate and therefore on a percentage basis you would expect an increase), (click graph for larger version)…
Here is the SQL that I used to pull the underlying data out of the public and private data downloads…
DECLARE @DTD int
SET @DTD=30
SELECT
cast(aday-originationdate as int) as 'PIT',
l.creditgrade,
sum(PrincipalBalance+NetDefaults) as 'Amount',
count(l.[key]) as 'Count',
sum(case WHEN (mld.DPD!=0 and
(mld.DPD+(aday-observationdate))>@DTD) THEN
PrincipalBalance+NetDefaults ELSE 0 END) as 'AmountLate',
sum(case WHEN (mld.DPD!=0 and
(mld.DPD+(aday-observationdate))>@DTD) THEN
PrincipalBalance+NetDefaults ELSE 0 END)/
sum(PrincipalBalance+NetDefaults) as AmountLatePercentage,
sum(case WHEN (mld.DPD!=0 and
(mld.DPD+(aday-observationdate))>@DTD) THEN
1 ELSE 0 END) as 'CountLate',
sum(case WHEN (mld.DPD!=0 and
(mld.DPD+(aday-observationdate))>@DTD) THEN
1.0 ELSE 0.0 END)/count(l.[key]) as 'CountLatePercentage'
FROM
loan l
inner join creditprofile cp on cp.listingkey=l.listingkey
inner join LoanPerformance mld on l.[key]=mld.loankey cross join alldays
where
mld.observationdate = ( select top 1 observationdate
from LoanPerformance sub
where sub.observationdate < aday
and sub.loankey=mld.loankey order by sub.observationdate DESC )
and aday < getDate()
and aday >= '02/01/2006'
and l.creditgrade!='NC'
group by
cast(aday-originationdate as int),
l.creditgrade
having
count(l.[key])>250 and
sum(PrincipalBalance+NetDefaults)>0
order by
'PIT'




































