Este documento presenta un análisis exploratorio de datos (EDA) del conjunto de datos “BD SFC.csv”, que contiene información detallada sobre las carteras de microcréditos y otros rubros, de diversas entidades financieras vigiladas en Colombia.
Primero cargamos las librerías necesarias para nuestro análisis.
## [1] ".GlobalEnv" "package:stats" "package:graphics"
## [4] "package:grDevices" "package:utils" "package:datasets"
## [7] "package:methods" "Autoloads" "package:base"
Cargamos el dataset y examinamos su estructura.
# Carga de datos - ajusta la ruta según sea necesario
SFC_data <- read_csv("BD SFC.csv", locale = locale(encoding = "latin1")) # O "UTF-8" si es diferente
# Vista preliminar de los datos
head(SFC_data)## # A tibble: 6 × 11
## TIPO_ENTIDAD NOMBRE_TIPO_ENTIDAD CODIGO_ENTIDAD NOMBRE_ENTIDAD FECHA_CORTE
## <dbl> <chr> <dbl> <chr> <chr>
## 1 1 ESTABLECIMIENTOS BANCA… 1 BANCO DE BOGO… 31/07/2024
## 2 1 ESTABLECIMIENTOS BANCA… 1 BANCO DE BOGO… 30/06/2024
## 3 1 ESTABLECIMIENTOS BANCA… 1 BANCO DE BOGO… 31/05/2024
## 4 1 ESTABLECIMIENTOS BANCA… 1 BANCO DE BOGO… 30/04/2024
## 5 1 ESTABLECIMIENTOS BANCA… 1 BANCO DE BOGO… 31/03/2024
## 6 1 ESTABLECIMIENTOS BANCA… 1 BANCO DE BOGO… 29/02/2024
## # ℹ 6 more variables: CUENTA <dbl>, NOMBRE_CUENTA <chr>, MONEDA <dbl>,
## # `NOMBRE MONEDA` <chr>, SIGNO_VALOR <chr>, VALOR <dbl>
## Rows: 16,286,348
## Columns: 11
## $ TIPO_ENTIDAD <dbl> 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,…
## $ NOMBRE_TIPO_ENTIDAD <chr> "ESTABLECIMIENTOS BANCARIOS", "ESTABLECIMIENTOS BA…
## $ CODIGO_ENTIDAD <dbl> 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,…
## $ NOMBRE_ENTIDAD <chr> "BANCO DE BOGOTA S.A.", "BANCO DE BOGOTA S.A.", "B…
## $ FECHA_CORTE <chr> "31/07/2024", "30/06/2024", "31/05/2024", "30/04/2…
## $ CUENTA <dbl> 1e+05, 1e+05, 1e+05, 1e+05, 1e+05, 1e+05, 1e+05, 1…
## $ NOMBRE_CUENTA <chr> "ACTIVO", "ACTIVO", "ACTIVO", "ACTIVO", "ACTIVO", …
## $ MONEDA <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,…
## $ `NOMBRE MONEDA` <chr> "Total", "Total", "Total", "Total", "Total", "Tota…
## $ SIGNO_VALOR <chr> "+", "+", "+", "+", "+", "+", "+", "+", "+", "+", …
## $ VALOR <dbl> 1.248434e+14, 1.237484e+14, 1.211837e+14, 1.205890…
## TIPO_ENTIDAD NOMBRE_TIPO_ENTIDAD CODIGO_ENTIDAD NOMBRE_ENTIDAD
## Min. : 1.00 Length:16286348 Min. : 1.00 Length:16286348
## 1st Qu.: 1.00 Class :character 1st Qu.: 6.00 Class :character
## Median : 11.00 Mode :character Median : 20.00 Mode :character
## Mean : 40.92 Mean : 29.64
## 3rd Qu.: 22.00 3rd Qu.: 46.00
## Max. :509.00 Max. :161.00
## FECHA_CORTE CUENTA NOMBRE_CUENTA MONEDA
## Length:16286348 Min. :100000 Length:16286348 Min. :0.000
## Class :character 1st Qu.:190000 Class :character 1st Qu.:0.000
## Mode :character Median :410238 Mode :character Median :1.000
## Mean :387658 Mean :0.637
## 3rd Qu.:515000 3rd Qu.:1.000
## Max. :840500 Max. :2.000
## NOMBRE MONEDA SIGNO_VALOR VALOR
## Length:16286348 Length:16286348 Min. :-7.485e+13
## Class :character Class :character 1st Qu.: 2.072e+07
## Mode :character Mode :character Median : 5.023e+08
## Mean : 1.247e+12
## 3rd Qu.: 8.635e+09
## Max. : 8.998e+15
Antes de profundizar en el análisis, vamos a filtrar, limpiar y transformar los datos.
# Filtrar los datos para el microcrédito (cuentas 141200-141299) y moneda = 0
SFC_filtrada <- subset(SFC_data, CUENTA >= 141200 & CUENTA <= 141299 & MONEDA == 0)
# Eliminar columnas innecesarias
columnas_a_eliminar <- c("TIPO_ENTIDAD", "NOMBRE_TIPO_ENTIDAD", "CODIGO_ENTIDAD", "MONEDA", "NOMBRE.MONEDA", "SIGNO_VALOR")
SFC_filtrada <- SFC_filtrada[, !(names(SFC_filtrada) %in% columnas_a_eliminar)]
# Convertir 'FECHA_CORTE' y establecer como índice (usando rownames)
SFC_filtrada$ID <- 1:nrow(SFC_filtrada)
rownames(SFC_filtrada) <- paste(SFC_filtrada$FECHA_CORTE, SFC_filtrada$ID, sep = "_")
# Asegurarse de que la columna 'VALOR' sea numérica
SFC_filtrada$VALOR <- as.numeric(as.character(SFC_filtrada$VALOR))
SFC_filtrada <- SFC_filtrada[!is.na(SFC_filtrada$VALOR), ]
# Asegurarse de que la columna 'FECHA_CORTE' sea de tipo Date
SFC_filtrada$FECHA_CORTE <- as.Date(SFC_filtrada$FECHA_CORTE, format = "%d/%m/%Y") # Ajusta el formato si es diferente
# Agrupar por fecha para obtener el total mensual de microcréditos
# Suponemos que 'VALOR' es el valor de microcréditos en un periodo específico.
data_series <- aggregate(VALOR ~ format(FECHA_CORTE, "%Y-%m"), SFC_filtrada, sum)
# Convertir la columna de fechas a Date y establecer como índice
data_series$FECHA_CORTE <- as.Date(paste0(data_series$`format(FECHA_CORTE, "%Y-%m")`, "-01"))
rownames(data_series) <- data_series$FECHA_CORTE
summary(SFC_filtrada)## NOMBRE_ENTIDAD FECHA_CORTE CUENTA NOMBRE_CUENTA
## Length:13243 Min. :2016-01-31 Min. :141200 Length:13243
## Class :character 1st Qu.:2017-12-31 1st Qu.:141205 Class :character
## Mode :character Median :2020-01-31 Median :141210 Mode :character
## Mean :2020-03-08 Mean :141212
## 3rd Qu.:2022-04-30 3rd Qu.:141220
## Max. :2024-07-31 Max. :141225
## NOMBRE MONEDA VALOR ID
## Length:13243 Min. :0.000e+00 Min. : 1
## Class :character 1st Qu.:6.073e+08 1st Qu.: 3312
## Mode :character Median :7.337e+09 Median : 6622
## Mean :2.166e+11 Mean : 6622
## 3rd Qu.:5.066e+10 3rd Qu.: 9932
## Max. :9.888e+12 Max. :13243
## Rows: 13,243
## Columns: 7
## $ NOMBRE_ENTIDAD <chr> "BANCO DE BOGOTA S.A.", "BANCO DE BOGOTA S.A.", "BANCO…
## $ FECHA_CORTE <date> 2024-07-31, 2024-06-30, 2024-05-31, 2024-04-30, 2024-…
## $ CUENTA <dbl> 141200, 141200, 141200, 141200, 141200, 141200, 141200…
## $ NOMBRE_CUENTA <chr> "CARTERA Y LEASING DE MICROCREDITOS", "CARTERA Y LEASI…
## $ `NOMBRE MONEDA` <chr> "Total", "Total", "Total", "Total", "Total", "Total", …
## $ VALOR <dbl> 268529045267, 266499058848, 264661426330, 261591646321…
## $ ID <int> 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16,…
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 0.000e+00 6.073e+08 7.337e+09 2.166e+11 5.066e+10 9.888e+12
# Histograma de VALOR
ggplot(SFC_filtrada, aes(x = VALOR)) +
geom_histogram(fill = "lightblue", color = "black") +
labs(title = "Histograma de VALOR", x = "Valor", y = "Frecuencia") +
theme_minimal()# Boxplot de VALOR
ggplot(SFC_filtrada, aes(y = VALOR)) +
geom_boxplot(fill = "lightgreen", color = "black") +
labs(title = "Boxplot de VALOR", y = "Valor") +
theme_minimal()# Gráfico de series de tiempo de VALOR agregado por mes
ggplot(data_series, aes(x = FECHA_CORTE, y = VALOR)) +
geom_line(color = "red") +
labs(title = "Valor total de microcréditos por mes", x = "Fecha", y = "Valor") +
theme_minimal()# Tabla de frecuencia de CUENTA
cuenta_freq <- as.data.frame(table(SFC_filtrada$CUENTA))
# Calcular porcentajes
cuenta_freq$Porcentaje <- cuenta_freq$Freq / sum(cuenta_freq$Freq) * 100
# Gráfico de barras de frecuencia de CUENTA
ggplot(cuenta_freq, aes(x = Var1, y = Freq)) +
geom_bar(stat = "identity", fill = "skyblue", color = "black") +
labs(title = "Frecuencia de CUENTA", x = "CUENTA", y = "Frecuencia") +
theme_minimal()# Diagrama de sectores de CUENTA con porcentajes
if (nrow(cuenta_freq) <= 10) { # Solo si hay pocas categorías
ggplot(cuenta_freq, aes(x = "", y = Freq, fill = Var1)) +
geom_bar(stat = "identity", width = 1) +
coord_polar("y", start = 0) +
labs(title = "Diagrama de sectores de CUENTA", fill = "CUENTA") +
geom_text(aes(label = paste0(round(Porcentaje, 1), "%")), position = position_stack(vjust = 0.5)) +
theme_void()
}# Cantidad de registros por NOMBRE_ENTIDAD
registros_entidad <- SFC_filtrada %>%
group_by(NOMBRE_ENTIDAD) %>%
summarise(Cantidad = n())
# Cantidad de registros por NOMBRE_ENTIDAD
registros_entidad <- SFC_filtrada %>%
group_by(NOMBRE_ENTIDAD) %>%
summarise(Cantidad = n()) %>%
arrange(desc(Cantidad)) %>% # Ordenar por cantidad descendente
head(30)
# Cantidad de registros por NOMBRE_ENTIDAD
registros_entidad <- SFC_filtrada %>%
group_by(NOMBRE_ENTIDAD) %>%
summarise(Cantidad = n()) %>%
arrange(desc(Cantidad)) %>% # Ordenar por cantidad descendente
head(30)
# Gráfico de barras de cantidad de registros por NOMBRE_ENTIDAD (primeras 30)
ggplot(registros_entidad, aes(x = reorder(NOMBRE_ENTIDAD, Cantidad), y = Cantidad)) +
geom_bar(stat = "identity", fill = "orange", color = "black") +
labs(title = "Cantidad de registros por NOMBRE_ENTIDAD (primeras 30 entidades de Microcredito)", x = "NOMBRE_ENTIDAD", y = "Cantidad de registros") +
theme_minimal() +
geom_text(aes(label = Cantidad), hjust = 1.2) + # Agregar etiquetas de texto dentro de las barras
coord_flip() # Para hacer el gráfico horizontalA partir del análisis exploratorio de datos de las carteras de microcreditos de las entidades vigiladas en Colombia, podemos concluir:
1.Tendencia General al Alza
Crecimiento Sostenido: El gráfico muestra una tendencia general al alza en el valor total de los microcréditos desde 2016 hasta 2024. Esto indica un crecimiento constante en el sector de los microcréditos a lo largo del tiempo.
Expansión del Mercado: El aumento en el valor total de los microcréditos sugiere una expansión del mercado de microcréditos, lo que podría indicar una mayor inclusión financiera y acceso a crédito para individuos y pequeñas empresas.
2.Fluctuaciones y Estabilidad:1
Crecimiento Constante pero No Lineal: Si bien la tendencia general es al alza, el crecimiento no es lineal. Hay fluctuaciones y periodos de crecimiento más lento o más rápido.
Estabilidad a Largo Plazo: A pesar de las fluctuaciones a corto plazo, el gráfico muestra una estabilidad relativa en el valor total de los microcréditos a lo largo del tiempo. Esto sugiere que el sector de los microcréditos es resistente y no está sujeto a cambios drásticos.
3.Posibles Factores Influyentes:
Factores Económicos: Las fluctuaciones en el valor total de los microcréditos podrían estar influenciadas por factores económicos como el crecimiento del PIB, la inflación y las tasas de interés.
Políticas Gubernamentales: Las políticas gubernamentales relacionadas con la inclusión financiera y el acceso al crédito también podrían afectar el valor total de los microcréditos.
Desarrollo del Sector Financiero: El desarrollo del sector financiero, incluyendo la adopción de nuevas tecnologías y la entrada de nuevos actores, podría contribuir al crecimiento del mercado de microcréditos.
4.Implicaciones:
Impacto Social: El crecimiento del sector de los microcréditos podría tener un impacto social positivo al proporcionar acceso a crédito a personas y empresas que de otra manera no tendrían acceso
Crecimiento Económico:El acceso al crédito a través de los microcréditos podría impulsar el crecimiento económico al permitir que las pequeñas empresas inviertan y se expandan.
El análisis de series de tiempo con ARIMA, permitirá identificar patrones de la mayoría deinstituciones financieras vigiladas y tendencias en un horizonte prudente de máximo un año, en elque se sabe que el modelo cuenta con mayor confiabilidad.
Se espera obtener un informe que permita visualizar y clasificar un estimado de los valores decuentas o subcuenta que indique sugerencias acerca del riesgo crediticio, permitiendo identificar:
• Nombre de la entidad
• Cuenta o subcuenta
• Monto de cada cuenta por fecha de corte
• Gráficos comparativos de los históricos y su proyección a 10 meses
Lograr una segmentación o clasificación de bancos por nivel de riesgo, o un ranking teniendo encuenta las cuentas o subcuentas estudiadas también será uno de los puntos a observar comoresultado del análisis.