1. Introducción

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.

2. Carga de librerías

Primero cargamos las librerías necesarias para nuestro análisis.

# Manipulación de datos
search()
## [1] ".GlobalEnv"        "package:stats"     "package:graphics" 
## [4] "package:grDevices" "package:utils"     "package:datasets" 
## [7] "package:methods"   "Autoloads"         "package:base"
library(tidyverse)
library(lubridate)

# Visualización
library(ggplot2)
library(scales)
library(RColorBrewer)
library(leaflet)  # Para mapas
library(DT)       # Para tablas interactivas
library(forecast)

# Análisis espacial
library(sf)       # Para datos espaciales

3. Carga y exploración inicial de datos

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>
# Estructura del conjunto de datos
glimpse(SFC_data)
## 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…
# Resumen estadístico básico
summary(SFC_data)
##   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

4. Limpieza y transformación de datos

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
glimpse(SFC_filtrada)
## 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,…

5. Análisis exploratorio

5.1 Estadísticas descriptivas variable numérica

## Resumen estadístico de la variable VALOR
summary(SFC_filtrada$VALOR)
##      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()

5.1 Estadísticas descriptivas variables catergóricas

# 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 horizontal

5.2 Valores Atipicos

# Identificar valores atípicos
outliers <- boxplot.stats(SFC_filtrada$VALOR)$out

# Contar el número de valores atípicos
num_outliers <- length(outliers)
print(num_outliers)
## [1] 2206

6. Conclusiones y hallazgos previos

A 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.

7. Resultados Esperados

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.