Olá pessoal!
Uma das técnicas de aprendizado supervisionado do Machine Learning é a Regressão Linear. No exemplo de hoje, veremos como criar um código em C# que utiliza essa técnica dentro de um cenário muito interessante.
Cenário: Você tem uma pequena loja e vem investindo em publicidade para aumentar as vendas. Nos últimos meses, você tem registrado o quanto gastou em publicidade e o quanto vendeu em reais. Agora, você quer prever quanto vai vender no próximo mês, dependendo de quanto você planeja investir em publicidade.
Dados Passados: Aqui estão os dados que você coletou nos últimos cinco meses:
![](https://static.wixstatic.com/media/25da4e_1424b745d7c94dca804b978cfd96c1c9~mv2.png/v1/fill/w_364,h_224,al_c,q_85,enc_auto/25da4e_1424b745d7c94dca804b978cfd96c1c9~mv2.png)
Pergunta: Se você investir R$ 3.500 em publicidade no próximo mês, quanto você espera vender?
Como a Regressão Linear Ajudaria:
Passo 1: Analisar os dados
Primeiro, olhamos para os dados que você coletou. Aqui, notamos que, conforme o investimento em publicidade aumenta, as vendas também aumentam. Isso sugere que há uma relação entre os dois.
Passo 2: Desenhar uma linha
Regressão Linear vai traçar uma linha reta que melhor se ajusta a esses pontos de dados. Essa linha tenta mostrar a tendência geral: "Se você investir X em publicidade, você provavelmente venderá Y".
Passo 3: Usar a linha para prever
Com base na linha que traçamos, podemos prever as vendas futuras. Se investíssemos R$ 3.500, quanto que iríamos vender?
Visualizando o Exemplo: Imagine que temos um gráfico, onde o eixo X representa o investimento em publicidade e o eixo Y representa as vendas. Os pontos de cada mês (janeiro, fevereiro, etc.) estão no gráfico, e a linha da regressão linear é desenhada para passar o mais próximo possível desses pontos. Agora, quando colocamos R$ 3.500 no eixo X, podemos subir até a linha e ver que corresponde a um valor de previsão de vendas no eixo Y.
Explicação Simples: É como desenhar uma linha que melhor explica a relação entre o que você gasta em publicidade e quanto você vende. Depois, você usa essa linha para adivinhar suas vendas futuras com base no quanto planeja gastar.
Agora, vamos ao código!
Vamos criar um código em C# que use o framework ML.NET no cenário que exemplificamos acima.
Para começar, crie um projeto Console em C#.
![](https://static.wixstatic.com/media/25da4e_9beb4d960b3b4c928a5d06d24434862a~mv2.png/v1/fill/w_800,h_532,al_c,q_90,enc_auto/25da4e_9beb4d960b3b4c928a5d06d24434862a~mv2.png)
Instale no projeto o NuGet Package abaixo:
Install-Package Microsoft.ML
No arquivo Program.cs, cole o código a seguir.
using System;
using System.Collections.Generic;
using Microsoft.ML;
using Microsoft.ML.Data;
namespace LinearRegressionExample
{
// Classe que define o formato dos dados, com os campos `Investment` (Investimento) e `Sales` (Vendas).
public class SalesData
{
public float Investment { get; set; } // Investimento em publicidade
public float Sales { get; set; } // Vendas
}
// Classe que define a previsão de vendas que o modelo irá produzir.
public class SalesPrediction
{
[ColumnName("Score")]
public float PredictedSales { get; set; }
}
class Program
{
static void Main(string[] args)
{
var mlContext = new MLContext();
// Dados de exemplo com histórico de investimentos em publicidade e vendas correspondentes
var data = new List<SalesData>
{
new SalesData { Investment = 1000f, Sales = 10000f },
new SalesData { Investment = 1500f, Sales = 12000f },
new SalesData { Investment = 2000f, Sales = 15000f },
new SalesData { Investment = 2500f, Sales = 18000f },
new SalesData { Investment = 3000f, Sales = 20000f }
};
// Carrega os dados no IDataView, que é o formato usado pelo ML.NET
var dataView = mlContext.Data.LoadFromEnumerable(data);
// Cria o pipeline de treinamento
// Este pipeline concatena os dados de "Investment" em uma única coluna chamada "Features"
// e aplica a técnica de regressão para prever as vendas ("Sales")
var pipeline = mlContext.Transforms.Concatenate("Features", new[] { "Investment" })
.Append(mlContext.Regression.Trainers.LbfgsPoissonRegression(labelColumnName: "Sales", featureColumnName: "Features"));
// Treina o modelo usando os dados de exemplo
var model = pipeline.Fit(dataView);
// Cria uma engine de previsão que pode ser usada para fazer previsões em novos dados
var predictionEngine = mlContext.Model.CreatePredictionEngine<SalesData, SalesPrediction>(model);
// Novo investimento para o qual queremos prever as vendas
var newInvestment = new SalesData { Investment = 3500f };
// Previsão das vendas para o novo investimento
var prediction = predictionEngine.Predict(newInvestment);
// Exibe a previsão
Console.WriteLine($"Se você investir R$ {newInvestment.Investment}, a previsão de vendas é de R$ {prediction.PredictedSales}");
}
}
}
No código acima temos a classe SalesData, que define o formato dos dados, com os campos Investment (Investimento) e Sales (Vendas). Temos também a classe SalesPrediction, que define a previsão de vendas que o modelo irá produzir. Dentro do método main, nós temos uma lista simulando os dados. Após isso, temos o processo que transforma os dados e aplica a técnica de regressão para criar o modelo. Por último, temos o código para fazer a previsão com base no novo valor de investimento.
Se você rodar esse código, você verá o quanto que a ML calculou de previsão.
![](https://static.wixstatic.com/media/25da4e_69f05a852e374bd28f3fcbd58ed7d646~mv2.png/v1/fill/w_634,h_84,al_c,q_85,enc_auto/25da4e_69f05a852e374bd28f3fcbd58ed7d646~mv2.png)
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: https://github.com/Develop4Us-Company/DevTips/tree/master/Portugues/CSharp%20ML.NET/LinearRegression
E é isso pessoal! Espero que tenham gostado :)
Abraços!