Crislânio Macêdo
25/11/2021

Aplicando Lógica Fuzzy na Análise Financeira de Crédito

Você já fez o seu modelo de Machine Learning e não sabe como relacionar a saída dele com as ações da área de negócio?

Esse post vai ajudar a entender como aplicar uma Lógica Fuzzy na política de crédito de uma empresa fictícia, a Meteorum. A metodologia proposta aborda desde o aspecto das regras padrão até o impacto das regras para o negócio.

O objetivo é usar uma abordagem que permita um tratamento individualizado e dinâmico dos clientes, integrando uma opinião dos especialistas, a fim de avaliar o comportamento do cliente para reduzir a inadimplência, garantir a viabilidade e a sustentabilidade das operações de transferência na empresa Meteorum.

Um pouco de história

A Lógica Fuzzy (lógica difusa) surgiu por volta de 1.965 por meio dos estudos de Lofti Asker Zadeh sobre os conjuntos. Zadeh observou que uma representação de ideias subjetivas ou vagas não pode ser manipulada através da lógica. A Fuzzy permitiu criar graus de pertinências sobre termos diferentes linguísticos, utilizando categorias que representam verdades parciais, ou ainda, padrões do melhor. Esse é o caso, por exemplo, dos conceitos de “alto“, “febril”, “bom”, tornando possível a produção de cálculos com informações imprecisas, a exemplo do que faz o ser humano.

Considere como exemplo: “dia ensolarado”.

Ensolarado: se definirmos qualquer nebulosidade de 25% ou menos, representa um dia ensolarado. Isso significa que uma nebulosidade de 26% não representa um dia ensolarado?

Considere como exemplo: “pessoa alta”.

Pessoa alta: se definirmos que uma pessoa com altura superior a 1.8m representa o conceito de pessoa alta. Isso significa que uma pessoa com altura de 1.79m não representa uma pessoa alta?

Aplicações da Lógica Fuzzy

A Lógica Fuzzy é útil onde quer que exista incerteza, combinações e pesquisas de especialistas. Entre 1.970 e 1.980, aplicações industriais da “Fuzzy“ aconteceram com maior importância, na década de 1.980 teve um maior destaque, alguns exemplos: tratamento de água feito pela Fuji Electric em 1.983, sistema de metrô inaugurado em 1.987 feito pela Hitachi, na década de 1.990 houve um maior interesse por parte das empresas dos EUA, desde então esse padrão lógico tem sido aplicado a uma ampla gama de problemas - sistemas de modelagem e controle, incluindo: controle industrial, tomada de decisão humana, processamento de imagens, sistemas multiagentes, robótica, na modelagem de crédito etc.

Um pouco mais de teoria e terminologia

Vamos abordar alguns aspectos teóricos como: conjuntos Fuzzy como modeladores de incerteza, variáveis, termos e valores ​​linguísticos, sistemas e drivers.

Conjuntos Fuzzy

Antes de introduzir o que é um conjunto Fuzzy, vamos apresentar os conjuntos clássicos (também conhecidos como conjuntos crisp). Os conjuntos crisp apresentam suas fronteiras, por exemplo: número maior do que 2.021, A = {x | x> 2021}, desse modo temos uma fronteira não ambígua, A = {é um membro se x> 2021, não é um membro se x≤2021}.

O conjunto crisp é definido para dicotomizar os requisitos em algum dado universal de discurso em dois grupos: membros e não membros . No entanto, muitos conceitos de classificação não apresentam essa característica, por exemplo, o conjunto de pessoas altas, carros caros ou dia ensolarado.

Um conjunto Fuzzy pode ser definido matematicamente atribuindo a cada indivíduo, possível no universo do discurso, um valor representado seu grau de associação (grau de pertinência), p ou exemplo: um conjunto Fuzzy, que representa o conceito definido descrito anteriormente, pode atribuir um grau de adesão de 1 a uma nebulosidade de 0%, 0,8 a uma nebulosidade de 20%, 0,4 a uma nebulosidade de 30% e 0 a uma nebulosidade de 75% ou mais.

