Preparar dados antes de gerar previsões
Sempre que você aplica um modelo a novos dados, o mais importante é garantir que o esquema dos dados de entrada esteja alinhado com as expectativas do modelo em relação aos dados de entrada.
Mais especificamente, você precisa verificar se os tipos de dados das colunas de entrada são os mesmos definidos na assinatura do modelo. Primeiro, vamos obter os dados sobre os quais você deseja gerar previsões.
Trabalhar com dados em tabelas Delta
Para aplicar um modelo em novos dados no Microsoft Fabric, você deve armazenar os novos dados como uma tabela Delta em uma casa de lago.
Gorjeta
Saiba mais sobre como ingerir dados em um lago do Microsoft Fabric.
Você pode armazenar um dataframe df
PySpark como um lago new_table
Delta em uma casa de lago usando o seguinte código:
df.write.format("delta").save(f"Tables/new_table")
Quando você deseja ler dados de uma tabela Delta, você pode usar o seguinte código:
df = spark.read.format("delta").load(f"Tables/new_table")
Compreender os tipos de dados na assinatura do modelo
Ao acompanhar um modelo de aprendizado de máquina e definir a assinatura no MLmodel
arquivo, você tem duas opções para descrever as entradas e saídas esperadas de um modelo. A assinatura de um modelo pode ser:
- Baseado em colunas - ideal para dados tabulares organizados por colunas.
- Baseado em tensor - ideal para dados de entrada que você deseja passar como matrizes, como imagens.
No Microsoft Fabric, é provável que você trabalhe com dados tabulares, e é por isso que é mais comum trabalhar com assinaturas baseadas em colunas. Ter assinaturas baseadas em colunas facilita o alinhamento das colunas de entrada reais com as colunas de entrada esperadas do modelo.
Ao definir a assinatura do modelo, você precisa usar tipos de dados MLflow para especificar o esquema dos dados. Os tipos de dados mais utilizados são:
- Booleano: Dados lógicos (
True
ouFalse
) - Datetime: 64b dados datetime (por exemplo
2023-10-23 14:30:00
). - Duplo: 64b números de ponto flutuante (por exemplo
3.14159265359
). - Float: números de ponto flutuante 32b (por exemplo
3.14
). - Inteiro: números inteiros assinados 32b (por exemplo
42
). - Longo: 64b números inteiros assinados (por exemplo
1234567890
). - String: Dados de texto (por exemplo
Amsterdam
).
Definir os tipos de dados dos dados de entrada
Depois de ingerir os dados em um lago Delta e entender a assinatura do modelo, você precisa garantir que os tipos de dados sejam compatíveis com a entrada esperada do modelo.
Você pode trabalhar com seus dados em um bloco de anotações para verificar se os tipos de dados de cada coluna estão conforme o esperado e fazer alterações, se necessário.
Para listar os tipos de dados de cada coluna de um dataframe df
, use o seguinte código:
df.dtypes
Se você quiser alterar o tipo de dados de uma coluna específica, você pode usar o seguinte código:
from pyspark.sql.types import IntegerType, DoubleType
df = df.withColumn("S1", df["S1"].cast(IntegerType()))
df = df.withColumn("S2", df["S2"].cast(DoubleType()))
Depois de definir os tipos de dados dos dados de entrada para alinhá-los com as entradas esperadas do modelo, você pode salvar os dados em uma nova tabela Delta. A nova tabela agora está pronta para ser usada para gerar previsões em lote.