Поделиться через


Обучение и оценка модели прогнозирования временных рядов

В этой записной книжке мы создадим программу для прогнозирования данных временных рядов с сезонными циклами. Мы используем набор данных NYC Property Sales с датами от 2003 до 2015 года, опубликованных Департаментом финансов Нью-Йорка на портале Открытых данных Нью-Йорка.

Необходимые компоненты

  • Получение подписки Microsoft Fabric. Или зарегистрируйте бесплатную пробную версию Microsoft Fabric.

  • Войдите в Microsoft Fabric.

  • Используйте переключатель интерфейса в левой части домашней страницы, чтобы перейти на интерфейс Synapse Обработка и анализ данных.

    Снимок экрана: меню переключателя интерфейса, в котором показано, где выбрать Обработка и анализ данных.

Следуйте инструкциям в записной книжке

Вы можете следовать в записной книжке одним из двух способов:

  • Откройте и запустите встроенную записную книжку в интерфейсе Synapse Обработка и анализ данных.
  • Отправьте записную книжку из GitHub в интерфейс Synapse Обработка и анализ данных.

Открытие встроенной записной книжки

Пример записной книжки временных рядов сопровождается этим руководством.

Чтобы открыть встроенную записную книжку учебника в интерфейсе Synapse Обработка и анализ данных:

  1. Перейдите на домашнюю страницу Synapse Обработка и анализ данных.

  2. Выберите " Использовать пример".

  3. Выберите соответствующий пример:

    • На вкладке сквозных рабочих процессов (Python) по умолчанию, если пример предназначен для учебника по Python.
    • На вкладке сквозных рабочих процессов (R), если пример предназначен для руководства по R.
    • На вкладке "Краткие руководства", если пример предназначен для быстрого руководства.
  4. Подключите lakehouse к записной книжке перед запуском кода.

Импорт записной книжки из GitHub

AIsample — Time Series Forecasting.ipynb — это записная книжка, сопровождающая это руководство.

Чтобы открыть сопровождающую записную книжку для этого руководства, следуйте инструкциям в статье "Подготовка системы для обработки и анализа данных", чтобы импортировать записную книжку в рабочую область.

Если вы хотите скопировать и вставить код на этой странице, можно создать новую записную книжку.

Перед запуском кода обязательно подключите lakehouse к записной книжке .

Шаг 1. Установка пользовательских библиотек

При разработке модели машинного обучения или обработке нерегламентированного анализа данных может потребоваться быстро установить пользовательскую библиотеку (например, prophet в этой записной книжке) для сеанса Apache Spark. Для этого у вас есть два варианта.

  1. Вы можете использовать встроенные возможности установки (например, %pip, %condaи т. д.), чтобы быстро приступить к работе с новыми библиотеками. Это позволит установить только пользовательские библиотеки в текущей записной книжке, а не в рабочей области.
# Use pip to install libraries
%pip install <library name>

# Use conda to install libraries
%conda install <library name>
  1. Кроме того, можно создать среду Fabric, установить библиотеки из общедоступных источников или отправить в нее пользовательские библиотеки, а затем администратор рабочей области может присоединить среду в качестве значения по умолчанию для рабочей области. Все библиотеки в среде будут доступны для использования в любых записных книжках и определениях заданий Spark в рабочей области. Дополнительные сведения о средах см. в статье о создании, настройке и использовании среды в Microsoft Fabric.

Для этой записной книжки вы используете %pip install для установки библиотеки prophet . Ядро PySpark перезагрузится после %pip install. Это означает, что перед запуском любых других ячеек необходимо установить библиотеку.

# Use pip to install Prophet
%pip install prophet

Шаг 2. Загрузка данных

Набор данных

Эта записная книжка использует набор данных NYC Property Sales. Он охватывает данные с 2003 по 2015 год, опубликованные Департаментом финансов Нью-Йорка на портале Открытых данных Нью-Йорка.

Набор данных включает запись каждой продажи зданий на рынке недвижимости Нью-Йорка в течение 13-летнего периода. См. глоссарий терминов для файлов продаж свойств для определения столбцов в наборе данных.

