Paquetes necesarios:
library(data.table)
library(tidyverse)
library(readxl)
library(ggplot2)
library(dplyr)
library(lubridate)
library(scales)
Cargamos base:
base <- read_excel('C:/Users/matir/OneDrive/Escritorio/Mati/Universidad/2022/Segundo Trimestre/Analitica aplicada a Negocios-Finanzas/Bases/creditos_consumo_A1.xlsx',
skip = 0,
col_names = TRUE,
col_types = c("date","numeric", "numeric",
"numeric", "text", "numeric", "date",
"numeric", "numeric"))
A. VALIDACIÓN DE LA INFORMACIÓN
Periodo <- base %>% count(FechaProceso)
Suma_monto <- aggregate(x= base$SaldoMonto,
by= list(base$FechaProceso),
FUN = sum)
Prom_monto <- aggregate(x= base$SaldoMonto,
by= list(base$FechaProceso),
FUN = mean)
Prom_monto_credito <- aggregate(x= base$MontoCredito,
by= list(base$FechaProceso),
FUN = mean)
periodo_total <- cbind(Periodo, Suma_monto, Prom_monto)
periodo_total <- subset( periodo_total, select = -c(Group.1, Group.1))
Para graficar:
creditos_ts <- ts(Periodo[,2],
start= 2017,
frequency = 12)
Encontré dos formas de graficar la Time Series:
ggplot(Periodo, aes(x=FechaProceso, y=n)) + geom_line(color="blue") #en esta hay que tratar el eje x con el fin de que salga cada mes.
plot.ts(creditos_ts)
Graficamos con las demas variables:
options(scipen=10000)
suma_saldo_montos <- ts(periodo_total[1:18,3],
start= 2017,
frequency = 12)
plot.ts(suma_saldo_montos)
# intentando con ggplot:
periodo_total_ggplot <- periodo_total
class(periodo_total_ggplot$FechaProceso)
## [1] "POSIXct" "POSIXt"
periodo_total_ggplot$FechaProceso <- as.Date(periodo_total_ggplot$FechaProceso)
class(periodo_total_ggplot$FechaProceso)
## [1] "Date"
ggplot(periodo_total_ggplot, aes(x=FechaProceso, y= x)) +
geom_line(color="blue") +
scale_x_date(date_labels = "%d-%b-%Y", date_breaks = "1 month") +
theme(axis.text.x = element_text(angle = 90, vjust = 0.5, hjust=0.5)) +
ggtitle("Suma Saldo Montos de Creditos \n a través del Tiempo 2017-2018 (mensual)")+
labs(y = "Monto", x=element_blank())
#faltaría modificar las labels de los ejes x e y pero las bases están.
Siguiente grafico:
Prom_monto_credito_ggplot <- Prom_monto_credito
class(Prom_monto_credito_ggplot$Group.1)
## [1] "POSIXct" "POSIXt"
Prom_monto_credito_ggplot$Group.1 <- as.Date(Prom_monto_credito_ggplot$Group.1)
ggplot(Prom_monto_credito_ggplot, aes(x=Group.1, y= x)) +
geom_line(color="blue") +
scale_x_date(date_labels = "%d-%b-%Y", date_breaks = "1 month") +
theme(axis.text.x = element_text(angle = 90, vjust = 0.5, hjust=0.5)) +
ggtitle("Promedio Montos de Creditos \n a través del Tiempo 2017-2018 (mensual)")+
labs(y = "Monto", x=element_blank())
Útilmo grafico:
# promedio SALDO MONTOS (objeto : Prom_monto)
Prom_monto_ggplot <- Prom_monto
class(Prom_monto_ggplot$Group.1)
## [1] "POSIXct" "POSIXt"
Prom_monto_ggplot$Group.1 <- as.Date(Prom_monto_ggplot$Group.1)
ggplot(Prom_monto_ggplot, aes(x=Group.1, y= x)) +
geom_line(color="blue") +
scale_x_date(date_labels = "%d-%b-%Y", date_breaks = "1 month") +
theme(axis.text.x = element_text(angle = 90, vjust = 0.5, hjust=0.5)) +
ggtitle("Promedio SALDO Montos de Creditos \n a través del Tiempo 2017-2018 (mensual)")+
labs(y = "Monto", x=element_blank())
¿Qué podría inferir del comportamiento de la cartera en el tiempo?
Claramente, se puede visualizar una relacion entre el aumento de número de creditos y el saldo de sus montos a través del tiempo. En efecto, a mayor cantidad de creditos otorgados por el banco, los saldos serán mayores y también los montos de los creditos. Esto se debe a la capacidad de apalancamiento que va generando la entidad bancaria.
PARTE B: TRANSFORMACIÓN O CONSTRUCCIÓN DE VARIABLES
Respuesta: Supondremos que los creditos con “incumplimiento” serán aquellos cuyos días de mora serán mayores a 90
base_ordenada <- base[with(base,order(base$iColocacion), order(base$FechaProceso)),]
base$incumplimiento <- ifelse(base$DiasMora>=90,1,0)
Procedemos a graficar el numero de creditos en cada estado (cumplimiento e incumpl.):
base_contar <- base %>%
group_by(incumplimiento) %>%
summarise(n = n())
base_contar$condicion <- ifelse(base_contar$incumplimiento == 1, "Incumplimiento", "Cumplimiento")
ggplot(base_contar ,aes(x=factor(incumplimiento), n, fill=condicion)) +
geom_bar(stat = "identity") + theme_minimal() + geom_text(aes(label=n), vjust=-0.5)
## p <- ggplot(base_contar ,aes(x=factor(incumplimiento), n, fill=condicion)) +
## geom_bar(stat = "identity") + theme_minimal() + geom_text(aes(label=n), vjust=-0.5)
## pct_format = scales::percent_format(accuracy = .1)
## p <- p + geom_text(
# aes(
# label = sprintf(
# '%d (%s)',
# ..count..,
# pct_format(..count.. / sum(..count..))
# )
# ),
# stat = 'count',
# nudge_y = .2,
# colour = 'royalblue',
# size = 5
# )
# p
Luego, podemos hacer una time series con el aumento/disminucion de los saldos por monto de credito para ambas categorias:
base_linea_tiempo_saldos <- base
class(base_linea_tiempo_saldos$FechaProceso)
## [1] "POSIXct" "POSIXt"
base_linea_tiempo_saldos$FechaProceso2 <- as.Date(base_linea_tiempo_saldos$FechaProceso)
base_linea_tiempo_saldos$Suma_Saldo <- with(base_linea_tiempo_saldos, ave(SaldoMonto, FechaProceso, FUN = sum))
base_linea_tiempo_saldos$condicion <- ifelse(base_linea_tiempo_saldos$incumplimiento == 1, "Incumplimiento", "Cumplimiento")
ggplot(base_linea_tiempo_saldos, aes(x=FechaProceso2, y=Suma_Saldo, group = condicion)) + geom_line(aes(group = condicion))
Dado que no logré dejarlo como en la ayudantía escribiré el codigo de esta sumado a una idea mia:
MI_O <- subset(base, incumplimiento == 0)
MI_1 <- subset(base, incumplimiento == 1)
MI_O$Suma_Saldo <- with(MI_O, ave(SaldoMonto, FechaProceso, FUN = sum))
MI_1$Suma_Saldo <- with(MI_1, ave(SaldoMonto, FechaProceso, FUN = sum))
Saldos_Montos <- rbind(MI_1,MI_O)
Saldos_Montos2 <- Saldos_Montos
Saldos_Montos2$FechaProceso2 <- as.Date(Saldos_Montos2$FechaProceso)
Saldos_Montos2$condicion <- ifelse(Saldos_Montos2$incumplimiento == 1, "Incumplimiento", "Cumplimiento")
ggplot(Saldos_Montos2, aes(x=FechaProceso2, y=Suma_Saldo, group = incumplimiento, colour=condicion)) + geom_line() +
scale_x_date(date_labels = "%d-%b-%Y", date_breaks = "1 month") +
theme(axis.text.x = element_text(angle = 90, vjust = 0.5, hjust=0.5)) +
labs(y = "Monto Suma Saldo", x=element_blank())
vigente <- filter(base, DiasMora<=90)
incumplimiento <- filter(base, DiasMora>90)
incumplimiento$transicion_inc <- with(incumplimiento, ave(FechaProceso, iColocacion, FUN = min))
vigente$transicion_inc <- NA
vigente2 <- rbind(incumplimiento, vigente)
vigente <- filter(base, DiasMora<=90)
incumplimiento <- filter(base, DiasMora>90)
incumplimiento1 <- aggregate(x=incumplimiento$FechaProceso, by = list(incumplimiento$iColocacion), FUN = min)
names(incumplimiento1)[1] = "iColocacion"
names(incumplimiento1)[2] = "Fecha_Incum"
# vigentes <- left_join(vigente, incumplimiento1, by= "iColocacion")
# vigentes$Fecha_Incum <- replace(vigentes$Fecha_Incum, vigentes$Fecha_Incum <- vigentes$FechaProceso, NA)
base$antiguedad_credito <- as.numeric(difftime("2018-06-30", base$FechaActivacion), units="days")
class(base$antiguedad_credito)
## [1] "numeric"
base$antiguedad_credito_en_meses <- round(base$antiguedad_credito/30,1)
# as.numeric(difftime("2015-12-07", "2015-12-05"), units="hours")
# antiguedad <- c([0, 4];[5,13]; [14,16]; [17,21], [21,[ )
base$porcentaje_pagado_credito <- round((base$MontoCredito-base$SaldoMonto)/base$MontoCredito,2)
No sé a que se refiere con el estado del credito.
PRUEBAS:
library(corrplot)
base2 <- as.data.frame(sapply(base, as.numeric))
B = cor(base2)
corrplot(B, method = 'color', order = 'alphabet', ,number.cex = 0.35, tl.cex = 0.7)
# arbol1 <- rpart(incumplimiento~porcentaje_pagado_credito + antiguedad_credito_en_meses, data=base, method = "class")
# rpart.plot(arbol1)