El presente análisis buscar determinar las características en el sistema financiero de las empresas seleccionadas por el Instituto Tecnológico de la Producción (ITP).

1. Librerías

A continuación se detallan las librerías a utilizar para el análisis.

#install.packages(readxl)
library(readxl)

#install.packages(tidyverse)
library(tidyverse)

#install.packages(knitr)
library(knitr)

2. Empresas ITP

La siguiente base de datos de las empresas seleccionadas fue provista por el ITP para su análisis.

itp <- read_excel("5. Pedidos/ITP/Base de datos de Empresas SOSTENIBILIDAD.xlsx")
head(itp, n = 20L)
## # A tibble: 20 x 3
##        ID `RUC / DNI` NOMBRE                                
##     <dbl> <chr>       <chr>                                 
##  1 100001 10024294906 MAMANI ZELA VIRGINIA                  
##  2 100002 10180674409 CALUA ARROYO JENNY MARITZA            
##  3 100004 10198398603 LAZO DE DELZO MARIA TERESA            
##  4 100005 10447740023 ARMAS ZAVALETA JOSE MANUEL            
##  5 100007 10448339764 TITI BENAVENTE PEDRO ALONSO           
##  6 100008 10453955961 AGUILAR MENDOZA GUIDO SEBASTIAN       
##  7 100009 10458598971 CORTAVITARTE RODRIGUEZ JAIRO ALONSO   
##  8 100011 10480814415 FLORES CIPRIANO JUAN                  
##  9 100012 10486529658 HUAMAN MENDOZA KENNEDY                
## 10 100013 10713919140 AGUIRRE SANTIAGO BRAYAN DEIVIS        
## 11 100014 10728776841 MEJIA PASCUAL NADYA IRAIDA            
## 12 100015 10730542327 VILCHEZ MORENO BETSY ALEXANDRA        
## 13 100016 10739772724 SALAZAR LEIVA VICTOR EDUARDO          
## 14 100017 10762942378 TITO GUTIERREZ LAURA SALLY            
## 15 100018 10773323360 BLAS GARCIA JALINEE ROSARIO           
## 16 100019 20119488398 PRODUCTOS PESQUEROS DEL SUR S.A.      
## 17 100020 20132712086 CORPORACION REFRIGERADOS INY S.A.C.   
## 18 100023 20137921601 FONDO NACIONAL DE DESARROLLO PESQUERO 
## 19 100024 20147897406 UNIVERSIDAD NACIONAL AGRARIA LA MOLINA
## 20 100025 20154598244 UNIVERSIDAD NACIONAL DE UCAYALI

A continuación observaremos las dimensiones de la base de datos.

dim(itp)
## [1] 820   3

A continuación se revisará si la base tiene documentos RUC / DNI repetidos o mal tipeados.

# Se crea una columna con el número de veces que el RUC o DNI se repite
itp$ID = as.character(itp$ID)
revision <- itp %>%
  group_by(`RUC / DNI`) %>%
    tally()

colnames(revision)[2]<-"n_duplicados"

# Se añade una columna del número de caracteres que tiene el RUC o DNI
n_caracteres <- nchar(revision$`RUC / DNI`)
revision <- cbind(revision,n_caracteres)

head(revision, n = 20L)
##      RUC / DNI n_duplicados n_caracteres
## 1  10000944853            1           11
## 2  10024294906            1           11
## 3  10026452274            1           11
## 4  10027823942            1           11
## 5  10043209995            1           11
## 6  10043419850            1           11
## 7  10048235650            1           11
## 8  10052149865            1           11
## 9  10052165313            1           11
## 10 10052770853            1           11
## 11 10053945657            1           11
## 12 10057852912            1           11
## 13    10059129            1            8
## 14 10070377425            1           11
## 15 10072908053            1           11
## 16 10087947152            1           11
## 17 10093821535            1           11
## 18 10093837318            1           11
## 19 10094333330            1           11
## 20 10100570373            1           11

Se procede con la revisión de la base de datos.

revision %>%
  group_by(n_caracteres) %>%
    count(n_caracteres, sort = TRUE)
## # A tibble: 5 x 2
## # Groups:   n_caracteres [5]
##   n_caracteres     n
##          <int> <int>
## 1           11   738
## 2            8    25
## 3           12     2
## 4            7     1
## 5           10     1
revision %>%
  group_by(n_duplicados) %>%
    count(n_duplicados, sort = TRUE)