borough neighborhood building_class_category tax_class block много восточная часть building_class_at_present address apartment_number zip_code residential_units commercial_units total_units land_square_feet gross_square_feet year_built tax_class_at_time_of_sale building_class_at_time_of_sale sale_price sale_date
Manhattan ALPHABET CITY 07 RENTALS - WALKUP APARTMENTS 0,0 384,0 17,0 C4 225 EAST 2ND STREET 10009.0 10.0 0,0 10.0 2145.0 6670.0 1900.0 2.0 C4 275000.0 2007-06-19
Manhattan ALPHABET CITY 07 RENTALS - WALKUP APARTMENTS 2.0 405.0 12,0 C7 508 EAST 12TH STREET 10009.0 28,0 2.0 30,0 3872.0 15428.0 1930.0 2.0 C7 7794005.0 2007-05-21

Цель заключается в создании модели, которая прогнозирует ежемесячный общий объем продаж на основе исторических данных. Для этого используется Пророк, библиотека прогнозирования открытый код, разработанная Facebook. Пророк основан на аддитивной модели, где нелинейные тенденции подходят для ежедневных, еженедельных и ежегодных сезонности, а также эффектов праздников. Пророк лучше всего работает над наборами данных временных рядов, которые имеют сильные сезонные последствия, и несколько сезонов исторических данных. Кроме того, Пророк надежно обрабатывает отсутствующие данные и выпадающие данные.

Пророк использует разложенную модель временных рядов, состоящую из трех компонентов:

  • тенденция: Пророк предполагает кусковую константную скорость роста, при автоматическом выборе точки изменения
  • сезонность: По умолчанию Пророк использует Фурье серии для соответствия еженедельной и ежегодной сезонности
  • праздники: Пророк требует всех прошлых и будущих праздников. Если праздник не повторяется в будущем, Пророк не будет включать его в прогноз.

Эта записная книжка объединяет данные ежемесячно, поэтому пропускает праздники.

Дополнительные сведения о методах моделирования Пророка см . в официальном документе .

Скачайте набор данных и отправьте его в lakehouse

Источник данных состоит из 15 .csv файлов. Эти файлы содержат записи о продажах свойств из пяти районов в Нью-йорке в период с 2003 по 2015 год. Для удобства nyc_property_sales.tar файл содержит все эти .csv файлы, сжимая их в один файл. В общедоступном хранилище BLOB-объектов размещается этот .tar файл.

Совет

С помощью параметров, отображаемых в этой ячейке кода, вы можете легко применить эту записную книжку к разным наборам данных.

URL = "https://synapseaisolutionsa.blob.core.windows.net/public/NYC_Property_Sales_Dataset/"
TAR_FILE_NAME = "nyc_property_sales.tar"
DATA_FOLDER = "Files/NYC_Property_Sales_Dataset"
TAR_FILE_PATH = f"/lakehouse/default/{DATA_FOLDER}/tar/"
CSV_FILE_PATH = f"/lakehouse/default/{DATA_FOLDER}/csv/"

EXPERIMENT_NAME = "aisample-timeseries" # MLflow experiment name

Этот код загружает общедоступную версию набора данных, а затем сохраняет этот набор данных в Fabric Lakehouse.

Внимание

Перед запуском записной книжки убедитесь, что вы добавите lakehouse в записную книжку. В противном случае произойдет сбой.

import os

if not os.path.exists("/lakehouse/default"):
    # Add a lakehouse if the notebook has no default lakehouse
    # A new notebook will not link to any lakehouse by default
    raise FileNotFoundError(
        "Default lakehouse not found, please add a lakehouse for the notebook."
    )
else:
    # Verify whether or not the required files are already in the lakehouse, and if not, download and unzip
    if not os.path.exists(f"{TAR_FILE_PATH}{TAR_FILE_NAME}"):
        os.makedirs(TAR_FILE_PATH, exist_ok=True)
        os.system(f"wget {URL}{TAR_FILE_NAME} -O {TAR_FILE_PATH}{TAR_FILE_NAME}")

    os.makedirs(CSV_FILE_PATH, exist_ok=True)
    os.system(f"tar -zxvf {TAR_FILE_PATH}{TAR_FILE_NAME} -C {CSV_FILE_PATH}")

Начните запись времени выполнения этой записной книжки.

# Record the notebook running time
import time

ts = time.time()

Настройка отслеживания экспериментов MLflow

Чтобы расширить возможности ведения журнала MLflow, автоматическое ведение журнала автоматически фиксирует значения входных параметров и выходных метрик модели машинного обучения во время обучения. Затем эти сведения записываются в рабочую область, где API MLflow или соответствующий эксперимент в рабочей области может получить доступ и визуализировать его. Дополнительные сведения об автологе см . в этом ресурсе .

# Set up the MLflow experiment
import mlflow

mlflow.set_experiment(EXPERIMENT_NAME)
mlflow.autolog(disable=True)  # Disable MLflow autologging

