med maskinindlæring har du brug for en masse data, så nogle gange giver det mening at kombinere faktiske data med simulerede data for at finde de rigtige mønstre i dataene eller til modelopbygning.

Central limit siger, at jo større datasætets størrelse er, desto bedre, da populationsgennemsnittet tilnærmer sig stikprøvegennemsnittet, når stikprøvestørrelsen bliver rigtig stor. Ved at generere replikerede kopier af prøvedatasættet kan vi estimere prøvegennemsnittet på tværs af forskellige populationer for at sikre, at gennemsnitsværdien er stabil. Vi kan også estimere variansen (usikkerhed) i forudsigelsen af middelværdien.

for at simulere data fra en given prøvedata skal vi være i stand til at identificere mønstre i prøvedataene og også have en vis viden om funktionerne og hvordan de distribueres. For eksempel, hvis jeg har en lille prøve af mandlige højder, og jeg ved, at højder følger en normal fordeling, kunne jeg generere et datasæt af mandlige højder ved hjælp af følgende:

mu = mean(male_heights)sd = sd(male_heights)N = 1000simulated_data = rnorm(N, mu,sd)

denne artikel vil diskutere, hvordan Monte Carlo (MC) simulering kan bruges til at generere omtrentlige replikerede kopier af prøvedatasættet. Hver af disse blokke af datasæt trænes derefter. Derefter beregnes den samlede ydelse af modellen ved at udføre et ensemblegennemsnit over datablokkene inklusive faktiske og simulerede data.

introduktion: forudsigelse af status for et lån er et vigtigt problem i risikovurderingen. En bank eller finansiel organisation skal være i stand til at estimere den involverede risiko, før der ydes et lån til en kunde. Datavidenskab og forudsigelig analyse spiller en vigtig rolle i opbygningen af modeller, der kan bruges til at forudsige sandsynligheden for misligholdelse af lån. I dette projekt er vi forsynet med loan_timing.csv-datasæt indeholdende 50000 datapunkter. Hvert datapunkt repræsenterer et lån, og to funktioner leveres som følger:

  1. kolonnen med overskriften” dage siden oprindelsen ” angiver det antal dage, der er gået mellem oprindelsen og datoen, hvor dataene blev indsamlet.
  2. for lån, der blev opkrævet, før dataene blev indsamlet, angiver kolonnen med overskriften “dage fra oprindelse til opladning” det antal dage, der er gået mellem oprindelse og opladning. For alle andre lån er denne kolonne tom.

Definition af tekniske termer

  1. Oprindelse: dette refererer til den dato, hvor en låntager modtager et lån fra en långiver.
  2. Charge-off (lån standard) Status: Låntageren foretager derefter regelmæssige tilbagebetalinger, indtil låntageren holder op med at foretage betalinger, typisk på grund af økonomiske vanskeligheder, inden udgangen af låneperioden. Denne begivenhed kaldes charge-off, og lånet siges derefter at have opkrævet eller i standardtilstand.
  3. nuværende eller aktiv Status: låntageren fortsætter med at foretage tilbagebetalinger over hele låneperioden. På dette tidspunkt er gælden fuldt tilbagebetalt.
  4. låneperiode: periode, hvor en låneaftale er i kraft, og før eller ved udgangen af hvilken lånet enten skal tilbagebetales eller genforhandles for en anden periode. I dette eksempel betragter vi et lån med en løbetid eller varighed på 3 år.

projektmål: målet med dette projekt er at bruge teknikker inden for datalogi til at estimere, hvilken brøkdel af disse lån (50.000 kundeposter i loan_timing.CSV datasæt) vil have opkrævet i løbet af den 3-årige låneperiode.

datasættet og R-koden til denne artikel kan hentes fra dette arkiv: https://github.com/bot13956/Monte_Carlo_Simulation_Loan_Status.

Importer nødvendige biblioteker

library(readr)
library(tidyverse)
library(broom)
library(caret)

Importer datasæt og forbered data til analyse

df<-read_csv("loan_timing.csv",na="NA")names(df)=c("origination","chargeoff")# partition data set into two: default (charged off ) and currentindex<-which(!(df$chargeoff=="NA"))default<-df%>%slice(index)current<-df%>%slice(-index)

sonderende dataanalyse

A) faktiske Data

# Plot of days to charge-off vs. days since origination for defaulted loans using actual datadefault%>%ggplot(aes(origination,chargeoff))+geom_point()+xlab('days since origination')+ ylab('days to charge-off')+ggtitle("days to charge-off vs. days since origination")+theme(plot.title = element_text(color="black", size=12, hjust=0.5, face="bold"),axis.title.x = element_text(color="black", size=12, face="bold"),axis.title.y = element_text(color="black", size=12, face="bold"),legend.title = element_blank())

