Использование Монте-Карло для моделирования большего количества данных из заданного образца данных

При машинном обучении вам нужно много данных, поэтому иногда имеет смысл объединить фактические данные с смоделированными данными, чтобы найти правильные закономерности в данных или для построения модели.

Центральный предел говорит о том, что чем больше размер набора данных, тем лучше, поскольку среднее значение совокупности приближается к среднему значению выборки, когда размер выборки становится действительно большим. Создавая реплицированные копии выборочного набора данных, мы можем оценить выборочное среднее для разных популяций, чтобы гарантировать, что среднее значение является стабильным. Мы также можем оценить дисперсию (неопределенность) в предсказании среднего значения.

Чтобы смоделировать данные из заданного образца данных, нам необходимо уметь идентифицировать закономерности в образце данных, а также иметь некоторые знания о функциях и о том, как они распределяются. Например, если у меня есть небольшая выборка роста мужчин и я знаю, что рост подчиняется нормальному распределению, я мог бы сгенерировать набор данных роста мужчин, используя следующее:

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

В этой статье будет обсуждаться, как моделирование Монте-Карло (MC) может использоваться для создания приблизительных реплицированных копий образца набора данных. Затем обучается каждый из этих блоков наборов данных. Затем рассчитывается общая производительность модели путем выполнения среднего по ансамблю блоков данных, включая фактические и смоделированные данные.

Введение. Прогнозирование статуса ссуды - важная проблема при оценке рисков. Перед предоставлением ссуды клиенту банк или финансовая организация должны иметь возможность оценить связанный с этим риск. Наука о данных и прогнозная аналитика играют важную роль в построении моделей, которые можно использовать для прогнозирования вероятности невозврата кредита. В этом проекте нам предоставляется набор данных credit_timing.csv, содержащий 50000 точек данных. Каждая точка данных представляет собой ссуду, и две функции предоставляются следующим образом:

  1. Столбец с заголовком «дней с момента отправления» указывает количество дней, прошедших между отправкой и датой сбора данных.
  2. Для ссуд, списанных до сбора данных, столбец с заголовком «дней от предоставления до списания» указывает количество дней, прошедших между выдачей и списанием. Для всех остальных ссуд этот столбец пуст.

Определение технических терминов

  1. Возникновение. Это относится к дате, когда заемщик получает ссуду от кредитора.
  2. Состояние списания (невыполнение кредита). Затем заемщик производит регулярные выплаты, пока заемщик не перестанет производить платежи, как правило, из-за финансовых трудностей, до окончания срока кредита. Это событие называется списанием, и тогда считается, что ссуда списана или находится в состоянии дефолта.
  3. Текущий или активный статус: заемщик продолжает производить выплаты в течение всего срока кредита. На данный момент долг полностью погашен.
  4. Срок ссуды: период, в течение которого соглашение о ссуде остается в силе, до или по истечении которого ссуда должна быть либо погашена, либо пересмотрена на другой срок. В этом примере мы рассматриваем ссуду сроком или длительностью 3 года.

Цель проекта: Цель этого проекта - использовать методы анализа данных, чтобы оценить, какая часть этих ссуд (50 000 записей клиентов в наборе данных credit_timing.csv) будет списаны в течение 3-х летнего срока кредита.

Набор данных и код R для этой статьи можно загрузить из этого репозитория: https://github.com/bot13956/Monte_Carlo_Simulation_Loan_Status.

Реализация модели с использованием R

1. Импортируйте необходимые библиотеки

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

2. Импортировать набор данных и подготовить данные для анализа

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

3. Исследовательский анализ данных

А) Фактические данные

# Plot of days to charge-off vs. days since origination for defaulted loans using actual data
default%>%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())

Б) Смоделированные данные

# Monte Carlo Simulation of Defaulted Loans
set.seed(2)
N <- 3*365 # loan duration in days
df_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 years
df_MC[1:nrow(default),]%>%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())

Поскольку существует случайность, связанная с списанием ссуды, мы видим, что моделирование MC дает хорошее приближение для распределения просроченных ссуд.

Прогнозы. Поскольку мы продемонстрировали, что соотношение между днями до списания и днями с момента возникновения в первые 2 года (т. е. от 0 до 730 дней) можно приблизительно оценить с помощью моделирования MC, мы можем предсказать доля ссуд, которая будет списана к тому времени, когда все их трехлетние сроки будут завершены с использованием моделирования MC.

Общее количество списанных ссуд в нашем наборе данных составляет 3305. Это означает, что в настоящее время активными являются 46 695 кредитов. Из этих активных займов определенная часть не будет иметь дефолта в течение 3-летнего периода. Чтобы оценить общую долю просроченных ссуд, мы смоделировали ссуды по дефолту с списанием и днями с момента выдачи, покрывающими весь срок ссуды (то есть от 0 до 1095 дней), а затем с помощью соответствующего масштабирования мы вычислили долю ссуд, которые будут иметь списано по истечении 3-х летнего срока, т.е. 1095 дней.

# Predicting fraction of these loans will have charged off by the time all of their 3-year term is finished.
set.seed(2)
B<-1000
fraction<-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 loans
fdf<-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 term
mean<-mean(fraction)
sd<-sd(fraction)
confidence_interval<-c(mean-2*sd, mean+2*sd)
confidence_interval

Создав N = 1000 случайных испытаний, мы получили следующее распределение доли невозвратных кредитов на 3-летний срок:

Рисунок 6. Гистограмма доли списанных ссуд через 3 года с использованием N = 1000 выборок.

Основываясь на наших расчетах, 95% доверительный интервал для части ссуд, которая будет списана после трехлетнего срока ссуды, составляет, соответственно, 14,8% +/- 0,2%. Таким образом, если было выдано 50 000 ссуд на срок 3 года, примерно 15% этих ссуд не будут иметь дефолта.

Выводы. Мы представили простую модель, основанную на моделировании MC, для прогнозирования доли ссуд, по которым наступит дефолт в конце трехлетнего периода срока ссуды. Моделирование методом Монте-Карло - важный метод, который можно использовать в предписывающей аналитике для предписывающего курса действий, который следует предпринять в тех случаях, когда набор данных является очень стохастическим по своей природе.

Набор данных и код R для этой статьи можно загрузить из этого репозитория: https://github.com/bot13956/Monte_Carlo_Simulation_Loan_Status.