Примечание.

Если вы хотите отключить автоматическую запись Microsoft Fabric в сеансе записной книжки, вызовите mlflow.autolog() и установите.disable=True

Чтение необработанных данных даты из lakehouse

df = (
    spark.read.format("csv")
    .option("header", "true")
    .load("Files/NYC_Property_Sales_Dataset/csv")
)

Шаг 3. Начало анализа аналитических данных

Чтобы просмотреть набор данных, можно вручную изучить подмножество данных, чтобы лучше понять его. Функцию display можно использовать для печати кадра данных. Можно также отобразить представления диаграммы, чтобы легко визуализировать подмножества набора данных.

display(df)

Проверка набора данных вручную приводит к некоторым ранним наблюдениям:

  • Экземпляры цен на продажу в размере 0,00 долл. США. Согласно глоссарию терминов, это означает передачу собственности без учета денежных средств. Другими словами, денежные средства в транзакции не перетекаются. Вы должны удалить продажи со значениями $0,00 sales_price из набора данных.

  • Набор данных охватывает различные классы сборки. Однако эта записная книжка будет сосредоточена на жилых зданиях, которые, согласно глоссарию терминов, помечены как тип A. Необходимо отфильтровать набор данных, чтобы включить только жилые здания. Для этого включите столбцы building_class_at_time_of_sale или building_class_at_present столбцы. Необходимо включить building_class_at_time_of_sale только данные.

  • Набор данных содержит экземпляры, в которых total_units значения равны 0 или gross_square_feet значения равны 0. Необходимо удалить все экземпляры, где total_units или gross_square_units значения равны 0.

  • Некоторые столбцы , например, apartment_number, build_class_at_presenttax_classи т. д. имеют отсутствующие или ЗНАЧЕНИЯ NULL. Предположим, что отсутствующие данные включают в себя клерические ошибки или несуществующие данные. Анализ не зависит от этих отсутствующих значений, поэтому их можно игнорировать.

  • Столбец sale_price хранится в виде строки с предустановленным символом "$". Чтобы продолжить анализ, введите этот столбец в виде числа. Столбец должен быть sale_price целым числом.

Преобразование типов и фильтрация

Чтобы устранить некоторые выявленные проблемы, импортируйте необходимые библиотеки.

# Import libraries
import pyspark.sql.functions as F
from pyspark.sql.types import *

Приведение данных о продажах из строки в целое число

Используйте регулярные выражения, чтобы разделить числовую часть строки от знака доллара (например, в строке "$300 000", разделить "$" и "300 000"), а затем привести числовую часть в виде целого числа.

Затем отфильтруйте данные, чтобы включить только экземпляры, соответствующие всем этим условиям:

  1. Больше sales_price 0
  2. Больше total_units 0
  3. Больше gross_square_feet 0
  4. Тип building_class_at_time_of_sale A
df = df.withColumn(
    "sale_price", F.regexp_replace("sale_price", "[$,]", "").cast(IntegerType())
)
df = df.select("*").where(
    'sale_price > 0 and total_units > 0 and gross_square_feet > 0 and building_class_at_time_of_sale like "A%"'
)

Агрегирование на ежемесячной основе

Ресурс данных отслеживает продажи свойств ежедневно, но этот подход слишком детализирован для этой записной книжки. Вместо этого агрегировать данные ежемесячно.

Сначала измените значения дат, чтобы отобразить только данные месяца и года. Значения даты по-прежнему будут содержать данные года. Можно по-прежнему различаться, например, декабрь 2005 г. и декабрь 2006 г.

Кроме того, сохраняйте только столбцы, относящиеся к анализу. К ним относятся sales_price, total_unitsgross_square_feet и sales_date. Необходимо также переименовать sales_date monthв .

monthly_sale_df = df.select(
    "sale_price",
    "total_units",
    "gross_square_feet",
    F.date_format("sale_date", "yyyy-MM").alias("month"),
)
display(monthly_sale_df)

sale_pricetotal_units Агрегировать значения и gross_square_feet значения по месяцам. Затем сгруппировать данные monthпо и суммировать все значения в каждой группе.

summary_df = (
    monthly_sale_df.groupBy("month")
    .agg(
        F.sum("sale_price").alias("total_sales"),
        F.sum("total_units").alias("units"),
        F.sum("gross_square_feet").alias("square_feet"),
    )
    .orderBy("month")
)

display(summary_df)

Преобразование Pyspark в Pandas