## # A tibble: 3 x 2
## # Groups:   n_duplicados [3]
##   n_duplicados     n
##          <int> <int>
## 1            1   718
## 2            2    45
## 3            3     4

Dado los problemas encontrados, se procede limpieza de la base de datos. Primero se procede con la eliminación de los documentos repetidos.

n_duplicados <- itp %>%                
  group_by(`RUC / DNI`) %>%       
    tally() 

colnames(n_duplicados)[2]<-"n_duplicados"

n_caracteres <- nchar(itp$`RUC / DNI`)
itp <- cbind(itp,n_caracteres)

empresas <- merge(x = itp, y = n_duplicados, by = c("RUC / DNI"))
empresas <- empresas[c("ID","RUC / DNI","NOMBRE","n_caracteres","n_duplicados")]

empresas <- empresas %>%
  group_by(`RUC / DNI`) %>%
    slice(1)

length(empresas$`RUC / DNI`)
## [1] 767

Luego, se procede a identificar los documentos mal tipeados.

empresas %>%
  filter(n_caracteres == 7 | n_caracteres == 10 | n_caracteres == 12)
## # A tibble: 4 x 5
## # Groups:   RUC / DNI [4]
##   ID     `RUC / DNI`  NOMBRE             n_caracteres n_duplicados
##   <chr>  <chr>        <chr>                     <int>        <int>
## 1 100578 1074909693   Ulléíchyu                    10            1
## 2 100536 206000544440 Puriy del Peru SAC           12            1
## 3 100572 2060041      TINGO EXOTIC                  7            1
## 4 100515 206043891891 Nubes                        12            1

Finalmente, se procede a corregir los documentos mal tipeados.

empresas$`RUC / DNI`[empresas$`RUC / DNI` == "206000544440"] <- "20600054440" # Puriy del Peru SAC
empresas$`RUC / DNI`[empresas$`RUC / DNI` == "2060041"] <- "20600419367" # TINGO EXOTIC
empresas$`RUC / DNI`[empresas$`RUC / DNI` == "206043891891"] <- "20604391891" # Nubes

empresas <- empresas %>%
  filter(n_caracteres != 10) # Ulléíchyu

empresas$n_caracteres <- nchar(empresas$`RUC / DNI`)

empresas %>%
  group_by(n_caracteres) %>%
    count(n_caracteres, sort = TRUE)
## # A tibble: 2 x 2
## # Groups:   n_caracteres [2]
##   n_caracteres     n
##          <int> <int>
## 1           11   741
## 2            8    25
length(empresas$`RUC / DNI`)
## [1] 766

3. Reporte Crediticio Consolidado (RCC)

Se extrajo la información de las 766 empresas seleccionadas para el periodo del segundo trimestre (abril, mayo y junio).

rcc202106 <- read_excel("4. Resultados/202106/rcc.xlsx")
rcc202105 <- read_excel("4. Resultados/202105/rcc.xlsx")
rcc202104 <- read_excel("4. Resultados/202104/rcc.xlsx")

rcc <- rbind(rcc202104, rcc202105, rcc202106)

