·

Ciências Contábeis ·

Estatística 2

· 2024/1

Envie sua pergunta para a IA e receba a resposta na hora

Fazer Pergunta

Texto de pré-visualização

UNIVERSIDADE FEDERAL DE MINAS GERAIS EST002: Orienta¸c˜oes para os projetos da disciplina O grupo Os projetos ser˜ao realizados em grupos de 3 a 4 integrantes, com a forma¸c˜ao de 9 equipes no total. A avalia¸c˜ao consistir´a exclusivamente de apresenta¸c˜ao. Cada grupo ´e respons´avel por procurar um banco de dados adequado aos m´etodos estat´ısticos requeridos pelo projeto, garantindo que os dados sejam exclusivos em sua turma. A origem dos dados deve ser claramente indicada no arquivo de apresenta¸c˜ao. ´E imperativo que cada estudante escolha seu grupo atrav´es da se¸c˜ao ”Projetos/Equipes de trabalho”na plataforma da disciplina, atentando-se para o limite de vagas dispon´ıveis em cada grupo, n´umero este que permanecer´a inalterado. A composi¸c˜ao do grupo ser´a mantida para todos os projetos ao longo do curso. A apresenta¸c˜ao A apresenta¸c˜ao deve incluir todos os c´alculos essenciais para alcan¸car os objetivos estabelecidos, com uma dura¸c˜ao prevista de 10 minutos, permitindo uma flexibilidade de at´e 2 minutos a mais ou menos. O tempo ser´a rigorosamente controlado, e a inobservˆancia do intervalo de tempo determinado impactar´a negativamente na avalia¸c˜ao desse crit´erio. Para uma prepara¸c˜ao eficaz, revise o conte´udo das aulas anteriores e aprofunde-se nos conceitos te´oricos relevantes ao seu projeto. ´E crucial investigar o contexto dos dados utilizados e realizar pesquisas adicionais para uma compreens˜ao abrangente, sendo essa responsabilidade dos grupos. Ap´os a apresenta¸c˜ao, haver´a um per´ıodo de at´e 15 minutos destinado a perguntas, permitindo esclarecimentos e discuss˜oes aprofundadas. A participa¸c˜ao ativa durante este per´ıodo ´e essencial, pois a avalia¸c˜ao ser´a individual baseada na contribui¸c˜ao de cada aluno `as discuss˜oes. Durante o per´ıodo de perguntas, pode ser selecionado aleatoriamente um grupo da audiˆencia para questionar os apresentadores. A qualidade das perguntas e a articula¸c˜ao estat´ıstica influenciar˜ao na avalia¸c˜ao desses alunos. Assim, a participa¸c˜ao nas discuss˜oes, seja por meio de perguntas ou coment´arios estat´ısticos pertinentes, ´e vital para a pontua¸c˜ao neste crit´erio. Todos os grupos devem estar preparados para apresentar em qualquer uma das datas agendadas. Casos especiais ser˜ao avaliados individualmente. A ordem das apresenta¸c˜oes ser´a determinada por sorteio no in´ıcio de cada aula, procedendo-se com sorteios subsequentes ap´os cada apresenta¸c˜ao. Se um grupo sorteado estiver incompleto, outro grupo poder´a se oferecer para apresentar em seu lugar. O grupo original tem a op¸c˜ao de apresentar no mesmo dia, mesmo com membros ausentes. Contudo, apenas os membros presentes ser˜ao avaliados. Ausˆencias podem ser compensadas atrav´es de uma prova de segunda chamada, conforme indicado no plano de ensino, abordando o conte´udo do projeto n˜ao apresentado e com igual valor. As datas A apresenta¸c˜ao deve ser submetida atrav´es do Moodle at´e as 18:00 do dia agendado para as primeiras apresenta¸c˜oes, conforme indicado no plano de ensino dispon´ıvel na plataforma. Apenas um membro do grupo precisa realizar o envio dos arquivos, fazendo-o na se¸c˜ao “Projetos”do Moodle. O arquivo utilizado durante a apresenta¸c˜ao deve ser idˆentico ao previamente enviado pelo Moodle. Se a equipe decidir substituir o arquivo original, isso resultar´a em uma redu¸c˜ao de 50% na nota final do grupo. Embora n˜ao seja obrigat´orio, recomenda-se o envio dos arquivos em formato PDF para preservar a formata¸c˜ao original. Os crit´erios de avalia¸c˜ao Os projetos valem, cada um, 25 pontos. O barema com os crit´erios detalhados e seus respectivos valores se encontram na se¸c˜ao “Projetos”do Moodle. Os dados Cada grupo ´e respons´avel por procurar seus pr´oprios dados e deve informar sua escolha aos demais por meio do “Proje- tos/F´orum Projetos”no Moodle. Essa medida visa prevenir a duplicidade na utiliza¸c˜ao de conjuntos de dados entre grupos. Para assegurar uma comunica¸c˜ao clara, inclua os dados em sua postagem e indique a fonte de onde foram obtidos. Se for identificado que mais de um grupo escolheu o mesmo conjunto de dados, os grupos afetados sofrer˜ao uma redu¸c˜ao de 20% em sua nota final. Assim, ´e crucial garantir a exclusividade dos dados escolhidos dentro de sua classe. P´agina 2 de 2 Projeto 1 - Qui-quadrado de independˆencia e ANOVA Para o Projeto 1, espera-se que cada grupo exiba as estat´ısticas descritivas relevantes antes de realizar os testes de Qui- quadrado de Independˆencia e ANOVA. Posteriormente, dever˜ao introduzir essas t´ecnicas e demonstrar como foram aplicadas aos dados coletados. Fica a cargo das equipes realizar as devidas manipula¸c˜oes nos dados para adequ´a-los `as exigˆencias dos m´etodos estat´ısticos mencionados. Caso os dados n˜ao estejam em conformidade com as premissas requeridas pelos modelos anal´ıticos sugeridos, o grupo tem a liberdade de escolher entre as seguintes op¸c˜oes: • Op¸c˜ao 1. Buscar uma Nova Base de Dados: Selecione outro conjunto de dados que esteja em conformidade com as exigˆencias dos modelos. Neste caso, ´e importante detalhar quais premissas n˜ao foram atendidas, explicar os potenciais efeitos de aplicar o modelo sob tais circunstˆancias e discutir o impacto na an´alise. • Op¸c˜ao 2. Utilizar os Dados Atuais: Mantenha o conjunto de dados original, identifique e explique quais premissas do modelo n˜ao foram cumpridas e as implica¸c˜oes dessas viola¸c˜oes. Ap´os essa an´alise, aplique um ou mais modelos alternativos que n˜ao apresentem o mesmo problema de premissas. Finalmente, compare os resultados obtidos com os diferentes modelos para destacar as varia¸c˜oes e conclus˜oes derivadas de cada abordagem. Deve-se estabelecer os objetivos e avaliar se eles foram alcan¸cados. Projeto 2 - Modelos de Regress˜ao Linear Para o Projeto 2, espera-se que cada grupo desenvolva um modelo de regress˜ao linear, selecionando cuidadosamente as vari´aveis consideradas mais relevantes. A apresenta¸c˜ao deve come¸car com a exposi¸c˜ao das estat´ısticas descritivas essenciais ao desenvolvimento do modelo. Em seguida, detalhe o funcionamento do modelo de regress˜ao escolhido e demonstre sua aplica¸c˜ao com os dados selecionados. ´E importante definir com clareza quais s˜ao as vari´aveis explicativas e qual ´e a vari´avel resposta. Al´em disso, ´e fundamental avaliar se o modelo ajustado atende `as premissas te´oricas necess´arias para uma an´alise de regress˜ao linear confi´avel, bem como analisar a qualidade desse ajuste. Para isso, realize as an´alises conforme discutido nas aulas, incluindo, mas n˜ao se limitando a, verifica¸c˜ao da linearidade, da homocedasticidade, da independˆencia dos res´ıduos e da normalidade... Essas etapas s˜ao cruciais para garantir a validade e a precis˜ao das conclus˜oes obtidas a partir do modelo de regress˜ao linear ajustado. Análise do Dataset de Empréstimos Isadora Rodrigues Rabelo Ana Luíza Siqueira Monteiro Rafael Vinicius Visconti Nunes Professor: Cassius Henrique Sumário 1 Introdução ao Dataset 2 1.1 Descrição das Variáveis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 1.2 Objetivo do Estudo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 1.3 Aplicação de um Modelo de Regressão Linear . . . . . . . . . . . . . . . . . . . . . . . . . 3 1.4 Conversões Realizadas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 2 Verificação da Base 4 2.1 Análise de NA’s no Dataset . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 2.1.1 Observações: . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 2.2 Tratamento de Valores Faltantes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 2.3 Análise dos outliers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 2.4 Análise de Inconsistências . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 2.4.1 Observações . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 3 Análise Descritivado do Dataset 9 3.1 Estatísticas Descritivas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22 3.2 Distribuições das Variáveis Numéricas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22 3.3 Boxplots para Variáveis Categóricas vs Valor do Empréstimo . . . . . . . . . . . . . . . . 23 3.4 Matriz de Correlação . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23 3.5 Relação entre Renda do Cliente (customer_income) e Valor do Empréstimo (loan_amnt) 23 3.6 Análise dos Resultados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23 1 1 INTRODUÇÃO AO DATASET 4 Aplicação do Modelo 24 4.1 Análise dos Resultados dos Modelos de Regressão . . . . . . . . . . . . . . . . . . . . . . . 27 4.1.1 Modelos de Regressão . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27 4.1.2 Multicolinearidade (VIF) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28 4.1.3 Verificação das Premissas do Modelo . . . . . . . . . . . . . . . . . . . . . . . . . . 28 4.2 Normalidade dos Resíduos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28 4.3 Homocedasticidade . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28 4.4 Independência dos Resíduos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28 5 Conclusão do Trabalho 28 1 Introdução ao Dataset O dataset fornecido, conhecido como “Loan-Dataset”, contém informações detalhadas sobre empréstimos de clientes. Esse dataset é frequentemente utilizado para análises de dados e tarefas de aprendizado de máquina, como a previsão do risco de inadimplência em empréstimos. A análise desse dataset pode ajudar instituições financeiras a entender melhor os fatores que influenciam a inadimplência e, assim, melhorar seus modelos de concessão de crédito. library(dplyr) # Carregar o dataset file_path <- 'LoanDataset - LoansDatasest.csv' df <- read.csv(file_path) # Converter colunas especificadas para os tipos apropriados df <- df %>% mutate( customer_income = as.numeric(customer_income), home_ownership = as.factor(home_ownership), loan_intent = as.factor(loan_intent), loan_grade = as.factor(loan_grade), historical_default = as.factor(historical_default), Current_loan_status = as.factor(Current_loan_status) ) # Remover '£' da coluna loan_amnt e converter para numérico df$loan_amnt <- as.numeric(gsub("[£,]", "", df$loan_amnt)) 1.1 Descrição das Variáveis Aqui está uma descrição detalhada das variáveis presentes no dataset, juntamente com seu tipo de dado: 2 Universidade Federal de Minas Gerais 1.2 Objetivo do Estudo 1 INTRODUÇÃO AO DATASET 1. customer_id (float64): Identificação única de cada cliente. 2. customer_age (int64): Idade do cliente. 3. customer_income (float64): Renda anual do cliente. 4. home_ownership (category): Tipo de posse da casa (por exemplo, alugado, próprio, hipotecado). 5. employment_duration (float64): Duração do emprego do cliente em meses. 6. loan_intent (category): Intenção do empréstimo (por exemplo, pessoal, educação, médico). 7. loan_grade (category): Classificação do empréstimo (por exemplo, A, B, C). 8. loan_amnt (float64): Valor do empréstimo solicitado. 9. loan_int_rate (float64): Taxa de juros do empréstimo. 10. term_years (int64): Duração do empréstimo em anos. 11. historical_default (category): Histórico de inadimplência do cliente (sim ou não). 12. cred_hist_length (int64): Duração do histórico de crédito em anos. 13. Current_loan_status (category): Status atual do empréstimo (inadimplente ou não inadim- plente). 1.2 Objetivo do Estudo O estudo deste dataset é crucial para compreender os fatores que contribuem para a inadimplência em empréstimos. Com essa análise, instituições financeiras podem ajustar suas políticas de concessão de crédito, minimizando o risco e potencializando os lucros. O dataset permite a criação de modelos preditivos que ajudam a identificar clientes com maior probabilidade de inadimplência. 1.3 Aplicação de um Modelo de Regressão Linear Para aplicar um modelo de regressão linear, é importante definir a variável resposta e as variáveis preditoras. Neste caso, a variável resposta será loan_amnt (valor do empréstimo). Algumas perguntas pertinentes que podemos explorar são: 1. Como a renda do cliente (customer_income) afeta o valor do empréstimo solicitado? 2. O tipo de posse da casa (home_ownership) influencia no valor do empréstimo? 3. A intenção do empréstimo (loan_intent) tem relação com o valor do empréstimo solicitado? Essas questões podem ser exploradas através da construção de um modelo de regressão linear, utilizando as variáveis preditoras mencionadas. O próximo passo seria realizar a análise exploratória dos dados e, em seguida, construir e avaliar o modelo de regressão. 1.4 Conversões Realizadas • customer_income foi convertido para numérico. • home_ownership, loan_intent, loan_grade, historical_default, e Current_loan_status foram convertidos para categóricos. • loan_amnt teve o símbolo “£” removido e foi convertido para numérico. 3 Universidade Federal de Minas Gerais 2 VERIFICAÇÃO DA BASE 2 Verificação da Base library(ggplot2) # Substituir valores em branco por NA df[df == ""] <- NA # Verificar a quantidade de valores NA em cada coluna na_counts <- colSums(is.na(df)) # Calcular a proporção de valores NA na_proportion <- na_counts / nrow(df) * 100 # Criar um data frame para facilitar a visualização na_df <- data.frame('NA Count' = na_counts, 'NA Proportion (%)' = na_proportion) # Plotar a proporção de valores NA em cada variável ggplot(na_df, aes(x = reorder(row.names(na_df), -`NA.Proportion....`), y = `NA.Proportion....`)) + geom_bar(stat = "identity", fill = "steelblue", width = 0.7) + theme_minimal(base_size = 14) + labs(title = 'Proporção de Valores NA', x = 'Variável', y = 'Proporção de Valores NA (%)') + theme( plot.title = element_text(hjust = 0.5, size = 18, face = "bold"), axis.title.x = element_text(size = 16, face = "bold"), axis.title.y = element_text(size = 16, face = "bold"), axis.text.x = element_text(size = 12), axis.text.y = element_text(size = 12), plot.background = element_rect(fill = "white"), panel.grid.major = element_line(color = "grey80"), panel.grid.minor = element_line(color = "grey90") ) + coord_flip() 4 Universidade Federal de Minas Gerais 2.1 Análise de NA’s no Dataset 2 VERIFICAÇÃO DA BASE historical_default loan_int_rate employment_duration Current_loan_status customer_income customer_id loan_amnt cred_hist_length customer_age home_ownership loan_grade loan_intent term_years 0 20 40 60 Proporção de Valores NA (%) Variável Proporção de Valores NA 2.1 Análise de NA’s no Dataset A análise de valores faltantes (NA’s) no dataset é essencial para garantir a qualidade dos dados antes de qualquer modelagem. A tabela abaixo apresenta a quantidade de valores NA e a proporção desses valores em cada variável: Variável NA Count NA Proportion (%) customer_id 3 0.009206 customer_age 0 0.000000 customer_income 4 0.012275 home_ownership 0 0.000000 employment_duration 895 2.746578 loan_intent 0 0.000000 loan_grade 0 0.000000 loan_amnt 1 0.003069 loan_int_rate 3116 9.562389 term_years 0 0.000000 historical_default 20737 63.637759 cred_hist_length 0 0.000000 Current_loan_status 4 0.012275 5 Universidade Federal de Minas Gerais 2.2 Tratamento de Valores Faltantes 2 VERIFICAÇÃO DA BASE 2.1.1 Observações: • A variável historical_default apresenta a maior proporção de valores NA, com aproximadamente 63.64% dos dados faltantes. Este é um problema significativo, pois pode impactar a análise e os modelos preditivos. • A variável loan_int_rate também possui uma quantidade considerável de valores NA, com cerca de 9.56%. • Outras variáveis, como employment_duration e customer_income, têm proporções menores de valores NA, mas ainda assim precisam ser tratadas. • Variáveis como customer_age, home_ownership, loan_intent, loan_grade, term_years, e cred_hist_length não possuem valores NA, o que é positivo. # Remover a variável "historical_default" devido à alta proporção de valores faltantes df <- df %>% select(-historical_default) # Função para calcular a moda Mode <- function(x) { ux <- unique(x) ux[which.max(tabulate(match(x, ux)))] } # Imputar valores nas variáveis numéricas com a média numeric_columns <- df %>% select(where(is.numeric)) %>% colnames() for (column in numeric_columns) { df[[column]][is.na(df[[column]])] <- mean(df[[column]], na.rm = TRUE) } # Imputar valores nas variáveis categóricas com a moda categorical_columns <- df %>% select(where(is.factor)) %>% colnames() for (column in categorical_columns) { mode_value <- Mode(df[[column]]) levels(df[[column]]) <- c(levels(df[[column]]), mode_value) df[[column]][is.na(df[[column]])] <- mode_value } # Verificar se ainda existem valores faltantes na_counts_after_imputation <- colSums(is.na(df)) 2.2 Tratamento de Valores Faltantes A variável historical_default foi removida devido à alta proporção de valores faltantes (aproximadamente 63.64%). Para as outras variáveis, os valores faltantes foram imputados da seguinte forma: • Variáveis Numéricas: Imputação com a média. • Variáveis Categóricas: Imputação com a moda. 6 Universidade Federal de Minas Gerais 2.3 Análise dos outliers 2 VERIFICAÇÃO DA BASE 2.3 Análise dos outliers # Função para detectar outliers usando o método IQR (Interquartile Range) detect_outliers_iqr <- function(df) { outliers <- list() numeric_columns <- df %>% select(where(is.numeric)) %>% colnames() for (column in numeric_columns) { Q1 <- quantile(df[[column]], 0.25, na.rm = TRUE) Q3 <- quantile(df[[column]], 0.75, na.rm = TRUE) IQR <- Q3 - Q1 lower_bound <- Q1 - 1.5 * IQR upper_bound <- Q3 + 1.5 * IQR outliers[[column]] <- df %>% filter(df[[column]] < lower_bound | df[[column]] > upper_bound) %>% pull(column) } return(outliers) } outliers <- detect_outliers_iqr(df) # Função para verificar inconsistências nos dados categóricos detect_inconsistencies <- function(df) { inconsistencies <- list() categorical_columns <- df %>% select(where(is.factor)) %>% colnames() for (column in categorical_columns) { unique_values <- unique(df[[column]]) inconsistencies[[column]] <- unique_values } return(inconsistencies) } inconsistencies <- detect_inconsistencies(df) # Contagem de outliers em cada coluna outliers_count <- sapply(outliers, length) # Mostrar os resultados outliers_count_df <- data.frame(Variable = names(outliers_count) , Outlier.Count = outliers_count) A análise de outliers foi realizada utilizando o método IQR (Interquartile Range), que identifica valores que estão fora de 1.5 vezes o intervalo interquartil (IQR) a partir dos quartis primeiro (Q1) e terceiro (Q3). A tabela a seguir mostra a contagem de outliers em cada variável numérica: Variável Contagem de Outliers customer_id 0 customer_age 1498 customer_income 1482 7 Universidade Federal de Minas Gerais 2.4 Análise de Inconsistências 2 VERIFICAÇÃO DA BASE Variável Contagem de Outliers employment_duration 854 loan_amnt 1690 2.4 Análise de Inconsistências A verificação de inconsistências nos dados categóricos foi feita para identificar valores únicos em cada variável categórica. Aqui estão os valores únicos encontrados em cada variável categórica: Variável Valores Únicos home_ownership [‘RENT’, ‘OWN’, ‘MORTGAGE’] loan_intent [‘PERSONAL’, ‘EDUCATION’, ‘MEDICAL’] loan_grade [‘C’, ‘A’, ‘B’] Current_loan_status [‘DEFAULT’, ‘NO DEFAULT’] 2.4.1 Observações • Outliers: Há uma quantidade significativa de outliers nas variáveis customer_age, customer_income, employment_duration e loan_amnt. Esses outliers podem impactar a análise e os modelos prediti- vos. • Inconsistências: Não foram encontradas inconsistências nos valores únicos das variáveis categóricas. Todos os valores parecem coerentes e dentro das expectativas. # Função para remover outliers utilizando o método IQR remove_outliers_iqr <- function(df) { numeric_columns <- df %>% select(where(is.numeric)) %>% colnames() for (column in numeric_columns) { Q1 <- quantile(df[[column]], 0.25, na.rm = TRUE) Q3 <- quantile(df[[column]], 0.75, na.rm = TRUE) IQR <- Q3 - Q1 lower_bound <- Q1 - 1.5 * IQR upper_bound <- Q3 + 1.5 * IQR df <- df %>% filter(df[[column]] >= lower_bound & df[[column]] <= upper_bound) } return(df) } # Remover outliers do dataframe df_cleaned <- remove_outliers_iqr(df) Com os Outliers tratados, vamos agora vermos algumas estatísticas descritivas 8 Universidade Federal de Minas Gerais 3 ANÁLISE DESCRITIVADO DO DATASET 3 Análise Descritivado do Dataset # Carregar as bibliotecas necessárias library(readxl) library(ggplot2) library(ggpubr) library(dplyr) library(ggcorrplot) # Estatísticas descritivas desc_stats <- summary(df_cleaned) # Plotar distribuições para variáveis numéricas num_vars <- c('customer_age', 'customer_income', 'employment_duration', 'loan_amnt', 'loan_int_rate', 'term_years', 'cred_hist_length') for (var in num_vars) { p <- ggplot(df_cleaned, aes_string(x = var)) + geom_histogram(aes(y = ..density..), bins = 30, color = 'black', fill = 'steelblue', alpha = 0.7) + geom_density(color = 'darkred', size = 1) + ggtitle(paste('Distribuição de', var)) + xlab(var) + ylab('Frequência') + theme_minimal() + theme(plot.title = element_text(hjust = 0.5)) print(p) } 9 Universidade Federal de Minas Gerais 3 ANÁLISE DESCRITIVADO DO DATASET 0.00 0.05 0.10 0.15 0.20 20 25 30 35 40 customer_age Frequência Distribuição de customer_age 10 Universidade Federal de Minas Gerais 3 ANÁLISE DESCRITIVADO DO DATASET 0.0e+00 5.0e−06 1.0e−05 1.5e−05 0e+00 5e+04 1e+05 customer_income Frequência Distribuição de customer_income 11 Universidade Federal de Minas Gerais 3 ANÁLISE DESCRITIVADO DO DATASET 0.0 0.1 0.2 0 5 10 employment_duration Frequência Distribuição de employment_duration 12 Universidade Federal de Minas Gerais 3 ANÁLISE DESCRITIVADO DO DATASET 0e+00 5e−05 1e−04 0 5000 10000 15000 20000 loan_amnt Frequência Distribuição de loan_amnt 13 Universidade Federal de Minas Gerais 3 ANÁLISE DESCRITIVADO DO DATASET 0.0 0.1 0.2 0.3 5 10 15 20 loan_int_rate Frequência Distribuição de loan_int_rate 14 Universidade Federal de Minas Gerais 3 ANÁLISE DESCRITIVADO DO DATASET 0.0 0.2 0.4 0.6 2.5 5.0 7.5 10.0 term_years Frequência Distribuição de term_years 15 Universidade Federal de Minas Gerais 3 ANÁLISE DESCRITIVADO DO DATASET 0.0 0.2 0.4 5 10 cred_hist_length Frequência Distribuição de cred_hist_length # Boxplots para variáveis categóricas vs variáveis numéricas em relação a loan_amnt cat_vars <- c('home_ownership', 'loan_intent', 'loan_grade', 'Current_loan_status') for (var in cat_vars) { p <- ggplot(df_cleaned, aes_string(x = var, y = 'loan_amnt')) + geom_boxplot(fill = 'steelblue', color = 'black', alpha = 0.7) + ggtitle(paste('Montante do Empréstimo vs', var)) + xlab(var) + ylab('Montante do Empréstimo (escala log)') + theme_minimal() + theme(axis.text.x = element_text(angle = 45, hjust = 1), plot.title = element_text(hjust = 0.5)) print(p) } 16 Universidade Federal de Minas Gerais 3 ANÁLISE DESCRITIVADO DO DATASET 0 5000 10000 15000 20000 MORTGAGE OTHER OWN RENT home_ownership Montante do Empréstimo (escala log) Montante do Empréstimo vs home_ownership 17 Universidade Federal de Minas Gerais 3 ANÁLISE DESCRITIVADO DO DATASET 0 5000 10000 15000 20000 DEBTCONSOLIDATION EDUCATION HOMEIMPROVEMENT MEDICAL PERSONAL VENTURE loan_intent Montante do Empréstimo (escala log) Montante do Empréstimo vs loan_intent 18 Universidade Federal de Minas Gerais 3 ANÁLISE DESCRITIVADO DO DATASET 0 5000 10000 15000 20000 A B C D E loan_grade Montante do Empréstimo (escala log) Montante do Empréstimo vs loan_grade 19 Universidade Federal de Minas Gerais 3 ANÁLISE DESCRITIVADO DO DATASET 0 5000 10000 15000 20000 DEFAULT NO DEFAULT Current_loan_status Montante do Empréstimo (escala log) Montante do Empréstimo vs Current_loan_status # Matriz de correlação corr_matrix <- cor(df_cleaned %>% select(all_of(num_vars)), use = 'complete.obs') # Plotar a matriz de correlação corr_plot <- ggcorrplot(corr_matrix, method = 'circle', type = 'lower', lab = TRUE, lab_size = 3, colors = c('red', 'white', 'blue'), title = 'Matriz de Correlação', ggtheme = theme_minimal()) corr_plot <- corr_plot + theme(plot.title = element_text(hjust = 0.5)) print(corr_plot) 20 Universidade Federal de Minas Gerais 3 ANÁLISE DESCRITIVADO DO DATASET 0.09 0.08 0.03 0.01 0.24 0.79 0.19 0.33 −0.06 0.09 0.05 0.09 −0.07 0.13 0.07 0.08 0.23 0.02 0.03 0.01 0.28 customer_age customer_income employment_duration loan_amnt loan_int_rate term_years customer_income employment_duration loan_amnt loan_int_rate term_years cred_hist_length Corr −1.0 −0.5 0.0 0.5 1.0 Matriz de Correlação ggplot(df_cleaned, aes(x = customer_income, y = loan_amnt)) + geom_point(color = 'blue', alpha = 0.6) + ggtitle('Customer Income vs Loan Amount') + xlab('Customer Income') + ylab('Loan Amount') + theme_minimal() + theme( plot.title = element_text(hjust = 0.5, size = 16, face = "bold"), axis.title = element_text(size = 14), axis.text = element_text(size = 12), panel.grid.major = element_line(color = "lightgray", size = 0.5), panel.grid.minor = element_blank(), panel.border = element_rect(color = "black", fill = NA, size = 1) ) 21 Universidade Federal de Minas Gerais 3.1 Estatísticas Descritivas 3 ANÁLISE DESCRITIVADO DO DATASET 0 5000 10000 15000 20000 0e+00 5e+04 1e+05 Customer Income Loan Amount Customer Income vs Loan Amount 3.1 Estatísticas Descritivas • Idade do Cliente (customer_age): A média é de aproximadamente 26 anos, com um desvio padrão de 3,97 anos. A faixa de idade varia de 20 a 40 anos. • Renda Anual do Cliente (customer_income): A média é de aproximadamente 56.716,50 com um desvio padrão de 26.344,72. A renda anual varia de 4.080 a 139.008. • Duração do Emprego (employment_duration): A média é de 4,36 meses, com um desvio padrão de 3,32 meses. A duração varia de 0 a 14 meses. • Valor do Empréstimo (loan_amnt): O valor médio do empréstimo é de 8.484,72, com um desvio padrão de 4.888,64. Os empréstimos variam de 500 a 22.500. • Taxa de Juros do Empréstimo (loan_int_rate): A média é de 10,92%, com um desvio padrão de 3,03%. As taxas de juros variam de 5,42% a 20,62%. • Duração do Empréstimo em Anos (term_years): A média é de 4,65 anos, com um desvio padrão de 2,41 anos. A duração varia de 1 a 10 anos. • Duração do Histórico de Crédito (cred_hist_length): A média é de 4,83 anos, com um desvio padrão de 2,71 anos. O histórico varia de 2 a 13 anos. 3.2 Distribuições das Variáveis Numéricas • Idade do Cliente: A maioria dos clientes tem entre 20 e 30 anos. 22 Universidade Federal de Minas Gerais 3.3 Boxplots para Variáveis Categóricas vs Valor do Empréstimo 3 ANÁLISE DESCRITIVADO DO DATASET • Renda Anual do Cliente: A distribuição é mais concentrada em torno dos 50.000 a 70.000, com alguns outliers acima de 100.000. • Duração do Emprego: A maioria dos clientes tem entre 0 a 7 meses de emprego. • Valor do Empréstimo: A distribuição é relativamente uniforme, com um pico em torno de 5.000 a 10.000. • Taxa de Juros do Empréstimo: A maioria das taxas de juros está entre 8% e 13%. • Duração do Empréstimo em Anos: A maioria dos empréstimos tem duração entre 1 a 7 anos. • Duração do Histórico de Crédito: A maioria dos clientes tem um histórico de crédito entre 2 a 7 anos. 3.3 Boxplots para Variáveis Categóricas vs Valor do Empréstimo • Tipo de Posse da Casa (home_ownership): Clientes com posse própria (OWN) tendem a solicitar empréstimos maiores do que os com hipoteca (MORTGAGE) ou alugados (RENT). • Intenção do Empréstimo (loan_intent): Empréstimos para educação e negócios (VENTURE) tendem a ter valores maiores comparados a outros propósitos como saúde (MEDICAL) ou melhora- mento da casa (HOMEIMPROVEMENT). • Classificação do Empréstimo (loan_grade): Empréstimos de maior classificação (A) geralmente têm valores maiores do que os de classificação inferior (C). • Status Atual do Empréstimo (Current_loan_status): Empréstimos inadimplentes tendem a ter valores menores comparados aos não inadimplentes. 3.4 Matriz de Correlação • Existe uma correlação moderada entre a renda anual do cliente e o valor do empréstimo (0,44). • A duração do emprego também mostra uma correlação positiva com o valor do empréstimo (0,23). • A taxa de juros tem uma correlação negativa com o valor do empréstimo (-0,14), indicando que empréstimos maiores tendem a ter taxas de juros ligeiramente menores. • A duração do histórico de crédito tem uma correlação positiva com o valor do empréstimo (0,17). 3.5 Relação entre Renda do Cliente (customer_income) e Valor do Empréstimo (loan_amnt) O gráfico de dispersão mostra uma correlação positiva entre a renda do cliente e o valor do empréstimo. Clientes com maior renda tendem a solicitar empréstimos de valores mais altos. A correlação de 0.328 também indica uma relação moderada positiva. 3.6 Análise dos Resultados • Idade e Renda dos Clientes: A maioria dos clientes é jovem e tem uma renda anual moderada, o que pode influenciar diretamente o valor dos empréstimos solicitados. 23 Universidade Federal de Minas Gerais 4 APLICAÇÃO DO MODELO • Tipo de Posse da Casa e Intenção do Empréstimo: Clientes que possuem casa própria ou têm empréstimos destinados à educação ou negócios tendem a solicitar valores maiores. • Classificação e Status do Empréstimo: Empréstimos de maior classificação e aqueles que não estão inadimplentes geralmente são de valores maiores, indicando uma relação entre o risco percebido e o valor concedido. • Correlação Entre Variáveis: A correlação moderada entre a renda e o valor do empréstimo sugere que clientes com maior renda solicitam valores mais altos. Além disso, a correlação negativa entre a taxa de juros e o valor do empréstimo indica que empréstimos maiores podem ser associados a melhores condições de pagamento. 4 Aplicação do Modelo library(caret) library(car) # Prepare the data for regression models df_model <- df_cleaned %>% select(-customer_id) %>% mutate(across(where(is.factor), as.numeric)) # Convert factors to numeric # Split data into training and testing sets set.seed(42) trainIndex <- createDataPartition(df_model$loan_amnt, p = 0.7, list = FALSE, times = 1) df_train <- df_model[trainIndex,] df_test <- df_model[-trainIndex,] # Calculate VIF calculate_vif <- function(df_cleaned) { vif_df <- data.frame(VIF = vif(lm(loan_amnt ~ ., data = df))) return(vif_df) } # Initial Model with selected relevant variables based on initial analysis selected_features <- c('customer_income', 'home_ownership', 'loan_intent','loan_amnt') model1 <- lm(loan_amnt ~ ., data = df_train %>% select(all_of(selected_features))) vif_selected <- calculate_vif(df_train %>% select(all_of(selected_features))) print(vif_selected) ## VIF.GVIF VIF.Df VIF.GVIF..1..2.Df.. ## customer_id 2.815052 1 1.677812 ## customer_age 4.055115 1 2.013732 ## customer_income 1.108071 1 1.052649 ## home_ownership 1.222268 3 1.034017 ## employment_duration 1.098462 1 1.048075 ## loan_intent 1.069161 5 1.006710 ## loan_grade 3.474345 4 1.168447 24 Universidade Federal de Minas Gerais 4 APLICAÇÃO DO MODELO ## loan_int_rate 2.984458 1 1.727558 ## term_years 1.051295 1 1.025327 ## cred_hist_length 4.702336 1 2.168487 ## Current_loan_status 1.297458 1 1.139060 # Model with all variables model2 <- lm(loan_amnt ~ ., data = df_train) vif_all <- calculate_vif(df_train) print(vif_all) ## VIF.GVIF VIF.Df VIF.GVIF..1..2.Df.. ## customer_id 2.815052 1 1.677812 ## customer_age 4.055115 1 2.013732 ## customer_income 1.108071 1 1.052649 ## home_ownership 1.222268 3 1.034017 ## employment_duration 1.098462 1 1.048075 ## loan_intent 1.069161 5 1.006710 ## loan_grade 3.474345 4 1.168447 ## loan_int_rate 2.984458 1 1.727558 ## term_years 1.051295 1 1.025327 ## cred_hist_length 4.702336 1 2.168487 ## Current_loan_status 1.297458 1 1.139060 # Predict and evaluate the models y_pred1 <- predict(model1, newdata = df_test) mse1 <- mean((df_test$loan_amnt - y_pred1)ˆ2) r2_1 <- summary(model1)$r.squared adj_r2_1 <- summary(model1)$adj.r.squared y_pred2 <- predict(model2, newdata = df_test) mse2 <- mean((df_test$loan_amnt - y_pred2)ˆ2) r2_2 <- summary(model2)$r.squared adj_r2_2 <- summary(model2)$adj.r.squared # Prepare results summary results_summary <- data.frame( Model = c("Selected Variables", "All Variables"), MSE = c(mse1, mse2), R_squared = c(r2_1, r2_2), Adjusted_R_squared = c(adj_r2_1, adj_r2_2) ) print(results_summary) ## Model MSE R_squared Adjusted_R_squared ## 1 Selected Variables 21128726 0.1091090 0.1089668 ## 2 All Variables 19277572 0.1824924 0.1820574 25 Universidade Federal de Minas Gerais 4 APLICAÇÃO DO MODELO # Checking residuals for the best model (based on Adjusted R-squared) residuals <- residuals(model2) # Plotar resíduos ggplot(data.frame(residuals), aes(x = residuals)) + geom_histogram(bins = 30, fill = 'blue', alpha = 0.7) + geom_density(color = 'red') + ggtitle('Distribuição dos Resíduos') + xlab('Resíduos') + ylab('Frequência') + theme_minimal(base_size = 14) + theme( plot.title = element_text(hjust = 0.5), plot.margin = unit(c(1, 1, 1, 1), "cm") ) 0 500 1000 1500 −10000 0 10000 Resíduos Frequência Distribuição dos Resíduos # Plotar resíduos vs valores ajustados ggplot(data.frame(fitted = fitted(model2), residuals = residuals), aes(x = fitted, y = residuals)) + geom_point(alpha = 0.5, color = 'blue') + geom_hline(yintercept = 0, color = 'red', linetype = 'dashed') + ggtitle('Resíduos vs Valores Ajustados') + 26 Universidade Federal de Minas Gerais 4.1 Análise dos Resultados dos Modelos de Regressão 4 APLICAÇÃO DO MODELO xlab('Valores Ajustados') + ylab('Resíduos') + theme_minimal(base_size = 14) + theme( plot.title = element_text(hjust = 0.5), plot.margin = unit(c(1, 1, 1, 1), "cm") ) −10000 −5000 0 5000 10000 15000 5000 10000 15000 Valores Ajustados Resíduos Resíduos vs Valores Ajustados 4.1 Análise dos Resultados dos Modelos de Regressão 4.1.1 Modelos de Regressão Foram testados dois modelos de regressão linear múltipla: • Modelo 1 (Variáveis Selecionadas): – Variáveis: customer_income, home_ownership_OWN, home_ownership_RENT, loan_intent_EDUCATION, loan_intent_HOMEIMPROVEMENT, loan_intent_MEDICAL, loan_intent_VENTURE. – MSE: 21128726 – R-squared: 0.1091 – Adjusted R-squared: 0.1089 27 Universidade Federal de Minas Gerais 4.2 Normalidade dos Resíduos 5 CONCLUSÃO DO TRABALHO • Modelo 2 (Todas as Variáveis): – Variáveis: Todas as variáveis do dataset exceto customer_id. – MSE: 19277572 – R-squared: 0.1824 – Adjusted R-squared: 0.18205 4.1.2 Multicolinearidade (VIF) • Modelo 1 (Variáveis Selecionadas): – Nenhuma variável apresentou VIF superior a 5, indicando baixa multicolinearidade. • Modelo 2 (Todas as Variáveis): – Nenhuma variável apresentou VIF superior a 5, indicando baixa multicolinearidade. 4.1.3 Verificação das Premissas do Modelo 4.2 Normalidade dos Resíduos A análise gráfica dos resíduos do Modelo 2 (melhor ajustado) mostra que os resíduos são aproximadamente normais, embora com alguma assimetria. 4.3 Homocedasticidade A análise dos resíduos versus valores ajustados não mostrou padrão claro, indicando que a homocedastici- dade (variância constante dos resíduos) é razoável. 4.4 Independência dos Resíduos A ausência de padrões nos gráficos de resíduos sugere que os resíduos são independentes. 5 Conclusão do Trabalho O estudo revelou que a renda do cliente, a posse da casa, e a intenção do empréstimo são fatores significativos que influenciam o valor do empréstimo solicitado. O Modelo 2, que utilizou todas as variáveis disponíveis, apresentou um melhor desempenho preditivo, sugerindo que múltiplos fatores contribuem para a determinação do valor do empréstimo. A análise forneceu insights valiosos para a compreensão dos padrões de empréstimos, podendo ajudar instituições financeiras a melhorar seus modelos de concessão de crédito e reduzir o risco de inadimplência. Este trabalho demonstrou a importância de uma análise detalhada e cuidadosa dos dados, desde a limpeza até a modelagem, para garantir resultados confiáveis e aplicáveis. As metodologias empregadas e os insights obtidos podem ser aplicados em futuros estudos e modelos preditivos no campo de análise de risco de crédito. 28 Universidade Federal de Minas Gerais Análise do Dataset de Empréstimos Isadora Rodrigues Rabelo Ana Luíza Siqueira Monteiro Rafael Vinicius Visconti Nunes Professor: Cassius Henrique Sumário 1 Introdução ao Dataset 2 1.1 Descrição das Variáveis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 1.2 Objetivo do Estudo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 1.3 Aplicação de um Modelo de Regressão Linear . . . . . . . . . . . . . . . . . . . . . . . . . 3 1.4 Conversões Realizadas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 2 Verificação da Base 4 2.1 Análise de NA’s no Dataset . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 2.1.1 Observações: . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 2.2 Tratamento de Valores Faltantes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 2.3 Análise dos outliers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 2.4 Análise de Inconsistências . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 2.4.1 Observações . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 3 Análise Descritivado do Dataset 9 3.1 Estatísticas Descritivas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22 3.2 Distribuições das Variáveis Numéricas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22 3.3 Boxplots para Variáveis Categóricas vs Valor do Empréstimo . . . . . . . . . . . . . . . . 23 3.4 Matriz de Correlação . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23 3.5 Relação entre Renda do Cliente (customer_income) e Valor do Empréstimo (loan_amnt) 23 3.6 Análise dos Resultados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23 1 1 INTRODUÇÃO AO DATASET 4 Aplicação do Modelo 24 4.1 Análise dos Resultados dos Modelos de Regressão . . . . . . . . . . . . . . . . . . . . . . . 27 4.1.1 Modelos de Regressão . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27 4.1.2 Multicolinearidade (VIF) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28 4.1.3 Verificação das Premissas do Modelo . . . . . . . . . . . . . . . . . . . . . . . . . . 28 4.2 Normalidade dos Resíduos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28 4.3 Homocedasticidade . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28 4.4 Independência dos Resíduos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28 5 Conclusão do Trabalho 28 1 Introdução ao Dataset O dataset fornecido, conhecido como “Loan-Dataset”, contém informações detalhadas sobre empréstimos de clientes. Esse dataset é frequentemente utilizado para análises de dados e tarefas de aprendizado de máquina, como a previsão do risco de inadimplência em empréstimos. A análise desse dataset pode ajudar instituições financeiras a entender melhor os fatores que influenciam a inadimplência e, assim, melhorar seus modelos de concessão de crédito. library(dplyr) # Carregar o dataset file_path <- 'LoanDataset - LoansDatasest.csv' df <- read.csv(file_path) # Converter colunas especificadas para os tipos apropriados df <- df %>% mutate( customer_income = as.numeric(customer_income), home_ownership = as.factor(home_ownership), loan_intent = as.factor(loan_intent), loan_grade = as.factor(loan_grade), historical_default = as.factor(historical_default), Current_loan_status = as.factor(Current_loan_status) ) # Remover '£' da coluna loan_amnt e converter para numérico df$loan_amnt <- as.numeric(gsub("[£,]", "", df$loan_amnt)) 1.1 Descrição das Variáveis Aqui está uma descrição detalhada das variáveis presentes no dataset, juntamente com seu tipo de dado: 2 Universidade Federal de Minas Gerais 1.2 Objetivo do Estudo 1 INTRODUÇÃO AO DATASET 1. customer_id (float64): Identificação única de cada cliente. 2. customer_age (int64): Idade do cliente. 3. customer_income (float64): Renda anual do cliente. 4. home_ownership (category): Tipo de posse da casa (por exemplo, alugado, próprio, hipotecado). 5. employment_duration (float64): Duração do emprego do cliente em meses. 6. loan_intent (category): Intenção do empréstimo (por exemplo, pessoal, educação, médico). 7. loan_grade (category): Classificação do empréstimo (por exemplo, A, B, C). 8. loan_amnt (float64): Valor do empréstimo solicitado. 9. loan_int_rate (float64): Taxa de juros do empréstimo. 10. term_years (int64): Duração do empréstimo em anos. 11. historical_default (category): Histórico de inadimplência do cliente (sim ou não). 12. cred_hist_length (int64): Duração do histórico de crédito em anos. 13. Current_loan_status (category): Status atual do empréstimo (inadimplente ou não inadim- plente). 1.2 Objetivo do Estudo O estudo deste dataset é crucial para compreender os fatores que contribuem para a inadimplência em empréstimos. Com essa análise, instituições financeiras podem ajustar suas políticas de concessão de crédito, minimizando o risco e potencializando os lucros. O dataset permite a criação de modelos preditivos que ajudam a identificar clientes com maior probabilidade de inadimplência. 1.3 Aplicação de um Modelo de Regressão Linear Para aplicar um modelo de regressão linear, é importante definir a variável resposta e as variáveis preditoras. Neste caso, a variável resposta será loan_amnt (valor do empréstimo). Algumas perguntas pertinentes que podemos explorar são: 1. Como a renda do cliente (customer_income) afeta o valor do empréstimo solicitado? 2. O tipo de posse da casa (home_ownership) influencia no valor do empréstimo? 3. A intenção do empréstimo (loan_intent) tem relação com o valor do empréstimo solicitado? Essas questões podem ser exploradas através da construção de um modelo de regressão linear, utilizando as variáveis preditoras mencionadas. O próximo passo seria realizar a análise exploratória dos dados e, em seguida, construir e avaliar o modelo de regressão. 1.4 Conversões Realizadas • customer_income foi convertido para numérico. • home_ownership, loan_intent, loan_grade, historical_default, e Current_loan_status foram convertidos para categóricos. • loan_amnt teve o símbolo “£” removido e foi convertido para numérico. 3 Universidade Federal de Minas Gerais 2 VERIFICAÇÃO DA BASE 2 Verificação da Base library(ggplot2) # Substituir valores em branco por NA df[df == ""] <- NA # Verificar a quantidade de valores NA em cada coluna na_counts <- colSums(is.na(df)) # Calcular a proporção de valores NA na_proportion <- na_counts / nrow(df) * 100 # Criar um data frame para facilitar a visualização na_df <- data.frame('NA Count' = na_counts, 'NA Proportion (%)' = na_proportion) # Plotar a proporção de valores NA em cada variável ggplot(na_df, aes(x = reorder(row.names(na_df), -`NA.Proportion....`), y = `NA.Proportion....`)) + geom_bar(stat = "identity", fill = "steelblue", width = 0.7) + theme_minimal(base_size = 14) + labs(title = 'Proporção de Valores NA', x = 'Variável', y = 'Proporção de Valores NA (%)') + theme( plot.title = element_text(hjust = 0.5, size = 18, face = "bold"), axis.title.x = element_text(size = 16, face = "bold"), axis.title.y = element_text(size = 16, face = "bold"), axis.text.x = element_text(size = 12), axis.text.y = element_text(size = 12), plot.background = element_rect(fill = "white"), panel.grid.major = element_line(color = "grey80"), panel.grid.minor = element_line(color = "grey90") ) + coord_flip() 4 Universidade Federal de Minas Gerais 2.1 Análise de NA’s no Dataset 2 VERIFICAÇÃO DA BASE historical_default loan_int_rate employment_duration Current_loan_status customer_income customer_id loan_amnt cred_hist_length customer_age home_ownership loan_grade loan_intent term_years 0 20 40 60 Proporção de Valores NA (%) Variável Proporção de Valores NA 2.1 Análise de NA’s no Dataset A análise de valores faltantes (NA’s) no dataset é essencial para garantir a qualidade dos dados antes de qualquer modelagem. A tabela abaixo apresenta a quantidade de valores NA e a proporção desses valores em cada variável: Variável NA Count NA Proportion (%) customer_id 3 0.009206 customer_age 0 0.000000 customer_income 4 0.012275 home_ownership 0 0.000000 employment_duration 895 2.746578 loan_intent 0 0.000000 loan_grade 0 0.000000 loan_amnt 1 0.003069 loan_int_rate 3116 9.562389 term_years 0 0.000000 historical_default 20737 63.637759 cred_hist_length 0 0.000000 Current_loan_status 4 0.012275 5 Universidade Federal de Minas Gerais 2.2 Tratamento de Valores Faltantes 2 VERIFICAÇÃO DA BASE 2.1.1 Observações: • A variável historical_default apresenta a maior proporção de valores NA, com aproximadamente 63.64% dos dados faltantes. Este é um problema significativo, pois pode impactar a análise e os modelos preditivos. • A variável loan_int_rate também possui uma quantidade considerável de valores NA, com cerca de 9.56%. • Outras variáveis, como employment_duration e customer_income, têm proporções menores de valores NA, mas ainda assim precisam ser tratadas. • Variáveis como customer_age, home_ownership, loan_intent, loan_grade, term_years, e cred_hist_length não possuem valores NA, o que é positivo. # Remover a variável "historical_default" devido à alta proporção de valores faltantes df <- df %>% select(-historical_default) # Função para calcular a moda Mode <- function(x) { ux <- unique(x) ux[which.max(tabulate(match(x, ux)))] } # Imputar valores nas variáveis numéricas com a média numeric_columns <- df %>% select(where(is.numeric)) %>% colnames() for (column in numeric_columns) { df[[column]][is.na(df[[column]])] <- mean(df[[column]], na.rm = TRUE) } # Imputar valores nas variáveis categóricas com a moda categorical_columns <- df %>% select(where(is.factor)) %>% colnames() for (column in categorical_columns) { mode_value <- Mode(df[[column]]) levels(df[[column]]) <- c(levels(df[[column]]), mode_value) df[[column]][is.na(df[[column]])] <- mode_value } # Verificar se ainda existem valores faltantes na_counts_after_imputation <- colSums(is.na(df)) 2.2 Tratamento de Valores Faltantes A variável historical_default foi removida devido à alta proporção de valores faltantes (aproximadamente 63.64%). Para as outras variáveis, os valores faltantes foram imputados da seguinte forma: • Variáveis Numéricas: Imputação com a média. • Variáveis Categóricas: Imputação com a moda. 6 Universidade Federal de Minas Gerais 2.3 Análise dos outliers 2 VERIFICAÇÃO DA BASE 2.3 Análise dos outliers # Função para detectar outliers usando o método IQR (Interquartile Range) detect_outliers_iqr <- function(df) { outliers <- list() numeric_columns <- df %>% select(where(is.numeric)) %>% colnames() for (column in numeric_columns) { Q1 <- quantile(df[[column]], 0.25, na.rm = TRUE) Q3 <- quantile(df[[column]], 0.75, na.rm = TRUE) IQR <- Q3 - Q1 lower_bound <- Q1 - 1.5 * IQR upper_bound <- Q3 + 1.5 * IQR outliers[[column]] <- df %>% filter(df[[column]] < lower_bound | df[[column]] > upper_bound) %>% pull(column) } return(outliers) } outliers <- detect_outliers_iqr(df) # Função para verificar inconsistências nos dados categóricos detect_inconsistencies <- function(df) { inconsistencies <- list() categorical_columns <- df %>% select(where(is.factor)) %>% colnames() for (column in categorical_columns) { unique_values <- unique(df[[column]]) inconsistencies[[column]] <- unique_values } return(inconsistencies) } inconsistencies <- detect_inconsistencies(df) # Contagem de outliers em cada coluna outliers_count <- sapply(outliers, length) # Mostrar os resultados outliers_count_df <- data.frame(Variable = names(outliers_count) , Outlier.Count = outliers_count) A análise de outliers foi realizada utilizando o método IQR (Interquartile Range), que identifica valores que estão fora de 1.5 vezes o intervalo interquartil (IQR) a partir dos quartis primeiro (Q1) e terceiro (Q3). A tabela a seguir mostra a contagem de outliers em cada variável numérica: Variável Contagem de Outliers customer_id 0 customer_age 1498 customer_income 1482 7 Universidade Federal de Minas Gerais 2.4 Análise de Inconsistências 2 VERIFICAÇÃO DA BASE Variável Contagem de Outliers employment_duration 854 loan_amnt 1690 2.4 Análise de Inconsistências A verificação de inconsistências nos dados categóricos foi feita para identificar valores únicos em cada variável categórica. Aqui estão os valores únicos encontrados em cada variável categórica: Variável Valores Únicos home_ownership [‘RENT’, ‘OWN’, ‘MORTGAGE’] loan_intent [‘PERSONAL’, ‘EDUCATION’, ‘MEDICAL’] loan_grade [‘C’, ‘A’, ‘B’] Current_loan_status [‘DEFAULT’, ‘NO DEFAULT’] 2.4.1 Observações • Outliers: Há uma quantidade significativa de outliers nas variáveis customer_age, customer_income, employment_duration e loan_amnt. Esses outliers podem impactar a análise e os modelos prediti- vos. • Inconsistências: Não foram encontradas inconsistências nos valores únicos das variáveis categóricas. Todos os valores parecem coerentes e dentro das expectativas. # Função para remover outliers utilizando o método IQR remove_outliers_iqr <- function(df) { numeric_columns <- df %>% select(where(is.numeric)) %>% colnames() for (column in numeric_columns) { Q1 <- quantile(df[[column]], 0.25, na.rm = TRUE) Q3 <- quantile(df[[column]], 0.75, na.rm = TRUE) IQR <- Q3 - Q1 lower_bound <- Q1 - 1.5 * IQR upper_bound <- Q3 + 1.5 * IQR df <- df %>% filter(df[[column]] >= lower_bound & df[[column]] <= upper_bound) } return(df) } # Remover outliers do dataframe df_cleaned <- remove_outliers_iqr(df) Com os Outliers tratados, vamos agora vermos algumas estatísticas descritivas 8 Universidade Federal de Minas Gerais 3 ANÁLISE DESCRITIVADO DO DATASET 3 Análise Descritivado do Dataset # Carregar as bibliotecas necessárias library(readxl) library(ggplot2) library(ggpubr) library(dplyr) library(ggcorrplot) # Estatísticas descritivas desc_stats <- summary(df_cleaned) # Plotar distribuições para variáveis numéricas num_vars <- c('customer_age', 'customer_income', 'employment_duration', 'loan_amnt', 'loan_int_rate', 'term_years', 'cred_hist_length') for (var in num_vars) { p <- ggplot(df_cleaned, aes_string(x = var)) + geom_histogram(aes(y = ..density..), bins = 30, color = 'black', fill = 'steelblue', alpha = 0.7) + geom_density(color = 'darkred', size = 1) + ggtitle(paste('Distribuição de', var)) + xlab(var) + ylab('Frequência') + theme_minimal() + theme(plot.title = element_text(hjust = 0.5)) print(p) } 9 Universidade Federal de Minas Gerais 3 ANÁLISE DESCRITIVADO DO DATASET 0.00 0.05 0.10 0.15 0.20 20 25 30 35 40 customer_age Frequência Distribuição de customer_age 10 Universidade Federal de Minas Gerais 3 ANÁLISE DESCRITIVADO DO DATASET 0.0e+00 5.0e−06 1.0e−05 1.5e−05 0e+00 5e+04 1e+05 customer_income Frequência Distribuição de customer_income 11 Universidade Federal de Minas Gerais 3 ANÁLISE DESCRITIVADO DO DATASET 0.0 0.1 0.2 0 5 10 employment_duration Frequência Distribuição de employment_duration 12 Universidade Federal de Minas Gerais 3 ANÁLISE DESCRITIVADO DO DATASET 0e+00 5e−05 1e−04 0 5000 10000 15000 20000 loan_amnt Frequência Distribuição de loan_amnt 13 Universidade Federal de Minas Gerais 3 ANÁLISE DESCRITIVADO DO DATASET 0.0 0.1 0.2 0.3 5 10 15 20 loan_int_rate Frequência Distribuição de loan_int_rate 14 Universidade Federal de Minas Gerais 3 ANÁLISE DESCRITIVADO DO DATASET 0.0 0.2 0.4 0.6 2.5 5.0 7.5 10.0 term_years Frequência Distribuição de term_years 15 Universidade Federal de Minas Gerais 3 ANÁLISE DESCRITIVADO DO DATASET 0.0 0.2 0.4 5 10 cred_hist_length Frequência Distribuição de cred_hist_length # Boxplots para variáveis categóricas vs variáveis numéricas em relação a loan_amnt cat_vars <- c('home_ownership', 'loan_intent', 'loan_grade', 'Current_loan_status') for (var in cat_vars) { p <- ggplot(df_cleaned, aes_string(x = var, y = 'loan_amnt')) + geom_boxplot(fill = 'steelblue', color = 'black', alpha = 0.7) + ggtitle(paste('Montante do Empréstimo vs', var)) + xlab(var) + ylab('Montante do Empréstimo (escala log)') + theme_minimal() + theme(axis.text.x = element_text(angle = 45, hjust = 1), plot.title = element_text(hjust = 0.5)) print(p) } 16 Universidade Federal de Minas Gerais 3 ANÁLISE DESCRITIVADO DO DATASET 0 5000 10000 15000 20000 MORTGAGE OTHER OWN RENT home_ownership Montante do Empréstimo (escala log) Montante do Empréstimo vs home_ownership 17 Universidade Federal de Minas Gerais 3 ANÁLISE DESCRITIVADO DO DATASET 0 5000 10000 15000 20000 DEBTCONSOLIDATION EDUCATION HOMEIMPROVEMENT MEDICAL PERSONAL VENTURE loan_intent Montante do Empréstimo (escala log) Montante do Empréstimo vs loan_intent 18 Universidade Federal de Minas Gerais 3 ANÁLISE DESCRITIVADO DO DATASET 0 5000 10000 15000 20000 A B C D E loan_grade Montante do Empréstimo (escala log) Montante do Empréstimo vs loan_grade 19 Universidade Federal de Minas Gerais 3 ANÁLISE DESCRITIVADO DO DATASET 0 5000 10000 15000 20000 DEFAULT NO DEFAULT Current_loan_status Montante do Empréstimo (escala log) Montante do Empréstimo vs Current_loan_status # Matriz de correlação corr_matrix <- cor(df_cleaned %>% select(all_of(num_vars)), use = 'complete.obs') # Plotar a matriz de correlação corr_plot <- ggcorrplot(corr_matrix, method = 'circle', type = 'lower', lab = TRUE, lab_size = 3, colors = c('red', 'white', 'blue'), title = 'Matriz de Correlação', ggtheme = theme_minimal()) corr_plot <- corr_plot + theme(plot.title = element_text(hjust = 0.5)) print(corr_plot) 20 Universidade Federal de Minas Gerais 3 ANÁLISE DESCRITIVADO DO DATASET 0.09 0.08 0.03 0.01 0.24 0.79 0.19 0.33 −0.06 0.09 0.05 0.09 −0.07 0.13 0.07 0.08 0.23 0.02 0.03 0.01 0.28 customer_age customer_income employment_duration loan_amnt loan_int_rate term_years customer_income employment_duration loan_amnt loan_int_rate term_years cred_hist_length Corr −1.0 −0.5 0.0 0.5 1.0 Matriz de Correlação ggplot(df_cleaned, aes(x = customer_income, y = loan_amnt)) + geom_point(color = 'blue', alpha = 0.6) + ggtitle('Customer Income vs Loan Amount') + xlab('Customer Income') + ylab('Loan Amount') + theme_minimal() + theme( plot.title = element_text(hjust = 0.5, size = 16, face = "bold"), axis.title = element_text(size = 14), axis.text = element_text(size = 12), panel.grid.major = element_line(color = "lightgray", size = 0.5), panel.grid.minor = element_blank(), panel.border = element_rect(color = "black", fill = NA, size = 1) ) 21 Universidade Federal de Minas Gerais 3.1 Estatísticas Descritivas 3 ANÁLISE DESCRITIVADO DO DATASET 0 5000 10000 15000 20000 0e+00 5e+04 1e+05 Customer Income Loan Amount Customer Income vs Loan Amount 3.1 Estatísticas Descritivas • Idade do Cliente (customer_age): A média é de aproximadamente 26 anos, com um desvio padrão de 3,97 anos. A faixa de idade varia de 20 a 40 anos. • Renda Anual do Cliente (customer_income): A média é de aproximadamente 56.716,50 com um desvio padrão de 26.344,72. A renda anual varia de 4.080 a 139.008. • Duração do Emprego (employment_duration): A média é de 4,36 meses, com um desvio padrão de 3,32 meses. A duração varia de 0 a 14 meses. • Valor do Empréstimo (loan_amnt): O valor médio do empréstimo é de 8.484,72, com um desvio padrão de 4.888,64. Os empréstimos variam de 500 a 22.500. • Taxa de Juros do Empréstimo (loan_int_rate): A média é de 10,92%, com um desvio padrão de 3,03%. As taxas de juros variam de 5,42% a 20,62%. • Duração do Empréstimo em Anos (term_years): A média é de 4,65 anos, com um desvio padrão de 2,41 anos. A duração varia de 1 a 10 anos. • Duração do Histórico de Crédito (cred_hist_length): A média é de 4,83 anos, com um desvio padrão de 2,71 anos. O histórico varia de 2 a 13 anos. 3.2 Distribuições das Variáveis Numéricas • Idade do Cliente: A maioria dos clientes tem entre 20 e 30 anos. 22 Universidade Federal de Minas Gerais 3.3 Boxplots para Variáveis Categóricas vs Valor do Empréstimo 3 ANÁLISE DESCRITIVADO DO DATASET • Renda Anual do Cliente: A distribuição é mais concentrada em torno dos 50.000 a 70.000, com alguns outliers acima de 100.000. • Duração do Emprego: A maioria dos clientes tem entre 0 a 7 meses de emprego. • Valor do Empréstimo: A distribuição é relativamente uniforme, com um pico em torno de 5.000 a 10.000. • Taxa de Juros do Empréstimo: A maioria das taxas de juros está entre 8% e 13%. • Duração do Empréstimo em Anos: A maioria dos empréstimos tem duração entre 1 a 7 anos. • Duração do Histórico de Crédito: A maioria dos clientes tem um histórico de crédito entre 2 a 7 anos. 3.3 Boxplots para Variáveis Categóricas vs Valor do Empréstimo • Tipo de Posse da Casa (home_ownership): Clientes com posse própria (OWN) tendem a solicitar empréstimos maiores do que os com hipoteca (MORTGAGE) ou alugados (RENT). • Intenção do Empréstimo (loan_intent): Empréstimos para educação e negócios (VENTURE) tendem a ter valores maiores comparados a outros propósitos como saúde (MEDICAL) ou melhora- mento da casa (HOMEIMPROVEMENT). • Classificação do Empréstimo (loan_grade): Empréstimos de maior classificação (A) geralmente têm valores maiores do que os de classificação inferior (C). • Status Atual do Empréstimo (Current_loan_status): Empréstimos inadimplentes tendem a ter valores menores comparados aos não inadimplentes. 3.4 Matriz de Correlação • Existe uma correlação moderada entre a renda anual do cliente e o valor do empréstimo (0,44). • A duração do emprego também mostra uma correlação positiva com o valor do empréstimo (0,23). • A taxa de juros tem uma correlação negativa com o valor do empréstimo (-0,14), indicando que empréstimos maiores tendem a ter taxas de juros ligeiramente menores. • A duração do histórico de crédito tem uma correlação positiva com o valor do empréstimo (0,17). 3.5 Relação entre Renda do Cliente (customer_income) e Valor do Empréstimo (loan_amnt) O gráfico de dispersão mostra uma correlação positiva entre a renda do cliente e o valor do empréstimo. Clientes com maior renda tendem a solicitar empréstimos de valores mais altos. A correlação de 0.328 também indica uma relação moderada positiva. 3.6 Análise dos Resultados • Idade e Renda dos Clientes: A maioria dos clientes é jovem e tem uma renda anual moderada, o que pode influenciar diretamente o valor dos empréstimos solicitados. 23 Universidade Federal de Minas Gerais 4 APLICAÇÃO DO MODELO • Tipo de Posse da Casa e Intenção do Empréstimo: Clientes que possuem casa própria ou têm empréstimos destinados à educação ou negócios tendem a solicitar valores maiores. • Classificação e Status do Empréstimo: Empréstimos de maior classificação e aqueles que não estão inadimplentes geralmente são de valores maiores, indicando uma relação entre o risco percebido e o valor concedido. • Correlação Entre Variáveis: A correlação moderada entre a renda e o valor do empréstimo sugere que clientes com maior renda solicitam valores mais altos. Além disso, a correlação negativa entre a taxa de juros e o valor do empréstimo indica que empréstimos maiores podem ser associados a melhores condições de pagamento. 4 Aplicação do Modelo library(caret) library(car) # Prepare the data for regression models df_model <- df_cleaned %>% select(-customer_id) %>% mutate(across(where(is.factor), as.numeric)) # Convert factors to numeric # Split data into training and testing sets set.seed(42) trainIndex <- createDataPartition(df_model$loan_amnt, p = 0.7, list = FALSE, times = 1) df_train <- df_model[trainIndex,] df_test <- df_model[-trainIndex,] # Calculate VIF calculate_vif <- function(df_cleaned) { vif_df <- data.frame(VIF = vif(lm(loan_amnt ~ ., data = df))) return(vif_df) } # Initial Model with selected relevant variables based on initial analysis selected_features <- c('customer_income', 'home_ownership', 'loan_intent','loan_amnt') model1 <- lm(loan_amnt ~ ., data = df_train %>% select(all_of(selected_features))) vif_selected <- calculate_vif(df_train %>% select(all_of(selected_features))) print(vif_selected) ## VIF.GVIF VIF.Df VIF.GVIF..1..2.Df.. ## customer_id 2.815052 1 1.677812 ## customer_age 4.055115 1 2.013732 ## customer_income 1.108071 1 1.052649 ## home_ownership 1.222268 3 1.034017 ## employment_duration 1.098462 1 1.048075 ## loan_intent 1.069161 5 1.006710 ## loan_grade 3.474345 4 1.168447 24 Universidade Federal de Minas Gerais 4 APLICAÇÃO DO MODELO ## loan_int_rate 2.984458 1 1.727558 ## term_years 1.051295 1 1.025327 ## cred_hist_length 4.702336 1 2.168487 ## Current_loan_status 1.297458 1 1.139060 # Model with all variables model2 <- lm(loan_amnt ~ ., data = df_train) vif_all <- calculate_vif(df_train) print(vif_all) ## VIF.GVIF VIF.Df VIF.GVIF..1..2.Df.. ## customer_id 2.815052 1 1.677812 ## customer_age 4.055115 1 2.013732 ## customer_income 1.108071 1 1.052649 ## home_ownership 1.222268 3 1.034017 ## employment_duration 1.098462 1 1.048075 ## loan_intent 1.069161 5 1.006710 ## loan_grade 3.474345 4 1.168447 ## loan_int_rate 2.984458 1 1.727558 ## term_years 1.051295 1 1.025327 ## cred_hist_length 4.702336 1 2.168487 ## Current_loan_status 1.297458 1 1.139060 # Predict and evaluate the models y_pred1 <- predict(model1, newdata = df_test) mse1 <- mean((df_test$loan_amnt - y_pred1)ˆ2) r2_1 <- summary(model1)$r.squared adj_r2_1 <- summary(model1)$adj.r.squared y_pred2 <- predict(model2, newdata = df_test) mse2 <- mean((df_test$loan_amnt - y_pred2)ˆ2) r2_2 <- summary(model2)$r.squared adj_r2_2 <- summary(model2)$adj.r.squared # Prepare results summary results_summary <- data.frame( Model = c("Selected Variables", "All Variables"), MSE = c(mse1, mse2), R_squared = c(r2_1, r2_2), Adjusted_R_squared = c(adj_r2_1, adj_r2_2) ) print(results_summary) ## Model MSE R_squared Adjusted_R_squared ## 1 Selected Variables 21128726 0.1091090 0.1089668 ## 2 All Variables 19277572 0.1824924 0.1820574 25 Universidade Federal de Minas Gerais 4 APLICAÇÃO DO MODELO # Checking residuals for the best model (based on Adjusted R-squared) residuals <- residuals(model2) # Plotar resíduos ggplot(data.frame(residuals), aes(x = residuals)) + geom_histogram(bins = 30, fill = 'blue', alpha = 0.7) + geom_density(color = 'red') + ggtitle('Distribuição dos Resíduos') + xlab('Resíduos') + ylab('Frequência') + theme_minimal(base_size = 14) + theme( plot.title = element_text(hjust = 0.5), plot.margin = unit(c(1, 1, 1, 1), "cm") ) 0 500 1000 1500 −10000 0 10000 Resíduos Frequência Distribuição dos Resíduos # Plotar resíduos vs valores ajustados ggplot(data.frame(fitted = fitted(model2), residuals = residuals), aes(x = fitted, y = residuals)) + geom_point(alpha = 0.5, color = 'blue') + geom_hline(yintercept = 0, color = 'red', linetype = 'dashed') + ggtitle('Resíduos vs Valores Ajustados') + 26 Universidade Federal de Minas Gerais 4.1 Análise dos Resultados dos Modelos de Regressão 4 APLICAÇÃO DO MODELO xlab('Valores Ajustados') + ylab('Resíduos') + theme_minimal(base_size = 14) + theme( plot.title = element_text(hjust = 0.5), plot.margin = unit(c(1, 1, 1, 1), "cm") ) −10000 −5000 0 5000 10000 15000 5000 10000 15000 Valores Ajustados Resíduos Resíduos vs Valores Ajustados 4.1 Análise dos Resultados dos Modelos de Regressão 4.1.1 Modelos de Regressão Foram testados dois modelos de regressão linear múltipla: • Modelo 1 (Variáveis Selecionadas): – Variáveis: customer_income, home_ownership_OWN, home_ownership_RENT, loan_intent_EDUCATION, loan_intent_HOMEIMPROVEMENT, loan_intent_MEDICAL, loan_intent_VENTURE. – MSE: 21128726 – R-squared: 0.1091 – Adjusted R-squared: 0.1089 27 Universidade Federal de Minas Gerais 4.2 Normalidade dos Resíduos 5 CONCLUSÃO DO TRABALHO • Modelo 2 (Todas as Variáveis): – Variáveis: Todas as variáveis do dataset exceto customer_id. – MSE: 19277572 – R-squared: 0.1824 – Adjusted R-squared: 0.18205 4.1.2 Multicolinearidade (VIF) • Modelo 1 (Variáveis Selecionadas): – Nenhuma variável apresentou VIF superior a 5, indicando baixa multicolinearidade. • Modelo 2 (Todas as Variáveis): – Nenhuma variável apresentou VIF superior a 5, indicando baixa multicolinearidade. 4.1.3 Verificação das Premissas do Modelo 4.2 Normalidade dos Resíduos A análise gráfica dos resíduos do Modelo 2 (melhor ajustado) mostra que os resíduos são aproximadamente normais, embora com alguma assimetria. 4.3 Homocedasticidade A análise dos resíduos versus valores ajustados não mostrou padrão claro, indicando que a homocedastici- dade (variância constante dos resíduos) é razoável. 4.4 Independência dos Resíduos A ausência de padrões nos gráficos de resíduos sugere que os resíduos são independentes. 5 Conclusão do Trabalho O estudo revelou que a renda do cliente, a posse da casa, e a intenção do empréstimo são fatores significativos que influenciam o valor do empréstimo solicitado. O Modelo 2, que utilizou todas as variáveis disponíveis, apresentou um melhor desempenho preditivo, sugerindo que múltiplos fatores contribuem para a determinação do valor do empréstimo. A análise forneceu insights valiosos para a compreensão dos padrões de empréstimos, podendo ajudar instituições financeiras a melhorar seus modelos de concessão de crédito e reduzir o risco de inadimplência. Este trabalho demonstrou a importância de uma análise detalhada e cuidadosa dos dados, desde a limpeza até a modelagem, para garantir resultados confiáveis e aplicáveis. As metodologias empregadas e os insights obtidos podem ser aplicados em futuros estudos e modelos preditivos no campo de análise de risco de crédito. 28 Universidade Federal de Minas Gerais