Кадры данных Pyspark хорошо обрабатывают большие наборы данных. Однако из-за агрегирования данных размер кадра данных меньше. Это предполагает, что теперь можно использовать панды DataFrames.

Этот код приводит набор данных из кадра данных pyspark к кадру данных pandas.

import pandas as pd

df_pandas = summary_df.toPandas()
display(df_pandas)

Визуализация

Вы можете изучить тенденцию торговли недвижимостью в Нью-Йорке, чтобы лучше понять данные. Это приводит к анализу потенциальных шаблонов и тенденций сезонности. Дополнительные сведения о визуализации данных Microsoft Fabric см. в этом ресурсе.

import matplotlib.pyplot as plt
import seaborn as sns
import numpy as np

f, (ax1, ax2) = plt.subplots(2, 1, figsize=(35, 10))
plt.sca(ax1)
plt.xticks(np.arange(0, 15 * 12, step=12))
plt.ticklabel_format(style="plain", axis="y")
sns.lineplot(x="month", y="total_sales", data=df_pandas)
plt.ylabel("Total Sales")
plt.xlabel("Time")
plt.title("Total Property Sales by Month")

plt.sca(ax2)
plt.xticks(np.arange(0, 15 * 12, step=12))
plt.ticklabel_format(style="plain", axis="y")
sns.lineplot(x="month", y="square_feet", data=df_pandas)
plt.ylabel("Total Square Feet")
plt.xlabel("Time")
plt.title("Total Property Square Feet Sold by Month")
plt.show()

Сводка наблюдений по анализу аналитических данных

  • Данные показывают четкий повторяющийся шаблон по ежегодному курсу; это означает, что данные имеют годовую сезонность
  • Летние месяцы, как представляется, имеют более высокие объемы продаж по сравнению с зимними месяцами
  • В сравнении лет с высокими продажами и годами с низкими продажами разница между высокими месяцами продаж и низкими месяцами продаж в высоких годах продаж превышает - в абсолютных условиях - разница между высокими месяцами продаж и низкими месяцами продаж в низких годах продажи.

Например, в 2004 году разница между самым высоким месяцем продаж и самым низким месяцем продаж составляет примерно:

$900,000,000 - $500,000,000 = $400,000,000

В 2011 году расчет разницы доходов составляет примерно так:

$400,000,000 - $300,000,000 = $100,000,000

Это становится важным позже, когда необходимо решить между мультипликативными и аддитивными сезонными эффектами.

Шаг 4. Обучение и отслеживание моделей

Установка модели

Входные данные Пророка всегда являются двумя столбцами DataFrame. Один входной столбец — это столбец времени с именем ds, а один входной столбец — это столбец значений с именем y. Столбец времени должен иметь формат данных даты, времени или даты и времени (например, YYYY_MM). Этот набор данных соответствует такому условию. Столбец значений должен быть числовым форматом данных.

Для крепления модели необходимо переименовать только столбец времени в столбец ds yвремени и значение в , а также передать данные в Пророка. Дополнительные сведения см. в документации по API Python для Пророка.

df_pandas["ds"] = pd.to_datetime(df_pandas["month"])
df_pandas["y"] = df_pandas["total_sales"]

Пророк следует соглашению scikit-learn . Сначала создайте новый экземпляр Пророка, задайте определенные параметры (например,seasonality_mode и затем вместите этот экземпляр в набор данных).

  • Хотя постоянный аддитивный фактор является эффектом сезонности по умолчанию для Пророка, следует использовать сезонность "умножения" для параметра эффекта сезонности . Анализ в предыдущем разделе показал, что из-за изменений сезонности амплитуды простой аддитивной сезонности не будет хорошо соответствовать данным.

  • Задайте для параметра weekly_seasonality значение off, так как данные были агрегированы по месяцам. В результате еженедельные данные недоступны.

  • Используйте методы Markov Chain Монте-Карло (MCMC) для отслеживания оценки сезонности неопределенности. По умолчанию Пророк может предоставить оценки неопределенности по тренду и шуму наблюдения, но не для сезонности. MCMC требует больше времени обработки, но они позволяют алгоритму предоставлять оценки неопределенности по сезонности, а также тренд и шум наблюдения. Дополнительные сведения см. в документации по интервалам неопределенности Пророка.

  • Настройте конфиденциальность обнаружения точек автоматического изменения с помощью параметра changepoint_prior_scale . Алгоритм Пророка автоматически пытается найти экземпляры в данных, где траектории резко изменяются. Это может стать трудно найти правильное значение. Чтобы устранить эту проблему, можно попробовать различные значения, а затем выбрать модель с оптимальной производительностью. Дополнительные сведения см. в документации по точкам изменений тренда Пророка.

