AutoML no Fabric (preview)

O AutoML (machine learning automatizado) é uma coleção de métodos e ferramentas que automatizam o treinamento e a otimização de modelos de machine learning com pouco envolvimento humano. O objetivo do AutoML é simplificar e acelerar o processo de escolha do melhor modelo de machine learning e dos melhores hiperparâmetros para um determinado conjunto de dados, o que costuma exigir muita habilidade e poder de computação.

Importante

Esse recurso está na versão prévia.

No Fabric, os Cientistas de Dados podem usar flaml.AutoML para automatizar as tarefas de aprendizado de máquina.

O AutoML ajuda profissionais de ML e desenvolvedores de diferentes setores a:

  • Criar soluções de ML com codificação mínima
  • Reduzir tempo e custo
  • Aplicar as melhores práticas de ciência de dados
  • Resolver problemas de forma rápida e eficiente

Fluxo de trabalho de AutoML

flaml.AutoML é uma classe para AutoML com base na tarefa. Ela pode ser usada como um avaliador estilo Scikit-learn com os métodos usuais fit e predict.

Para iniciar uma avaliação de AutoML, os usuários só precisam fornecer os dados de treinamento e o tipo de tarefa. Com as experiências de MLflow integradas no Fabric, os usuários também podem examinar as diferentes execuções experimentadas na avaliação para ver como o modelo final foi escolhido.

Dados de treinamento

No Fabric, os usuários podem passar os seguintes tipos de entrada para a função fit do AutoML:

  • Matriz Numpy: quando os dados de entrada são armazenados em uma matriz Numpy, eles são passados para fit() como X_train e y_train.

  • Dataframe do Pandas: quando os dados de entrada são armazenados em um Dataframe do Pandas, eles são passados para fit() como X_train e y_train, ou como Dataframe e rótulo.

  • Pandas no dataframe do Spark: quando os dados de entrada são armazenados como um dataframe do Spark, eles podem ser convertidos em um Pandas no DataFrame Spark usando to_pandas_on_spark() e depois passados para fit() como um dataframe e rótulo.

    from flaml.automl.spark.utils import to_pandas_on_spark
    psdf = to_pandas_on_spark(sdf)
    automl.fit(dataframe=psdf, label='Bankrupt?', isUnbalance=True, **settings)
    

Problema de aprendizado de máquina

Os usuários podem especificar a tarefa de aprendizado de máquina usando o argumento task. Há diversas tarefas de machine learning aceitas, incluindo:

  • Classificação: a principal meta dos modelos de classificação é prever em quais categorias novos dados se encaixarão com base em aprendizados de dados de treinamento. Exemplos de classificação comuns incluem detecção de fraudes, reconhecimento de manuscrito e detecção de objetos.
  • Regressão: os modelos de regressão preveem valores numéricos de saída com base em indicadores independentes. Na regressão, o objetivo é ajudar a estabelecer a relação entre essas variáveis de preditores independentes estimando como uma variável afeta as outras. Por exemplo, preços de automóveis baseados em características como gasto de combustível por quilometragem, classificação de segurança etc.
  • Previsão de série temporal: é usada para prever valores futuros com base em pontos de dados históricos ordenados por tempo. Em uma série temporal, os dados são coletados e registrados em intervalos regulares durante um período específico, como diário, semanal, mensal ou anualmente. O objetivo da previsão de série temporal é identificar padrões, tendências e sazonalidade nos dados e usar essas informações para fazer previsões sobre o valor futuro.

Para saber mais sobre as tarefas adicionais compatíveis com FLAML, visite a documentação sobre tarefas de AutoML no FLAML.

Entradas opcionais

Forneça várias restrições e entradas para configurar sua avaliação do AutoML.

Restrições

Ao criar uma avaliação de AutoML, os usuários também podem configurar restrições no processo do AutoML, argumentos do construtor de avaliadores potenciais, tipos de modelos testados no AutoML e até mesmo restrições nas métricas da avaliação de AutoML.

Por exemplo, o código abaixo permite que os usuários especifiquem uma restrição de métricas na avaliação de AutoML.

metric_constraints = [("train_loss", "<=", 0.1), ("val_loss", "<=", 0.1)]
automl.fit(X_train, y_train, max_iter=100, train_time_limit=1, metric_constraints=metric_constraints)

Para saber mais sobre essas configurações, visite a documentação sobre configurações na FLAML.

Métrica de otimização

Durante o treinamento, a função de AutoML cria uma série de avaliações que tentam diferentes algoritmos e parâmetros. A ferramenta de AutoML faz iteração por meio de algoritmos de ML e hiperparâmetros. Nesse processo, cada iteração cria um modelo com uma pontuação de treinamento. Quanto melhor a pontuação para a métrica para a qual você deseja otimizar, melhor o modelo será considerado para "ajustar" seus dados. A métrica de otimização é especificada por meio do argumento metric. Pode ser uma sequência que se refere a uma métrica interna ou uma função definida pelo usuário.