head(rcc, n = 20L)
## # A tibble: 20 x 37
##    registro1 cod_cliente fecha    año   mes   tipo_ruc       ruc         tipo_documento
##    <chr>     <chr>       <chr>    <chr> <chr> <chr>          <chr>       <chr>         
##  1 1         0000105422  20210430 2021  04    RUC 11 dígitos 20146824499 <NA>          
##  2 1         0000105422  20210430 2021  04    RUC 11 dígitos 20146824499 <NA>          
##  3 1         0000105422  20210430 2021  04    RUC 11 dígitos 20146824499 <NA>          
##  4 1         0000105422  20210430 2021  04    RUC 11 dígitos 20146824499 <NA>          
##  5 1         0000105422  20210430 2021  04    RUC 11 dígitos 20146824499 <NA>          
##  6 1         0000161403  20210430 2021  04    RUC 11 dígitos 20100199743 <NA>          
##  7 1         0000161403  20210430 2021  04    RUC 11 dígitos 20100199743 <NA>          
##  8 1         0000161403  20210430 2021  04    RUC 11 dígitos 20100199743 <NA>          
##  9 1         0000161403  20210430 2021  04    RUC 11 dígitos 20100199743 <NA>          
## 10 1         0000161403  20210430 2021  04    RUC 11 dígitos 20100199743 <NA>          
## 11 1         0000161403  20210430 2021  04    RUC 11 dígitos 20100199743 <NA>          
## 12 1         0000161403  20210430 2021  04    RUC 11 dígitos 20100199743 <NA>          
## 13 1         0000161403  20210430 2021  04    RUC 11 dígitos 20100199743 <NA>          
## 14 1         0000161403  20210430 2021  04    RUC 11 dígitos 20100199743 <NA>          
## 15 1         0000161403  20210430 2021  04    RUC 11 dígitos 20100199743 <NA>          
## 16 1         0000161403  20210430 2021  04    RUC 11 dígitos 20100199743 <NA>          
## 17 1         0000161403  20210430 2021  04    RUC 11 dígitos 20100199743 <NA>          
## 18 1         0000161403  20210430 2021  04    RUC 11 dígitos 20100199743 <NA>          
## 19 1         0000161403  20210430 2021  04    RUC 11 dígitos 20100199743 <NA>          
## 20 1         0000161403  20210430 2021  04    RUC 11 dígitos 20100199743 <NA>          
## # ... with 29 more variables: nro_documento <chr>, tipo_persona <chr>,
## #   tipo_empresa <chr>, cantidad_empresas <dbl>, deuda_normal <dbl>,
## #   deuda_cpp <dbl>, deuda_deficiente <dbl>, deuda_dudoso <dbl>,
## #   deuda_perdida <dbl>, apellido_razonsoc <chr>, apellido_materno <chr>,
## #   apellido_casada <lgl>, nombre1 <chr>, nombre2 <chr>, registro2 <chr>,
## #   cod_empresa <chr>, empresa <chr>, tipo_credito <chr>, condicion <dbl>,
## #   saldo <dbl>, moneda <chr>, clasificacion <chr>, cod_cuenta <chr>, ...

Las variables que podemos encontrar en el RCC son las siguientes.

diccionario <- read_excel("5. Pedidos/ITP/Diccionario.xlsx")
knitr::kable(diccionario, caption = "Diccionario de datos del RCC")
Diccionario de datos del RCC
posición columna descripción
1 registro1 Tipo de registro (1 = Datos del cliente)
2 cod_cliente Código SBS del cliente
3 fecha Fecha del reporte
4 año Año
5 mes Mes
6 tipo_ruc Tipo de RUC
7 ruc RUC
8 tipo_documento Tipo de documento de identidad
9 nro_documento Código de documento de identidad
10 tipo_persona Tipo de persona
11 tipo_empresa Tipo de empresa
12 cantidad_empresas Número de empresas en que ha sido reportado el cliente
13 deuda_normal Saldo de deuda en calificación Normal
14 deuda_cpp Saldo de deuda en calificación CPP
15 deuda_deficiente Saldo de deuda en calificación Deficiente
16 deuda_dudoso Saldo de deuda en calificación Dudoso
17 deuda_perdida Saldo de deuda en calificación Pérdida
18 apellido_razonsoc Razón social o apellido paterno o nombre de mancómuno
19 apellido_materno Apellido materno
20 apellido_casada Apellido de casada
21 nombre1 Primer nombre
22 nombre2 Segundo nombre
23 registro2 Tipo de registro (2 = Saldos)
24 cod_empresa Código de la empresa en la que registra deuda
25 empresa Nombre de la empresa en la que se registra deuda
26 tipo_credito Tipo de crédito
27 condicion Condición en días
28 saldo Saldo
29 moneda Operaciones por moneda
30 clasificacion Clasificación del cliente en la empresa
31 cod_cuenta Código de la cuenta contable del RCC
32 cod_cuenta_contable Código de la cuenta contable del manual
33 cod_cuenta_1d Cuenta: Clase
34 cod_cuenta_2d Cuenta: Rubro
35 cod_cuenta_4d Cuenta: Cuenta
36 cod_cuenta_6d Cuenta: Subcuenta
37 cod_cuenta_8d Cuenta: Cuenta analitica

Además, no se encuentra información para las 766 empresas. Como máximo hay información para 388 empresas para todo el periodo del segundo trimestre.

#length(unique(rcc202104$cod_cliente))
#length(unique(rcc202105$cod_cliente))
#length(unique(rcc202106$cod_cliente))
length(unique(rcc$cod_cliente))
## [1] 388

Empezamos analizando el periodo de junio de 2021.

empresas <- empresas[c(1:3)]

datos_cliente <- rcc202106[c(2:22)]
datos_cliente$tipo_ruc[is.na(datos_cliente$tipo_ruc)] <- ""
datos_cliente$ruc[is.na(datos_cliente$ruc)] <- ""

n = dim(datos_cliente)[1]