from prophet import Prophet

def fit_model(dataframe, seasonality_mode, weekly_seasonality, chpt_prior, mcmc_samples):
    m = Prophet(
        seasonality_mode=seasonality_mode,
        weekly_seasonality=weekly_seasonality,
        changepoint_prior_scale=chpt_prior,
        mcmc_samples=mcmc_samples,
    )
    m.fit(dataframe)
    return m

Перекрестная проверка

Пророк имеет встроенный инструмент перекрестной проверки. Это средство может оценить ошибку прогнозирования и найти модель с оптимальной производительностью.

Метод перекрестной проверки может проверить эффективность модели. Этот метод обучает модель в подмножестве набора данных и выполняет тесты на ранее невидимом подмножестве набора данных. Этот метод может проверка, насколько хорошо статистические модели обобщены в независимый набор данных.

Для перекрестной проверки зарезервировать конкретный пример набора данных, который не был частью обучающего набора данных. Затем протестируйте обученную модель перед развертыванием. Однако этот подход не работает для данных временных рядов, так как если модель видела данные с января 2005 года и марта 2005 года, и вы пытаетесь предсказать в течение месяца 2005 года, модель может существенно обмануть, так как она может увидеть, где ведет тенденция к данным. В реальных приложениях цель заключается в прогнозировании будущего, как невидимые регионы.

Чтобы справиться с этим, и сделать тест надежным, разделите набор данных на основе дат. Используйте набор данных до определенной даты (например, первые 11 лет данных) для обучения, а затем используйте оставшиеся невидимые данные для прогнозирования.

В этом сценарии начните с 11 лет обучающих данных, а затем сделайте ежемесячные прогнозы с помощью однолетнего горизонта. В частности, данные обучения содержат все данные от 2003 до 2013 года. Затем первый запуск обрабатывает прогнозы за январь 2014 г. по январь 2015 г. Следующий запуск обрабатывает прогнозы на февраль 2014 г. по февраль 2015 г. и т. д.

Повторите этот процесс для каждой из трех обученных моделей, чтобы увидеть, какая модель работает лучше всего. Затем сравните эти прогнозы с реальными значениями, чтобы установить качество прогнозирования лучшей модели.

from prophet.diagnostics import cross_validation
from prophet.diagnostics import performance_metrics

def evaluation(m):
    df_cv = cross_validation(m, initial="4017 days", period="30 days", horizon="365 days")
    df_p = performance_metrics(df_cv, monthly=True)
    future = m.make_future_dataframe(periods=12, freq="M")
    forecast = m.predict(future)
    return df_p, future, forecast

Модель журнала с MLflow

Зайдите в журнал моделей, чтобы отслеживать их параметры и сохранять модели для последующего использования. Все соответствующие сведения о модели вошли в рабочую область под именем эксперимента. Модель, параметры и метрики, а также элементы автологирования MLflow сохраняются в одном запуске MLflow.

# Setup MLflow
from mlflow.models.signature import infer_signature

Проведение экспериментов

Эксперимент машинного обучения служит основной единицей организации и управления для всех связанных запусков машинного обучения. Выполнение соответствует одному выполнению кода модели. Отслеживание экспериментов машинного обучения относится к управлению всеми различными экспериментами и их компонентами. Это включает параметры, метрики, модели и другие артефакты, а также помогает упорядочивать необходимые компоненты определенного эксперимента машинного обучения. Отслеживание экспериментов машинного обучения также позволяет легко повторять прошлые результаты с сохраненными экспериментами. Дополнительные сведения о экспериментах машинного обучения в Microsoft Fabric. После определения шагов, которые вы планируете включить (например, настройку и оценку модели Пророка в этой записной книжке), можно запустить эксперимент.

model_name = f"{EXPERIMENT_NAME}-prophet"

models = []
df_metrics = []
forecasts = []
seasonality_mode = "multiplicative"
weekly_seasonality = False
changepoint_priors = [0.01, 0.05, 0.1]
mcmc_samples = 100

