DEV Community

Juarez Júnior
Juarez Júnior

Posted on • Updated on

IA com C# - Exemplo: Prever se um cliente será um bom ou mau pagador de um empréstimo

Olá pessoal!

Neste artigo, veremos outra técnica de Machine Learning chamada Classificação (Logistic Regression). A classificação é usada quando você quer prever uma categoria ou classe para um dado. Ao contrário da regressão, que prevê um valor numérico, a classificação decide a qual grupo ou classe um dado pertence. Logistic Regression (Regressão Logística) é uma técnica de classificação que ajuda a prever a probabilidade de um dado pertencer a uma determinada classe.

Cenário: Imagine que você trabalha em uma instituição financeira e deseja prever se um cliente será um bom ou mau pagador com base em algumas características, como renda, valor do empréstimo solicitado, e histórico de crédito.

Agora que já temos o cenário, vamos ao código! Crie um projeto Console em C# e adicione a biblioteca abaixo pelo NuGet Package.

Install-Package Microsoft.ML

Agora, na classe Program.cs, cole o código abaixo e execute.

using System;
using System.Collections.Generic;
using Microsoft.ML;
using Microsoft.ML.Data;

namespace LogisticRegressionExample
{
    // Classe que representa os dados de crédito do cliente
    public class CreditData
    {
        public float Income { get; set; }            // Renda anual do cliente
        public float LoanAmount { get; set; }        // Valor do empréstimo solicitado
        public float CreditScore { get; set; }       // Pontuação de crédito do cliente
        public bool IsGoodCredit { get; set; }       // Se o cliente é um bom pagador (true = sim, false = não)
    }

    // Classe que representa a previsão feita pelo modelo
    public class CreditPrediction
    {
        [ColumnName("PredictedLabel")]
        public bool IsGoodCredit { get; set; }       // Previsão se o cliente é um bom pagador
        public float Probability { get; set; }       // Probabilidade da previsão ser verdadeira
    }

    class Program
    {
        static void Main(string[] args)
        {
            var mlContext = new MLContext(); // Inicializa o contexto do ML.NET

            // Dados de exemplo para treinar o modelo
            var creditData = new List<CreditData>
            {
                new CreditData { Income = 50000, LoanAmount = 20000, CreditScore = 650, IsGoodCredit = true },
                new CreditData { Income = 30000, LoanAmount = 25000, CreditScore = 600, IsGoodCredit = false },
                new CreditData { Income = 70000, LoanAmount = 30000, CreditScore = 700, IsGoodCredit = true },
                new CreditData { Income = 25000, LoanAmount = 10000, CreditScore = 550, IsGoodCredit = false },
                new CreditData { Income = 45000, LoanAmount = 15000, CreditScore = 680, IsGoodCredit = true },
            };

            // Carrega os dados em um IDataView, que é o formato de dados usado pelo ML.NET
            var dataView = mlContext.Data.LoadFromEnumerable(creditData);

            // Configura o pipeline de treinamento
            var pipeline = mlContext.Transforms.Concatenate("Features", new[] { "Income", "LoanAmount", "CreditScore" }) // Combina as colunas de entrada em uma única coluna de características
                .Append(mlContext.Transforms.NormalizeMinMax("Features")) // Normaliza as características para que todas estejam na mesma escala
                .Append(mlContext.BinaryClassification.Trainers.LbfgsLogisticRegression(labelColumnName: "IsGoodCredit", featureColumnName: "Features")); // Aplica o modelo de Regressão Logística

            // Treina o modelo com os dados de exemplo
            var model = pipeline.Fit(dataView);

            // Cria um engine de previsão para fazer previsões com novos dados
            var predictionEngine = mlContext.Model.CreatePredictionEngine<CreditData, CreditPrediction>(model);

            // Novo cliente para prever se é bom pagador
            var newClient = new CreditData { Income = 55000, LoanAmount = 20000, CreditScore = 670 };
            var prediction = predictionEngine.Predict(newClient); // Faz a previsão com o modelo treinado

            // Exibe o resultado da previsão
            Console.WriteLine($"O cliente provavelmente é um bom pagador? {prediction.IsGoodCredit} (Probabilidade: {prediction.Probability:P2})");
        }
    }
}
Enter fullscreen mode Exit fullscreen mode

Explicação Simples do Código:

  • CreditData: Define as características de um cliente, como renda, valor do empréstimo solicitado e pontuação de crédito, além de se o cliente é um bom pagador ou não.
  • CreditPrediction: Classe que guarda a previsão (se o cliente é um bom pagador ou não) e a probabilidade dessa previsão.
  • Logistic Regression: Usada para calcular a probabilidade de um cliente ser um bom pagador com base nas características fornecidas.

O que o Modelo Faz?
Treina um modelo com base em dados anteriores para entender quais características estão associadas ao comportamento de bom pagador. Prevê se novos clientes provavelmente serão bons ou maus pagadores com base em suas características.

Rodando este código, você verá uma previsão indicando se o cliente provavelmente será um bom pagador, junto com a probabilidade dessa previsão.

Não se esqueça de que, para um ambiente real, talvez você tenha que considerar outros fatores ou fazer ajustes no código para ter um modelo mais preciso para o seu negócio.

Código fonte: GitHub

E é isso pessoal! Espero que tenham gostado :)

Abraços!

Top comments (0)