for(i in 1:n){
  if(i>0){
    if(datos_cliente$tipo_ruc[i]==""){
      datos_cliente$tipo_ruc[i]=datos_cliente$tipo_documento[i]
    }
 } 
}

for(i in 1:n){
  if(i>0){
    if(datos_cliente$ruc[i]==""){
      datos_cliente$ruc[i]=datos_cliente$nro_documento[i]
    }
 } 
}

datos_cliente <- datos_cliente %>% 
  rename(tipo_doc = tipo_ruc,
         nro_doc = ruc)

datos_cliente <- datos_cliente[c(1,3:6,9:21)]

datos_cliente <- datos_cliente %>%
  distinct()

# ONELIFE PERU S.A.C tiene el mismo RUC que PLAZA QUERO SAC
datos_cliente <- datos_cliente %>%
  filter(apellido_razonsoc != "ONELIFE PERU S.A.C") 

empresas_202106 <- merge(x = empresas, y = datos_cliente, by.x = "RUC / DNI", by.y = "nro_doc", all = TRUE)
colnames(empresas_202106)[1]<-"nro_doc"
colnames(empresas_202106)[2]<-"id"
colnames(empresas_202106)[3]<-"nombre"
empresas_202106 <- empresas_202106[, c(2,3,7,1,4,5,6,8,9,10,17,18,19,20,11,12,13,14,15)]

empresas_202106 <-empresas_202106 %>% 
  drop_na(tipo_doc)

empresas_202106 <- empresas_202106[,c(1:4,15:19)]

knitr::kable(empresas_202106[1:5,], caption = "Empresas con información del RCC")
Empresas con información del RCC
id nombre tipo_doc nro_doc deuda_normal deuda_cpp deuda_deficiente deuda_dudoso deuda_perdida
100499 Majnu RUC 11 dígitos 10053945657 100 0 0 0 0
100677 CALLE MADRID ALFREDO RAUL DNI 10059129 100 0 0 0 0
100408 Capullo de Alelí Hecho a Mano RUC 11 dígitos 10402520715 100 0 0 0 0
100699 AGUILAR QUIROZ CROSWEL EDUARDO DNI 18188218 0 0 0 0 0
100694 FILTROS LYS S.A. RUC 11 dígitos 20100121043 0 0 0 0 100

Se procede con el análisis de la clasificación de deuda de las empresas

n = dim(empresas_202106)[1]

for(i in 1:n){
  if(i>0){
    if(empresas_202106$deuda_normal[i]>=60){
      empresas_202106$clasificacion[i]="Empresa con buen historial"
    }else if(empresas_202106$deuda_normal[i]<60 & (empresas_202106$deuda_cpp[i]!=0 | empresas_202106$deuda_deficiente[i]!=0 | empresas_202106$deuda_dudoso[i]!=0 | empresas_202106$deuda_perdida[i]!=0)){
      empresas_202106$clasificacion[i]="Empresa con mal historial"
    }else if(empresas_202106$deuda_normal[i]==0 & empresas_202106$deuda_cpp[i]==0 & empresas_202106$deuda_deficiente[i]==0 & empresas_202106$deuda_dudoso[i]==0 & empresas_202106$deuda_perdida[i]==0){
      empresas_202106$clasificacion[i]="Empresa sin clasificación"
    }
 } 
}


knitr::kable(empresas_202106[1:5,], caption = "Clasificación de empresas")
Clasificación de empresas
id nombre tipo_doc nro_doc deuda_normal deuda_cpp deuda_deficiente deuda_dudoso deuda_perdida clasificacion
100499 Majnu RUC 11 dígitos 10053945657 100 0 0 0 0 Empresa con buen historial
100677 CALLE MADRID ALFREDO RAUL DNI 10059129 100 0 0 0 0 Empresa con buen historial
100408 Capullo de Alelí Hecho a Mano RUC 11 dígitos 10402520715 100 0 0 0 0 Empresa con buen historial
100699 AGUILAR QUIROZ CROSWEL EDUARDO DNI 18188218 0 0 0 0 0 Empresa sin clasificación
100694 FILTROS LYS S.A. RUC 11 dígitos 20100121043 0 0 0 0 100 Empresa con mal historial
x = table(empresas_202106$clasificacion)

pie(x, labels = x, main = "Clasificación de empresas \n n = 366", col = heat.colors(length(x)))
legend("topright", c("Empresas con buen historial","Empresa con mal historial","Empresa sin clasificación"), cex = 0.8, fill = heat.colors(length(x)))