Métricas de otimização do AutoML

Ajuste paralelo

Em alguns casos, convém agilizar a avaliação do AutoML usando o Apache Spark para paralelizar o treinamento. Em clusters do Spark, por padrão, a FLAML inicia uma avaliação por executor. Você também pode personalizar o número de avaliações simultâneas usando o argumento n_concurrent_trials.

automl.fit(X_train, y_train, n_concurrent_trials=4, use_spark=True)

Para saber mais sobre como paralelizar as trilhas de AutoML, visite a documentação da FLAML para trabalhos paralelos do Spark.

Acompanhamento com MLflow

Você também pode aproveitar a integração de MLflow do Fabric para capturar métricas, parâmetros e métricas das trilhas exploradas.

import mlflow
mlflow.autolog()

with mlflow.start_run(nested=True):
    automl.fit(dataframe=pandas_df, label='Bankrupt?', mlflow_exp_name = "automl_spark_demo")

# You can also provide a run_name pre-fix for the child runs

automl_experiment = flaml.AutoML()
automl_settings = {
    "metric": "r2",
    "task": "regression",
    "use_spark": True,
    "mlflow_exp_name": "test_doc",
    "estimator_list": [
        "lgbm",
        "rf",
        "xgboost",
        "extra_tree",
        "xgb_limitdepth",
    ],  # catboost does not yet support mlflow autologging
}
with mlflow.start_run(run_name=f"automl_spark_trials"):
    automl_experiment.fit(X_train=train_x, y_train=train_y, **automl_settings)

Modelos com suporte

O AutoML no Fabric é compatível com os seguintes modelos:

Classificação Regressão Previsão de série temporal
(PySpark) Classificador de árvores com gradient boosting (GBT) (PySpark) Regressão de sobrevivência em tempo de falha acelerada (AFT) Arimax
(PySpark) SVM linear (PySpark) Regressão linear generalizada AutoARIMA
(PySpark) Naive Bayes (PySpark) Regressão de árvores com gradient boosting (GBT) Média
(Synapse) LightGBM (PySpark) Regressão linear CatBoost
CatBoost (Synapse) LightGBM Árvore de decisão
Árvore de decisão CatBoost ExponentialSmoothing
Árvores extremamente aleatórias Árvore de Decisão Árvores extremamente aleatórias
Gradient boosting Rede elástica ForecastTCN
K-ésimo vizinhos mais próximos Árvores extremamente aleatórias Gradient Boosting
GBM claro Gradient Boosting Suavização exponencial Holt-Winters
SVC linear K-ésimo vizinhos mais próximos K-ésimo vizinhos mais próximos
Regressão Logística LARS Lasso LARS Lasso
Regressão logística com regularização L1/L2 GBM claro GBM claro
Naive Bayes Regressão logística com regularização L1/L2 Naive
Floresta aleatória Floresta aleatória Órbita
Floresta aleatória no Spark Floresta aleatória no Spark Prophet
SGD (Gradiente estocástico descendente) SGD (Gradiente estocástico descendente) Floresta aleatória
SVC (Classificação de vetores de suporte) XGBoost SARIMAX
XGboost XGBoost com profundidade limitada SeasonalAverage
XGBoost com profundidade limitada SeasonalNaive
Transformador de fusão temporal
XGBoost
XGBoost para série temporal
XGBoost com profundidade limitada para série temporal
ElasticNet

Visualizar os resultados

O módulo flaml.visualization fornece funções utilitárias para plotar o processo de otimização usando o Plotly. Ao aproveitar o Plotly, os usuários podem explorar interativamente os resultados do experimento de AutoML. Para usar essas funções de plotagem, basta fornecer o objeto otimizado flaml.AutoML ou flaml.tune.tune.ExperimentAnalysis como entrada.

Você pode usar as seguintes funções no notebook:

  • plot_optimization_history: plotar o histórico de otimização de todas as avaliações do experimento.
  • plot_feature_importance: plotar a importância de cada recurso no conjunto de dados.
  • plot_parallel_coordinate: plotar os relacionamentos de parâmetros de alta dimensão no experimento.
  • plot_contour: plotar o relacionamento de parâmetros como gráfico de curva de nível no experimento.
  • plot_edf: plotar a FDE (função de distribuição empírica) do valor objetivo do experimento.
  • plot_timeline: plotar a linha do tempo do experimento.
  • plot_slice: plotar o relacionamento de parâmetros como gráfico de pizza em um estudo.
  • plot_param_importance: plotar a importância de hiperparâmetros do experimento.