Skip to content

1. Árvore de Decisão

O projeto tem como objetivo aplicar árvores de decisão para classificar clientes em faixas de pontuação de crédito. A base contém informações bancárias e dados relacionados ao histórico financeiro, permitindo treinar e avaliar um modelo de classificação que auxilie na análise de risco.

Para o desenvolvimento, foram utilizadas bibliotecas do ecossistema Python, como pandas e numpy para manipulação e análise de dados, matplotlib para visualizações, e scikit-learn para construção, treinamento e avaliação do modelo de aprendizado de máquina.

Exploração dos Dados

Análise inicial do conjunto de dados - com explicação sobre a natureza dos dados -, incluindo visualizações e estatísticas descritivas.

Nesta etapa foi realizada uma análise inicial do conjunto de dados para compreender sua estrutura e as características das variáveis disponíveis.

Estrutura do Conjunto de Dados

O dataset é composto por 28 colunas, com diferentes tipos de dados:

  • Object(20): ID, Customer_ID, Month, Name, Age, SSN, Occupation, Annual_Income, Num_of_Loan, Type_of_Loan, Num_of_Delayed_Payment, Changed_Credit_Limit, Outstanding_Debt, Credit_History_Age, Payment_of_Min_Amount, Amount_invested_monthly, Monthly_Balance, Payment_Behaviour, Credit_Score, Credit_Mix.
  • Float64(4): Monthly_Inhand_Salary, Num_Credit_Inquiries, Credit_Utilization_Ratio, Total_EMI_per_month.
  • Int64(4): Num_Bank_Accounts, Num_Credit_Card, Interest_Rate, Delay_from_due_date.

Variável Alvo

O modelo tem como variável alvo (target) a coluna Credit_Score, que representa a classificação de crédito dos clientes.

Essa variável é categórica, indicando a faixa de risco associada a cada cliente, e será utilizada para treinar e avaliar o desempenho das árvores de decisão.

Amostra dos Dados

A seguir, um exemplo com 3 linhas de um total de 100.000 registros:

ID Customer_ID Month Name Age SSN Occupation Annual_Income Monthly_Inhand_Salary Num_Bank_Accounts Num_Credit_Card Interest_Rate Num_of_Loan Type_of_Loan Delay_from_due_date Num_of_Delayed_Payment Changed_Credit_Limit Num_Credit_Inquiries Credit_Mix Outstanding_Debt Credit_Utilization_Ratio Credit_History_Age Payment_of_Min_Amount Total_EMI_per_month Amount_invested_monthly Payment_Behaviour Monthly_Balance Credit_Score
0x474c CUS_0xadc8 July Soyoungk 30 810-29-3531 Mechanic 84374.1 6605.37 8 7 9 3 Not Specified, Debt Consolidation Loan, and Not Specified 3 12 10.17 2 Standard 1000.76 34.4112 nan Yes 744.037 625.907 Low_spent_Small_value_payments 239.279 Standard
0x474d CUS_0xadc8 August Soyoungk 30 810-29-3531 Mechanic 1.88848e+07 6605.37 8 7 9 3 Not Specified, Debt Consolidation Loan, and Not Specified 8 14 10.17 2 _ 1000.76 31.4243 22 Years and 5 Months Yes 744.037 124.429 High_spent_Large_value_payments 690.757 Good
0x4752 CUS_0x6b50 January Janq 53 185-98-1380 Scientist 103049 8408.45 4 6 6 3 Not Specified, Credit-Builder Loan, and Home Equity Loan 23 6 9.46 0 Good 849.98 33.1978 17 Years and 10 Months No 255.208 102.972 High_spent_Large_value_payments 722.666 Poor

Estatísticas Descritivas

A tabela abaixo resume as estatísticas descritivas calculadas para as variáveis numéricas do dataset:

Monthly_Inhand_Salary Num_Bank_Accounts Num_Credit_Card Interest_Rate Delay_from_due_date Num_Credit_Inquiries Credit_Utilization_Ratio Total_EMI_per_month
count 84998 100000 100000 100000 100000 98035 100000 100000
mean 4194.17 17.0913 22.4744 72.466 21.0688 27.7543 32.2852 1403.12
std 3183.69 117.405 129.057 466.423 14.8601 193.177 5.11688 8306.04
min 303.645 -1 0 1 -5 0 20 0
25% 1625.57 3 4 8 10 3 28.0526 30.3067
50% 3093.75 6 5 13 18 6 32.3058 69.2495
75% 5957.45 7 7 20 28 9 36.4967 161.224
max 15204.6 1798 1499 5797 67 2597 50 82331