Definição : conjuntos Fuzzy e funções de pertinência:

Se X é uma coleção de objetos denotados por x , então o conjunto Fuzzy A em X é definido como um conjunto ordenado de pares:

A = {(x, μA (x)) | x ∈ X} , onde μA (x) é chamado de função de pertinência (ou FP) do conjunto Fuzzy A. Um FP mapeia cada elemento de X para um valor de pertinência entre 0 e 1.

Definição : termo linguístico:

Exemplo de variável linguística

Para modelar o conjunto das pessoas com febre, temos a variável linguística “Febre”, com os termos linguísticos: baixa, média, alta (que representam a criticidade, no nosso exemplo), o termo linguístico 'baixa' varia de [36–38], a variação do termo linguístico 'média' varia de [37-39] e 'alta' [38-40) .

Sistemas e Controladores Fuzzy

Um sistema de inferência Fuzzy é um tipo especial de sistema baseado em conhecimento, que é caracterizada por regras Fuzzy. Podemos separar esse sistema em 3 etapas: fuzzificação, mecanismo de inferência, defuzzificação.

fonte


Fuzzificação

Para cada valor de entrada é associado uma função de pertinência, que permite obter o grau de verdade da proposição.

● Determinar o grau de pertinência de cada conjunto (proposição);

● Limitar o valor da entrada entre 0 e 1;

● Determinar as funções de pertinências, Triangular, Trapezoidal, Gaussiana, Gbell, entre outras.

Mecanismo de inferência

Nessa etapa temos a aplicação de regras Fuzzy, a plicação dos operadores E, OU, aplicação do operador da implicação, processo de combinação.

Concernente as regras Fuzzy são promoções lógicas que relacionam seus conjuntos de entrada com os de saída, as regras são, geralmente, fornecidas por um especialista em forma de sentenças linguísticas, constituindo um aspecto fundamental no desempenho de seu sistema de inferência.

Sobre a aplicação dos operadores Fuzzy ( E e OU), conhecidos como operadores de relação na lógica, são utilizados para definir o grau máximo e mínimo de pertinência do conjunto.

Por exemplo, trazendo para um cenário de concessão de crédito: SE score de mercado é baixo OU cliente tem restrição no mercado ENTÃO empréstimo negado.

Sobre o operador de implicação é usado para definir o peso no resultado e remodelar a função, ou seja, criar uma hipótese de implicação.

Por exemplo: SE variável é propriedade ENTÃO ação;

No exemplo sobre a regra para concessão de crédito temos a implicação da ação em conceder crédito ou não ao cliente.

E finalmente temos uma etapa de combinação em que ocorre uma combinação de todas as formas em um único conjunto Fuzzy, algo semelhante ao processo de união e intersecção na teoria dos conjuntos crisp.

Defuzzificação

A defuzzificação transforma o resultado premie em valores crisp, ou seja, nessa etapa é efetuada a interpretação do seu conjunto de saída inferida pelas regras - com o objetivo de obter um valor numérico. Os métodos mais utilizados são: centroide, bissetor, entre outros.

Exemplo Prático

No nosso exemplo, criamos uma simulação de modelagem Fuzzy aplicada na política de concessão de crédito, redução do Modelo de Mandami devido a sua simplicidade e fácil implementação, porém, há outros tipos de sistema Fuzzy.

No nosso exemplo hipotético, imagine o cenário em que uma empresa chamada Meteorum, similar ao Uber, analisando o perfil dos clientes e motoristas, explorando o engajamento com a plataforma para concessão de crédito para os melhores motoristas - neste cenário específico, foi uma política capaz de estimar a capacidade de pagamento dos motoristas.

Variáveis ​​internas usadas para apolítica de crédito: engajamento com a plataforma, pontuação do modelo da Meteorum; variáveis ​​de mercado: score de crédito.

Quais regras e inferências podem ser feitas para criar um sistema especialista capaz de mitigar o risco na operação de crédito e selecionar os melhores clientes para concessão do empréstimo?