B) simulerede Data

# Monte Carlo Simulation of Defaulted Loansset.seed(2)N <- 3*365 # loan duration in daysdf_MC<-data.frame(u=round(runif(15500,0,N)),v=round(runif(15500,0,N)))df_MC<-df_MC%>%filter(v<=u)df_MC<-df_MC%>%filter(u<=730 & v<=730) #select loans within first 2 yearsdf_MC%>%ggplot(aes(u,v))+geom_point()+xlab('days since origination')+ylab('days to charge-off')+ggtitle("MC simulation of days to charge-off vs. days since origination")+theme(plot.title = element_text(color="black", size=12, hjust=0.5, face="bold"),axis.title.x = element_text(color="black", size=12, face="bold"),axis.title.y = element_text(color="black", size=12, face="bold"),legend.title = element_blank())

faktisk og MC-simulering af dage til opladning vs. dage siden oprindelsen.

fordi der er tilfældighed forbundet med opkrævning af et lån, ser vi, at MC-simulering giver en god tilnærmelse til fordelingen af misligholdte lån.

forudsigelser: Da vi har demonstreret, at forholdet mellem dage til opladning og dage siden oprindelsen i de første 2 år (dvs.0 til 730 dage) kan tilnærmes ved hjælp af en MC-simulering, kan vi forudsige den brøkdel af lån, der vil blive opkrævet, når alle deres 3-årige vilkår er færdige med MC-simulering.

det samlede antal debiterede lån i vores datasæt er 3.305. Det betyder, at der er 46.695 lån, der i øjeblikket er aktive. Af disse aktive lån vil en vis andel misligholde over 3-årsperioden. For at estimere den samlede brøkdel af misligholdte lån simulerede vi misligholdte lån med charge-off og dage siden oprindelsen, der dækker hele lånets varighed (dvs.0 til 1095 dage), derefter ved passende skalering beregnede vi den brøkdel af lån, der vil have opkrævet efter 3-årsperioden, dvs. 1095 dage.

# Predicting fraction of these loans will have charged off by the time all of their 3-year term is finished.set.seed(2)B<-1000fraction<-replicate(B, {df2<-data.frame(u=round(runif(50000,0,N)),v=round(runif(50000,0,N)))df2<-df2%>%filter(v<=u)b2<-(df2%>%filter(u<=730 & v<=730))total<-(nrow(df2)/nrow(b2))*nrow(default)100.0*(total/50000.0)})
mean(fraction)# Histogram of total fraction of charged off loansfdf<-data.frame(fraction=fraction)fdf%>%ggplot(aes(fraction))+geom_histogram(color="white",fill="skyblue")+xlab('fraction of charged off loans after 3-year term')+ylab('count')+ggtitle("Histogram of total fraction of charged off loans")+theme(
plot.title = element_text(color="black", size=12, hjust=0.5, face="bold"),
axis.title.x = element_text(color="black", size=12, face="bold"),
axis.title.y = element_text(color="black", size=12, face="bold"),
legend.title = element_blank()
)# Calculate Confidence Interval of Percentage of Defaulted Loans after 3-year termmean<-mean(fraction)sd<-sd(fraction)confidence_interval<-c(mean-2*sd, mean+2*sd)confidence_interval

ved at oprette N = 1000 tilfældige forsøg opnåede vi følgende fordeling for fraktionen af misligholdte lån 3-årig periode:

figur 6: Histogram for brøkdel af debiterede lån efter 3-årig periode ved hjælp af n = 1000 prøver.

baseret på vores beregninger er 95% konfidensintervallet for den brøkdel af lån, der vil have opkrævet efter den 3-årige lånetid, følgelig 14,8% +/- 0,2%. Så hvis 50.000 lån blev givet ud med en låneperiode på 3 år, vil cirka 15% af disse lån misligholde.

konklusioner: vi har præsenteret en simpel model baseret på MC-simuleringen til forudsigelse af den brøkdel af lån, der vil misligholde ved udgangen af den 3-årige låneperiode. Monte Carlo-simulering er en vigtig metode, der kan bruges i receptpligtig analyse til det ordinerende handlingsforløb, der skal tages i tilfælde, hvor datasættet er meget stokastisk.

datasættet og R-koden til denne artikel kan hentes fra dette arkiv: https://github.com/bot13956/Monte_Carlo_Simulation_Loan_Status.

Skriv et svar

Din e-mailadresse vil ikke blive publiceret.

lg