Essas medidas incluem contagem de valores (count), média (mean), desvio padrão (std), mínimo (min), percentis (25%, 50%, 75%) e máximo (max).
É importante destacar que algumas colunas aparecem como object no dataset, o que impede que sejam incluídas nessa análise estatística automaticamente.

Visualizações

Pré-processamento

Nesta etapa foi realizada a limpeza dos dados e o tratamento de valores ausentes, além da alteração de tipagem das colunas para adequação ao modelo. Esse processo é essencial para garantir consistência e qualidade antes do treinamento da árvore de decisão.

Alteração de Tipagem dos Dados

Como destacado anteriormente, grande parte das colunas do dataset estavam no formato object.
O primeiro passo foi padronizar essas tipagens, ajustando-as para float64, int64 e category, de acordo com a natureza de cada variável.

As 20 colunas originalmente do tipo object foram tratadas em dois grupos:

  • Apenas alteração de tipo: ID, Customer_ID, Month, Name, SSN, Occupation, Type_of_Loan, Payment_Behaviour, Payment_of_Min_Amount e Credit_Score. Essas variáveis puderam ser convertidas diretamente utilizando a função astype() do Pandas.

  • Necessidade de alterações antes da conversão: Age, Annual_Income, Num_of_Loan, Outstanding_Debt, Amount_invested_monthly, Monthly_Balance, Num_of_Delayed_Payment, Changed_Credit_Limit, Credit_Mix e Credit_History_Age. Muitas dessas colunas apresentavam valores com o caractere '_', impossibilitando a conversão imediata. Nesses casos, o caractere foi substituído por nulos lógicos e, em seguida, a tipagem correta foi aplicada.

Colunas Retiradas do Modelo

Algumas variáveis foram consideradas irrelevantes para a análise de risco e, portanto, removidas do modelo:

  • ID, Customer_ID, Month, Name, SSN, Type_of_Loan e Credit_History_Age.

Com isso, restaram 21 colunas efetivamente utilizadas no processo de modelagem.

  • Float64(9): Monthly_Inhand_Salary, Num_Credit_Inquiries, Credit_Utilization_Ratio, Total_EMI_per_month, Annual_Income, Changed_Credit_Limit, Outstanding_Debt, Amount_invested_monthly, Monthly_Balance.
  • Int64(7): Num_Bank_Accounts, Num_Credit_Card, Interest_Rate, Delay_from_due_date, Age, Num_of_Loan, Num_of_Delayed_Payment.
  • Category(5): Credit_Score, Occupation, Credit_Mix, Payment_of_Min_Amount, Payment_Behaviour.

Linhas Retiradas do Modelo

Remoção das linhas nulas.

Traceback (most recent call last):
  File "/opt/hostedtoolcache/Python/3.12.11/x64/lib/python3.12/site-packages/markdown_exec/_internal/formatters/python.py", line 71, in _run_python
    exec_python(code, code_block_id, exec_globals)
  File "/opt/hostedtoolcache/Python/3.12.11/x64/lib/python3.12/site-packages/markdown_exec/_internal/formatters/_exec_python.py", line 8, in exec_python
    exec(compiled, exec_globals)  # noqa: S102
    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "<code block: n3>", line 17, in <module>
    x = df[['Valor', 'Periodo']]
         ~~^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/hostedtoolcache/Python/3.12.11/x64/lib/python3.12/site-packages/pandas/core/frame.py", line 4113, in __getitem__
    indexer = self.columns._get_indexer_strict(key, "columns")[1]
              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/hostedtoolcache/Python/3.12.11/x64/lib/python3.12/site-packages/pandas/core/indexes/base.py", line 6212, in _get_indexer_strict
    self._raise_if_missing(keyarr, indexer, axis_name)
  File "/opt/hostedtoolcache/Python/3.12.11/x64/lib/python3.12/site-packages/pandas/core/indexes/base.py", line 6261, in _raise_if_missing
    raise KeyError(f"None of [{key}] are in the [{axis_name}]")
KeyError: "None of [Index(['Valor', 'Periodo'], dtype='object')] are in the [columns]"

Divisão dos Dados

Separação do conjunto de dados em treino e teste.

Treinamento do Modelo

Implementação do modelo Decision Tree.

Avaliação do Modelo

Avaliação do desempenho do modelo utilizando métricas apropriadas.

Relatório Final

Documentação do processo, resultados obtidos e possíveis melhorias.