Limpando os Dados no Rubix ML: Você já ouviu a frase “Garbage in, garbage out” (Lixo entra, lixo sai)? No universo do Machine Learning, ela é a lei suprema. Você pode escolher o algoritmo mais sofisticado do mundo, mas se os seus dados estiverem “sujos” — com buracos, escalas desproporcionais ou formatos que o computador não entende — sua previsão será um desastre.
Como especialista em Rubix ML, preparei este quarto artigo para apresentar a “refinaria” dos seus dados. Vamos aprender a usar os Transformers: ferramentas essenciais para limpar, converter e normalizar suas informações, garantindo que sua inteligência artificial receba apenas o melhor combustível possível.
Limpando os Dados (Transformers): A Refinaria do Machine Learning com PHP
Limpando os Dados no Rubix ML: Em um mundo ideal, seus datasets seriam perfeitos. No mundo real, os dados são bagunçados. Um usuário esquece de preencher a idade, outro escreve o nível de experiência como “Sênior” (texto) enquanto o algoritmo espera números, e as faixas salariais variam de R$ 2.000 a R$ 20.000, confundindo a cabeça do modelo.
Os Transformers do Rubix ML são objetos que aplicam transformações estruturais nas amostras do seu dataset. Eles preparam o terreno para que o modelo foque no que realmente importa: encontrar padrões.
1. Lidando com Buracos: O Imputer
Dados faltantes (os famosos null ou NaN) são o pesadelo de qualquer estimador. Se você tentar treinar um modelo com um valor ausente, ele provavelmente lançará uma exceção ou produzirá um viés incorreto.
O Imputer é o transformer responsável por “preencher os vazios” de forma inteligente. Em vez de simplesmente deletar a linha inteira (o que faria você perder dados preciosos), o Imputer pode substituir o valor faltante por:
- Média (Mean): A média aritmética da coluna.
- Mediana (Median): O valor central da coluna.
- Mais frequente (Most Frequent): Ideal para categorias (strings).
- Constante: Um valor fixo que você definir.
Exemplo Prático:
PHP
use Rubix\ML\Transformers\Imputer;
use Rubix\ML\Strategies\Mean;
// Se o usuário não preencheu a idade, usamos a média de idade do dataset
$transformer = new Imputer(null, new Mean());
$dataset->apply($transformer);
2. Traduzindo Texto para Números: OneHotEncoder
Algoritmos de Machine Learning são, no fundo, calculadoras gigantes. Eles amam números e odeiam textos. Como explicar para uma fórmula matemática que o candidato mora em “São José do Rio Preto” ou “São Paulo”?
Você poderia pensar em converter para números simples (1 para Rio Preto, 2 para SP), mas isso criaria um problema: o algoritmo acharia que São Paulo (2) é “maior” ou “melhor” que Rio Preto (1) apenas por causa do valor.
O OneHotEncoder resolve isso criando colunas binárias (0 ou 1) para cada categoria.
- Original: [Cidade: Rio Preto]
- Transformado: [Cidade_RioPreto: 1, Cidade_SP: 0]
Exemplo Prático:
PHP
use Rubix\ML\Transformers\OneHotEncoder;
// Transforma colunas categóricas em vetores binários
$transformer = new OneHotEncoder();
$dataset->apply($transformer);
3. Equilibrando a Balança: StandardScaler
Imagine que seu dataset tem duas colunas: Idade (que varia de 18 a 60) e Salário Anual (que varia de 30.000 a 200.000).
Para muitos algoritmos, o valor “200.000” é tão maior que “60” que ele passará a ignorar a idade, achando que o salário é a única variável que importa.
O StandardScaler (Padronização) centraliza os dados para que a média seja 0 e o desvio padrão seja 1. Isso coloca todas as características na mesma escala, sem perder a proporção entre elas.
Exemplo Prático:
PHP
use Rubix\ML\Transformers\StandardScaler;
$transformer = new StandardScaler();
$dataset->apply($transformer);
4. Onde Aplicar? Exemplo Real em sistema de candidatos de emprego
Vamos aplicar esses três transformers em um problema real: prever se um candidato tem chances de ser contratado.
Dados de Entrada:
- Experiência (anos): Numérico, mas com alguns valores faltantes.
- Nível de Inglês: Categórico (“Básico”, “Intermediário”, “Avançado”).
- Pretensão Salarial: Numérico (valores altos).
Código Completo da “Refinaria”:
PHP
use Rubix\ML\Datasets\Labeled;
use Rubix\ML\Pipeline;
use Rubix\ML\Transformers\Imputer;
use Rubix\ML\Transformers\OneHotEncoder;
use Rubix\ML\Transformers\StandardScaler;
use Rubix\ML\Strategies\Median;
use Rubix\ML\Classifiers\SoftmaxClassifier;
// 1. Criamos o Pipeline (nossa linha de produção)
$estimator = new Pipeline([
// Primeiro: Preenchemos anos de experiência faltantes com a mediana
new Imputer(null, new Median()),
// Segundo: Convertemos o "Nível de Inglês" em colunas binárias
new OneHotEncoder(),
// Terceiro: Colocamos Experiência e Salário na mesma escala
new StandardScaler(),
], new SoftmaxClassifier());
// 2. Treinamento
// O Pipeline aplicará automaticamente as transformações antes de entregar ao Softmax
$estimator->train($dataset);
5. Por que usar Pipeline em vez de apply()?
Embora você possa usar $dataset->apply($transformer) manualmente, a melhor prática profissional é o Pipeline.
Por que? Porque quando você for fazer uma predição para um novo usuário, o Pipeline lembrará da “média” e do “desvio padrão” do treinamento original e aplicará exatamente os mesmos cálculos no novo dado. Se você fizer manual, terá que guardar esses valores em algum lugar, o que é um convite para bugs.
6. Boas Práticas na Limpeza de Dados
- Analise antes de limpar: Use o método
$dataset->describe()para ver quantos valores nulos existem. Se uma coluna tem 90% de dados nulos, talvez seja melhor removê-la em vez de tentar preencher. - Ordem importa: Sempre use o
Imputerantes de outros transformers. Não dá para calcular a média (StandardScaler) de uma coluna que tem valores nulos. - Cuidado com a Cardinalidade: Usar
OneHotEncoderem uma coluna com 5.000 cidades diferentes criará 5.000 novas colunas, o que pode explodir o uso de memória. Nesses casos, prefira outras técnicas ou agrupe os dados antes. - A Estrela Solitária: Lembre-se que o Label (rótulo) geralmente não precisa ser transformado por esses métodos, apenas as Samples (características).
Conclusão: De Dados Brutos a Ouro Digital
Limpando os Dados no Rubix ML: Aprender a manipular Transformers como o Imputer, OneHotEncoder e StandardScaler é o que separa um programador que “roda scripts” de um verdadeiro Engenheiro de Machine Learning. No Rubix ML, essa etapa de pré-processamento é onde você realmente ganha a batalha pela acurácia.
Ao limpar seus dados de forma profissional, você garante que seu modelo seja justo, robusto e, acima de tudo, útil para o mundo real. Seja no seu blog ou em sistemas complexos como um sistema de candidatos de empregos, o segredo da inteligência artificial não está apenas no cérebro (algoritmo), mas na higiene dos dados que ela consome.
No próximo artigo, daremos um salto estratégico: “Engenharia de Atributos: Como selecionar as melhores características para evitar ruídos.”
Mas antes de dominar o Rubix ML, se este for o seu caso, entendemos que toda jornada tem um início. Vamos entender quais são os conhecimentos básicos necessários para aproveitar ao máximo esta poderosa biblioteca. Para iniciar seus estudos do Rubix ML, você precisará dominar as seguintes tecnologias e/ou framework:
E se você gosta do nosso conteúdo, não deixe de contribuir adquirindo os serviços e produtos dos nossos apoiadores e empresas que somos associados.
Dica de Especialista: Explore o transformer MaxAbsScaler se o seu dataset tiver muitos zeros (dados esparsos). Ele é uma alternativa excelente ao StandardScaler para manter a estrutura de zeros intacta enquanto escala os valores!









