Um checklist para machine learning, e nada mais que isso.

Fabiano Filho, MD
geleia
Published in
3 min readMar 27, 2020

Essa é uma checklist simples, com comandos e pacotes em Python, para guiar no desenvolvimento do seu algoritmo de machine learning.

A estruturação de um modelo de machine learning (ML) depende de diversas fases, a começar com importar os pacotes e datasets, em seguida, fazer uma Análise Exploratória de Dados (EDA), pré-processamento, modelagem, interpretação do modelo, otimização, e deploy (colocar em produção na vida real).

Importar bibliotecas e datasets

• importar os pacotes pandas, numpy, matplotlib, métricas e modelos do sklearn (import pandas as pd…)
• importar os datasets (df = pd.read_csv(‘data.csv’)) — dependendo da origem do dataset.

Análise descritiva simples…

Visando evitar erros mais simples. Essa análise não precisa de muitos dados, pois depois você já vai validar o modelo:

Gráficos

scatterplot_matrix(): olhe como estao as distribuições conjuntas dos dados
sns.pairplot(df, hue=”species”) para fazer análises entre diferentes características do dataset
• matplotlib.pyplot.boxplot: faça os boxplots pra evitar erros de pontos absurdos, pessoas nascidas em 1900 ou numeros como 99999

Matriz de correlação

Para entender melhor o que ta muito ou pouco correlacionado (alguns modelos como regressão linear você precisa olhar isso pra evitar multicolinearidade)
sns.heatmap(df.corr())
•faça um vetor das correlações com a variável target, utilizando df.corr()[‘variaveltarget’].sort_values(ascending = False)

Pré-processamento

Aqui você ajusta o que encontrou de inesperado na análise anterior:
•ajustar datas (pd.to_datetime())
•verificar nomes e tipos de colunas (.info()), com intuito de transformar as variáveis que não estão de acordo.
•número de colunas/linhas(.shape())
•estrutura dos dados(.head())
•variáveis faltantes (.isnull().sum()), visando imputar ou retirar as variáveis faltantes.

Espera-se ao final:
• Banco de dados estruturado com coluna da classe ou número a ser previsto.

Pode-se complementar o pré-processamento com:

  • Categorizar dados estruturados como Textos (sklearn.preprocessing LabelEncoder(), OneHotEncoder())
  • Ajustar a Escala dos dados numéricos (preprocessing.StandardScaler())
  • Diminuição não supervisionada da Dimensão do dataset (decomposition.PCA()) para melhorar a predição, com menor número de características — costuma atrapalhar a interpretação/explicabilidade dos fatores mais importantes para a predição.
  • Reamostragem dos dados quando desbalanceados (upsampling, downsampling, oversampling.SMOTE())

Modelagem!!

Nessa etapa, usamos a teoria de "não ter almoço grátis", com a premissa de que cada modelo se ajusta a um conjunto de dados de forma diferente, tendo, portanto, a necessidade de testar o maior número de modelos diferentes possível.

A partir dos dados pré-processados, deve-se:
• dividir em base de treino e teste (.train_test_split())

Modelos

• criar diferentes modelos (LogisticRegression()/LinearRegression(), RandomForestClassifier()/RandomForestRegressor(), SVC()/SVR(), KneighborsClassifier()/KneighborsRegressor()…)

Treino/Validação

• treinar/ajustar o modelo com dados separados para treino (.fit()) — ou usar uma validação cruzada para selecionar/ajustar os modelos (cross_val_score()).

Predição

• predizer com dados de teste ou validação pra ver quem vai acertar a classe ou errar menos o número real da previsão (.predict()).
• avaliar cada modelo de acordo com o problema de classificação nos dados de teste (.classification_report()), ou regressão (.mean_squared_error())

Interpretação do modelo

Esse ponto, deve-se retirar de cada modelo qual variável foi mais importante para predição.

Alguns modelos são interpretáveis, outros necessitam de um modelo para tentar explicá-lo, seguem alguns modelos mais usados para interpretação (também usados para selecionar as melhores características antes da modelagem).

Pode-se usar os modelos de:

  • Feature Selection (sklearn.feature_selection())
  • Feature Importance (RandomForestClassifier/Regressor.features_importances_)
  • Sequential Forward Feature Selection — a partir de qualquer modelo.
  • SHAP (Shap values) — também a partir de modelos de árvores.

Hora da otimização

Nesse momento, é hora de usar o melhor modelo do treino/validação e ajustar ele aos dados para que se comporte melhor e acerte ainda mais na base de teste.

Modelos de otimização, também chamado de hiperparâmetrização:

  • RandomSearchCV(modelo, X, y, parametros) — recomendado.
  • GridSearchCV

Salvar o modelo para colocar em produção!

Por último, e mais importante! Para que o modelo seja melhor ajustado, deve-se colocar o quanto antes para um teste na vida real, assim poderá ser melhorado a partir das características do ambiente.

Pode-se usar para salvar:

  • Pickle (pickle.dump(model, file))
  • Joblib — sklearn.externals.joblib (joblib.dump(model, file))

--

--