Vamos considerar que a pontuação do modelo interno é semelhante ao mercado, variando de 0-1000, em que os valores próximos a 0 sejam indicadores de clientes com propensão ai inadimplência e valores próximos de 1000 sejam pedidos de clientes adimplentes, para a variável de engajamento da plataforma definiremos 3 faixas de engajamento: baixo, média e alta. O engajamento baixo representa até 100 corridas mensais por mês, médio de 100-300 corridas por mês e alta acima de 300 corridas por mês. Abaixo, temos uma tabela com os Ratings dos motoristas, pontuação de mercado e política de crédito:

Faixas de pontuação de crédito do motorista
Faixas de score de mercado


Criamos 5 faixas que representam o risco atrelado à operação, sendo que o risco 5 indica uma chance maior para inadimplência e o grau de risco 1 indica uma chance maior para uma boa operação. O grau de risco ajudará o negócio na tomada de decisão para aprovação ou não aprovação da operação de crédito.

Política de risco


Regras da política de crédito:

SE engajamento Baixo E ( Rating Motorista E Rating de Mercado 6,5,4 ou 3) ENTÃO Grau de risco 5;

SE engajamento Baixo E ( Rating Motorista E Rating de Mercado 1,2) ENTÃO Grau de risco 4;

SE engajamento Médio E ( Rating Motorista E Rating de Mercado 6,5,4 ) ENTÃO Grau de risco 5;

SE engajamento Médio E ( Rating Motorista E Rating de Mercado 1,2,3) ENTÃO Grau de risco 3;

SE engajamento Alto E ( Rating Motorista E Rating de Mercado 6) ENTÃO Grau de risco 4;

SE engajamento Alto E ( Rating Motorista E Rating de Mercado 4,5) ENTÃO Grau de risco 3;

SE engajamento Alto E ( Rating Motorista E Rating de Mercado 3) ENTÃO Grau de risco 2;

SE engajamento Alto E ( Rating Motorista E Rating de Mercado 1,2) ENTÃO Grau de risco 1.

A tabela abaixo sumariza as regras padrão em um cenário mais conservador, atrelamos um peso maior para o engajamento da plataforma, logo, para clientes com o engajamento baixo temos um Grau de risco maior (4 ou 5).

Sumarização das regras regra para a política

# Modelagem de política de crédito simplificada usando lógica fuzzy- Datarisk


#### Para o nosso exemplo simplificado o score varia de 0-1000, em que 0 indica um cliente ruim e 1000 um cliente bom.
#! pip install -U scikit-fuzzy

de skfuzzy import control as ctrl
import matplotlib as plt
import skfuzzy as fuzz
import pandas as pd
import numpy as np

# Variáveis ​​Linguisticas. Termos Linguisticos
### Se Antecedente Então Consequente
### Novos objetos Antecedent / Consequent possuem variáveis ​​de universo e número de associação

score_mercado = ctrl.Antecedent (np.arange (0, 1001, 1), 'score_mercado')
score_interno = ctrl.Antecedent (np.arange (0, 1001, 1), 'score_interno')
engajamento = ctrl.Antecedent (np. arange (0, 5000, 1), 'engajamento')
politica_cliente = ctrl.Consequent (np.arange (0, 1001, 1), 'politica_de_risco')

# Fuzzificação
Função simples, trapezoidal (cabe uma validação das melhores função de pertinência para cada variável)

score_mercado ['RATING 1'] = fuzz.trimf (score_mercado.universe, [890, 900, 1000])
score_mercado ['RATING 2'] = fuzz.trimf (score_mercado.universe, [750, 800, 890])

score_mercado ['RATING 3'] = fuzz.trimf (score_mercado.universe, [570, 700, 750])
score_mercado ['RATING 4'] = fuzz.trimf (score_mercado.universe, [390, 500, 570])
score_mercado [ 'RATING 5'] = fuzz.trimf (score_mercado.universe, [240, 300, 390])
score_mercado ['RATING 6'] = fuzz.trimf (score_mercado.universe, [0, 200, 240])

