Um checklist para machine learning, e nada mais que isso.
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))