for chpt_prior in changepoint_priors:
    with mlflow.start_run(run_name=f"prophet_changepoint_{chpt_prior}"):
        # init model and fit
        m = fit_model(df_pandas, seasonality_mode, weekly_seasonality, chpt_prior, mcmc_samples)
        models.append(m)
        # Validation
        df_p, future, forecast = evaluation(m)
        df_metrics.append(df_p)
        forecasts.append(forecast)
        # Log model and parameters with MLflow
        mlflow.prophet.log_model(
            m,
            model_name,
            registered_model_name=model_name,
            signature=infer_signature(future, forecast),
        )
        mlflow.log_params(
            {
                "seasonality_mode": seasonality_mode,
                "mcmc_samples": mcmc_samples,
                "weekly_seasonality": weekly_seasonality,
                "changepoint_prior": chpt_prior,
            }
        )
        metrics = df_p.mean().to_dict()
        metrics.pop("horizon")
        mlflow.log_metrics(metrics)

Снимок экрана: панель свойств.

Визуализация модели с помощью Пророка

У Пророка есть встроенные функции визуализации, которые могут показать результаты крепления модели.

Черные точки указывают точки данных, используемые для обучения модели. Синяя линия — это прогноз, а светло-голубая область показывает интервалы неопределенности. Вы создали три модели с разными changepoint_prior_scale значениями. Прогнозы этих трех моделей отображаются в результатах этого блока кода.

for idx, pack in enumerate(zip(models, forecasts)):
    m, forecast = pack
    fig = m.plot(forecast)
    fig.suptitle(f"changepoint = {changepoint_priors[idx]}")

Наименьшее changepoint_prior_scale значение в первом графе приводит к недостаточному набору изменений тренда. Самый большой changepoint_prior_scale в третьем графе может привести к переподбору. Таким образом, второй граф, кажется, является оптимальным выбором. Это означает, что вторая модель является наиболее подходящей.

Пророк также может легко визуализировать базовые тенденции и сезонности. Визуализации второй модели отображаются в результатах этого блока кода.

BEST_MODEL_INDEX = 1  # Set the best model index according to the previous results
fig2 = models[BEST_MODEL_INDEX].plot_components(forecast)

Снимок экрана: график ежегодных тенденций в данных о ценах.

На этих графах светло-синий заливка отражает неопределенность. Верхний график показывает сильную, долговременную тенденцию колебания. В течение нескольких лет объемы продаж растут и падают. На нижнем графике показано, что продажи, как правило, пиковые в феврале и сентябре, достигают своих максимальных значений в течение этого года в эти месяцы. Вскоре после этих месяцев, в марте и октябре, они падают до минимальных значений года.

Оцените производительность моделей с помощью различных метрик, например:

  • средняя квадратная ошибка (MSE)
  • корень среднеквадратической ошибки (RMSE)
  • средняя абсолютная ошибка (MAE)
  • средняя абсолютная процентная ошибка (MAPE)
  • ошибка абсолютного процента медиана (MDAPE)
  • симметричная абсолютная процентная ошибка (SMAPE)

Оцените охват с помощью yhat_lower и yhat_upper оценки. Обратите внимание на различные горизонты, где вы прогнозируете один год в будущем, 12 раз.

display(df_metrics[BEST_MODEL_INDEX])

С помощью метрики MAPE для этой модели прогнозирования прогнозы, которые расширяют один месяц в будущем, обычно включают ошибки примерно на 8%. Однако для прогнозов в течение одного года в будущем ошибка увеличивается примерно на 10 %.

Шаг 5. Оценка модели и сохранение результатов прогнозирования

Теперь оценка модели и сохранение результатов прогнозирования.

Создание прогнозов с помощью Преобразователя прогнозирования

Теперь вы можете загрузить модель и использовать ее для прогнозирования. Пользователи могут использовать модели машинного обучения с помощью PREDICT, масштабируемой функции Microsoft Fabric, которая поддерживает пакетную оценку в любом вычислительном механизме. Дополнительные сведения о том, PREDICTкак использовать его в Microsoft Fabric, см. в этом ресурсе.

from synapse.ml.predict import MLFlowTransformer

spark.conf.set("spark.synapse.ml.predict.enabled", "true")

model = MLFlowTransformer(
    inputCols=future.columns.values,
    outputCol="prediction",
    modelName=f"{EXPERIMENT_NAME}-prophet",
    modelVersion=BEST_MODEL_INDEX,
)

test_spark = spark.createDataFrame(data=future, schema=future.columns.to_list())

batch_predictions = model.transform(test_spark)

display(batch_predictions)
# Code for saving predictions into lakehouse
batch_predictions.write.format("delta").mode("overwrite").save(
    f"{DATA_FOLDER}/predictions/batch_predictions"
)
# Determine the entire runtime
print(f"Full run cost {int(time.time() - ts)} seconds.")