score_interno ['RATING 1'] = fuzz.trimf (score_interno.universe, [890, 900, 1000])
score_interno ['RATING 2'] = fuzz.trimf (score_interno.universe, [750, 800, 890])
score_interno [ 'RATING 3'] = fuzz.trimf (score_interno.universe, [570, 700, 750])

score_interno ['RATING 4'] = fuzz.trimf (score_interno.universe, [390, 500, 570])
score_interno ['RATING 5'] = fuzz.trimf (score_interno.universe, [240, 300, 390])
score_interno [ 'RATING 6'] = fuzz.trimf (score_interno.universe, [0, 200, 240])

engajamento ['alto'] = fuzz.trimf (engajamento.universe, [300, 1000, 5000])
engajamento ['medio'] = fuzz.trimf (engajamento.universe, [100, 200, 300])
engajamento ['baixo '] = fuzz.trimf (engajamento.universe, [0, 50, 100])

### Uma função de pertinência personalizada pode ser construída de forma interativa com uma API Pythonic

politica_cliente ['grau de risco 1'] = fuzz.trimf (politica_cliente.universe, [850, 950, 1000])
politica_cliente ['grau de risco 2'] = fuzz.trimf (politica_cliente.universe, [750, 850, 900] ]])
politica_cliente ['grau de risco 3'] = fuzz.trimf (politica_cliente.universe, [650, 750, 800])
politica_cliente ['grau de risco 4'] = fuzz.trimf (politica_cliente.universe, [250, 500], 700])
politica_cliente ['grau de risco 5'] = fuzz.trimf (politica_cliente.universe, [0, 250, 300])

# Maquina de Inferência
rule1 = ctrl.Rule (engajamento ['baixo'] & (score_mercado ['RATING 6'] | score_interno ['RATING 6']) | (score_mercado ['RATING 5'] | score_interno ['RATING 5' ]) | (score_mercado ['RATING 4'] | score_interno ['RATING 4']) | (score_mercado ['RATING 3'] | score_interno ['RATING 3']), politica_cliente ['grau de risco 5'])

rule2 = ctrl.Rule (engajamento ['baixo'] & (score_mercado ['RATING 1'] | score_interno ['RATING 1']) | (score_mercado ['RATING 2'] | score_interno ['RATING 2']), politica_cliente ['grau de risco 4'])

rule3 = ctrl.Rule (engajamento ['medio'] & (score_mercado ['CLASSIFICAÇÃO 6'] | score_interno ['CLASSIFICAÇÃO 6']) | (score_mercado ['CLASSIFICAÇÃO 5'] | score_interno ['CLASSIFICAÇÃO 5']) | ( score_mercado ['RATING 4'] | score_interno ['RATING 4']), politica_cliente ['grau de risco 5'])

rule4 = ctrl.Rule (engajamento ['medio'] & (score_mercado ['CLASSIFICAÇÃO 1'] | score_interno ['CLASSIFICAÇÃO 1']) | (score_mercado ['CLASSIFICAÇÃO 2'] | score_interno ['CLASSIFICAÇÃO 2']) | ( score_mercado ['RATING 3'] | score_interno ['RATING 3']), politica_cliente ['grau de risco 4'])

rule5 = ctrl.Rule (engajamento ['alto'] & (score_mercado ['RATING 6'] | score_interno ['RATING 6']), politica_cliente ['grau de risco 4'])regra6 = ctrl.Rule (engajamento ['alto'] & (score_mercado ['CLASSIFICAÇÃO 5'] | score_interno ['CLASSIFICAÇÃO 5']) | (score_mercado ['CLASSIFICAÇÃO 4'] | score_interno ['CLASSIFICAÇÃO 4']), politica_cliente ['grau de risco 3'])

rule7 = ctrl.Rule (engajamento ['alto'] & (score_mercado ['RATING 3'] | score_interno ['RATING 3']), politica_cliente ['grau de risco 2'])

rule8 = ctrl.Rule (engajamento ['alto'] & (score_mercado ['CLASSIFICAÇÃO 1'] | score_interno ['CLASSIFICAÇÃO 1']) | (score_mercado ['CLASSIFICAÇÃO 2'] | score_interno ['CLASSIFICAÇÃO 2']), politica_cliente ['grau de risco 1'])

politica_ctrl = ctrl.ControlSystem ([regra1, regra2, regra3, regra4, regra5, regra6, regra7, regra8])
politica_simulador = ctrl.ControlSystemSimulation (politica_ctrl)

### Simulação

#### Passe entradas para o ControlSystem usando rótulos Antecedent com *** Pythonic API ***

`` Nota: se você gosta de passar muitas entradas de uma só vez, use .inputs (dict_of_data) ``

politica_simulador.input ['score_mercado'] = 2
politica_simulador.input ['score_interno'] = 230
politica_simulador.input ['engajamento'] = 90

# Deffuzificação
politica_simulador.compute ()
print (politica_simulador.output ['politica_de_risco'])
politica_cliente.view (sim = politica_simulador)


Agora, vamos realizar a simulação de um cliente com as seguintes características: A pontuação interna do modelo é 230, e a pontuação do mercado é 2, o engajamento do cliente na plataforma é 90. Observamos na tabela abaixo o resultado da simulação, o sistema Fuzzy indicou um grau de risco 5 para o cliente.

Vamos supor que o negócio aprova apenas os melhores clientes, os clientes com os grau de risco 1, 2, 3, nosso exemplo exclui que o cliente não seria aprovado no empréstimo.

resultado da simulação da política

Por meio da nossa política aplicada podemos observar que o cliente possui uma tendência para inadimplência com o grau de risco 5.

É importante salientar que o exemplo acima é meramente ilustrativo, a aplicação pode ser efetuada em um cenário de projeto real, porém, seria necessária uma validação das regras e da taxa de aprovação e inadimplência esperada depois do uso da metodologia proposta.

O objetivo deste artigo foi mostrar como aplicar Lógica Fuzzy na política de crédito estabelecendo uma metodologia capaz de inferir o comportamento do cliente por meio de sua exploração. Este método permite dar visibilidade ao comportamento de todos os clientes, referindo não só os estudos estatísticos efetuados previamente, mas também a opinião do negócio.

  1. Código do exemplo prático em :: https://www.kaggle.com/caesarlupum/logica-fuzzy-modelagem-poltica-de-credito/
  2. https://docs.ufpr.br/~volmir/Fuzzy_1.pdf
  3. https://www.ime.unicamp.br/~valle/PDFfiles/osmar10.pdf
  4. http://www.inf.ufsc.br/~mauro.roisenberg/ine5371/slide/AulaFuzzy.pdf
  5. https://repositorio.ufscar.br/bitstream/handle/ufscar/7224/DissHPL.pdf?sequence=2&isAllowed=y
  6. https://github.com/IsaacAlves7/ai-development/blob/main/README.md#cap-04--l%C3%B3gica-nebulosa-fuzzy-e-sistemas-baseados-em-regras-fuzzy-
  7. Neuro Fuzzy https://youtu.be/7C19X6pJEuU
  8. Palestra Internacional - Engenharia de Controle Fuzzy: com Prof. Dr. Marcelo Godoy Simões https://youtu.be/yhQtcPoy3Us
  9. https://github.com/crislanio/-OutlierDetectionAndMultivariateImputation-FI-SMA/blob/master/S54/outliers_SMA.ipynb
  10. https://crislanio-ufc.medium.com/um-tratamento-para-outliers-e-dados-ausentes-em-s%C3%A9ries-temporais-multivariadas-em-redes-de-7e2a83878e69
  11. https://github.com/crislanio/LogicaFuzzy


Algumas dicas importantes:

Ferramentas Pagas

Ferramentas gratuitas

Instalação no Python Scikit-Fuzzy : pip install scikit-fuzzy; Python-Fuzzy : Fuzzy 1.22 pip install Fuzzy

Quer saber mais sobre o assunto ou descobrir como a Datarisk pode te ajudar nessas questões? Acesse o nosso site e não deixe de conferir nossos outros artigos no nosso blog.

Mais artigos da Datarisk

Ver todos os artigos
© Copyright 2017 - 2022 | Datarisk.io | Todos os direitos reservados